SCButton a multi-state button
Inherits from: Object : SCView: SCControlView
*new(parent, bounds)
states_ [
[ label, text color, background color ],
[ label, text color, background color ],
...
]
action_ a function to be called upon button-up
(
w = SCWindow.new;
b = SCButton(w, Rect(20,20,340,30))
.states_([
["there is suffering", Color.black, Color.red],
["the origin of suffering", Color.white, Color.black],
["the cessation of suffering", Color.red, Color.white],
["there is a path to cessation of suffering", Color.blue, Color.clear]
])
.action_({ arg butt;
butt.value.postln;
});
w.front;
)
Failure to set any states at all results in an invisible button.
// does not do action
b.value = 2;
// does action if it results in a change of value
b.valueAction = 3;
// clips to size of states
b.valueAction = -1;
// floats no problem
b.valueAction = 3.3;
In a musical context, a button-down press is more meaningful than a button-up (release) as it's more
intuitive to press a button on the beat. For that you can use SCView's mouseDownAction
(a superclass of SCButton)
(
w = SCWindow.new;
b = SCButton(w, Rect(20,20,80,26))
.states_([["play", Color.black, Color.clear]])
.mouseDownAction_({
a = {EnvGen.ar(Env.adsr)*SinOsc.ar(440)}.play;
})
.action_({ arg butt;
a.free;
});
w.front;
)