*** empty log message ***
authorca
Fri, 04 Jun 2004 14:38:20 +0200
changeset 1844 62f5b971145e
parent 1843 771731481a20
child 1845 d6d62913c2cc
*** empty log message ***
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 @@
     <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