controlp5/examples/use/ControlP5callback/ControlP5callback.pde

179 lines
4.3 KiB
Plaintext

/**
* ControlP5 Callback
*
* The following example demonstrates the CallbackListener and CallbackEvent.
* Here additional information about each available slider will be show when
* hovering the controller with the mouse. The info will fade out when leaving
* the controller.
*
* When hovering a controller, the mouse pointer will change as well.
*
* find a list of public methods available for the CallbackEvent Controller
* at the bottom of this sketch.
*
* by Andreas Schlegel, 2012
* www.sojamo.de/libraries/controlp5
*
*/
import controlP5.*;
ControlP5 cp5;
Slider s1, s2;
Info info;
CallbackListener cb;
void setup() {
size(800, 400);
cp5 = new ControlP5(this);
// create a new instance of class Info
// info will be used to display a controller's information and
// will fade in when a CallbackEvent is invoked.
info = new Info();
// add 2 sliders
s1 = cp5.addSlider("hello")
.setRange(0, 100)
.setValue(50)
.setPosition(40, 40)
.setSize(100, 20);
s2 = cp5.addSlider("world")
.setRange(0, 100)
.setValue(10)
.setPosition(40, 70)
.setSize(100, 20);
// the following CallbackListener will listen to any controlP5
// action such as enter, leave, pressed, released, releasedoutside, broadcast
// see static variables starting with ACTION_ inside class controlP5.ControlP5Constants
cb = new CallbackListener() {
public void controlEvent(CallbackEvent theEvent) {
switch(theEvent.getAction()) {
case(ControlP5.ACTION_ENTER):
info.n = 1;
info.label.setText(theEvent.getController().getInfo());
cursor(HAND);
break;
case(ControlP5.ACTION_LEAVE):
case(ControlP5.ACTION_RELEASEDOUTSIDE):
info.n = 0;
cursor(ARROW);
break;
}
}
};
// add the above callback to controlP5
cp5.addCallback(cb);
// add another callback to slider s1, callback event will only be invoked for this
// particular controller.
s1.addCallback(new CallbackListener() {
public void controlEvent(CallbackEvent theEvent) {
if (theEvent.getAction()==ControlP5.ACTION_BROADCAST) {
s2.setValue(s2.getMax() - s1.getValue());
}
}
}
);
}
void draw() {
background(0);
info.update();
}
void controlEvent(ControlEvent theEvent) {
println("Got a ControlEvent for "+theEvent.name()+" = "+theEvent.value());
info.label.setText(theEvent.getController().getInfo());
}
void keyPressed() {
// uncomment the line below to remove callback cb from controlP5
// when a key is pressed.
//controlP5.removeCallback(cb);
}
// controlEvent(CallbackEvent) is called whenever a callback
// has been triggered. controlEvent(CallbackEvent) is detected by
// controlP5 automatically.
void controlEvent(CallbackEvent theEvent) {
if (theEvent.getController().equals(s2)) {
switch(theEvent.getAction()) {
case(ControlP5.ACTION_ENTER):
println("Action:ENTER");
break;
case(ControlP5.ACTION_LEAVE):
println("Action:LEAVE");
break;
case(ControlP5.ACTION_PRESSED):
println("Action:PRESSED");
break;
case(ControlP5.ACTION_RELEASED):
println("Action:RELEASED");
break;
case(ControlP5.ACTION_RELEASEDOUTSIDE):
println("Action:RELEASED OUTSIDE");
break;
case(ControlP5.ACTION_BROADCAST):
println("Action:BROADCAST");
break;
}
}
}
class Info {
float a;
float n = 0;
String txt = "";
Textarea label;
Info() {
label = cp5.addTextarea("Hello\nWorld")
.setSize(200,200)
.setPosition(300,40)
.setColor(color(255))
.setColorBackground(color(100,0))
.setLineHeight(12);
}
void update() {
a += (n-a)*0.1;
label.setColorBackground(color(100,255*a));
}
}
/*
a list of all methods available for the CallbackEvent Controller
use ControlP5.printPublicMethodsFor(CallbackEvent.class);
to print the following list into the console.
You can find further details about class CallbackEvent in the javadoc.
Format:
ClassName : returnType methodName(parameter type)
controlP5.CallbackEvent : Controller getController()
controlP5.CallbackEvent : int getAction()
java.lang.Object : String toString()
java.lang.Object : boolean equals(Object)
*/