initial checkin
authorClaus Gittinger <cg@exept.de>
Wed, 29 Jun 2011 14:14:14 +0200
changeset 4259 94d40e23958d
parent 4258 b70835a4f0b2
child 4260 7acd85d3324f
initial checkin
MenuEvent.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MenuEvent.st	Wed Jun 29 14:14:14 2011 +0200
@@ -0,0 +1,193 @@
+"{ Package: 'stx:libwidg' }"
+
+WidgetEvent subclass:#MenuEvent
+	instanceVariableNames:'menu itemIndex item itemLabel itemValue'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Menus'
+!
+
+MenuPanel::MenuEvent subclass:#MenuEnterItemEvent
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:MenuEvent
+!
+
+MenuPanel::MenuEvent subclass:#MenuHideEvent
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:MenuEvent
+!
+
+MenuPanel::MenuEvent subclass:#MenuLeaveItemEvent
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:MenuEvent
+!
+
+MenuPanel::MenuEvent subclass:#MenuSelectItemEvent
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:MenuEvent
+!
+
+MenuPanel::MenuEvent subclass:#MenuShowEvent
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:MenuEvent
+!
+
+!MenuEvent class methodsFor:'documentation'!
+
+documentation
+"
+    Internal menu events.
+    These have been added very lately to support capture & replay inside st/x applications.
+    They are used internally within a menu-widget instead of direct message sends, thus
+    allowing interception and synthetization.
+
+    Due to some historic leftover, there are two mechanisms for menus:
+        1) the (very) old MenuView (which inherits from SelectionInListView)
+        2) the newer MenuPanel.
+
+    The menuView uses simple text and values and it is basically index-based.
+    The menuPanel uses instances of MenuItem which contain the action information.
+
+    The menuView should go away, as soon as someone finds time to convert all leftover uses
+    of it in the system (mostly popupMenus in text views).
+"
+! !
+
+!MenuEvent class methodsFor:'instance creation'!
+
+enterMenuItem:itemOrNil index:index text:textOrNil value:valueOrNil inMenu:aMenu
+    |ev|
+
+    ev := (MenuEnterItemEvent basicNew).
+    ev item:itemOrNil index:index text:textOrNil value:valueOrNil menu:aMenu.
+
+    ev selector:#processMenuEnterItemEvent:.
+    ev arguments:(Array with:ev).
+    ^ ev
+
+    "Created: / 29-06-2011 / 12:25:55 / cg"
+!
+
+hideMenu:aMenu
+    |ev|
+
+    ev := (MenuHideEvent basicNew).
+    ev menu:aMenu.
+
+    ev selector:#processHideMenuEvent:.
+    ev arguments:(Array with:ev).
+    ^ ev
+
+    "Created: / 29-06-2011 / 12:30:16 / cg"
+!
+
+leaveMenuItem:itemOrNil index:index text:textOrNil value:valueOrNil inMenu:aMenu
+    |ev|
+
+    ev := (MenuLeaveItemEvent basicNew).
+    ev menu:aMenu.
+    ev item:itemOrNil index:index text:textOrNil value:valueOrNil menu:aMenu.
+
+    ev selector:#processMenuLeaveItemEvent:.
+    ev arguments:(Array with:ev).
+    ^ ev
+
+    "Created: / 29-06-2011 / 12:27:51 / cg"
+!
+
+selectMenuItem:itemOrNil index:indexOrNil text:textOrNil value:valueOrNil inMenu:aMenu
+    |ev|
+
+    ev := (MenuSelectItemEvent basicNew).
+    ev item:itemOrNil index:indexOrNil text:textOrNil value:valueOrNil menu:aMenu.
+
+    ev selector:#processMenuSelectItemEvent:.
+    ev arguments:(Array with:ev).
+    ^ ev
+
+    "Created: / 29-06-2011 / 12:29:29 / cg"
+!
+
+showMenu:aMenu
+    |ev|
+
+    ev := (MenuShowEvent basicNew).
+    ev menu:aMenu.
+
+    ev selector:#processShowMenuEvent:.
+    ev arguments:(Array with:ev).
+    ^ ev
+
+    "Created: / 29-06-2011 / 12:30:05 / cg"
+! !
+
+!MenuEvent methodsFor:'accessing'!
+
+item
+    "attention: only menuPanels return something useful here;
+     menuview will return nil"
+
+    ^ item
+
+    "Modified: / 29-06-2011 / 12:41:28 / cg"
+!
+
+itemIndex
+    "the index (1..) of the menu item"
+
+    ^ itemIndex
+
+    "Modified: / 29-06-2011 / 12:41:47 / cg"
+!
+
+itemLabel
+    "the item's label text. Might be nil or non-string (image or labelAndIcon)"
+
+    ^ itemLabel
+
+    "Modified: / 29-06-2011 / 12:42:18 / cg"
+!
+
+itemValue
+    "the item's value. That is completely up to the menu-widget's user."
+
+    ^ itemValue
+
+    "Modified: / 29-06-2011 / 12:42:46 / cg"
+!
+
+menu
+    "the item's menu; either a menuPanel or a menuView"
+
+    ^ menu
+
+    "Modified: / 29-06-2011 / 12:43:00 / cg"
+! !
+
+!MenuEvent methodsFor:'instance creation'!
+
+item:itemArgOrNil index:indexArgOrNil text:textArgOrNil value:valueArgOrNil menu:aMenu
+    item := itemArgOrNil.
+    itemIndex := indexArgOrNil.
+    itemLabel := textArgOrNil.
+    itemValue := valueArgOrNil.
+    menu := receiver := aMenu
+
+    "Created: / 29-06-2011 / 12:40:49 / cg"
+! !
+
+!MenuEvent class methodsFor:'documentation'!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/MenuEvent.st,v 1.1 2011-06-29 12:14:14 cg Exp $'
+! !