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:
Scotthew 2013-05-31 13:20:35 -07:00
parent 291155f47a
commit e305d8ab40
6 changed files with 64 additions and 80 deletions

View File

@ -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,8 +408,12 @@ 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++) {
Rom rom = (Rom) imageRoot.getChildAt(i); if(imageRoot.getChildAt(i) instanceof Rom) {
images.add(rom); Rom rom = (Rom) imageRoot.getChildAt(i);
if(null != 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.clearData();
Rom rom = (Rom) imageRoot.getChildAt(i);; rom.removeFromParent();
if (rom == editor.getLastSelectedRom()) { rom = null;
rom.removeAllChildren();
// Cleanup Rom Data
rom.clearData();
Vector<TreePath> path = new Vector<TreePath>();
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 {

View File

@ -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);

View File

@ -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);

View File

@ -90,7 +90,9 @@ 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;
getEditor().displayTable(node.getFrame()); if(null != node) {
getEditor().displayTable(node.getFrame());
}
} }
setLastSelectedRom(selectedRow); setLastSelectedRom(selectedRow);
} catch (NullPointerException ex) { } catch (NullPointerException ex) {
@ -98,12 +100,13 @@ public class RomTree extends JTree implements MouseListener {
} }
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;
getEditor().setLastSelectedRom(node); if(null != node) {
getEditor().setLastSelectedRom(node);
}
} }
} }
getEditor().refreshUI(); getEditor().refreshUI();

View File

@ -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);
}
}
} }

View File

@ -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