Menu.st
changeset 610 72dbf392e888
parent 589 cc422fe7824f
child 627 07c9a1c2d226
--- a/Menu.st	Wed Jun 18 10:22:15 1997 +0200
+++ b/Menu.st	Fri Jun 20 12:00:04 1997 +0200
@@ -24,6 +24,43 @@
 "
 ! !
 
+!Menu class methodsFor:'instance creation'!
+
+labelArray: arrayOfString lines: linesArray values: valueArrayOrNil
+        "Answer a menu with menu items with labels from arrayOfString (not Symbols).  The linesArray describes which menu items are the last menu item in their group.  The valueArray contains value objects for each menu item (or is nil if no value objects are specified)."
+
+        | valueArray menuItems groupLengths |
+        valueArrayOrNil isNil
+                ifTrue: [valueArray := arrayOfString isEmpty
+                                                ifTrue: [#()]
+                                                ifFalse:        [1 to: arrayOfString size]]
+                ifFalse: [valueArray := valueArrayOrNil].
+        arrayOfString size ~= valueArray size
+                ifTrue: [^self error: 'illegal menu combination'].
+
+        menuItems := Array new: arrayOfString size.
+        1 to: arrayOfString size do:
+                [:i |
+                | mi v|
+                mi := MenuItem labeled: (arrayOfString at: i) asString.
+                v := valueArray at: i.
+                (v isKindOf: Menu)
+                        ifTrue: [mi submenu: v].
+                menuItems at: i put: mi].
+        (linesArray == nil or: [linesArray isEmpty])
+                ifTrue: [
+                        groupLengths := (menuItems isEmpty)
+                                ifTrue: [Array new: 0]
+                                ifFalse: [Array with: menuItems size]]
+                ifFalse: [groupLengths := Array new: linesArray size + 1.
+                                groupLengths at: 1 put: linesArray first.
+                                2 to: linesArray size do: [:i | groupLengths at: i put: (linesArray at: i) - (linesArray at: i - 1)].
+                                groupLengths at: groupLengths size put: menuItems size - linesArray last].
+        ^self new menuItems: menuItems menuItemGroups: groupLengths values: valueArray
+
+    "Modified: 20.6.1997 / 10:46:45 / cg"
+! !
+
 !Menu methodsFor:'accessing'!
 
 addItem:aMenuItem
@@ -122,7 +159,7 @@
     ^ items
 !
 
-menuItems:aCollectionOfMenuItems groupsSizes:sizes values:values
+menuItems:aCollectionOfMenuItems menuItemGroups:sizes values:values
     |idx newItems nItems|
 
     items := aCollectionOfMenuItems.
@@ -131,6 +168,8 @@
     values notNil ifTrue:[
         items with:values do:[:anItem :aValue |anItem value:aValue]
     ].
+
+    "Modified: 20.6.1997 / 10:45:30 / cg"
 !
 
 numberOfItems
@@ -196,7 +235,7 @@
     items := (aLiteralEncodedArray at:2) collect:[:item | item decodeAsLiteralArray].
     groups := aLiteralEncodedArray at:3.
     values := aLiteralEncodedArray at:4.
-    self menuItems:items groupsSizes:groups values:values.
+    self menuItems:items menuItemGroups:groups values:values.
 
     "extract from PD folder.st:
      #(#Menu #(
@@ -297,7 +336,7 @@
        ) decodeAsLiteralArray startUp  
     "
 
-    "Modified: 25.2.1997 / 21:05:06 / cg"
+    "Modified: 20.6.1997 / 10:45:51 / cg"
 !
 
 literalArrayEncoding
@@ -411,5 +450,5 @@
 !Menu class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libview2/Menu.st,v 1.12 1997-06-04 11:12:25 ca Exp $'
+    ^ '$Header: /cvs/stx/stx/libview2/Menu.st,v 1.13 1997-06-20 10:00:04 cg Exp $'
 ! !