35 | nLabel valueArray menuItems groupLengths | |
35 | nLabel valueArray menuItems groupLengths | |
36 |
36 |
37 nLabel := arrayOfString size. |
37 nLabel := arrayOfString size. |
38 |
38 |
39 valueArrayOrNil isNil ifTrue:[ |
39 valueArrayOrNil isNil ifTrue:[ |
40 (valueArray := arrayOfString isEmpty) ifTrue: [ |
40 (valueArray := arrayOfString isEmpty) ifTrue: [ |
41 valueArray := #() |
41 valueArray := #() |
42 ] ifFalse:[ |
42 ] ifFalse:[ |
43 valueArray := (1 to:nLabel) |
43 valueArray := (1 to:nLabel) |
44 ] |
44 ] |
45 ] ifFalse:[ |
45 ] ifFalse:[ |
46 valueArray := valueArrayOrNil |
46 valueArray := valueArrayOrNil |
47 ]. |
47 ]. |
48 |
48 |
49 nLabel ~~ valueArray size ifTrue: [ |
49 nLabel ~~ valueArray size ifTrue: [ |
50 ^ self error: 'illegal menu combination' |
50 ^ self error: 'illegal menu combination' |
51 ]. |
51 ]. |
52 |
52 |
53 menuItems := Array new:nLabel. |
53 menuItems := Array new:nLabel. |
54 1 to:nLabel do:[:i | |
54 1 to:nLabel do:[:i | |
55 |mi v| |
55 |mi v| |
56 |
56 |
57 mi := MenuItem labeled: (arrayOfString at:i) asString. |
57 mi := MenuItem labeled: (arrayOfString at:i) asString. |
58 v := valueArray at: i. |
58 v := valueArray at: i. |
59 (v isKindOf: Menu) ifTrue: [mi submenu: v]. |
59 (v isKindOf: Menu) ifTrue: [mi submenu: v]. |
60 menuItems at: i put: mi |
60 menuItems at: i put: mi |
61 ]. |
61 ]. |
62 |
62 |
63 (linesArray == nil or:[linesArray isEmpty]) ifTrue:[ |
63 (linesArray == nil or:[linesArray isEmpty]) ifTrue:[ |
64 groupLengths := (menuItems isEmpty) |
64 groupLengths := (menuItems isEmpty) |
65 ifTrue: [Array new: 0] |
65 ifTrue: [Array new: 0] |
66 ifFalse: [Array with: menuItems size] |
66 ifFalse: [Array with: menuItems size] |
67 ] ifFalse:[ |
67 ] ifFalse:[ |
68 groupLengths := Array new: linesArray size + 1. |
68 groupLengths := Array new: linesArray size + 1. |
69 groupLengths at: 1 put: linesArray first. |
69 groupLengths at: 1 put: linesArray first. |
70 2 to: linesArray size do: [:i | |
70 2 to: linesArray size do: [:i | |
71 groupLengths at: i put: (linesArray at: i) - (linesArray at: i - 1) |
71 groupLengths at: i put: (linesArray at: i) - (linesArray at: i - 1) |
72 ]. |
72 ]. |
73 groupLengths at: groupLengths size put: menuItems size - linesArray last |
73 groupLengths at: groupLengths size put: menuItems size - linesArray last. |
74 ]. |
74 ]. |
75 |
75 |
76 ^ self new |
76 ^ self new |
77 menuItems: menuItems |
77 menuItems: menuItems |
78 menuItemGroups: groupLengths |
78 menuItemGroups: groupLengths |
79 values: valueArray |
79 values: valueArray |
80 |
80 |
81 "Modified: / 31.10.1997 / 03:19:14 / cg" |
81 "Modified: / 19.4.1998 / 11:30:18 / cg" |
82 ! |
82 ! |
83 |
83 |
84 labelList:arrayOfGroupStrings values:valueArrayOrNil |
84 labelList:arrayOfGroupStrings values:valueArrayOrNil |
85 |labels lines| |
85 |labels lines| |
86 |
86 |
302 menuItems |
302 menuItems |
303 ^ items |
303 ^ items |
304 ! |
304 ! |
305 |
305 |
306 menuItems:aCollectionOfMenuItems menuItemGroups:sizes values:values |
306 menuItems:aCollectionOfMenuItems menuItemGroups:sizes values:values |
|
307 |n| |
|
308 |
307 items := aCollectionOfMenuItems. |
309 items := aCollectionOfMenuItems. |
308 groupSizes := sizes. |
310 groupSizes := sizes. |
|
311 sizes size > 0 ifTrue:[ |
|
312 n := sizes inject:0 into:[:sumSoFar :this | sumSoFar + this]. |
|
313 n = items size ifTrue:[ |
|
314 groupSizes := sizes copyWithoutLast:1 |
|
315 ] |
|
316 ]. |
309 |
317 |
310 values notNil ifTrue:[ |
318 values notNil ifTrue:[ |
311 items with:values do:[:anItem :aValue |anItem value:aValue] |
319 items with:values do:[:anItem :aValue |anItem value:aValue] |
312 ]. |
320 ]. |
313 |
321 |
314 "Modified: 20.6.1997 / 10:45:30 / cg" |
322 "Modified: / 19.4.1998 / 11:47:34 / cg" |
315 ! |
323 ! |
316 |
324 |
317 numberOfItems |
325 numberOfItems |
318 "return the number of items in this menu" |
326 "return the number of items in this menu" |
319 |
327 |