When clicked, this view opens a menu containing several text items, then closes the menu and displays one of the items after it is selected.
The list of items displayed in a menu when the view is clicked.
An Array of Strings or Symbols. |
Removes all items.
The currently selected item.
A String.
The index of the currently selected item.
An integer, or nil meaning no selected item. |
The color used to display text.
A Color. |
Setting this variable colors the area of the view under the text with the given color.
A Color. |
Determines whether the action is triggered when selecting already selected item. Defaults to false.
A Boolean. |
The action object evaluated whenever the user changes the selected item from the menu. See -allowsReselection for customization.
The -value.
True if the current drag data is a number.
Sets -valueAction to the current drag data.
(
w = Window.new("The Eightfold Path").front;
m = PopUpMenu(w, Rect(10, 10, 180, 20));
m.items = [
"right view", "right thinking", "right mindfulness", "right speech",
"right action", "right diligence", "right concentration", "right livelihood"
];
m.background_(Color.green(0.7)); // only changes the look of displayed item
m.stringColor_(Color.white); // only changes the look of displayed item
m.font_(Font("Courier", 13)); // only changes the look of displayed item
m.action = { arg menu;
[menu.value, menu.item].postln;
};
)
m.value; // returns the index of the current item;
m.item; // returns the String or Symbol of the current item
m.value_(2); // changes the displayed item, but does not evaluate the action
m.valueAction_(3); // evaluates the action.
Play different functions:
xxxxxxxxxx
(
s.waitForBoot({
var w, menu, snd, funcs, b;
w = Window.new.front;
menu = PopUpMenu(w, Rect(10, 10, 90, 20))
.items_(["Sine", "Saw" , "Noise" , "Pulse"]);
funcs = [
{ SinOsc.ar(440, 0, 0.3) },
{ Saw.ar(440, 0.3) },
{ WhiteNoise.ar(0.3) },
{ Pulse.ar(440, 0.2, 0.3) }
];
b = Button(w, Rect(110, 10, 180, 20))
.states_([["play", Color.black, Color.green]])
.mouseDownAction_({
snd = funcs.at(menu.value).play;
})
.action_({ arg butt, mod;
snd.release;
});
w.front;
p = CmdPeriod.add({ b.value_(0) }); // set button to 0 on hitting Cmd-period
w.onClose_{ snd.release; CmdPeriod.removeAll }; // clean up when window is closed
})
)