diff -r 771731481a20 -r 62f5b971145e MenuEditor.st --- a/MenuEditor.st Tue Jun 01 13:16:37 2004 +0200 +++ b/MenuEditor.st Fri Jun 04 14:38:20 2004 +0200 @@ -42,6 +42,13 @@ privateIn:MenuEditor ! +MenuEditor::Item subclass:#MenuSliceItem + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + privateIn:MenuEditor +! + MenuEditor::Item subclass:#RegularMenuItem instanceVariableNames:'' classVariableNames:'' @@ -217,6 +224,7 @@ sendToOriginator ignoreMnemonicKeys ignoreShortcutKeys + isMenuSlice ) ! ! @@ -268,6 +276,9 @@ #addMenuSeparator 'Add a new menu separator.' +#addMenuSliceItem +'Add a new menu slice.' + #addSubMenu 'Add a new sub menu.' @@ -322,12 +333,6 @@ #detailsAccelerator 'Accelerator key to select the menu item from the keyboard (Cmdx or Ctrlx).' -#detailsIgnoreAcceleratorKeys -'Ignore accelerator keys in submenu(s).' - -#detailsIgnoreMnemonicKeys -'Ignore mnemonic keys (access characters) in submenu(s).' - #detailsAccessCharaterPosition 'Index of the access character position of the textual label (obsolete, VW compatibility).' @@ -337,6 +342,12 @@ #detailsEnabled 'Aspect or binding providing a boolean value holder to enable/disable the menu item.' +#detailsIgnoreAcceleratorKeys +'Ignore accelerator keys in submenu(s).' + +#detailsIgnoreMnemonicKeys +'Ignore mnemonic keys (access characters) in submenu(s).' + #detailsStartGroup 'Specify start of a right-aligned item group.' @@ -607,65 +618,72 @@ ^ - #(#Menu - #( - #(#MenuItem - #activeHelpKey: #addMenuSeparator - #label: 'Separator' - #itemValue: #doCreateSep - #translateLabel: true - #labelImage: #(#ResourceRetriever #'MenuEditor::Item' #iconSeparator '') + #(Menu + ( + (MenuItem + activeHelpKey: addMenuSeparator + label: 'Separator' + itemValue: doCreateSep + translateLabel: true + labelImage: (ResourceRetriever #'MenuEditor::Item' iconSeparator '') ) - #(#MenuItem - #activeHelpKey: #addMenuItem - #label: 'Item' - #itemValue: #doCreateItem - #translateLabel: true - #labelImage: #(#ResourceRetriever #'MenuEditor::Item' #iconItem '') + (MenuItem + activeHelpKey: addMenuItem + label: 'Item' + itemValue: doCreateItem + translateLabel: true + labelImage: (ResourceRetriever #'MenuEditor::Item' iconItem '') ) - #(#MenuItem - #activeHelpKey: #addMenuItem - #label: 'Menu' - #itemValue: #doCreateMenu - #translateLabel: true - #labelImage: #(#ResourceRetriever #'MenuEditor::Item' #iconMenu '') + (MenuItem + activeHelpKey: addMenuSliceItem + label: 'Menu Slice' + itemValue: doCreateMenuSliceItem + translateLabel: true + labelImage: (ResourceRetriever #'MenuEditor::Item' iconSliceMenu '') ) - #(#MenuItem - #activeHelpKey: #addSubMenuLink - #label: 'Linked Menu' - #itemValue: #doCreateLinkedMenu - #translateLabel: true - #labelImage: #(#ResourceRetriever #'MenuEditor::Item' #iconLinkedMenu '') + (MenuItem + activeHelpKey: addMenuItem + label: 'Menu' + itemValue: doCreateMenu + translateLabel: true + labelImage: (ResourceRetriever #'MenuEditor::Item' iconMenu '') ) - #(#MenuItem - #label: '-' + (MenuItem + activeHelpKey: addSubMenuLink + label: 'Linked Menu' + itemValue: doCreateLinkedMenu + translateLabel: true + labelImage: (ResourceRetriever #'MenuEditor::Item' iconLinkedMenu '') ) - #(#MenuItem - #activeHelpKey: #addDelayedMenu - #enabled: #canCreateDelayedMenuChannel - #label: 'Delayed Menu' - #itemValue: #doCreateDelayedMenu: - #translateLabel: true - #labelImage: #(#ResourceRetriever #'MenuEditor::Item' #iconDelayedMenu '') - #argument: #menu + (MenuItem + label: '-' ) - #(#MenuItem - #activeHelpKey: #addDelayedSubMenuLink - #enabled: #canCreateDelayedMenuChannel - #label: 'Delayed Linked Menu' - #itemValue: #doCreateDelayedMenu: - #translateLabel: true - #labelImage: #(#ResourceRetriever #'MenuEditor::Item' #iconDelayedLinkedMenu '') - #argument: #linkedMenu + (MenuItem + activeHelpKey: addDelayedMenu + enabled: canCreateDelayedMenuChannel + label: 'Delayed Menu' + itemValue: doCreateDelayedMenu: + translateLabel: true + labelImage: (ResourceRetriever #'MenuEditor::Item' iconDelayedMenu '') + argument: menu ) - #(#MenuItem - #label: '-' + (MenuItem + activeHelpKey: addDelayedSubMenuLink + enabled: canCreateDelayedMenuChannel + label: 'Delayed Linked Menu' + itemValue: doCreateDelayedMenu: + translateLabel: true + labelImage: (ResourceRetriever #'MenuEditor::Item' iconDelayedLinkedMenu '') + argument: linkedMenu ) - #(#MenuItem - #label: 'Standard Menus' - #translateLabel: true - #submenuChannel: #standardMenus - #keepLinkedMenu: true + (MenuItem + label: '-' + ) + (MenuItem + label: 'Standard Menus' + translateLabel: true + submenuChannel: standardMenus + keepLinkedMenu: true ) ) nil @@ -1191,6 +1209,15 @@ labelImage: (ResourceRetriever #'MenuEditor::Item' iconItem) ) (MenuItem + activeHelpKey: addMenuSliceItem + enabled: hasSingleSelectionChannel + label: 'Menu Slice' + itemValue: doCreateMenuSliceItem + translateLabel: true + isButton: true + labelImage: (ResourceRetriever #'MenuEditor::Item' iconSliceMenu) + ) + (MenuItem activeHelpKey: addSubMenu enabled: hasSingleSelectionChannel label: 'Add Menu' @@ -2227,7 +2254,10 @@ choice isNil ifTrue:[ choice := anItem choiceValue asValue ]. anItem choice:choice ]. - + anItem isMenuSlice ifTrue:[ + anItem submenuChannel:nil. + anItem label:'... Slice Menu ...'. + ]. anItem submenuChannel notNil ifTrue:[ anItem submenuChannel:nil. anItem submenu isNil ifTrue:[ @@ -2534,6 +2564,12 @@ ]. ! +doCreateMenuSliceItem + "create a new MenuSlice Item + " + self addAndSelectValueOf:[ MenuSliceItem new ]. +! + doCreateSep "create a new Separator Item " @@ -2879,6 +2915,26 @@ ^Icon constantNamed:#'MenuEditor::Item class iconSeparator' ifAbsentPut:[(Depth2Image new) width: 20; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'UUUUUUUUUUUUUP@@@@@@EUUUUU Z****+A*****,F????:0[@@@@[A)UUUU,F*****0Z****+B?????<@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 127 127 127]; mask:((Depth1Image new) width: 20; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@???0???0???0???0???0???0???0???0???0???0???0@@@@@@@@@@@@') ; yourself); yourself] +! + +iconSliceMenu + "This resource specification was automatically generated + by the ImageEditor of ST/X." + + "Do not manually edit this!! If it is corrupted, + the ImageEditor may not be able to read the specification." + + " + self iconSliceMenu inspect + ImageEditor openOnClass:self andSelector:#iconSliceMenu + Icon flushCachedIcons + " + + + + ^Icon + constantNamed:#'MenuEditor::Item class iconSliceMenu' + ifAbsentPut:[(Depth2Image new) width: 20; height: 16; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@O?????0:*****C/?6??XN:*[*) ;*).*&C.*&:*XN5U[UU :*****C*****(@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 127 127 127 170 170 170 255 255 255]; mask:((Depth1Image new) width: 20; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@???0???0???0???0???0???0???0???0???0???0???0@@@@@@@@@@@@') ; yourself); yourself] ! ! !MenuEditor::Item class methodsFor:'instance creation'! @@ -2888,7 +2944,8 @@ aMenuItem isNil ifTrue:[ ^ nil ]. aMenuItem itemValue isNil ifTrue:[ - aMenuItem submenu notNil ifTrue:[ ^ MenuEditor::RegularMenuItem ]. + aMenuItem isMenuSlice ifTrue:[ ^ MenuEditor::MenuSliceItem ]. + aMenuItem submenu notNil ifTrue:[ ^ MenuEditor::RegularMenuItem ]. aMenuItem submenuChannel notNil ifTrue:[ ^ MenuEditor::LinkedMenuItem ]. (self separatorTypeOf:(aMenuItem rawLabel)) notNil ifTrue:[ @@ -4145,6 +4202,197 @@ ^ true ! ! +!MenuEditor::MenuSliceItem class methodsFor:'defaults'! + +defaultLabel + ^ 'Menu Slice' +! ! + +!MenuEditor::MenuSliceItem class methodsFor:'interface specs'! + +basicsEditSpec + "This resource specification was automatically generated + by the UIPainter of ST/X." + + "Do not manually edit this!! If it is corrupted, + the UIPainter may not be able to read the specification." + + " + UIPainter new openOnClass:MenuEditor::MenuSliceItem andSelector:#basicsEditSpec + " + + + + ^ + #(FullSpec + name: basicsEditSpec + window: + (WindowSpec + label: 'basicsEditSpec' + name: 'basicsEditSpec' + min: (Point 10 10) + bounds: (Rectangle 0 0 344 146) + ) + component: + (SpecCollection + collection: ( + (LabelSpec + label: 'Name Key:' + name: 'nameKeyLabel' + layout: (AlignmentOrigin 107 0 25 0 1 0.5) + activeHelpKey: basicsKey + visibilityChannel: notDelayedMenu + translateLabel: true + resizeForLabel: true + adjust: right + ) + (InputFieldSpec + name: 'nameKeyField' + layout: (LayoutFrame 110 0 15 0 -5 1.0 37 0) + activeHelpKey: basicsKey + visibilityChannel: notDelayedMenu + tabable: true + model: nameKey + group: inputGroup + type: symbolOrNil + immediateAccept: false + acceptOnLeave: false + acceptOnReturn: true + acceptOnTab: true + acceptOnLostFocus: false + acceptChannel: acceptChannel + modifiedChannel: modifiedChannel + acceptOnPointerLeave: false + ) + (LabelSpec + label: 'Label:' + name: 'labelLabel' + layout: (AlignmentOrigin 107 0 51 0 1 0.5) + activeHelpKey: basicsLabel + visibilityChannel: notDelayedMenu + translateLabel: true + resizeForLabel: true + adjust: right + ) + (InputFieldSpec + name: 'labelField' + layout: (LayoutFrame 110 0 40 0 -5 1.0 62 0) + activeHelpKey: basicsLabel + visibilityChannel: notDelayedMenu + tabable: true + model: rawLabel + group: inputGroup + immediateAccept: false + acceptOnReturn: true + acceptOnTab: true + acceptOnLostFocus: false + acceptChannel: acceptChannel + modifiedChannel: modifiedChannel + acceptOnPointerLeave: false + ) + (LabelSpec + label: 'Menu:' + name: 'menuLabel' + layout: (AlignmentOrigin 107 0 90 0 1 0.5) + activeHelpKey: basicsLabel + translateLabel: true + resizeForLabel: true + adjust: right + ) + (InputFieldSpec + name: 'menuField' + layout: (LayoutFrame 110 0 79 0 -5 1.0 101 0) + activeHelpKey: basicsMenu + tabable: true + model: submenuChannel + group: inputGroup + type: symbolOrNil + immediateAccept: false + acceptOnReturn: true + acceptOnTab: true + acceptOnLostFocus: false + acceptChannel: acceptChannel + modifiedChannel: modifiedChannel + acceptOnPointerLeave: false + ) + (LabelSpec + label: 'Argument:' + name: 'argumentLabel' + layout: (AlignmentOrigin 107 0 115 0 1 0.5) + activeHelpKey: basicsLabel + translateLabel: true + resizeForLabel: true + adjust: right + ) + (InputFieldSpec + name: 'argumentField' + layout: (LayoutFrame 110 0 104 0 -5 1.0 126 0) + activeHelpKey: basicsMenuArgument + enableChannel: notDelayedMenu + tabable: true + model: argument + group: inputGroup + type: smalltalkObject + immediateAccept: false + acceptOnReturn: true + acceptOnTab: true + acceptOnLostFocus: false + acceptChannel: acceptChannel + modifiedChannel: modifiedChannel + acceptOnPointerLeave: false + ) + ) + + ) + ) +! ! + +!MenuEditor::MenuSliceItem methodsFor:'accessing'! + +icon + ^ self class iconSliceMenu +! + +menuItem + "returns self as a MenuItem + " + |item| + + item := super menuItem. + item submenuChannel:(self submenuChannel). + item isMenuSlice:true. + ^ item +! + +slices + ^ #( + (Basics basicsEditSpec) + ) +! ! + +!MenuEditor::MenuSliceItem methodsFor:'aspects'! + +argument:aValue + menuItem argument:aValue. +! + +aspectAt:aKey put:aValue + "set a specific aspect named aKey to the aValue + " + aKey == #submenuChannel ifTrue:[ ^ self submenuChannel:aValue ]. + aKey == #isSliceMenu ifTrue:[ ^ self ]. + + super aspectAt:aKey put:aValue. +! + +submenuChannel + ^ menuItem submenuChannel ? #unspecified +! + +submenuChannel:aValue + menuItem submenuChannel:aValue. +! ! + !MenuEditor::RegularMenuItem class methodsFor:'defaults'! defaultDelayedLabel