mirror of
https://github.com/sojamo/controlp5
synced 2024-11-16 03:07:56 +01:00
149 lines
4.1 KiB
Plaintext
149 lines
4.1 KiB
Plaintext
|
/**
|
||
|
* ControlP5 Controller on top of 3D
|
||
|
* demonstrates how to use controlP5 controllers on top of a
|
||
|
* OpenGL 3D scene.
|
||
|
*
|
||
|
* by Andreas Schlegel, 2011
|
||
|
* www.sojamo.de/libraries/controlP5
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
|
||
|
|
||
|
import controlP5.*;
|
||
|
import processing.opengl.*;
|
||
|
|
||
|
ControlP5 cp5;
|
||
|
ControlGroup messageBox;
|
||
|
int messageBoxResult = -1;
|
||
|
String messageBoxString = "";
|
||
|
float t;
|
||
|
|
||
|
void setup() {
|
||
|
size(640,480,P3D);
|
||
|
cp5 = new ControlP5(this);
|
||
|
noStroke();
|
||
|
createMessageBox();
|
||
|
Button b = cp5.addButton("toggleBox",1,20,20,100,20);
|
||
|
b.setLabel("Toggle Box");
|
||
|
textFont(createFont("",30));
|
||
|
}
|
||
|
|
||
|
|
||
|
void draw() {
|
||
|
hint(ENABLE_DEPTH_TEST);
|
||
|
pushMatrix();
|
||
|
if(messageBox.isVisible()) {
|
||
|
background(128);
|
||
|
} else {
|
||
|
background(0);
|
||
|
fill(255);
|
||
|
text(messageBoxString,20,height-40);
|
||
|
}
|
||
|
|
||
|
translate(width/2,height/2,mouseX);
|
||
|
rotateY(t+=0.1);
|
||
|
fill(255);
|
||
|
rect(-50,-50,100,100);
|
||
|
popMatrix();
|
||
|
hint(DISABLE_DEPTH_TEST);
|
||
|
// in case yo uare using the camera or you have
|
||
|
// changed the default camera setting, reset the camera
|
||
|
// to default by uncommenting the following line.
|
||
|
// camera();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void toggleBox(int theValue) {
|
||
|
if(messageBox.isVisible()) {
|
||
|
messageBox.hide();
|
||
|
} else {
|
||
|
messageBox.show();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void createMessageBox() {
|
||
|
// create a group to store the messageBox elements
|
||
|
messageBox = cp5.addGroup("messageBox",width/2 - 150,100,300);
|
||
|
messageBox.setBackgroundHeight(120);
|
||
|
messageBox.setBackgroundColor(color(0,100));
|
||
|
messageBox.hideBar();
|
||
|
|
||
|
// add a TextLabel to the messageBox.
|
||
|
Textlabel l = cp5.addTextlabel("messageBoxLabel","Some MessageBox text goes here.",20,20);
|
||
|
l.moveTo(messageBox);
|
||
|
|
||
|
// add a textfield-controller with named-id inputbox
|
||
|
// this controller will be linked to function inputbox() below.
|
||
|
Textfield f = cp5.addTextfield("inputbox",20,36,260,20);
|
||
|
f.getCaptionLabel().setVisible(false);
|
||
|
f.moveTo(messageBox);
|
||
|
f.setColorForeground(color(20));
|
||
|
f.setColorBackground(color(20));
|
||
|
f.setColorActive(color(100));
|
||
|
// add the OK button to the messageBox.
|
||
|
// the name of the button corresponds to function buttonOK
|
||
|
// below and will be triggered when pressing the button.
|
||
|
Button b1 = cp5.addButton("buttonOK",0,65,80,80,24);
|
||
|
b1.moveTo(messageBox);
|
||
|
b1.setColorBackground(color(40));
|
||
|
b1.setColorActive(color(20));
|
||
|
// by default setValue would trigger function buttonOK,
|
||
|
// therefore we disable the broadcasting before setting
|
||
|
// the value and enable broadcasting again afterwards.
|
||
|
// same applies to the cancel button below.
|
||
|
b1.setBroadcast(false);
|
||
|
b1.setValue(1);
|
||
|
b1.setBroadcast(true);
|
||
|
b1.setCaptionLabel("OK");
|
||
|
// centering of a label needs to be done manually
|
||
|
// with marginTop and marginLeft
|
||
|
//b1.captionLabel().style().marginTop = -2;
|
||
|
//b1.captionLabel().style().marginLeft = 26;
|
||
|
|
||
|
// add the Cancel button to the messageBox.
|
||
|
// the name of the button corresponds to function buttonCancel
|
||
|
// below and will be triggered when pressing the button.
|
||
|
Button b2 = cp5.addButton("buttonCancel",0,155,80,80,24);
|
||
|
b2.moveTo(messageBox);
|
||
|
b2.setBroadcast(false);
|
||
|
b2.setValue(0);
|
||
|
b2.setBroadcast(true);
|
||
|
b2.setCaptionLabel("Cancel");
|
||
|
b2.setColorBackground(color(40));
|
||
|
b2.setColorActive(color(20));
|
||
|
//b2.captionLabel().toUpperCase(false);
|
||
|
// centering of a label needs to be done manually
|
||
|
// with marginTop and marginLeft
|
||
|
//b2.captionLabel().style().marginTop = -2;
|
||
|
//b2.captionLabel().style().marginLeft = 16;
|
||
|
}
|
||
|
|
||
|
// function buttonOK will be triggered when pressing
|
||
|
// the OK button of the messageBox.
|
||
|
void buttonOK(int theValue) {
|
||
|
println("a button event from button OK.");
|
||
|
messageBoxString = ((Textfield)cp5.getController("inputbox")).getText();
|
||
|
messageBoxResult = theValue;
|
||
|
messageBox.hide();
|
||
|
}
|
||
|
|
||
|
|
||
|
// function buttonCancel will be triggered when pressing
|
||
|
// the Cancel button of the messageBox.
|
||
|
void buttonCancel(int theValue) {
|
||
|
println("a button event from button Cancel.");
|
||
|
messageBoxResult = theValue;
|
||
|
messageBox.hide();
|
||
|
}
|
||
|
|
||
|
// inputbox is called whenever RETURN has been pressed
|
||
|
// in textfield-controller inputbox
|
||
|
void inputbox(String theString) {
|
||
|
println("got something from the inputbox : "+theString);
|
||
|
messageBoxString = theString;
|
||
|
messageBox.hide();
|
||
|
}
|