ST80 compatible inst creation method..
authorClaus Gittinger <cg@exept.de>
Fri, 20 Jun 1997 12:00:04 +0200
changeset 610 72dbf392e888
parent 609 1343bda17876
child 611 10d6eccf083c
ST80 compatible inst creation method..
Menu.st
--- 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 $'
 ! !