-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathGUI.pde
84 lines (73 loc) · 2.37 KB
/
GUI.pde
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
class GUI {
ArrayList<Button> buttons;
int padding = 5; //pixel padding for input from the right
StringBuilder expression;
int gap;
Button previousButton = null;
GUI() {
buttons = new ArrayList<Button>();
expression = new StringBuilder();
createButtons();
}
void render() {
fill(255);
textAlign(LEFT, CENTER);
text(expression.toString(), width-textWidth(expression.toString()+padding), gap/2);
for (Button b : buttons) {
b.display();
}
}
Button getSelectedButton() {
Button selectedButton = null;
for (Button b : buttons) {
if (b.clicked()) {
selectedButton = b;
selectedButton.flash();
break;
}
}
if (selectedButton != null) {
if (selectedButton.label == "=") {
previousButton = selectedButton;
return selectedButton;
} else if (selectedButton.label == "clear") {
expression.delete(0, expression.length());
} else if (selectedButton.label == "del") {
if (expression.length() != 0) { //don't delete if String is already empty
expression.deleteCharAt(expression.length()-1);
}
} else { //if '=' was clicked and the next press was a digit, bracket or decimal, clear the expression
if (previousButton != null && previousButton.label == "=" && selectedButton.label.matches("\\d|[\\(\\)]|\\.")) {
expression.delete(0, expression.length());
}
expression.append(selectedButton.label);
}
}
previousButton = selectedButton;
return selectedButton;
}
void createButtons() {
//adding zero
Button zero = new Button(width/4, height-100, "0");
buttons.add(zero);
gap = zero.sizeY;
//adding 1-9
int number = 1;
for (int i=1; i<=3; i++) {
for (int j=0; j<3; j++) {
buttons.add(new Button((j*gap), height-((i+1)*gap), String.valueOf(number)));
number++;
}
}
//other arithmetic buttons
String[] operators = {"=", "-", "+", "/", "*"};
for (int i=1; i<=5; i++)
buttons.add(new Button(width-gap, height-gap*i, operators[i-1]));
//clear button for future
buttons.add(new Button(0, gap, "clear"));
buttons.add(new Button(gap, gap, "("));
buttons.add(new Button(gap*2, gap, ")"));
buttons.add(new Button(gap*2, height-gap, "."));
buttons.add(new Button(0, height-gap, "del"));
}
}