diff -r 58ace5744c59 -r 938a31972544 MenuEditor.st --- 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 @@ - ^ + ^ #(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. + ]. ]. !