Le 28/11/2012 10:03, Torsten Bergmann a écrit :
Can anyone point me to a spec example with a (context) menu with icons and where we can enable/disable specific menue items depending on state?
I'm not sure there is anything Spec specific in menus doing that but...A source for doing what you want is available in the OmniBrowser (Pharo 1.4). I reused a simplified version of that code in the Alt Browser in Pharo 2.0; if you browse around version 40, it is linked to a Spec-built interface.
The example goes like that : A menu command object answer the following methods: >>isActive (in the menu or not in the menu) >>isEnabled (greyed out in the menu) >>execute (the command to execute when selected) >>icon (the icon symbol name) >>label (the text of the menu item)>>keyString (if you want to add a keymapping shortcut as well, it lists itself in the menu).
Building a menu item is then the following, once you get the menu given to you by the widget :
buildTreeMenu: aMenu on: aTarget
...
self isActive ifTrue: [
(aMenu add: self label target: self selector: #execute)
enablementSelector: #isEnabled;
icon: (self icon notNil
ifTrue: [ UITheme current perform: self icon ]
ifFalse: [ nil ]);
keyText: self keyString ]
...
When you create your Spec GUI, you ask the widget model to give you the
menu before showing it to the user (this is in initializePresenter)
textModel menu: [:aMenu :aTarget | self buildMenu: aMenu on: aTarget ] The resulting menu will look like the picture in attachment.Note: This is with a fairly old version of Spec. Newer versions may have changed the way to get the menu from the widget model.
Note 2: Since the menu is built each time the user asks for it then its easy to have a menu which depends on the state of the application (the type of selected item, etc...)
Thierry -- Thierry Goubier CEA list Laboratoire des Fondations des Systèmes Temps Réel Embarqués 91191 Gif sur Yvette Cedex France Phone/Fax: +33 (0) 1 69 08 32 92 / 83 95
<<attachment: Capture du 2012-11-29 15:45:34.png>>
