From 10c7ddfaff39d75fae83afe012e0073eb15a3536 Mon Sep 17 00:00:00 2001 From: angel Date: Fri, 9 Jan 2026 09:04:18 -0600 Subject: [PATCH] Update src/main/java/dev/sillyangel/calc/utils.java --- .../dev/sillyangel/calc/{utils => utils.java} | 94 ++++++++++++++++++- 1 file changed, 90 insertions(+), 4 deletions(-) rename src/main/java/dev/sillyangel/calc/{utils => utils.java} (52%) diff --git a/src/main/java/dev/sillyangel/calc/utils b/src/main/java/dev/sillyangel/calc/utils.java similarity index 52% rename from src/main/java/dev/sillyangel/calc/utils rename to src/main/java/dev/sillyangel/calc/utils.java index 94844a3..7e3dcf1 100644 --- a/src/main/java/dev/sillyangel/calc/utils +++ b/src/main/java/dev/sillyangel/calc/utils.java @@ -1,6 +1,11 @@ -utils.java package dev.sillyangel.calc; +import javax.swing.JOptionPane; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.StringSelection; +import java.awt.Toolkit; + public class utils { // private double result; // private boolean resultVisible; @@ -97,8 +102,89 @@ public class utils { ci.operand1 = ""; ci.operand2 = ""; - resultVisible = true; - display.setText(""+result); - saveToUndoStack(""+result); + ci.resultVisible = true; + ci.display.setText(""+ci.result); + saveToUndoStack(""+ci.result); } + + public void saveToUndoStack(String value) { + // Remove any states after current index (if user undid and then made a new action) + if (ci.undoIndex < ci.undoStack.size() - 1) { + ci.undoStack.subList(ci.undoIndex + 1, ci.undoStack.size()).clear(); + } + ci.undoStack.add(value); + ci.undoIndex = ci.undoStack.size() - 1; + } + public void undoAction() { + if (ci.undoIndex > 0) { + ci.undoIndex--; + ci.display.setText(ci.undoStack.get(ci.undoIndex)); + } else { + System.out.println("Nothing to undo"); + } + } + + public void redoAction() { + if (ci.undoIndex < ci.undoStack.size() - 1) { + ci.undoIndex++; + ci.display.setText(ci.undoStack.get(ci.undoIndex)); + } else { + System.out.println("Nothing to redo"); + } + } + + // Clipboard operations + public void cutAction() { + copyAction(); + ci.display.setText(""); + } + + public void copyAction() { + String text = ci.display.getText(); + if (text != null && !text.isEmpty()) { + StringSelection selection = new StringSelection(text); + Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + clipboard.setContents(selection, null); + System.out.println("Copied: " + text); + } + } + + public void pasteAction() { + try { + Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + String text = (String) clipboard.getData(DataFlavor.stringFlavor); + if (text != null && !text.isEmpty()) { + // Validate that pasted content is a valid number + try { + Double.parseDouble(text); + ci.display.setText(text); + saveToUndoStack(text); + } catch (NumberFormatException ex) { + JOptionPane.showMessageDialog(ci, + "Pasted content is not a valid number", + "Invalid Input", JOptionPane.ERROR_MESSAGE); + } + } + } catch (Exception ex) { + System.err.println("Error pasting: " + ex.getMessage()); + } + } + public void processDigit(String actionCommand) { + if (ci.resultVisible) { + ci.display.setText(""); + ci.resultVisible = false; + } + String newValue = ci.display.getText() + actionCommand; + ci.display.setText(newValue); + saveToUndoStack(newValue); + } + public void setOperator(String daop) { + ci.operand1 = ci.display.getText(); + ci.operator = daop; + ci.display.setText(""); + } + public void clearEntry() { + ci.display.setText(""); + } + } \ No newline at end of file