Fix redundant clear display after unary operation Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
diff --git a/org.eclipse.example.calc/src/org/eclipse/example/calc/internal/ui/Calculator.java b/org.eclipse.example.calc/src/org/eclipse/example/calc/internal/ui/Calculator.java index db032da..ff2c20f 100644 --- a/org.eclipse.example.calc/src/org/eclipse/example/calc/internal/ui/Calculator.java +++ b/org.eclipse.example.calc/src/org/eclipse/example/calc/internal/ui/Calculator.java
@@ -37,14 +37,21 @@ private static final long serialVersionUID = 1L; private String cmd; + private boolean clearDisplay; + private float value; private JTextField display; + private JPanel buttonsPanel; + private JPanel numberButtonsPanel; + private JPanel cmdButtonsPanel; + private JButton numberButtons[]; + private JButton cmdButtons[]; public static void main(String args[]) { @@ -162,32 +169,36 @@ // get current value of display curValue = Float.parseFloat(display.getText()); - if (cmd == null || cmd.equals("")) { - // if no command was saved previously, save this one and clear + Operation currentOp = Operations.INSTANCE.getOperation(cmdName); + if ((currentOp instanceof BinaryOperation) && (cmd == null)) { + // if last clicked operation was binary and there is no saved + // operation, store it cmd = cmdName; clearDisplay = true; } else { - // perform the saved command - Operation op = Operations.INSTANCE.getOperation(cmd); - assert (op != null); - if (op instanceof BinaryOperation) { - BinaryOperation bop = (BinaryOperation) op; + // if saved command is binary perform it + Operation savedOp = Operations.INSTANCE.getOperation(cmd); + if (savedOp instanceof BinaryOperation) { + BinaryOperation bop = (BinaryOperation) savedOp; newValue = bop.perform(value, curValue); - } else if (op instanceof UnaryOperation) { - UnaryOperation uop = (UnaryOperation) op; + } // if current operation is unary perform it + else if (currentOp instanceof UnaryOperation) { + UnaryOperation uop = (UnaryOperation) currentOp; newValue = uop.perform(curValue); } - // display the result and order to clear + // display the result and prepare clear on next button display.setText("" + newValue); clearDisplay = true; - - if (cmdName.equals("=")) { - // do not save = command + if (currentOp instanceof Equals) { + // do not save "=" command cmd = null; - } else { - // save other commands + } else if (currentOp instanceof BinaryOperation) { + // save binary commands as they are executed on next operation cmd = cmdName; + } else { + // clear saved command + cmd = null; } }