You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

301 lines
11 KiB
Java

8 years ago
import processing.core.*;
import static processing.core.PApplet.*;
8 years ago
import controlP5.*;
class Menu {
/*
Right-side menu
*/
8 years ago
final int width = 200; // Width of toolbar on left side of display
EuglenaApplet parent;
8 years ago
private Button resetButton, calibrateButton, commitButton, lineButton, freehandButton, eraserButton, goButton;
private Textfield redField, greenField, blueField, backgroundField, penwidthField,
lagField, totaltimeField, speedField;
private DropdownList shapesList, animateList, presetsList, gamesList;
private ControlP5 cp5;
private Group g1, g2, g3;
Menu(EuglenaApplet applet){
parent = applet;
8 years ago
cp5 = new ControlP5(applet).setPosition(applet.width - width, 0);
g1 = cp5.addGroup("Textfields");
g2 = cp5.addGroup("Dropdown2");
g3 = cp5.addGroup("Dropdown1");
resetButton = cp5.addButton("Reset")
.setPosition(20, 200)
.setSize(70, 35)
.moveTo(g1);
calibrateButton = cp5.addButton("Calibrate")
.setPosition(110, 200)
.setSize(70, 35)
.moveTo(g1);
redField = cp5.addTextfield("Red (0-255)")
.setPosition(20, 275)
.setSize(70, 35)
.setAutoClear(false)
.moveTo(g1);
greenField = cp5.addTextfield("Green (0-255)")
.setPosition(20, 325)
.setSize(70, 35)
.setAutoClear(false)
.moveTo(g1);
blueField = cp5.addTextfield("Blue (0-255)")
.setPosition(20, 375)
.setSize(70, 35)
.setAutoClear(false)
.moveTo(g1);
backgroundField = cp5.addTextfield("Background (0-255)")
.setPosition(20, 425)
.setSize(70, 35)
.setAutoClear(false)
.moveTo(g1);
penwidthField = cp5.addTextfield("Pen Width")
.setPosition(20, 475)
.setSize(70, 35)
.setAutoClear(false)
.moveTo(g1);
speedField = cp5.addTextfield("Speed")
.setPosition(110, 275)
.setSize(70, 35)
.setAutoClear(false)
.moveTo(g1);
lagField = cp5.addTextfield("Timelapse lag")
.setPosition(110, 325)
.setSize(70, 35)
.setAutoClear(false)
.moveTo(g1);
totaltimeField = cp5.addTextfield("Total time")
.setPosition(110, 375)
.setSize(70, 35)
.setAutoClear(false)
.moveTo(g1);
commitButton = cp5.addButton("Commit")
.setPosition(110, 450)
.setSize(70, 35)
.moveTo(g1);
lineButton = cp5.addButton("Line")
.setPosition(20, 550)
.setSize(50, 35)
.moveTo(g1);
freehandButton = cp5.addButton("Freehand")
.setPosition(75, 550)
.setSize(50, 35)
.moveTo(g1);
eraserButton = cp5.addButton("Eraser")
.setPosition(130, 550)
.setSize(50, 35)
.moveTo(g1);
shapesList = cp5.addDropdownList("Shapes")
.setPosition(20, 650)
.setSize(70, 100)
.setBarHeight(35)
.addItem("Ellipse", "Ellipse")
.addItem("Rectangle", "Rectangle")
.addItem("Triangle", "Triangle")
.addItem("None", "Default")
.close()
.moveTo(g3);
animateList = cp5.addDropdownList("Animate")
.setPosition(110, 650)
.setSize(70, 100)
.setBarHeight(35)
.addItem("Shrink", "Shrink")
.addItem("Expand", "Expand")
.addItem("Translate", "Translate")
.addItem("Rotate", "Rotate")
.addItem("None", "Default")
.close()
.moveTo(g3);
presetsList = cp5.addDropdownList("Presets")
.setPosition(20, 700)
.setSize(70, 100)
.setBarHeight(35)
.addItem("Clear screen", "Clear screen")
.addItem("Flow up", "Flow up")
.addItem("Flow down", "Flow down")
.addItem("Flow right", "Flow right")
.addItem("Flow left", "Flow left")
.addItem("Contain", "Contain")
.addItem("Split", "Split")
.addItem("Merge", "Merge")
.addItem("Slow move", "Slow move")
.addItem("Fast move", "Fast move")
.addItem("Slow compress", "Slow compress")
.addItem("Fast compress", "Fast compress")
.addItem("??","??")
.close()
.moveTo(g2);
// goButton = cp5.addButton("Go")
// .setPosition(20, 750)
// .setSize(70, 20)
// .moveTo(g1);
gamesList = cp5.addDropdownList("Games")
.setPosition(110, 700)
.setSize(70, 100)
.setBarHeight(35)
.addItem("Level 1", "Level 1")
.addItem("Level 2", "Level 2")
.addItem("Level 3", "Level 3")
.close()
.moveTo(g2);
}
void draw(EuglenaApplet a, LEDControl led) {
drawBackground(a);
drawArrows(a, led);
}
void drawArrows(EuglenaApplet a, LEDControl leds) {
a.strokeWeight(8);
int onColor = a.color(255, 255, 51);
int offColor = a.color(255, 255, 255);
int xOffset = a.width - width;
a.stroke(leds.isActive(LEDControl.Direction.RIGHT) ? onColor : offColor);
a.drawArrow(xOffset + 120, 80, 30, 0);
a.stroke(leds.isActive(LEDControl.Direction.DOWN) ? onColor : offColor);
a.drawArrow(xOffset + 100, 100, 30, 90);
a.stroke(leds.isActive(LEDControl.Direction.LEFT) ? onColor : offColor);
a.drawArrow(xOffset + 80, 80, 30, 180);
a.stroke(leds.isActive(LEDControl.Direction.UP) ? onColor : offColor);
a.drawArrow(xOffset + 100, 60, 30, 270);
}
void drawBackground(EuglenaApplet a) {
a.rectMode(EuglenaApplet.CORNER);
a.noStroke();
a.fill(0);
a.rect(a.width - width, 0, width, a.height);
}
8 years ago
void controlEvent(ControlEvent theEvent) {
/*
Handle a controlEvent -- controlP5 generates these events anytime
a menu item is clicked.
*/
//println(theEvent);
8 years ago
if (theEvent.isFrom(shapesList)) {
parent.dragGetter = null;
8 years ago
switch((int) shapesList.getValue()) {
case 0:
parent.clickGetter = new Ellipse(parent.penColor, parent.penWidth)
.makeClickGetter(parent.projectorApplet);
8 years ago
break;
case 1:
parent.clickGetter = new Rectangle(parent.penColor, parent.penWidth)
.makeClickGetter(parent.projectorApplet);
8 years ago
break;
case 2:
parent.clickGetter = new Triangle(parent.penColor, parent.penWidth)
.makeClickGetter(parent.projectorApplet);
8 years ago
break;
}
} else if (theEvent.isFrom(animateList)){
parent.dragGetter = null;
8 years ago
switch((int) animateList.getValue()) {
case 0:
8 years ago
parent.clickGetter = new Shrink(parent.operationSpeed)
.makeClickGetter(parent.projectorApplet);
8 years ago
break;
case 1:
8 years ago
parent.clickGetter = new Expand(parent.operationSpeed)
.makeClickGetter(parent.projectorApplet);
8 years ago
break;
case 2:
8 years ago
parent.clickGetter = new Translate(parent.operationSpeed)
.makeClickGetter(parent.projectorApplet);
8 years ago
break;
case 3:
8 years ago
parent.clickGetter = new Rotate(parent.operationSpeed)
.makeClickGetter(parent.projectorApplet);
8 years ago
break;
}
} else if (theEvent.isFrom(presetsList)){
// preset = (int) presetsList.getValue();
8 years ago
} else {
switch (theEvent.getLabel()) {
case "Commit":
try {
int rVal = Integer.parseInt(redField.getText());
int gVal = Integer.parseInt(greenField.getText());
int bVal = Integer.parseInt(blueField.getText());
parent.penColor = parent.color(rVal, gVal, bVal);
} catch (NumberFormatException e) {
println("Ignored non-numeric color.");
}
try {
parent.penWidth = Integer.parseInt(penwidthField.getText());
} catch (NumberFormatException e) {
println("Ignored bad pen width");
}
try {
parent.projectorApplet.setBgColor(Integer.parseInt(backgroundField.getText()));
} catch (NumberFormatException e) {
println("Ignored bad background color.");
}
// parent.lagTime = Integer.parseInt(lagField.getText());
// parent.totalTime = Integer.parseInt(totaltimeField.getText());
8 years ago
try {
parent.operationSpeed = Integer.parseInt(speedField.getText());
} catch (NumberFormatException e) {
println("Ignored bad background color.");
}
break;
8 years ago
case "Reset":
parent.reset();
break;
8 years ago
case "Calibrate":
parent.projectorApplet.calibrator.toggle();
break;
8 years ago
case "Freehand":
parent.clickGetter = null;
parent.dragGetter = new Freehand(parent.penColor, parent.penWidth)
.makeDragGetter(parent.projectorApplet);
break;
case "Eraser":
parent.clickGetter = null;
parent.dragGetter = new Freehand(parent.projectorApplet.bgColor, parent.penWidth)
.makeDragGetter(parent.projectorApplet);
break;
8 years ago
case "Line":
parent.dragGetter = null;
parent.clickGetter = new Line(parent.penColor, parent.penWidth)
.makeClickGetter(parent.projectorApplet);
break;
}
8 years ago
}
}
8 years ago
}