#BUGFIX by cg
class: Menu
changed:
#fromLiteralArrayEncoding:
#literalArrayEncoding
--- 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'!