73 |
71 |
74 "Modified: 20.6.1997 / 10:46:45 / cg" |
72 "Modified: 20.6.1997 / 10:46:45 / cg" |
75 "Created: 13.9.1997 / 10:35:46 / cg" |
73 "Created: 13.9.1997 / 10:35:46 / cg" |
76 ! ! |
74 ! ! |
77 |
75 |
|
76 !Menu methodsFor:'ST-80 compatibility'! |
|
77 |
|
78 indexOfMenuItem:anItem |
|
79 |
|
80 ^ items indexOf:anItem |
|
81 |
|
82 "Created: / 27.10.1997 / 16:34:19 / cg" |
|
83 ! |
|
84 |
|
85 menuButtons |
|
86 "ST-80 seems to use a special menuButton class here. |
|
87 Here, kludge a collection of menuItems." |
|
88 |
|
89 ^ items |
|
90 |
|
91 "Created: / 27.10.1997 / 16:33:35 / cg" |
|
92 ! ! |
|
93 |
78 !Menu methodsFor:'accessing'! |
94 !Menu methodsFor:'accessing'! |
79 |
95 |
80 addItem:aMenuItem |
96 addItem:aMenuItem |
81 items isNil ifTrue:[ |
97 items isNil ifTrue:[ |
82 items := OrderedCollection new |
98 items := OrderedCollection new |
87 addItem:aMenuItem value:aValue |
103 addItem:aMenuItem value:aValue |
88 aMenuItem value:aValue. |
104 aMenuItem value:aValue. |
89 self addItem:aMenuItem. |
105 self addItem:aMenuItem. |
90 ! |
106 ! |
91 |
107 |
|
108 addItemGroup:aCollectionOfItems |
|
109 groupSizes isNil ifTrue:[ |
|
110 groupSizes := OrderedCollection new |
|
111 ]. |
|
112 groupSizes add:aCollectionOfItems size. |
|
113 |
|
114 aCollectionOfItems do:[:item | |
|
115 self addItem:item |
|
116 ]. |
|
117 |
|
118 "Created: / 27.10.1997 / 15:02:15 / cg" |
|
119 ! |
|
120 |
92 addItemGroup:aGroup values:values |
121 addItemGroup:aGroup values:values |
93 groupSizes isNil ifTrue:[ |
122 groupSizes isNil ifTrue:[ |
94 groupSizes := OrderedCollection new |
123 groupSizes := OrderedCollection new |
95 ]. |
124 ]. |
96 groupSizes add:items size. |
125 groupSizes add:items size. |
98 aGroup with:values do:[:item :value | |
127 aGroup with:values do:[:item :value | |
99 self addItem:item value:value |
128 self addItem:item value:value |
100 ]. |
129 ]. |
101 ! |
130 ! |
102 |
131 |
|
132 addItemGroupLabels:labels values:values |
|
133 |items| |
|
134 |
|
135 items := labels with:values |
|
136 collect:[:label :value | |
|
137 |item| |
|
138 |
|
139 item := MenuItem new. |
|
140 item label:label. |
|
141 item value:value. |
|
142 ]. |
|
143 self addItemGroup:items |
|
144 |
|
145 "Created: / 27.10.1997 / 19:49:27 / cg" |
|
146 ! |
|
147 |
|
148 addItemLabel:label value:value |
|
149 |item| |
|
150 |
|
151 item := MenuItem new. |
|
152 item label:label. |
|
153 item value:value. |
|
154 self addItem:item |
|
155 |
|
156 "Created: / 27.10.1997 / 19:47:12 / cg" |
|
157 ! |
|
158 |
103 atNameKey:aNameKey |
159 atNameKey:aNameKey |
104 "return the menuItem for the given nameKey; nil if no such item is in the menu." |
160 "return the menuItem for the given nameKey; nil if no such item is in the menu. |
105 |
161 Searches in allItems (i.e. also in subMenus)" |
106 items do:[:anItem | anItem nameKey == aNameKey ifTrue:[^ anItem]]. |
162 |
|
163 self allItemsDo:[:anItem| |
|
164 anItem nameKey == aNameKey ifTrue:[^ anItem] |
|
165 ]. |
107 ^ nil |
166 ^ nil |
108 |
167 |
109 "Created: 13.9.1997 / 10:25:16 / cg" |
168 "Modified: / 27.10.1997 / 15:12:00 / cg" |
110 "Modified: 13.9.1997 / 10:28:44 / cg" |
|
111 ! |
169 ! |
112 |
170 |
113 groupSizes |
171 groupSizes |
114 "return the value of the instance variable 'groupSizes' (automatically generated)" |
172 "return the value of the instance variable 'groupSizes' (automatically generated)" |
115 |
173 |
177 ^ items at:index |
235 ^ items at:index |
178 ]. |
236 ]. |
179 ^ nil |
237 ^ nil |
180 ! |
238 ! |
181 |
239 |
|
240 menuItemLabeled:anItemLabel |
|
241 "return the menuItem for the given nameKey; nil if no such item is in the menu. |
|
242 Searches all items (i.e. also submenu items)" |
|
243 |
|
244 self allItemsDo:[:anItem| |
|
245 |l| |
|
246 |
|
247 ((l := anItem label) sameAs: anItemLabel) ifTrue:[ |
|
248 ^ anItem |
|
249 ]. |
|
250 (l includes:$&) ifTrue:[ |
|
251 ((l copyWithout:$&) sameAs: anItemLabel) ifTrue:[ |
|
252 ^ anItem |
|
253 ] |
|
254 ] |
|
255 ]. |
|
256 ^ nil |
|
257 |
|
258 "Created: / 13.9.1997 / 10:25:16 / cg" |
|
259 "Modified: / 27.10.1997 / 15:23:33 / cg" |
|
260 ! |
|
261 |
182 menuItems |
262 menuItems |
183 ^ items |
263 ^ items |
184 ! |
264 ! |
185 |
265 |
186 menuItems:aCollectionOfMenuItems menuItemGroups:sizes values:values |
266 menuItems:aCollectionOfMenuItems menuItemGroups:sizes values:values |
242 "return a collection of values from my items" |
322 "return a collection of values from my items" |
243 |
323 |
244 ^ items collect:[:anItem | anItem value] |
324 ^ items collect:[:anItem | anItem value] |
245 |
325 |
246 "Created: 25.2.1997 / 19:49:29 / cg" |
326 "Created: 25.2.1997 / 19:49:29 / cg" |
|
327 ! |
|
328 |
|
329 values:aCollectionOfValues |
|
330 "return a collection of values from my items" |
|
331 |
|
332 |s| |
|
333 |
|
334 s := aCollectionOfValues readStream. |
|
335 self itemsDo:[:item | |
|
336 |val| |
|
337 |
|
338 val := s next. |
|
339 item value:val |
|
340 ]. |
|
341 s atEnd ifFalse:[self halt] |
|
342 |
|
343 "Created: / 27.10.1997 / 15:15:47 / cg" |
|
344 ! |
|
345 |
|
346 visibleMenuItemGroups |
|
347 | itemGroups visibleItemGroups nextItem | |
|
348 |
|
349 itemGroups := OrderedCollection new. |
|
350 nextItem := 1. |
|
351 groupSizes do: [:groupSize | |
|
352 itemGroups addLast: (items copyFrom: nextItem to: nextItem + groupSize - 1). |
|
353 nextItem := nextItem + groupSize]. |
|
354 self hasHiddenItems ifFalse: [^itemGroups]. |
|
355 |
|
356 "Remove the hidden items." |
|
357 visibleItemGroups := OrderedCollection new. |
|
358 itemGroups do: [:eachItemGroup | |
|
359 | visibleItemGroup | |
|
360 visibleItemGroup := eachItemGroup reject: |
|
361 [:eachMenuItem | eachMenuItem hidden]. |
|
362 visibleItemGroup isEmpty ifFalse: [ |
|
363 visibleItemGroups addLast: visibleItemGroup]]. |
|
364 ^visibleItemGroups |
|
365 |
|
366 "Created: / 27.10.1997 / 15:07:50 / cg" |
247 ! ! |
367 ! ! |
248 |
368 |
249 !Menu methodsFor:'accessing resource'! |
369 !Menu methodsFor:'accessing resource'! |
250 |
370 |
251 findGuiResourcesIn:aResourceContainerOrApplication |
371 findGuiResourcesIn:aResourceContainerOrApplication |
390 |
510 |
391 allItemsDo:aOneArgBlock |
511 allItemsDo:aOneArgBlock |
392 "evaluate block on each item and submenu items |
512 "evaluate block on each item and submenu items |
393 " |
513 " |
394 self itemsDo:[:anItem| |
514 self itemsDo:[:anItem| |
|
515 |sub| |
|
516 |
395 aOneArgBlock value:anItem. |
517 aOneArgBlock value:anItem. |
396 anItem submenu notNil ifTrue:[ |
518 (sub := anItem submenu value) notNil ifTrue:[ |
397 anItem submenu itemsDo:aOneArgBlock |
519 sub allItemsDo:aOneArgBlock |
398 ] |
520 ] |
399 ] |
521 ] |
|
522 |
|
523 "Modified: / 27.10.1997 / 15:09:08 / cg" |
400 ! |
524 ! |
401 |
525 |
402 itemsDo:aOneArgBlock |
526 itemsDo:aOneArgBlock |
403 "evaluate the block for each item in the current menu |
527 "evaluate the block for each item in the current menu |
404 " |
528 " |
408 menuAndSubmenusDetectItem:aOneArgBlock |
532 menuAndSubmenusDetectItem:aOneArgBlock |
409 "evaluate the block for each item in the current menu and all |
533 "evaluate the block for each item in the current menu and all |
410 submenus. In case that the block returns a non nil argument, |
534 submenus. In case that the block returns a non nil argument, |
411 the item will be returned |
535 the item will be returned |
412 " |
536 " |
413 |sm item| |
537 |item| |
414 |
538 |
415 items notNil ifTrue:[ |
539 items notNil ifTrue:[ |
416 items do:[:anItem| |
540 items do:[:anItem| |
|
541 |sub| |
|
542 |
417 (aOneArgBlock value:anItem) ifTrue:[ |
543 (aOneArgBlock value:anItem) ifTrue:[ |
418 ^ anItem |
544 ^ anItem |
419 ]. |
545 ]. |
420 (sm := anItem submenu) notNil ifTrue:[ |
546 (sub := anItem submenu value) notNil ifTrue:[ |
421 item := anItem submenu menuAndSubmenusDetectItem:aOneArgBlock. |
547 item := sub menuAndSubmenusDetectItem:aOneArgBlock. |
422 item notNil ifTrue:[ |
548 item notNil ifTrue:[ |
423 ^ item |
549 ^ item |
424 ] |
550 ] |
425 ] |
551 ] |
426 ] |
552 ] |
427 ]. |
553 ]. |
428 ^ nil |
554 ^ nil |
|
555 |
|
556 "Modified: / 27.10.1997 / 15:09:43 / cg" |
429 ! ! |
557 ! ! |
430 |
558 |
431 !Menu methodsFor:'kludged fixes'! |
559 !Menu methodsFor:'kludged fixes'! |
432 |
560 |
433 destroy |
561 destroy |
457 ]. |
585 ]. |
458 ^ exceptionBlock value |
586 ^ exceptionBlock value |
459 ! ! |
587 ! ! |
460 |
588 |
461 !Menu methodsFor:'queries'! |
589 !Menu methodsFor:'queries'! |
|
590 |
|
591 hasHiddenItems |
|
592 "test whether any item is hidden" |
|
593 |
|
594 self allItemsDo:[:anItem| |
|
595 anItem isHidden ifTrue:[^ true] |
|
596 ]. |
|
597 ^ false |
|
598 |
|
599 "Modified: / 27.10.1997 / 15:12:44 / cg" |
|
600 ! |
462 |
601 |
463 hasSubMenuAt:anIndex |
602 hasSubMenuAt:anIndex |
464 "test whether the menu item at the given index has a submenu |
603 "test whether the menu item at the given index has a submenu |
465 " |
604 " |
466 ^ (self menuItemAt:anIndex) hasSubmenu |
605 ^ (self menuItemAt:anIndex) hasSubmenu |