From 29e31526ecb40f2565e24a06721bf6f5d615c665 Mon Sep 17 00:00:00 2001 From: Lenart Kos Date: Mon, 7 Nov 2022 21:11:00 +0100 Subject: [PATCH 1/2] Make components in `MainView` resizable Change `mainFrame` and `eastPanel` from `JPanel` to `JSplitPane`. This allows the users to resize different views as they want. --- src/sic/sim/MainView.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/sic/sim/MainView.java b/src/sic/sim/MainView.java index 31f9927..fbc7cd8 100644 --- a/src/sic/sim/MainView.java +++ b/src/sic/sim/MainView.java @@ -63,13 +63,13 @@ public MainView(final Executor executor, Disassembler disassembler, Args arg) { westPanel.add(cpuView.mainPanel, BorderLayout.NORTH); westPanel.add(disassemblyView.mainPanel, BorderLayout.CENTER); - JPanel eastPanel = new JPanel(new BorderLayout()); - eastPanel.add(watchView.mainPanel, BorderLayout.NORTH); - eastPanel.add(memoryView.mainPanel, BorderLayout.CENTER); + JSplitPane eastPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT); + eastPanel.setTopComponent(watchView.mainPanel); + eastPanel.setBottomComponent(memoryView.mainPanel); - JPanel mainPanel = new JPanel(new BorderLayout()); - mainPanel.add(westPanel, BorderLayout.WEST); - mainPanel.add(eastPanel, BorderLayout.CENTER); + JSplitPane mainPanel = new JSplitPane(); + mainPanel.setLeftComponent(westPanel); + mainPanel.setRightComponent(eastPanel); mainFrame = new JFrame("SicTools"); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); From 8e30555e0ed055dd269a0afc2039dbbc95e69704 Mon Sep 17 00:00:00 2001 From: Lenart Kos Date: Mon, 7 Nov 2022 21:35:30 +0100 Subject: [PATCH 2/2] Fit `DisassemblyView` to current height. This updates the row count based on height when the component is resized. --- src/sic/sim/views/DisassemblyView.java | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/sic/sim/views/DisassemblyView.java b/src/sic/sim/views/DisassemblyView.java index 4b1cb7a..d076ac0 100644 --- a/src/sic/sim/views/DisassemblyView.java +++ b/src/sic/sim/views/DisassemblyView.java @@ -68,7 +68,6 @@ public Component getTableCellRendererComponent(JTable table, Object value, public class DisassemblyView { public static final int MOVE_SMALL = 1; - private static final int ROW_AMOUNT = 19; private Executor executor; private Machine machine; @@ -96,7 +95,7 @@ public DisassemblyView(final Executor executor, final Disassembler disassembler) $$$setupUI$$$(); // disassembly table modelDis = (DefaultTableModel) tabDis.getModel(); - modelDis.setRowCount(DisassemblyView.ROW_AMOUNT); + fitRowCountToCurrentHeight(); modelDis.setColumnCount(7); tabDis.setBackground(Colors.bg); tabDis.setForeground(Colors.fg); @@ -160,6 +159,20 @@ public void mouseClicked(MouseEvent evt) { super.mouseClicked(evt); } }); + tabDis.addComponentListener(new ComponentListener() { + @Override + public void componentResized(ComponentEvent evt) { + fitRowCountToCurrentHeight(); + updateDis(false, false); + } + + @Override + public void componentMoved(ComponentEvent e) {} + @Override + public void componentShown(ComponentEvent e) {} + @Override + public void componentHidden(ComponentEvent e) {} + }); tabDis.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "up"); tabDis.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "down"); tabDis.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), "space"); @@ -210,6 +223,13 @@ public boolean isCellEditable(int row, int column) { }; } + private void fitRowCountToCurrentHeight() { + final var inset = tabDis.getInsets(); + final var totalHeight = tabDis.getHeight() - inset.top - inset.bottom; + final int rowCount = totalHeight / tabDis.getRowHeight(); + modelDis.setRowCount(rowCount); + } + private void updateBreakpoint(int row, boolean active) { modelDis.setValueAt(active ? "1" : "", row, 0); }