--- /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 $'
+! !