From 1a1d503abee8119fb84fec038cab21f47e3c7dee Mon Sep 17 00:00:00 2001 From: Seth Morabito Date: Sun, 10 Aug 2014 14:24:43 -0700 Subject: [PATCH] Make PC editable --- .../com/loomcom/symon/ui/StatusPanel.java | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/loomcom/symon/ui/StatusPanel.java b/src/main/java/com/loomcom/symon/ui/StatusPanel.java index 99b7305..1cbc377 100644 --- a/src/main/java/com/loomcom/symon/ui/StatusPanel.java +++ b/src/main/java/com/loomcom/symon/ui/StatusPanel.java @@ -32,6 +32,7 @@ import javax.swing.border.EtchedBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.regex.Pattern; /** * UI component that displays the current state of the simulated CPU. @@ -164,12 +165,30 @@ public class StatusPanel extends JPanel { spLabel.setToolTipText("Stack Pointer"); opcodeField = makeTextField(LARGE_TEXT_FIELD_SIZE); - pcField = makeTextField(LARGE_TEXT_FIELD_SIZE); + pcField = makeTextField(LARGE_TEXT_FIELD_SIZE, true); spField = makeTextField(SMALL_TEXT_FIELD_SIZE); aField = makeTextField(SMALL_TEXT_FIELD_SIZE); xField = makeTextField(SMALL_TEXT_FIELD_SIZE); yField = makeTextField(SMALL_TEXT_FIELD_SIZE); + // Make fields editable + pcField.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == pcField) { + try { + String newPcString = pcField.getText().replaceAll("[^0-9a-fA-F]", ""); + int newPc = Integer.parseInt(newPcString, 16); + machine.getCpu().setProgramCounter(newPc); + } catch (Exception ex) { + // Swallow exception, we don't care. + } + + updateState(); + } + } + }); + constraints.anchor = GridBagConstraints.LINE_START; constraints.gridwidth = 2; constraints.gridx = 0; @@ -319,9 +338,13 @@ public class StatusPanel extends JPanel { } private JTextField makeTextField(Dimension size) { + return makeTextField(size, false); + } + + private JTextField makeTextField(Dimension size, boolean editable) { JTextField textField = new JTextField(""); textField.setAlignmentX(LEFT_ALIGNMENT); - textField.setEditable(false); + textField.setEditable(editable); textField.setMinimumSize(size); textField.setMaximumSize(size); textField.setPreferredSize(size);