--- a/MenuEditor.st Tue Apr 22 17:43:56 2008 +0200
+++ b/MenuEditor.st Tue Apr 22 19:19:04 2008 +0200
@@ -362,6 +362,9 @@
#filePickAMenu
'Select a menu from an open view and read its specification'
+#fileChooseAMenu
+'Select a menu from an open view and edit its spec-method'
+
#fileSave
'Save the menu spec (and the help spec, if modified).'
@@ -929,81 +932,87 @@
<resource: #menu>
- ^
+ ^
#(Menu
- (
- (MenuItem
- activeHelpKey: fileNew
- label: 'New'
- itemValue: doNew
- translateLabel: true
- )
- (MenuItem
- label: '-'
- )
- (MenuItem
- activeHelpKey: fileLoad
- label: 'Load...'
- itemValue: doLoad
- translateLabel: true
- )
- (MenuItem
- label: '-'
- )
- (MenuItem
- activeHelpKey: fileSave
- label: 'Save'
- itemValue: doSave
- translateLabel: true
- )
- (MenuItem
- activeHelpKey: fileSaveAs
- label: 'Save As...'
- itemValue: doSaveAs
- translateLabel: true
- )
- (MenuItem
- label: '-'
- )
- (MenuItem
- activeHelpKey: filePickAMenu
- label: 'Pick a Menu...'
- itemValue: doPickAMenu
- translateLabel: true
- )
- (MenuItem
- label: '-'
- isVisible: isStandAlone
- )
- (MenuItem
- activeHelpKey: fileBrowseClass
- enabled: hasValidSpecClass
- label: 'Browse Class'
- itemValue: doBrowseClass
- translateLabel: true
- isVisible: isStandAlone
- )
- (MenuItem
- activeHelpKey: fileShowMenuSpec
- label: 'Show Menu Spec'
- itemValue: doShowMenuSpec
- translateLabel: true
- isVisible: isStandAlone
- )
- (MenuItem
- label: '-'
- isVisible: isStandAlone
- )
- (MenuItem
- activeHelpKey: fileExit
- label: 'Exit'
- itemValue: closeRequest
- translateLabel: true
- isVisible: isStandAlone
- )
- )
- nil
- nil
+ (
+ (MenuItem
+ activeHelpKey: fileNew
+ label: 'New'
+ itemValue: doNew
+ translateLabel: true
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: fileLoad
+ label: 'Load...'
+ itemValue: doLoad
+ translateLabel: true
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: fileSave
+ label: 'Save'
+ itemValue: doSave
+ translateLabel: true
+ )
+ (MenuItem
+ activeHelpKey: fileSaveAs
+ label: 'Save As...'
+ itemValue: doSaveAs
+ translateLabel: true
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: filePickAMenu
+ label: 'Pick a Menu...'
+ itemValue: doPickAMenu
+ translateLabel: true
+ )
+ (MenuItem
+ activeHelpKey: fileChooseAMenu
+ label: 'Choose a Menu...'
+ itemValue: doChooseAMenu
+ translateLabel: true
+ )
+ (MenuItem
+ label: '-'
+ isVisible: isStandAlone
+ )
+ (MenuItem
+ activeHelpKey: fileBrowseClass
+ enabled: hasValidSpecClass
+ label: 'Browse Class'
+ itemValue: doBrowseClass
+ translateLabel: true
+ isVisible: isStandAlone
+ )
+ (MenuItem
+ activeHelpKey: fileShowMenuSpec
+ label: 'Show Menu Spec'
+ itemValue: doShowMenuSpec
+ translateLabel: true
+ isVisible: isStandAlone
+ )
+ (MenuItem
+ label: '-'
+ isVisible: isStandAlone
+ )
+ (MenuItem
+ activeHelpKey: fileExit
+ label: 'Exit'
+ itemValue: closeRequest
+ translateLabel: true
+ isVisible: isStandAlone
+ )
+ )
+ nil
+ nil
)
!
@@ -2521,8 +2530,7 @@
redefine:(self redefineAspectMethodsChannel value).
].
- UserPreferences current systemBrowserClass
- openInClass:cls selector:selector.
+ UserPreferences current systemBrowse
!
doGenerateAspectMethods
@@ -2561,6 +2569,63 @@
!MenuEditor methodsFor:'user actions-building'!
+doChooseAMenu
+ "pick a menu and edit its spec method"
+
+ |view subSpec app bldr spec menuSelector1 menuSelector2 info|
+
+ self askForModification ifTrue:[
+ view := Screen current viewFromUser.
+ (view isNil or:[view == Screen current rootView]) ifTrue:[
+ ^ self
+ ].
+ view specClass == MenuPanelSpec ifTrue:[
+ (app := view application) isNil ifTrue:[
+ info := 'Could not figure out the application class.'
+ ] ifFalse:[
+ (bldr := app builder) isNil ifTrue:[
+ info := 'Application has no builder.'
+ ] ifFalse:[
+ menuSelector1 := bldr namedComponents keyAtValue:view ifAbsent:nil.
+ (spec := bldr spec) isNil ifTrue:[
+ info := 'Cannot fetch spec from applications builder.'
+ ] ifFalse:[
+ subSpec := spec findSpecForWhich:[:subSpec | subSpec name = view name].
+ subSpec isNil ifTrue:[
+ info := 'Cannot find view-spec for ',view name asString,'.'
+ ] ifFalse:[
+ menuSelector2 := subSpec menu.
+ ]
+ ].
+ (menuSelector1 isNil and:[ menuSelector2 isNil ]) ifTrue:[
+ info := 'menu is probably not provided by a menuSelector.'
+ ] ifFalse:[
+ (app class respondsTo:menuSelector1) ifTrue:[
+ self loadFromClass:app class andSelector:menuSelector1.
+ ^ self.
+ ].
+ (app class respondsTo:menuSelector2) ifTrue:[
+ self loadFromClass:app class andSelector:menuSelector2.
+ ^ self.
+ ].
+ info := 'menu is probably not provided by a menuSelector.'
+ ].
+ ]
+ ].
+ info notNil ifTrue:[
+ app notNil ifTrue:[
+ (Dialog confirm:(info,'\\Browse ?' withCRs)) ifTrue:[
+ app browse.
+ ].
+ ] ifFalse:[
+ Dialog information:info.
+ ].
+ ].
+ ^ self.
+ ].
+ ].
+!
+
doNew
"clear editing menu; start from scratch
"
@@ -2568,19 +2633,19 @@
!
doPickAMenu
- "pick a menu from user"
+ "let user pick a menu and create a new spec"
|view|
self askForModification ifTrue:[
- view := Screen current viewFromUser.
- (view isNil or:[view == Screen current rootView]) ifTrue:[
- ^ self
- ].
- view specClass == MenuPanelSpec ifTrue:[
- specSelector := #pickedMenu.
- self buildFromMenu:(view asMenu) selector:specSelector.
- ].
+ view := Screen current viewFromUser.
+ (view isNil or:[view == Screen current rootView]) ifTrue:[
+ ^ self
+ ].
+ view specClass == MenuPanelSpec ifTrue:[
+ specSelector := #pickedMenu.
+ self buildFromMenu:(view asMenu) selector:specSelector.
+ ].
].
!