mirror of https://github.com/rusefi/RomRaider.git
More Editor Cleanup Continued:
- Fixed "addRom()" routine. The tree is now properly built from the vector of TableTreeNodes. - Fixed "Close Image" worker. - SetUserLevelWorker became much simpler. It now is just a rebuild of the JTree. - RomTreeRootNode.java now is just a basic DefaultMutableTreeNode. - Closing a Rom now properly cleans up memory. Note: lastSelectedRom will not be set when focusing on a TableFrame. This feature requires unnecessary work and/or references. lastSelectedRom will now only be set when selecting something in Rom tree.
This commit is contained in:
parent
291155f47a
commit
e305d8ab40
|
@ -274,8 +274,9 @@ public class ECUEditor extends AbstractFrame {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addRom(Rom input) {
|
public void addRom(Rom input) {
|
||||||
|
input.refreshDisplayedTables();
|
||||||
|
|
||||||
// add to ecu image list pane
|
// add to ecu image list pane
|
||||||
input.refresh(getSettings().getUserLevel(), getSettings().isDisplayHighTables());
|
|
||||||
getImageRoot().add(input);
|
getImageRoot().add(input);
|
||||||
|
|
||||||
getImageList().setVisible(true);
|
getImageList().setVisible(true);
|
||||||
|
@ -333,12 +334,13 @@ public class ECUEditor extends AbstractFrame {
|
||||||
frame.setVisible(false);
|
frame.setVisible(false);
|
||||||
updateTableToolBar(null);
|
updateTableToolBar(null);
|
||||||
rightPanel.remove(frame);
|
rightPanel.remove(frame);
|
||||||
rightPanel.repaint();
|
rightPanel.validate();
|
||||||
|
refreshUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void closeImage() {
|
public void closeImage() {
|
||||||
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||||
closeImageWorker = new CloseImageWorker();
|
closeImageWorker = new CloseImageWorker(getLastSelectedRom());
|
||||||
closeImageWorker.addPropertyChangeListener(getStatusPanel());
|
closeImageWorker.addPropertyChangeListener(getStatusPanel());
|
||||||
closeImageWorker.execute();
|
closeImageWorker.execute();
|
||||||
}
|
}
|
||||||
|
@ -354,8 +356,8 @@ public class ECUEditor extends AbstractFrame {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getLastSelectedRomFileName() {
|
public String getLastSelectedRomFileName() {
|
||||||
Rom lastSelectedRom = getLastSelectedRom();
|
Rom lastSelRom = getLastSelectedRom();
|
||||||
return lastSelectedRom == null ? "" : lastSelectedRom.getFileName() + " ";
|
return lastSelRom == null ? "" : lastSelRom.getFileName() + " ";
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLastSelectedRom(Rom lastSelectedRom) {
|
public void setLastSelectedRom(Rom lastSelectedRom) {
|
||||||
|
@ -397,7 +399,8 @@ public class ECUEditor extends AbstractFrame {
|
||||||
|
|
||||||
public void setUserLevel(int userLevel) {
|
public void setUserLevel(int userLevel) {
|
||||||
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||||
setUserLevelWorker = new SetUserLevelWorker(userLevel);
|
getSettings().setUserLevel(userLevel);
|
||||||
|
setUserLevelWorker = new SetUserLevelWorker();
|
||||||
setUserLevelWorker.addPropertyChangeListener(getStatusPanel());
|
setUserLevelWorker.addPropertyChangeListener(getStatusPanel());
|
||||||
setUserLevelWorker.execute();
|
setUserLevelWorker.execute();
|
||||||
}
|
}
|
||||||
|
@ -405,9 +408,13 @@ public class ECUEditor extends AbstractFrame {
|
||||||
public Vector<Rom> getImages() {
|
public Vector<Rom> getImages() {
|
||||||
Vector<Rom> images = new Vector<Rom>();
|
Vector<Rom> images = new Vector<Rom>();
|
||||||
for (int i = 0; i < imageRoot.getChildCount(); i++) {
|
for (int i = 0; i < imageRoot.getChildCount(); i++) {
|
||||||
|
if(imageRoot.getChildAt(i) instanceof Rom) {
|
||||||
Rom rom = (Rom) imageRoot.getChildAt(i);
|
Rom rom = (Rom) imageRoot.getChildAt(i);
|
||||||
|
if(null != rom) {
|
||||||
images.add(rom);
|
images.add(rom);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return images;
|
return images;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -533,19 +540,15 @@ class LaunchLoggerWorker extends SwingWorker<Void, Void> {
|
||||||
|
|
||||||
class SetUserLevelWorker extends SwingWorker<Void, Void> {
|
class SetUserLevelWorker extends SwingWorker<Void, Void> {
|
||||||
private final ECUEditor editor = ECUEditorManager.getECUEditor();
|
private final ECUEditor editor = ECUEditorManager.getECUEditor();
|
||||||
int userLevel;
|
|
||||||
|
|
||||||
public SetUserLevelWorker(int userLevel) {
|
public SetUserLevelWorker() {
|
||||||
this.userLevel = userLevel;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Void doInBackground() throws Exception {
|
protected Void doInBackground() throws Exception {
|
||||||
Settings settings = editor.getSettings();
|
for(Rom rom : editor.getImages()) {
|
||||||
RomTreeRootNode imageRoot = editor.getImageRoot();
|
rom.refreshDisplayedTables();
|
||||||
|
}
|
||||||
settings.setUserLevel(userLevel);
|
|
||||||
imageRoot.setUserLevel(userLevel, settings.isDisplayHighTables());
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -571,33 +574,19 @@ class SetUserLevelWorker extends SwingWorker<Void, Void> {
|
||||||
class CloseImageWorker extends SwingWorker<Void, Void> {
|
class CloseImageWorker extends SwingWorker<Void, Void> {
|
||||||
|
|
||||||
private final ECUEditor editor = ECUEditorManager.getECUEditor();
|
private final ECUEditor editor = ECUEditorManager.getECUEditor();
|
||||||
|
Rom rom;
|
||||||
|
|
||||||
public CloseImageWorker() {
|
public CloseImageWorker(Rom romToRemove) {
|
||||||
|
this.rom = romToRemove;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Void doInBackground() throws Exception {
|
protected Void doInBackground() throws Exception {
|
||||||
RomTreeRootNode imageRoot = editor.getImageRoot();
|
RomTreeRootNode imageRoot = editor.getImageRoot();
|
||||||
RomTree imageList = editor.getImageList();
|
|
||||||
|
|
||||||
for (int i = 0; i < imageRoot.getChildCount(); i++) {
|
|
||||||
Rom rom = (Rom) imageRoot.getChildAt(i);;
|
|
||||||
if (rom == editor.getLastSelectedRom()) {
|
|
||||||
rom.removeAllChildren();
|
|
||||||
|
|
||||||
// Cleanup Rom Data
|
|
||||||
rom.clearData();
|
rom.clearData();
|
||||||
|
rom.removeFromParent();
|
||||||
Vector<TreePath> path = new Vector<TreePath>();
|
rom = null;
|
||||||
path.add(new TreePath(rom.getPath()));
|
|
||||||
imageRoot.remove(i);
|
|
||||||
imageList.removeDescendantToggledPaths(path.elements());
|
|
||||||
|
|
||||||
path.clear();
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (imageRoot.getChildCount() > 0) {
|
if (imageRoot.getChildCount() > 0) {
|
||||||
editor.setLastSelectedRom((Rom) imageRoot.getChildAt(0));
|
editor.setLastSelectedRom((Rom) imageRoot.getChildAt(0));
|
||||||
|
@ -657,19 +646,17 @@ class OpenImageWorker extends SwingWorker<Void, Void> {
|
||||||
editor.getStatusPanel().setStatus("Populating tables...");
|
editor.getStatusPanel().setStatus("Populating tables...");
|
||||||
setProgress(50);
|
setProgress(50);
|
||||||
|
|
||||||
|
rom.setFullFileName(inputFile);
|
||||||
rom.populateTables(input, editor.getStatusPanel());
|
rom.populateTables(input, editor.getStatusPanel());
|
||||||
rom.setFileName(inputFile.getName());
|
|
||||||
|
|
||||||
editor.getStatusPanel().setStatus("Finalizing...");
|
editor.getStatusPanel().setStatus("Finalizing...");
|
||||||
setProgress(75);
|
setProgress(90);
|
||||||
|
|
||||||
editor.addRom(rom);
|
editor.addRom(rom);
|
||||||
rom.setFullFileName(inputFile);
|
|
||||||
|
|
||||||
editor.getStatusPanel().setStatus("Done loading image...");
|
editor.getStatusPanel().setStatus("Done loading image...");
|
||||||
setProgress(100);
|
setProgress(100);
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
} catch (RomNotFoundException ex) {
|
} catch (RomNotFoundException ex) {
|
||||||
// rom was not found in current file, skip to next
|
// rom was not found in current file, skip to next
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
@ -26,6 +26,7 @@ import static javax.swing.JOptionPane.DEFAULT_OPTION;
|
||||||
import static javax.swing.JOptionPane.QUESTION_MESSAGE;
|
import static javax.swing.JOptionPane.QUESTION_MESSAGE;
|
||||||
import static javax.swing.JOptionPane.showOptionDialog;
|
import static javax.swing.JOptionPane.showOptionDialog;
|
||||||
|
|
||||||
|
import java.beans.PropertyVetoException;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
@ -40,6 +41,8 @@ import javax.swing.tree.DefaultMutableTreeNode;
|
||||||
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
|
import com.romraider.Settings;
|
||||||
|
import com.romraider.editor.ecu.ECUEditorManager;
|
||||||
import com.romraider.logger.ecu.ui.handler.table.TableUpdateHandler;
|
import com.romraider.logger.ecu.ui.handler.table.TableUpdateHandler;
|
||||||
import com.romraider.swing.CategoryTreeNode;
|
import com.romraider.swing.CategoryTreeNode;
|
||||||
import com.romraider.swing.JProgressPane;
|
import com.romraider.swing.JProgressPane;
|
||||||
|
@ -60,21 +63,24 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
|
||||||
public Rom() {
|
public Rom() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void refresh(int userLevel, boolean isDisplayHighTables) {
|
public void refreshDisplayedTables() {
|
||||||
|
// Remove all nodes from the ROM tree node.
|
||||||
|
super.removeAllChildren();
|
||||||
|
|
||||||
removeAllChildren();
|
Settings settings = ECUEditorManager.getECUEditor().getSettings();
|
||||||
for (int i = 0; i < tableNodes.size(); i++) {
|
|
||||||
Table table = tableNodes.get(i).getTable();
|
|
||||||
String frameTitle = this.getFileName() + " - " + table.getName();
|
|
||||||
|
|
||||||
if (isDisplayHighTables || userLevel >= table.getUserLevel()) {
|
// Add nodes to ROM tree.
|
||||||
|
for (TableTreeNode tableTreeNode : tableNodes) {
|
||||||
|
TableFrame tableFrame = tableTreeNode.getFrame();
|
||||||
|
Table table = tableFrame.getTable();
|
||||||
|
|
||||||
|
if (settings.isDisplayHighTables() || settings.getUserLevel() >= table.getUserLevel()) {
|
||||||
boolean categoryExists = false;
|
boolean categoryExists = false;
|
||||||
|
|
||||||
for (int j = 0; j < getChildCount(); j++) {
|
for (int j = 0; j < getChildCount(); j++) {
|
||||||
if (getChildAt(j).toString().equals(table.getCategory())) {
|
if (getChildAt(j).toString().equals(table.getCategory())) {
|
||||||
// add to appropriate category
|
// add to appropriate category
|
||||||
TableTreeNode tableNode = new TableTreeNode(new TableFrame(frameTitle, table));
|
getChildAt(j).add(tableTreeNode);
|
||||||
getChildAt(j).add(tableNode);
|
|
||||||
categoryExists = true;
|
categoryExists = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -82,8 +88,7 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
|
||||||
|
|
||||||
if (!categoryExists) { // if category does not already exist, create it
|
if (!categoryExists) { // if category does not already exist, create it
|
||||||
CategoryTreeNode categoryNode = new CategoryTreeNode(table.getCategory());
|
CategoryTreeNode categoryNode = new CategoryTreeNode(table.getCategory());
|
||||||
TableTreeNode tableNode = new TableTreeNode(new TableFrame(frameTitle, table));
|
categoryNode.add(tableTreeNode);
|
||||||
categoryNode.add(tableNode);
|
|
||||||
this.add(categoryNode);
|
this.add(categoryNode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -134,14 +139,6 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeTableFrame(String tableName) {
|
|
||||||
for (int i = 0; i < tableNodes.size(); i++) {
|
|
||||||
if (tableNodes.get(i).getTable().getName().equalsIgnoreCase(tableName)) {
|
|
||||||
tableNodes.remove(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void populateTables(byte[] binData, JProgressPane progress) {
|
public void populateTables(byte[] binData, JProgressPane progress) {
|
||||||
this.binData = binData;
|
this.binData = binData;
|
||||||
for (int i = 0; i < tableNodes.size(); i++) {
|
for (int i = 0; i < tableNodes.size(); i++) {
|
||||||
|
@ -310,6 +307,20 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearData() {
|
public void clearData() {
|
||||||
|
super.removeAllChildren();
|
||||||
|
|
||||||
|
// Hide and dispose all frames.
|
||||||
|
for(TableTreeNode tableTreeNode : tableNodes) {
|
||||||
|
TableFrame frame = tableTreeNode.getFrame();
|
||||||
|
frame.setVisible(false);
|
||||||
|
try {
|
||||||
|
frame.setClosed(true);
|
||||||
|
} catch (PropertyVetoException e) {
|
||||||
|
; // Do nothing.
|
||||||
|
}
|
||||||
|
frame.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
tableNodes.clear();
|
tableNodes.clear();
|
||||||
binData = null;
|
binData = null;
|
||||||
}
|
}
|
||||||
|
@ -339,15 +350,6 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
|
||||||
this.isAbstract = isAbstract;
|
this.isAbstract = isAbstract;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeAllChildren() {
|
|
||||||
// Dispose all table frames.
|
|
||||||
for(TableTreeNode tableNode : tableNodes) {
|
|
||||||
tableNode.getFrame().dispose();
|
|
||||||
}
|
|
||||||
super.removeAllChildren();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DefaultMutableTreeNode getChildAt(int i) {
|
public DefaultMutableTreeNode getChildAt(int i) {
|
||||||
return (DefaultMutableTreeNode) super.getChildAt(i);
|
return (DefaultMutableTreeNode) super.getChildAt(i);
|
||||||
|
|
|
@ -131,6 +131,7 @@ public class ECUEditorToolBar extends JToolBar implements ActionListener {
|
||||||
} else if (e.getSource() == saveImage) {
|
} else if (e.getSource() == saveImage) {
|
||||||
try {
|
try {
|
||||||
((ECUEditorMenuBar) getEditor().getJMenuBar()).saveImage(getEditor().getLastSelectedRom());
|
((ECUEditorMenuBar) getEditor().getJMenuBar()).saveImage(getEditor().getLastSelectedRom());
|
||||||
|
getEditor().refreshUI();
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
JOptionPane.showMessageDialog(getEditor(), new DebugPanel(ex,
|
JOptionPane.showMessageDialog(getEditor(), new DebugPanel(ex,
|
||||||
getSettings().getSupportURL()), "Exception", JOptionPane.ERROR_MESSAGE);
|
getSettings().getSupportURL()), "Exception", JOptionPane.ERROR_MESSAGE);
|
||||||
|
|
|
@ -90,22 +90,25 @@ public class RomTree extends JTree implements MouseListener {
|
||||||
try{
|
try{
|
||||||
if(selectedRow instanceof TableTreeNode) {
|
if(selectedRow instanceof TableTreeNode) {
|
||||||
TableTreeNode node = (TableTreeNode) selectedRow;
|
TableTreeNode node = (TableTreeNode) selectedRow;
|
||||||
|
if(null != node) {
|
||||||
getEditor().displayTable(node.getFrame());
|
getEditor().displayTable(node.getFrame());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
setLastSelectedRom(selectedRow);
|
setLastSelectedRom(selectedRow);
|
||||||
} catch (NullPointerException ex) {
|
} catch (NullPointerException ex) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setLastSelectedRom(Object selectedNode) {
|
private void setLastSelectedRom(Object selectedNode) {
|
||||||
if (selectedNode instanceof TableTreeNode || selectedNode instanceof CategoryTreeNode || selectedNode instanceof Rom)
|
if (selectedNode instanceof TableTreeNode || selectedNode instanceof CategoryTreeNode || selectedNode instanceof Rom) {
|
||||||
{
|
|
||||||
Object lastSelectedPathComponent = getLastSelectedPathComponent();
|
Object lastSelectedPathComponent = getLastSelectedPathComponent();
|
||||||
if(lastSelectedPathComponent instanceof Rom) {
|
if(lastSelectedPathComponent instanceof Rom) {
|
||||||
Rom node = (Rom) lastSelectedPathComponent;
|
Rom node = (Rom) lastSelectedPathComponent;
|
||||||
|
if(null != node) {
|
||||||
getEditor().setLastSelectedRom(node);
|
getEditor().setLastSelectedRom(node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
getEditor().refreshUI();
|
getEditor().refreshUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,6 @@ package com.romraider.swing;
|
||||||
|
|
||||||
import javax.swing.tree.DefaultMutableTreeNode;
|
import javax.swing.tree.DefaultMutableTreeNode;
|
||||||
|
|
||||||
import com.romraider.maps.Rom;
|
|
||||||
|
|
||||||
public class RomTreeRootNode extends DefaultMutableTreeNode {
|
public class RomTreeRootNode extends DefaultMutableTreeNode {
|
||||||
|
|
||||||
private static final long serialVersionUID = 6810217325725782803L;
|
private static final long serialVersionUID = 6810217325725782803L;
|
||||||
|
@ -30,10 +28,4 @@ public class RomTreeRootNode extends DefaultMutableTreeNode {
|
||||||
public RomTreeRootNode(String name) {
|
public RomTreeRootNode(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserLevel(int userLevel, boolean isDisplayHighTables) {
|
|
||||||
for (int i = 0; i < getChildCount(); i++) {
|
|
||||||
((Rom) getChildAt(i)).refresh(userLevel, isDisplayHighTables);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -68,7 +68,6 @@ public class TableFrame extends JInternalFrame implements InternalFrameListener
|
||||||
@Override
|
@Override
|
||||||
public void internalFrameClosing(InternalFrameEvent e) {
|
public void internalFrameClosing(InternalFrameEvent e) {
|
||||||
TableUpdateHandler.getInstance().deregisterTable(this.getTable());
|
TableUpdateHandler.getInstance().deregisterTable(this.getTable());
|
||||||
getEditor().removeDisplayTable(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue