Menu.st
changeset 4310 a618a8ac992a
parent 4095 563b7c522f45
child 4311 06a46e58fe14
--- a/Menu.st	Fri Jul 19 11:53:36 2019 +0200
+++ b/Menu.st	Fri Jul 19 18:27:59 2019 +0200
@@ -913,16 +913,21 @@
 fromLiteralArrayEncoding:aLiteralEncodedArray
     "read my contents from a aLiteralEncodedArray"
 
-    |items groups values|
+    |itemArray groupArrayOrNil valuesArrayOrNil|
 
-    items := aLiteralEncodedArray at:2.
+    itemArray := aLiteralEncodedArray at:2.
 
-    items notNil ifTrue:[
-        items := items collect:[:item | item decodeAsLiteralArray].
+    itemArray notNil ifTrue:[
+        itemArray := itemArray collect:[:item | item decodeAsLiteralArray].
     ].
-    groups := aLiteralEncodedArray at:3 ifAbsent:nil.
-    values := aLiteralEncodedArray at:4 ifAbsent:nil.
-    self menuItems:items menuItemGroups:groups values:values.
+    aLiteralEncodedArray size > 2 ifTrue:[
+        groupArrayOrNil := aLiteralEncodedArray at:3.
+        aLiteralEncodedArray size > 3 ifTrue:[
+            valuesArrayOrNil := aLiteralEncodedArray at:4.
+        ].
+    ].
+    
+    self menuItems:itemArray menuItemGroups:groupArrayOrNil values:valuesArrayOrNil.
 
     "extract from PD folder.st:
      #(#Menu #(
@@ -1024,37 +1029,54 @@
     "
 
     "Modified: / 08-08-2010 / 14:43:03 / cg"
+    "Modified: / 19-07-2019 / 18:25:36 / Claus Gittinger"
 !
 
 literalArrayEncoding
     "return myself encoded as a literal array"
 
-    |coll array size|
+    |coll itemArray groupsArray valuesArray size|
 
+    valuesArray := nil. 
+    
+    "/ encodes as:
+    "/   #( Menu
+    "/          items-array
+    "/          groups-array (usually nil)
+    "/          values-array (usually nil)
+    "/   )
+    "/ groups-array and values-array can be left empty (see fromLiteralArrayEncoding)
+    
     coll := OrderedCollection new.
     coll add:#Menu.
 
     (size := items size) == 0  ifTrue:[
-        array := nil
+        itemArray := nil
     ] ifFalse:[
-        array := Array new:size.
+        itemArray := Array new:size.
         items keysAndValuesDo:[:anIndex :anItem|
-            array at:anIndex put:(anItem literalArrayEncoding)
+            itemArray at:anIndex put:(anItem literalArrayEncoding)
         ]
     ].
-    coll add:array.
+    coll add:itemArray.
 
     (size := groupSizes size) == 0  ifTrue:[
-        array := nil
+        groupsArray := nil
     ] ifFalse:[
-        array := Array new:size.
+        groupsArray := Array new:size.
         groupSizes keysAndValuesDo:[:anIndex :aSize|
-            array at:anIndex put:(aSize literalArrayEncoding)
+            groupsArray at:anIndex put:(aSize literalArrayEncoding)
         ]
     ].
-    coll add:array.
-    coll add:nil.
-  ^ coll asArray
+    (groupsArray notNil or:[valuesArray notNil]) ifTrue:[
+        coll add:groupsArray.
+        valuesArray notNil ifTrue:[
+            coll add:valuesArray. "/ always nil, currently
+        ].    
+    ].    
+    ^ coll asArray
+
+    "Modified: / 19-07-2019 / 18:27:17 / Claus Gittinger"
 ! !
 
 !Menu methodsFor:'enumerating'!