Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 20 additions & 79 deletions app/src/main/java/kasio/view/CalculatorView.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
Expand All @@ -23,7 +21,6 @@
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.text.AbstractDocument;
Expand All @@ -39,11 +36,13 @@
import kasio.view.components.buttons.DelButton;
import kasio.view.components.buttons.EqualsButton;
import kasio.view.components.buttons.WrapButton;
import kasio.view.components.panels.BasicKeypadPanel;
import kasio.view.components.panels.ScientificKeypadPanel;

public class CalculatorView {
private JFrame frame;
private JPanel scientificPanel;
private JPanel basicPanel;
private ScientificKeypadPanel scientificPanel;
private BasicKeypadPanel basicPanel;
private MenuItem trayExitItem;

final int contentWidth = 400;
Expand All @@ -56,29 +55,13 @@ public class CalculatorView {
private final JTextField textField;
private final List<AppendButton> appendButtons = new ArrayList<>();
private final List<WrapButton> wrapButtons = new ArrayList<>();
private final AllClearButton allClearButton = new AllClearButton(Fonts.KEYPAD_PRIMARY);
private final DelButton delButton = new DelButton(Fonts.KEYPAD_PRIMARY);
private final EqualsButton equalsButton = new EqualsButton(Fonts.KEYPAD_PRIMARY);
private final AnsButton ansButton = new AnsButton(Fonts.KEYPAD_PRIMARY);
private final AllClearButton allClearButton;
private final DelButton delButton;
private final EqualsButton equalsButton;
private final AnsButton ansButton;

private boolean allowProgrammaticEdit = false;

private void addAppendBtn(JPanel panel, String text, Font font) {
addAppendBtn(panel, text, text, font);
}

private void addAppendBtn(JPanel panel, String displayText, String evalText, Font font) {
AppendButton btn = new AppendButton(displayText, evalText, font);
appendButtons.add(btn);
panel.add(btn);
}

private void addWrapBtn(JPanel panel, String text, String wrapPrefix, Font font) {
WrapButton btn = new WrapButton(text, wrapPrefix, font);
wrapButtons.add(btn);
panel.add(btn);
}

public CalculatorView() {
frame = new JFrame("Calculator");
frame.setType(java.awt.Window.Type.UTILITY);
Expand Down Expand Up @@ -202,63 +185,21 @@ public void remove(FilterBypass fb, int offset, int length)
textField.setCaret(new RetroCaret());
textField.requestFocusInWindow();

scientificPanel = new JPanel();
scientificPanel = new ScientificKeypadPanel();
scientificPanel.setBounds(0, textFieldHeight, contentWidth, scientificPanelHeight);
scientificPanel.setBackground(Colors.SECONDARY);
scientificPanel.setLayout(new GridLayout(3, 6, 10, 10));
scientificPanel.setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, Colors.SECONDARY));

addAppendBtn(scientificPanel, "SIN", "SIN(", Fonts.KEYPAD_SECONDARY);
addAppendBtn(scientificPanel, "COS", "COS(", Fonts.KEYPAD_SECONDARY);
addAppendBtn(scientificPanel, "TAN", "TAN(", Fonts.KEYPAD_SECONDARY);
addAppendBtn(scientificPanel, "ASIN", "ASIN(", Fonts.KEYPAD_SECONDARY);
addAppendBtn(scientificPanel, "ACOS", "ACOS(", Fonts.KEYPAD_SECONDARY);
addAppendBtn(scientificPanel, "ATAN", "ATAN(", Fonts.KEYPAD_SECONDARY);

addAppendBtn(scientificPanel, "<html>X<sup>2</sup></html>", "∧2", Fonts.KEYPAD_SECONDARY);
addAppendBtn(scientificPanel, "<html>X<sup>Y</sup></html>", "∧", Fonts.KEYPAD_SECONDARY);
addAppendBtn(scientificPanel, "√", Fonts.KEYPAD_SECONDARY);
addAppendBtn(scientificPanel, "!", Fonts.KEYPAD_SECONDARY);
addAppendBtn(scientificPanel, "LOG", "LOG(", Fonts.KEYPAD_SECONDARY);
addAppendBtn(scientificPanel, "LN", "LN(", Fonts.KEYPAD_SECONDARY);

addWrapBtn(scientificPanel, "1/x", "1/", Fonts.KEYPAD_SECONDARY);
addWrapBtn(scientificPanel, "(x)", "", Fonts.KEYPAD_SECONDARY);
addAppendBtn(scientificPanel, "e", Fonts.KEYPAD_SECONDARY);
addWrapBtn(scientificPanel, "±", "-", Fonts.KEYPAD_SECONDARY);
addAppendBtn(scientificPanel, "(", Fonts.KEYPAD_SECONDARY);
addAppendBtn(scientificPanel, ")", Fonts.KEYPAD_SECONDARY);

basicPanel = new JPanel();
basicPanel = new BasicKeypadPanel();
basicPanel.setBounds(
0, textFieldHeight + scientificPanelHeight, contentWidth, basicPanelHeight);
basicPanel.setBackground(Colors.SECONDARY);
basicPanel.setLayout(new GridLayout(4, 5, 10, 10));
basicPanel.setBorder(BorderFactory.createMatteBorder(0, 10, 10, 10, Colors.SECONDARY));

addAppendBtn(basicPanel, "7", Fonts.KEYPAD_PRIMARY);
addAppendBtn(basicPanel, "8", Fonts.KEYPAD_PRIMARY);
addAppendBtn(basicPanel, "9", Fonts.KEYPAD_PRIMARY);
basicPanel.add(delButton);
basicPanel.add(allClearButton);

addAppendBtn(basicPanel, "4", Fonts.KEYPAD_PRIMARY);
addAppendBtn(basicPanel, "5", Fonts.KEYPAD_PRIMARY);
addAppendBtn(basicPanel, "6", Fonts.KEYPAD_PRIMARY);
addAppendBtn(basicPanel, "×", Fonts.KEYPAD_PRIMARY);
addAppendBtn(basicPanel, "÷", Fonts.KEYPAD_PRIMARY);

addAppendBtn(basicPanel, "1", Fonts.KEYPAD_PRIMARY);
addAppendBtn(basicPanel, "2", Fonts.KEYPAD_PRIMARY);
addAppendBtn(basicPanel, "3", Fonts.KEYPAD_PRIMARY);
addAppendBtn(basicPanel, "+", Fonts.KEYPAD_PRIMARY);
addAppendBtn(basicPanel, "-", Fonts.KEYPAD_PRIMARY);

addAppendBtn(basicPanel, "0", Fonts.KEYPAD_PRIMARY);
addAppendBtn(basicPanel, ".", Fonts.KEYPAD_PRIMARY);
addAppendBtn(basicPanel, "π", Fonts.KEYPAD_PRIMARY);
basicPanel.add(ansButton);
basicPanel.add(equalsButton);

appendButtons.addAll(scientificPanel.getAppendButtons());
appendButtons.addAll(basicPanel.getAppendButtons());
wrapButtons.addAll(scientificPanel.getWrapButtons());
wrapButtons.addAll(basicPanel.getWrapButtons());

allClearButton = basicPanel.getAllClearButton();
delButton = basicPanel.getDelButton();
equalsButton = basicPanel.getEqualsButton();
ansButton = basicPanel.getAnsButton();

frame.setJMenuBar(menuBar);
frame.add(textField);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package kasio.view.components.panels;

import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import kasio.view.components.Colors;
import kasio.view.components.Fonts;
import kasio.view.components.buttons.AllClearButton;
import kasio.view.components.buttons.AnsButton;
import kasio.view.components.buttons.AppendButton;
import kasio.view.components.buttons.DelButton;
import kasio.view.components.buttons.EqualsButton;
import kasio.view.components.buttons.WrapButton;

public class BasicKeypadPanel extends JPanel {

private final List<AppendButton> appendButtons = new ArrayList<>();
private final List<WrapButton> wrapButtons = new ArrayList<>();
private final AllClearButton allClearButton = new AllClearButton(Fonts.KEYPAD_PRIMARY);
private final DelButton delButton = new DelButton(Fonts.KEYPAD_PRIMARY);
private final EqualsButton equalsButton = new EqualsButton(Fonts.KEYPAD_PRIMARY);
private final AnsButton ansButton = new AnsButton(Fonts.KEYPAD_PRIMARY);

public BasicKeypadPanel() {
setBackground(Colors.SECONDARY);
setLayout(new GridLayout(4, 5, 10, 10));
setBorder(BorderFactory.createMatteBorder(0, 10, 10, 10, Colors.SECONDARY));

addAppendBtn("7");
addAppendBtn("8");
addAppendBtn("9");
add(delButton);
add(allClearButton);

addAppendBtn("4");
addAppendBtn("5");
addAppendBtn("6");
addAppendBtn("×");
addAppendBtn("÷");

addAppendBtn("1");
addAppendBtn("2");
addAppendBtn("3");
addAppendBtn("+");
addAppendBtn("-");

addAppendBtn("0");
addAppendBtn(".");
addAppendBtn("π");
add(ansButton);
add(equalsButton);
}

private void addAppendBtn(String text) {
AppendButton button = new AppendButton(text, Fonts.KEYPAD_PRIMARY);
appendButtons.add(button);
add(button);
}

public List<AppendButton> getAppendButtons() {
return List.copyOf(appendButtons);
}

public List<WrapButton> getWrapButtons() {
return List.copyOf(wrapButtons);
}

public AllClearButton getAllClearButton() {
return allClearButton;
}

public DelButton getDelButton() {
return delButton;
}

public EqualsButton getEqualsButton() {
return equalsButton;
}

public AnsButton getAnsButton() {
return ansButton;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package kasio.view.components.panels;

import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import kasio.view.components.Colors;
import kasio.view.components.Fonts;
import kasio.view.components.buttons.AppendButton;
import kasio.view.components.buttons.WrapButton;

public class ScientificKeypadPanel extends JPanel {

private final List<AppendButton> appendButtons = new ArrayList<>();
private final List<WrapButton> wrapButtons = new ArrayList<>();

public ScientificKeypadPanel() {
setBackground(Colors.SECONDARY);
setLayout(new GridLayout(3, 6, 10, 10));
setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, Colors.SECONDARY));

addAppendBtn("SIN", "SIN(");
addAppendBtn("COS", "COS(");
addAppendBtn("TAN", "TAN(");
addAppendBtn("ASIN", "ASIN(");
addAppendBtn("ACOS", "ACOS(");
addAppendBtn("ATAN", "ATAN(");

addAppendBtn("<html>X<sup>2</sup></html>", "∧2");
addAppendBtn("<html>X<sup>Y</sup></html>", "∧");
addAppendBtn("√");
addAppendBtn("!");
addAppendBtn("LOG", "LOG(");
addAppendBtn("LN", "LN(");

addWrapBtn("1/x", "1/");
addWrapBtn("(x)", "");
addAppendBtn("e");
addWrapBtn("±", "-");
addAppendBtn("(");
addAppendBtn(")");
}

private void addAppendBtn(String text) {
addAppendBtn(text, text);
}

private void addAppendBtn(String displayText, String evalText) {
AppendButton button = new AppendButton(displayText, evalText, Fonts.KEYPAD_SECONDARY);
appendButtons.add(button);
add(button);
}

private void addWrapBtn(String text, String wrapPrefix) {
WrapButton button = new WrapButton(text, wrapPrefix, Fonts.KEYPAD_SECONDARY);
wrapButtons.add(button);
add(button);
}

public List<AppendButton> getAppendButtons() {
return List.copyOf(appendButtons);
}

public List<WrapButton> getWrapButtons() {
return List.copyOf(wrapButtons);
}
}
Loading