--- 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 @@
<resource: #menu>
^
- #(#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
+ "
+
+ <resource: #image>
+
+ ^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
+ "
+
+ <resource: #canvas>
+
+ ^
+ #(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