# HG changeset patch # User Claus Gittinger # Date 1247162855 -7200 # Node ID b55aeaecefda58d405ffd6206a1c3b685f6de030 # Parent ea1484c2ab9b42dd0e92ddf6161da1fa60fd526e preps for menuSpec without a class diff -r ea1484c2ab9b -r b55aeaecefda MenuEditor.st --- a/MenuEditor.st Thu Jul 09 20:07:21 2009 +0200 +++ b/MenuEditor.st Thu Jul 09 20:07:35 2009 +0200 @@ -14,7 +14,7 @@ ResourceSpecEditor subclass:#MenuEditor instanceVariableNames:'selectionHolder tabHolder listOfItems listOfTabs selectedSuperItems notifyDisabledCounter wizards listOfItemsView - dropOverLine' + dropOverLine savedSpec' classVariableNames:'ImageRetrieverClasses' poolDictionaries:'' category:'Interface-UIPainter' @@ -448,6 +448,9 @@ #fileSave 'Save Menuspec as Method' +#fileSaveSpec +'Save Menuspec' + #fileSaveAs 'Save Menuspec as Method...' @@ -945,21 +948,32 @@ label: '-' ) (MenuItem + isVisible: isNotEditingSpecOnly activeHelpKey: fileLoad label: 'Load...' itemValue: doLoad translateLabel: true ) (MenuItem + isVisible: isNotEditingSpecOnly label: '-' ) (MenuItem + isVisible: isEditingSpecOnly + activeHelpKey: fileSaveSpec + label: 'Save' + itemValue: doSave + translateLabel: true + ) + (MenuItem + isVisible: isNotEditingSpecOnly activeHelpKey: fileSave label: 'Save' itemValue: doSave translateLabel: true ) (MenuItem + isVisible: isNotEditingSpecOnly activeHelpKey: fileSaveAs label: 'Save As...' itemValue: doSaveAs @@ -1145,6 +1159,7 @@ ignoreShortcutKeys: true ) (MenuItem + isVisible: isNotEditingSpecOnly label: 'Generate' translateLabel: true submenuChannel: generateMenu @@ -1206,25 +1221,26 @@ ^ #(#Menu - #( - #(#MenuItem - #activeHelpKey: #settingsRedefineAspectMethods - #enabled: #hasValidSpecClass - #label: 'Redefine Aspect Methods' - #translateLabel: true - #hideMenuOnActivated: false - #indication: #redefineAspectMethodsChannel - ) - #(#MenuItem - #activeHelpKey: #settingsRedefineAspectMethods - #label: 'AutoAccept on Selection-Change' - #translateLabel: true - #hideMenuOnActivated: false - #indication: #autoAcceptOnSelectionChange - ) - ) - nil - nil + #( + #(#MenuItem + isVisible: isNotEditingSpecOnly + #activeHelpKey: #settingsRedefineAspectMethods + #enabled: #hasValidSpecClass + #label: 'Redefine Aspect Methods' + #translateLabel: true + #hideMenuOnActivated: false + #indication: #redefineAspectMethodsChannel + ) + #(#MenuItem + #activeHelpKey: #settingsRedefineAspectMethods + #label: 'AutoAccept on Selection-Change' + #translateLabel: true + #hideMenuOnActivated: false + #indication: #autoAcceptOnSelectionChange + ) + ) + nil + nil ) ! @@ -1282,188 +1298,199 @@ ^ #(Menu - ( - (MenuItem - activeHelpKey: fileNew - label: 'New' - itemValue: doNew - translateLabel: true - isButton: true - labelImage: (ResourceRetriever ToolbarIconLibrary newMenuIcon) - ) - (MenuItem - label: '-' - ) - (MenuItem - activeHelpKey: fileLoad - label: 'Load' - itemValue: doLoad - translateLabel: true - isButton: true - submenuChannel: menuHistory - labelImage: (ResourceRetriever ToolbarIconLibrary loadFromMethodIcon) - keepLinkedMenu: true - ) - (MenuItem - activeHelpKey: fileSave - label: 'Save' - itemValue: doSave - translateLabel: true - isButton: true - labelImage: (ResourceRetriever ToolbarIconLibrary saveAsMethodIcon) - ) - (MenuItem - label: '-' - ) - (MenuItem - activeHelpKey: editCut - enabled: hasSelectionChannel - label: 'Cut' - itemValue: doCut - translateLabel: true - isButton: true - labelImage: (ResourceRetriever ToolbarIconLibrary cutMenuItemIcon) - ) - (MenuItem - activeHelpKey: editCopy - enabled: hasSelectionChannel - label: 'Copy' - itemValue: doCopy - translateLabel: true - isButton: true - labelImage: (ResourceRetriever ToolbarIconLibrary copyMenuItemIcon) - ) - (MenuItem - activeHelpKey: editPaste - enabled: canPasteHolder - label: 'Paste' - itemValue: doPaste - translateLabel: true - isButton: true - labelImage: (ResourceRetriever ToolbarIconLibrary pasteMenuItemIcon) - ) - (MenuItem - label: '-' - ) - (MenuItem - activeHelpKey: addMenuItem - enabled: hasSingleSelectionChannel - label: 'Add Item' - itemValue: doCreateItem - translateLabel: true - isButton: true - labelImage: (ResourceRetriever #'MenuEditor::Item' iconItem) - ) - (MenuItem - activeHelpKey: addMenuSeparator - enabled: hasSingleSelectionChannel - label: 'Add Separator' - itemValue: doCreateSep - translateLabel: true - isButton: true - labelImage: (ResourceRetriever #'MenuEditor::Item' iconSeparator) - ) - (MenuItem - activeHelpKey: addMenuSlice - enabled: hasSingleSelectionChannel - label: 'Menu Slice' - itemValue: doCreateMenuSliceItem - translateLabel: true - isButton: true - labelImage: (ResourceRetriever #'MenuEditor::Item' iconSliceMenu) - ) - (MenuItem - activeHelpKey: addSubMenu - enabled: hasSingleSelectionChannel - label: 'Add Menu' - itemValue: doCreateMenu - translateLabel: true - isButton: true - submenuChannel: standardMenus - labelImage: (ResourceRetriever #'MenuEditor::Item' iconMenu) - keepLinkedMenu: true - ) - (MenuItem - activeHelpKey: addSubMenuLink - enabled: hasSingleSelectionChannel - label: 'Add Linked Menu' - itemValue: doCreateLinkedMenu - translateLabel: true - isButton: true - labelImage: (ResourceRetriever #'MenuEditor::Item' iconLinkedMenu) - ) - (MenuItem - activeHelpKey: addDelayedMenu - enabled: canCreateDelayedMenuChannel - label: 'Add Delayed Menu' - itemValue: doCreateDelayedMenu: - translateLabel: true - isButton: true - labelImage: (ResourceRetriever #'MenuEditor::Item' iconDelayedMenu) - argument: menu - ) - (MenuItem - activeHelpKey: addDelayedSubMenuLink - enabled: canCreateDelayedMenuChannel - label: 'Add Delayed Linked Menu' - itemValue: doCreateDelayedMenu: - translateLabel: true - isButton: true - labelImage: (ResourceRetriever #'MenuEditor::Item' iconDelayedLinkedMenu) - argument: linkedMenu - ) - (MenuItem - label: '' - ) - (MenuItem - activeHelpKey: editMoveUp - enabled: enableMovingUpOrDownHolder - label: 'Move Up' - itemValue: doMoveUp - translateLabel: true - isButton: true - startGroup: right - labelImage: (ResourceRetriever Icon upIcon) - ) - (MenuItem - activeHelpKey: editMoveDown - enabled: enableMovingUpOrDownHolder - label: 'Move Down' - itemValue: doMoveDown - translateLabel: true - isButton: true - labelImage: (ResourceRetriever Icon downIcon) - ) - (MenuItem - activeHelpKey: editMoveIn - enabled: enableMovingInHolder - label: 'Move Into Next' - itemValue: doMoveInNext - translateLabel: true - isButton: true - labelImage: (ResourceRetriever Icon downRightIcon) - ) - (MenuItem - activeHelpKey: editMoveInAbove - enabled: enableMovingInAboveHolder - label: 'Move Into Previous' - itemValue: doMoveInPrevious - translateLabel: true - isButton: true - labelImage: (ResourceRetriever Icon upRightIcon) - ) - (MenuItem - activeHelpKey: editMoveOut - enabled: enableMovingOutHolder - label: 'Move Out' - itemValue: doMoveOut - translateLabel: true - isButton: true - labelImage: (ResourceRetriever Icon leftDownIcon) - ) - ) - nil - nil + ( + (MenuItem + activeHelpKey: fileNew + label: 'New' + itemValue: doNew + translateLabel: true + isButton: true + labelImage: (ResourceRetriever ToolbarIconLibrary newMenuIcon) + ) + (MenuItem + label: '-' + ) + (MenuItem + isVisible: isNotEditingSpecOnly + activeHelpKey: fileLoad + label: 'Load' + itemValue: doLoad + translateLabel: true + isButton: true + submenuChannel: menuHistory + labelImage: (ResourceRetriever ToolbarIconLibrary loadFromMethodIcon) + keepLinkedMenu: true + ) + (MenuItem + isVisible: isNotEditingSpecOnly + activeHelpKey: fileSave + label: 'Save' + itemValue: doSave + translateLabel: true + isButton: true + labelImage: (ResourceRetriever ToolbarIconLibrary saveAsMethodIcon) + ) + (MenuItem + isVisible: isEditingSpecOnly + activeHelpKey: fileSaveSpec + label: 'Save' + itemValue: doSave + translateLabel: true + isButton: true + labelImage: (ResourceRetriever XPToolbarIconLibrary saveImageIcon) + ) + (MenuItem + label: '-' + ) + (MenuItem + activeHelpKey: editCut + enabled: hasSelectionChannel + label: 'Cut' + itemValue: doCut + translateLabel: true + isButton: true + labelImage: (ResourceRetriever ToolbarIconLibrary cutMenuItemIcon) + ) + (MenuItem + activeHelpKey: editCopy + enabled: hasSelectionChannel + label: 'Copy' + itemValue: doCopy + translateLabel: true + isButton: true + labelImage: (ResourceRetriever ToolbarIconLibrary copyMenuItemIcon) + ) + (MenuItem + activeHelpKey: editPaste + enabled: canPasteHolder + label: 'Paste' + itemValue: doPaste + translateLabel: true + isButton: true + labelImage: (ResourceRetriever ToolbarIconLibrary pasteMenuItemIcon) + ) + (MenuItem + label: '-' + ) + (MenuItem + activeHelpKey: addMenuItem + enabled: hasSingleSelectionChannel + label: 'Add Item' + itemValue: doCreateItem + translateLabel: true + isButton: true + labelImage: (ResourceRetriever #'MenuEditor::Item' iconItem) + ) + (MenuItem + activeHelpKey: addMenuSeparator + enabled: hasSingleSelectionChannel + label: 'Add Separator' + itemValue: doCreateSep + translateLabel: true + isButton: true + labelImage: (ResourceRetriever #'MenuEditor::Item' iconSeparator) + ) + (MenuItem + activeHelpKey: addMenuSlice + enabled: hasSingleSelectionChannel + label: 'Menu Slice' + itemValue: doCreateMenuSliceItem + translateLabel: true + isButton: true + labelImage: (ResourceRetriever #'MenuEditor::Item' iconSliceMenu) + ) + (MenuItem + activeHelpKey: addSubMenu + enabled: hasSingleSelectionChannel + label: 'Add Menu' + itemValue: doCreateMenu + translateLabel: true + isButton: true + submenuChannel: standardMenus + labelImage: (ResourceRetriever #'MenuEditor::Item' iconMenu) + keepLinkedMenu: true + ) + (MenuItem + activeHelpKey: addSubMenuLink + enabled: hasSingleSelectionChannel + label: 'Add Linked Menu' + itemValue: doCreateLinkedMenu + translateLabel: true + isButton: true + labelImage: (ResourceRetriever #'MenuEditor::Item' iconLinkedMenu) + ) + (MenuItem + activeHelpKey: addDelayedMenu + enabled: canCreateDelayedMenuChannel + label: 'Add Delayed Menu' + itemValue: doCreateDelayedMenu: + translateLabel: true + isButton: true + labelImage: (ResourceRetriever #'MenuEditor::Item' iconDelayedMenu) + argument: menu + ) + (MenuItem + activeHelpKey: addDelayedSubMenuLink + enabled: canCreateDelayedMenuChannel + label: 'Add Delayed Linked Menu' + itemValue: doCreateDelayedMenu: + translateLabel: true + isButton: true + labelImage: (ResourceRetriever #'MenuEditor::Item' iconDelayedLinkedMenu) + argument: linkedMenu + ) + (MenuItem + label: '' + ) + (MenuItem + activeHelpKey: editMoveUp + enabled: enableMovingUpOrDownHolder + label: 'Move Up' + itemValue: doMoveUp + translateLabel: true + isButton: true + startGroup: right + labelImage: (ResourceRetriever Icon upIcon) + ) + (MenuItem + activeHelpKey: editMoveDown + enabled: enableMovingUpOrDownHolder + label: 'Move Down' + itemValue: doMoveDown + translateLabel: true + isButton: true + labelImage: (ResourceRetriever Icon downIcon) + ) + (MenuItem + activeHelpKey: editMoveIn + enabled: enableMovingInHolder + label: 'Move Into Next' + itemValue: doMoveInNext + translateLabel: true + isButton: true + labelImage: (ResourceRetriever Icon downRightIcon) + ) + (MenuItem + activeHelpKey: editMoveInAbove + enabled: enableMovingInAboveHolder + label: 'Move Into Previous' + itemValue: doMoveInPrevious + translateLabel: true + isButton: true + labelImage: (ResourceRetriever Icon upRightIcon) + ) + (MenuItem + activeHelpKey: editMoveOut + enabled: enableMovingOutHolder + label: 'Move Out' + itemValue: doMoveOut + translateLabel: true + isButton: true + labelImage: (ResourceRetriever Icon leftDownIcon) + ) + ) + nil + nil ) ! ! @@ -1651,6 +1678,10 @@ ] ! +savedSpec + ^ savedSpec +! + useHelpTool:aHelpTool "take the help dictionaries from aHelpTool into my helpTool " @@ -1850,21 +1881,29 @@ specSelector := aSelector. aSelector notNil ifTrue:[ - aClass notNil ifTrue:[ - cls := aClass isBehavior ifTrue:[ aClass ] ifFalse:[ self resolveName:aClass]. - - (cls respondsTo:aSelector) ifTrue:[ - menu := cls perform: aSelector. - ]. - - menu notNil ifTrue:[ - (menu isCollection) ifTrue:[ - menu := Menu decodeFromLiteralArray:menu - ]. - ] - ]. + aClass notNil ifTrue:[ + cls := aClass isBehavior ifTrue:[ aClass ] ifFalse:[ self resolveName:aClass]. + + (cls respondsTo:aSelector) ifTrue:[ + menu := cls perform: aSelector. + ]. + ]. ]. - self buildFromMenu:menu selector:aSelector. + self loadFromMenu:menu selector:aSelector. +! + +loadFromMenu:menuArg selector:selectorOrNil + "rebuild menu" + + |menu| + + menu := menuArg. + menu notNil ifTrue:[ + (menu isCollection) ifTrue:[ + menu := Menu decodeFromLiteralArray:menu + ]. + ]. + self buildFromMenu:menu selector:selectorOrNil. self clearModified. "Modified: / 27-03-2007 / 11:16:47 / cg" @@ -2267,10 +2306,14 @@ wizards := IdentityDictionary new. ! -openModalOnMenu:aMenu - "build a tree from aMenu and open it modal - " - self openModalOnResourceSpec:aMenu +loadFromResourceSpec:aResourceSpec + self loadFromMenu:aResourceSpec selector:nil +! + +openModalOnMenu:aMenuOrNil + "build a tree from aMenu and open it modal" + + self openModalOnResourceSpec:aMenuOrNil ! postBuildListOfItemsView:aSrollableView @@ -2391,16 +2434,27 @@ ! generateMenuSpec - "generate and returns the current menu spec or nil - " - |menu spec| + "generate and returns the current menu spec or nil" + + |menu| menu := listOfItems root submenu. menu isNil ifTrue:[^ nil]. - menu := menu literalArrayEncoding. - spec := WriteStream on:String new. - UISpecification prettyPrintSpecArray:menu on:spec indent:5. - ^ spec contents. + + ^ menu literalArrayEncoding. +! + +generateMenuSpecString + "generate and returns the current menu spec as string or nil" + + |menu specStream| + + menu := self generateMenuSpec. + menu isNil ifTrue:[^ nil]. + + specStream := WriteStream on:String new. + UISpecification prettyPrintSpecArray:menu on:specStream indent:5. + ^ specStream contents. ! withoutNotifyDo:aBlock @@ -2428,6 +2482,14 @@ specClass isNil ifTrue:[^ false]. cls := self resolveName:specClass. ^ cls notNil +! + +isEditingSpecOnly + ^ masterApplication notNil and:[ masterApplication isEditingSpecOnly ] +! + +isNotEditingSpecOnly + ^ self isEditingSpecOnly not ! ! !MenuEditor methodsFor:'selection'! @@ -2665,14 +2727,21 @@ doSave "save current editing menu to - class: specClass - selector: specSelector - " - |cls spec mthd category code excla| + class: specClass + selector: specSelector + " + |cls specCode mthd category code excla| + + self isEditingSpecOnly ifTrue:[ + savedSpec := self generateMenuSpec. + hasSaved := true. + self clearModified. + ^ self + ]. super doSave ifFalse: [^nil]. - spec := self generateMenuSpec. - spec isNil ifTrue:[^ nil]. + specCode := self generateMenuSpecString. + specCode isNil ifTrue:[^ nil]. cls := self resolveName:specClass. @@ -2680,35 +2749,35 @@ category := 'menu specs'. (mthd := cls class compiledMethodAt:specSelector) notNil ifTrue:[ - category := mthd category. + category := mthd category. ]. excla := Character excla asString. code := excla - , (cls name , ' class methodsFor:' , category storeString) - , excla , '\\' - - , specSelector , '\' - , (self class codeGenerationComment replChar:$!! withString:'!!!!') - , '\\ "\' - , (' MenuEditor new openOnClass:' , cls name , ' andSelector:#' , specSelector , '\') - , (' (Menu new fromLiteralArrayEncoding:(' , cls name , ' ' , specSelector , ')) startUp\') - , ' "\'. + , (cls name , ' class methodsFor:' , category storeString) + , excla , '\\' + + , specSelector , '\' + , (self class codeGenerationComment replChar:$!! withString:'!!!!') + , '\\ "\' + , (' MenuEditor new openOnClass:' , cls name , ' andSelector:#' , specSelector , '\') + , (' (Menu new fromLiteralArrayEncoding:(' , cls name , ' ' , specSelector , ')) startUp\') + , ' "\'. code := code - , '\' - , ' \\' - , ' ^ ' , spec - , '\' - , (excla , ' ' , excla) - , '\\'. + , '\' + , ' \\' + , ' ^ ' , specCode + , '\' + , (excla , ' ' , excla) + , '\\'. code := code withCRs. (ReadStream on:code) fileIn. self isStandAlone ifTrue:[ - self helpTool doSave + self helpTool doSave ]. self updateHistory. @@ -2726,14 +2795,14 @@ ! doShowMenuSpec - "opens a code view with the contents of the menu spec - " - |spec| - - spec := self generateMenuSpec. - - spec ifNotNil:[ - CodeView openWith:spec title: 'Menu Spec' + "opens a code view with the contents of the menu spec" + + |code| + + code := self generateMenuSpecString. + + code ifNotNil:[ + CodeView openWith:code title: 'Menu Spec' ]. !