Browse Source

Basic functions work

Added buttons work somewhat
-- 9 -> sqr -> anyNumber -> =
Nick Satinover 5 years ago
parent
commit
a9627c1147

+ 20
- 4
src/main/java/rocks/zipcode/calcskin/CalcEngine.java View File

6
     }
6
     }
7
 
7
 
8
     public double add(double v, double v1) {
8
     public double add(double v, double v1) {
9
-        return Double.NaN;
9
+        return v + v1;
10
     }
10
     }
11
 
11
 
12
     public double subtract(double v, double v1) {
12
     public double subtract(double v, double v1) {
13
-        return Double.NaN;
13
+        return v - v1;
14
     }
14
     }
15
 
15
 
16
     public double multiply(double v, double v1) {
16
     public double multiply(double v, double v1) {
17
-        return Double.NaN;
17
+        return v * v1;
18
     }
18
     }
19
 
19
 
20
     public double divide(double v, double v1) {
20
     public double divide(double v, double v1) {
21
-        return Double.NaN;
21
+        return v / v1;
22
+    }
23
+
24
+    public double square(double curNum) {
25
+        return Math.pow(curNum, 2.0D);
26
+    }
27
+
28
+    public double squareRoot(double curNum) {
29
+        return Math.sqrt(curNum);
30
+    }
31
+
32
+    public double exponent(double curNum, double userExponent) {
33
+        return Math.pow(curNum, userExponent);
34
+    }
35
+
36
+    public double invert(double curNum) {
37
+        return 1.0D / curNum;
22
     }
38
     }
23
 }
39
 }

+ 32
- 10
src/main/java/rocks/zipcode/calcskin/CalcSkin.java View File

24
         launch(args);
24
         launch(args);
25
     }
25
     }
26
     private static final String[][] template = {
26
     private static final String[][] template = {
27
-            { "7", "8", "9", "/" },
28
-            { "4", "5", "6", "*" },
29
-            { "1", "2", "3", "-" },
30
-            { "0", "c", "=", "+" }
27
+            { "7", "8", "9", "/", "sqr" },
28
+            { "4", "5", "6", "*", "sqRt" },
29
+            { "1", "2", "3", "-", "exp" },
30
+            { "0", "c", "=", "+", "inv" }
31
     };
31
     };
32
 
32
 
33
     private final Map<String, Button> accelerators = new HashMap<>();
33
     private final Map<String, Button> accelerators = new HashMap<>();
36
     private DoubleProperty currentValue = new SimpleDoubleProperty();
36
     private DoubleProperty currentValue = new SimpleDoubleProperty();
37
     private CalcEngine calcEngine = new CalcEngine();
37
     private CalcEngine calcEngine = new CalcEngine();
38
 
38
 
39
-    private enum Op { NOOP, ADD, SUBTRACT, MULTIPLY, DIVIDE }
39
+    private enum Op { NOOP, ADD, SUBTRACT, MULTIPLY, DIVIDE, SQUARE, SQROOT, EXPON, INVERS }
40
 
40
 
41
     private Op curOp   = Op.NOOP;
41
     private Op curOp   = Op.NOOP;
42
     private Op stackOp = Op.NOOP;
42
     private Op stackOp = Op.NOOP;
114
                 makeClearButton(button);
114
                 makeClearButton(button);
115
             } else if ("=".equals(s)) {
115
             } else if ("=".equals(s)) {
116
                 makeEqualsButton(button);
116
                 makeEqualsButton(button);
117
+            } else if ("sqr".equals(s)){
118
+                makeEqualsButton(button);
117
             }
119
             }
118
         }
120
         }
119
 
121
 
123
     private ObjectProperty<Op> determineOperand(String s) {
125
     private ObjectProperty<Op> determineOperand(String s) {
124
         final ObjectProperty<Op> triggerOp = new SimpleObjectProperty<>(Op.NOOP);
126
         final ObjectProperty<Op> triggerOp = new SimpleObjectProperty<>(Op.NOOP);
125
         switch (s) {
127
         switch (s) {
126
-            case "+": triggerOp.set(Op.ADD);      break;
127
-            case "-": triggerOp.set(Op.SUBTRACT); break;
128
-            case "*": triggerOp.set(Op.MULTIPLY); break;
129
-            case "/": triggerOp.set(Op.DIVIDE);   break;
128
+            case "+":    triggerOp.set(Op.ADD);      break;
129
+            case "-":    triggerOp.set(Op.SUBTRACT); break;
130
+            case "*":    triggerOp.set(Op.MULTIPLY); break;
131
+            case "/":    triggerOp.set(Op.DIVIDE);   break;
132
+            case "sqr":  triggerOp.set(Op.SQUARE);   break;
133
+            case "sqRt": triggerOp.set(Op.SQROOT);   break;
134
+            case "exp" : triggerOp.set(Op.EXPON);    break;
135
+            case "inv" : triggerOp.set(Op.INVERS);   break;
130
         }
136
         }
131
         return triggerOp;
137
         return triggerOp;
132
     }
138
     }
174
             }
180
             }
175
         });
181
         });
176
     }
182
     }
177
-
183
+/*
184
+    private void makeSquareButton(Button button) {
185
+        button.setStyle("-fx-base: mistyrose;");
186
+        button.setOnAction(new EventHandler<ActionEvent>() {
187
+            @Override
188
+            public void handle(ActionEvent actionEvent) {
189
+                currentValue.set(calcEngine.square(currentValue.get()));
190
+            }
191
+        });
192
+    }
193
+*/
178
     private void makeEqualsButton(Button button) {
194
     private void makeEqualsButton(Button button) {
179
         button.setStyle("-fx-base: ghostwhite;");
195
         button.setStyle("-fx-base: ghostwhite;");
180
         button.setOnAction(new EventHandler<ActionEvent>() {
196
         button.setOnAction(new EventHandler<ActionEvent>() {
185
                     case SUBTRACT: currentValue.set(calcEngine.subtract(previousValue.get(), currentValue.get())); break;
201
                     case SUBTRACT: currentValue.set(calcEngine.subtract(previousValue.get(), currentValue.get())); break;
186
                     case MULTIPLY: currentValue.set(calcEngine.multiply(previousValue.get(), currentValue.get())); break;
202
                     case MULTIPLY: currentValue.set(calcEngine.multiply(previousValue.get(), currentValue.get())); break;
187
                     case DIVIDE:   currentValue.set(calcEngine.divide(previousValue.get(), currentValue.get())); break;
203
                     case DIVIDE:   currentValue.set(calcEngine.divide(previousValue.get(), currentValue.get())); break;
204
+                    case SQUARE:   currentValue.set(calcEngine.square(previousValue.get())); break;
205
+                    case SQROOT:   currentValue.set(calcEngine.squareRoot(previousValue.get())); break;
206
+                    case EXPON:    currentValue.set(calcEngine.exponent(previousValue.get(), currentValue.get())); break;
207
+                    case INVERS:   currentValue.set(calcEngine.invert(previousValue.get())); break;
188
                 }
208
                 }
189
             }
209
             }
190
         });
210
         });
191
     }
211
     }
212
+
213
+
192
 }
214
 }
193
 
215
 
194
 
216