--- a/PopUpMenu.st Sat Apr 25 15:00:20 1998 +0200
+++ b/PopUpMenu.st Sat Apr 25 15:42:56 1998 +0200
@@ -404,30 +404,8 @@
if resources are non-nil, labels are translated using the translations found there.
"
- |n labels selectors accelerators|
-
- n := itemList size.
- labels := Array new:n.
- selectors := Array new:n.
- accelerators := Array new:n.
- itemList keysAndValuesDo:[:idx :item |
- |label selector accelerator|
-
- label := item at:1.
- selector := item at:2 ifAbsent:nil.
- accelerator := item at:3 ifAbsent:nil.
-
- labels at:idx put:label.
- selectors at:idx put:selector.
- accelerators at:idx put:accelerator.
- ].
- resources notNil ifTrue:[
- labels := resources array:labels
- ].
^ self
- labels:labels
- selectors:selectors
- accelerators:accelerators
+ itemList:itemList resources:resources receiver:nil for:nil
"the sometimes more convenient:
|p|
@@ -452,6 +430,79 @@
!
+itemList:itemList resources:resources receiver:anObject for:aView
+ "like labels:selectors:... messages, but expects a single collection,
+ containing items row-wise (i.e. elements are themself arrays, consisting of
+ label [selector [accelerator [arg]]]
+ if resources are non-nil, labels are translated using the translations found there.
+ "
+
+ |n labels selectors accelerators args anyArg|
+
+ n := itemList size.
+ labels := Array new:n.
+ selectors := Array new:n.
+ accelerators := Array new:n.
+ anyArg := false.
+
+ itemList keysAndValuesDo:[:idx :item |
+ |label selector accelerator arg|
+
+ label := item at:1.
+ labels at:idx put:label.
+ item size > 1 ifTrue:[
+ selector := item at:2.
+ selectors at:idx put:selector.
+ item size > 2 ifTrue:[
+ accelerator := item at:3.
+ accelerators at:idx put:accelerator.
+ item size > 3 ifTrue:[
+ arg := item at:4.
+ anyArg ifFalse:[
+ anyArg := true.
+ args := Array new:n.
+ ].
+ args at:idx put:arg.
+ ]
+ ]
+ ].
+ ].
+
+ resources notNil ifTrue:[
+ labels := resources array:labels
+ ].
+
+ ^ self
+ labels:labels
+ selectors:selectors
+ accelerators:accelerators
+ args:args
+ receiver:anObject
+ for:aView
+
+ "this is sometimes more convenient:
+ |p|
+
+ p := PopUpMenu
+ itemList:#(('foo' doFoo CtrlF)
+ ('-')
+ ('bar' doBar CtrlB)
+ ('baz' doBaz CtrlZ))
+ resources:nil.
+ p showAtPointer
+
+ and does the same as:
+ |p|
+
+ p := PopUpMenu
+ labels:#('foo' '-' 'bar' 'baz')
+ selectors:#(doFoo nil doBar doBaz)
+ accelerators:#(CtrlF nil CtrlB CtrlZ).
+ p showAtPointer
+ "
+
+!
+
labels:labels args:args
"create and return a menu with label-items and args.
The actionBlock has to be defined later"
@@ -1400,5 +1451,5 @@
!PopUpMenu class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libwidg/PopUpMenu.st,v 1.72 1998-04-25 13:00:20 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libwidg/PopUpMenu.st,v 1.73 1998-04-25 13:42:56 cg Exp $'
! !