MenuEditor.st
changeset 2331 938a31972544
parent 2297 ee43ce83094d
child 2334 dc1388cc7160
--- 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.
+        ].
     ].
 !