From 31839863850d03ac3491e8b9cc9acc8e6508d2b0 Mon Sep 17 00:00:00 2001 From: Robin K Date: Sat, 25 Dec 2021 16:53:10 +0100 Subject: [PATCH] Fixed table compare menus --- .../com/romraider/editor/ecu/ECUEditor.java | 19 +++--- .../romraider/editor/ecu/OpenImageWorker.java | 2 +- .../java/com/romraider/maps/PresetPanel.java | 3 +- src/main/java/com/romraider/maps/Rom.java | 3 +- src/main/java/com/romraider/maps/Table.java | 14 ++++- .../com/romraider/swing/JTableChooser.java | 42 +++++++++---- .../java/com/romraider/swing/TableFrame.java | 59 +++++++++---------- .../com/romraider/swing/TableMenuBar.java | 12 ++-- .../com/romraider/swing/TableMenuItem.java | 14 ++++- 9 files changed, 101 insertions(+), 67 deletions(-) diff --git a/src/main/java/com/romraider/editor/ecu/ECUEditor.java b/src/main/java/com/romraider/editor/ecu/ECUEditor.java index 4dcc8193..f8d580ff 100644 --- a/src/main/java/com/romraider/editor/ecu/ECUEditor.java +++ b/src/main/java/com/romraider/editor/ecu/ECUEditor.java @@ -340,7 +340,6 @@ public class ECUEditor extends AbstractFrame { getImageList().setVisible(true); getImageList().expandPath(new TreePath(getImageRoot())); - getImageList().expandPath(new TreePath(input.getPath())); if(!settings.isOpenExpanded()) { @@ -445,10 +444,14 @@ public class ECUEditor extends AbstractFrame { // frame not added. Draw table and add the frame. TableView v = frame.getTableView(); - if(v!=null) v.drawTable(); - rightPanel.add(frame); + if(v!=null) { + v.drawTable(); + } + + rightPanel.add(frame); rightPanel.repaint(); + refreshTableCompareMenus(); } public void removeDisplayTable(TableFrame frame) { @@ -564,13 +567,9 @@ public class ECUEditor extends AbstractFrame { } public void refreshTableCompareMenus() { - for (int i = 0; i < imageRoot.getChildCount(); i++) { - if(imageRoot.getChildAt(i) instanceof Rom) { - Rom rom = (Rom) imageRoot.getChildAt(i); - if(null != rom) { - rom.refreshTableCompareMenus(); - } - } + for(JInternalFrame curFrame : getRightPanel().getAllFrames()) { + TableFrame frame = (TableFrame) curFrame; + frame.refreshSimilarOpenTables(); } } diff --git a/src/main/java/com/romraider/editor/ecu/OpenImageWorker.java b/src/main/java/com/romraider/editor/ecu/OpenImageWorker.java index 7fc76c27..d9fe21ee 100644 --- a/src/main/java/com/romraider/editor/ecu/OpenImageWorker.java +++ b/src/main/java/com/romraider/editor/ecu/OpenImageWorker.java @@ -71,7 +71,6 @@ public class OpenImageWorker extends SwingWorker { setProgress(90); editor.addRom(rom); - editor.refreshTableCompareMenus(); editor.getStatusPanel().setStatus( ECUEditor.rb.getString("DONELOAD")); @@ -309,6 +308,7 @@ public class OpenImageWorker extends SwingWorker { @Override public void done() { ECUEditor editor = ECUEditorManager.getECUEditor(); + editor.refreshTableCompareMenus(); editor.getStatusPanel().setStatus(ECUEditor.rb.getString("STATUSREADY")); setProgress(0); editor.setCursor(null); diff --git a/src/main/java/com/romraider/maps/PresetPanel.java b/src/main/java/com/romraider/maps/PresetPanel.java index 5fb340ca..64b656d7 100644 --- a/src/main/java/com/romraider/maps/PresetPanel.java +++ b/src/main/java/com/romraider/maps/PresetPanel.java @@ -53,8 +53,7 @@ public class PresetPanel extends JPanel { setLayout(new GridBagLayout()); } - public void populatePanel() { - + public void populatePanel() { //If this is an axis within another table dont show the panel if(table.getTable() instanceof Table1D) { if(((Table1D) (table.getTable())).getAxisParent() != null) { diff --git a/src/main/java/com/romraider/maps/Rom.java b/src/main/java/com/romraider/maps/Rom.java index 1e69b52c..e9b0133f 100644 --- a/src/main/java/com/romraider/maps/Rom.java +++ b/src/main/java/com/romraider/maps/Rom.java @@ -127,7 +127,8 @@ public class Rom extends DefaultMutableTreeNode implements Serializable { public void addTable(Table table) { boolean found = false; - + table.setRom(this); + for (int i = 0; i < tableNodes.size(); i++) { if (tableNodes.get(i).getTable().equalsWithoutData(table)) { tableNodes.get(i).setUserObject(null); diff --git a/src/main/java/com/romraider/maps/Table.java b/src/main/java/com/romraider/maps/Table.java index 528c9803..0a316a34 100644 --- a/src/main/java/com/romraider/maps/Table.java +++ b/src/main/java/com/romraider/maps/Table.java @@ -75,6 +75,7 @@ public abstract class Table implements Serializable { protected double maxCompare = 0.0; protected double minCompare = 0.0; + protected Rom rom; protected boolean staticDataTable = false; private Table compareTable = null; protected Settings.DataType compareValueType = Settings.DataType.BIN; @@ -138,10 +139,17 @@ public abstract class Table implements Serializable { public int getRamOffset() { return this.ramOffset; } + + public Rom getRom() { + return rom; + } + + public void setRom(Rom rom) { + this.rom = rom; + } - public void populateTable(Rom rom) throws ArrayIndexOutOfBoundsException, IndexOutOfBoundsException { - if(isStaticDataTable()) return; - + public void populateTable(Rom rom) throws ArrayIndexOutOfBoundsException, IndexOutOfBoundsException { + if(isStaticDataTable()) return; validateScaling(); // temporarily remove lock; diff --git a/src/main/java/com/romraider/swing/JTableChooser.java b/src/main/java/com/romraider/swing/JTableChooser.java index 392e1f0f..5ef9b300 100644 --- a/src/main/java/com/romraider/swing/JTableChooser.java +++ b/src/main/java/com/romraider/swing/JTableChooser.java @@ -20,11 +20,14 @@ package com.romraider.swing; import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ResourceBundle; import java.util.Vector; +import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; @@ -44,9 +47,11 @@ public class JTableChooser extends JOptionPane implements MouseListener { private static final long serialVersionUID = 5611729002131147882L; private static final ResourceBundle rb = new ResourceUtil().getBundle( JTableChooser.class.getName()); + JPanel displayPanel = new JPanel(); DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Open Images"); JTree displayTree = new JTree(rootNode); + JButton compareButton = new JButton(rb.getString("COMPARE")); JScrollPane displayScrollPane; public JTableChooser() { @@ -88,24 +93,34 @@ public class JTableChooser extends JOptionPane implements MouseListener { } } - displayTree.setPreferredSize(new Dimension(nameLength*7, 400)); - displayTree.setMinimumSize(new Dimension(nameLength*7, 400)); - + displayTree.setPreferredSize(new Dimension(nameLength*9, 400)); + displayTree.setMinimumSize(new Dimension(nameLength*9, 400)); + displayTree.expandPath(new TreePath(rootNode.getPath())); - displayTree.setRootVisible(false); displayTree.addMouseListener(this); displayScrollPane = new JScrollPane(displayTree); displayScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); displayPanel.add(displayScrollPane); - - Object[] values = {rb.getString("COMPARE"), rb.getString("CANCEL")}; - - if ((showOptionDialog(SwingUtilities.windowForComponent(targetTable.getTableView()), + + Object[] values = {compareButton, rb.getString("CANCEL")}; + compareButton.setEnabled(false); + compareButton.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + JOptionPane pane = (JOptionPane)((JButton) (e.getSource())).getParent().getParent(); + pane.setValue(compareButton); + } + }); + + int result = showOptionDialog(SwingUtilities.windowForComponent(targetTable.getTableView()), displayPanel, rb.getString("SELECT"), JOptionPane.DEFAULT_OPTION, - JOptionPane.PLAIN_MESSAGE, null, values, values[0]) == 0 - && (displayTree.getLastSelectedPathComponent() instanceof TableChooserTreeNode))) { + JOptionPane.PLAIN_MESSAGE, null, values, values[0]); + + if (result == 0 && displayTree.getLastSelectedPathComponent() instanceof TableChooserTreeNode) { return ((TableChooserTreeNode) displayTree.getLastSelectedPathComponent()).getTable(); } else { return null; @@ -117,6 +132,13 @@ public class JTableChooser extends JOptionPane implements MouseListener { displayTree.setPreferredSize(new Dimension(displayTree.getWidth(), (displayTree.getRowCount()*displayTree.getRowHeight()))); displayTree.revalidate(); + + if(displayTree.getLastSelectedPathComponent() instanceof TableChooserTreeNode) { + compareButton.setEnabled(true); + } + else { + compareButton.setEnabled(false); + } } @Override public void mouseClicked(MouseEvent e){} diff --git a/src/main/java/com/romraider/swing/TableFrame.java b/src/main/java/com/romraider/swing/TableFrame.java index 76207a5b..e01449d0 100644 --- a/src/main/java/com/romraider/swing/TableFrame.java +++ b/src/main/java/com/romraider/swing/TableFrame.java @@ -25,6 +25,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.MessageFormat; import java.util.ResourceBundle; +import java.util.Vector; import javax.swing.Icon; import javax.swing.JInternalFrame; @@ -56,7 +57,7 @@ public class TableFrame extends JInternalFrame implements InternalFrameListener, super(title, true, true); this.tableView = tableView; Table t = tableView.getTable(); - + Icon icon = RomCellRenderer.getIconForTable(t); setFrameIcon(icon); @@ -191,7 +192,7 @@ public class TableFrame extends JInternalFrame implements InternalFrameListener, } } else if (e.getSource() instanceof TableMenuItem) { - Table selectedTable = findSimilarTable((TableMenuItem)e.getSource()); + Table selectedTable = ((TableMenuItem) e.getSource()).getTable(); if(null != e.getSource()) { compareByTable(selectedTable); } @@ -234,35 +235,33 @@ public class TableFrame extends JInternalFrame implements InternalFrameListener, public void refreshSimilarOpenTables() { JMenu similarTables = getTableMenuBar().getSimilarOpenTables(); similarTables.removeAll(); - - for(Rom rom : ECUEditorManager.getECUEditor().getImages()) { - for(TableTreeNode tableNode : rom.getTableNodes()) { - if(tableNode.getTable().getName().equalsIgnoreCase(getTable().getName())) { - JRadioButtonMenuItem similarTable = new TableMenuItem(rom.getFileName()); - similarTable.setToolTipText(tableNode.getTable().getName()); - similarTable.addActionListener(this); - similarTables.add(similarTable); - break; - } - } + + Vector images = ECUEditorManager.getECUEditor().getImages(); + boolean addedTable = false; + + if(images.size() > 1) { + for(Rom rom : images) { + for(TableTreeNode tableNode : rom.getTableNodes()) { + if(tableNode.getTable().getRom() == getTable().getRom()) break; + + if(tableNode.getTable().getName().equalsIgnoreCase(getTable().getName())) { + JRadioButtonMenuItem similarTable = new TableMenuItem(tableNode.getTable()); + similarTable.setToolTipText(tableNode.getTable().getName()); + similarTable.addActionListener(this); + similarTables.add(similarTable); + addedTable = true; + break; + } + } + } } - - getTableMenuBar().initCompareGroup(); + + if(addedTable) + similarTables.setEnabled(true); + else + similarTables.setEnabled(false); + + getTableMenuBar().initCompareGroup(this); getTableMenuBar().repaint(); } - - private Table findSimilarTable(TableMenuItem menuItem) { - for(Rom rom : ECUEditorManager.getECUEditor().getImages()) { - if(menuItem.getText().equalsIgnoreCase(rom.getFileName())) { - for(TableTreeNode treeNode : rom.getTableNodes()) { - if(menuItem.getToolTipText().equalsIgnoreCase(treeNode.getFrame().getTable().getName())) { - return treeNode.getFrame().getTable(); - } - } - } - } - return null; - } - - } \ No newline at end of file diff --git a/src/main/java/com/romraider/swing/TableMenuBar.java b/src/main/java/com/romraider/swing/TableMenuBar.java index 4e2bd339..ec2f5257 100644 --- a/src/main/java/com/romraider/swing/TableMenuBar.java +++ b/src/main/java/com/romraider/swing/TableMenuBar.java @@ -1,6 +1,6 @@ /* * RomRaider Open-Source Tuning, Logging and Reflashing - * Copyright (C) 2006-2020 RomRaider.com + * Copyright (C) 2006-2021 RomRaider.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,7 +31,6 @@ import javax.swing.JSeparator; import com.romraider.maps.Table; import com.romraider.maps.Table3D; -import com.romraider.maps.Table3DView; import com.romraider.util.ResourceUtil; public class TableMenuBar extends JMenuBar { @@ -159,7 +158,8 @@ public class TableMenuBar extends JMenuBar { getCompareOriginal().setToolTipText(rb.getString("COMPARETT")); getCompareMap().setToolTipText(rb.getString("COMPARETBLTT")); getSimilarOpenTables().setToolTipText(rb.getString("COMPARESIMTT")); - + getSimilarOpenTables().setEnabled(false); + compareDisplayGroup = new ButtonGroup(); compareDisplayGroup.add(getComparePercent()); compareDisplayGroup.add(getCompareAbsolute()); @@ -199,8 +199,6 @@ public class TableMenuBar extends JMenuBar { getCompareAbsolute().setSelected(true); getCompareToOriginal().setSelected(true); - initCompareGroup(); - getCompareOriginal().addActionListener(frame); getCompareMap().addActionListener(frame); getCompareOff().addActionListener(frame); @@ -210,13 +208,13 @@ public class TableMenuBar extends JMenuBar { getCompareToBin().addActionListener(frame); } - public void initCompareGroup() { + public void initCompareGroup(TableFrame frame) { compareGroup = new ButtonGroup(); compareGroup.add(getCompareOriginal()); compareGroup.add(getCompareMap()); compareGroup.add(getCompareOff()); - + for(int i = 0; i< getSimilarOpenTables().getItemCount(); i++) { compareGroup.add(getSimilarOpenTables().getItem(i)); } diff --git a/src/main/java/com/romraider/swing/TableMenuItem.java b/src/main/java/com/romraider/swing/TableMenuItem.java index 52bfaf51..a77c49f8 100644 --- a/src/main/java/com/romraider/swing/TableMenuItem.java +++ b/src/main/java/com/romraider/swing/TableMenuItem.java @@ -2,11 +2,19 @@ package com.romraider.swing; import javax.swing.JRadioButtonMenuItem; +import com.romraider.maps.Table; + public class TableMenuItem extends JRadioButtonMenuItem{ private static final long serialVersionUID = -3618983591185294967L; - - public TableMenuItem(String itemName) { - super(itemName); + Table table; + + public TableMenuItem(Table t) { + super(t.getRom().getFileName()); + this.table = t; + } + + public Table getTable() { + return table; } }