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) {
input.refreshDisplayedTables();
// add to ecu image list pane
input.refresh(getSettings().getUserLevel(), getSettings().isDisplayHighTables());
getImageRoot().add(input);
getImageList().setVisible(true);
@ -333,12 +334,13 @@ public class ECUEditor extends AbstractFrame {
frame.setVisible(false);
updateTableToolBar(null);
rightPanel.remove(frame);
rightPanel.repaint();
rightPanel.validate();
refreshUI();
}
public void closeImage() {
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
closeImageWorker = new CloseImageWorker();
closeImageWorker = new CloseImageWorker(getLastSelectedRom());
closeImageWorker.addPropertyChangeListener(getStatusPanel());
closeImageWorker.execute();
}
@ -354,8 +356,8 @@ public class ECUEditor extends AbstractFrame {
}
public String getLastSelectedRomFileName() {
Rom lastSelectedRom = getLastSelectedRom();
return lastSelectedRom == null ? "" : lastSelectedRom.getFileName() + " ";
Rom lastSelRom = getLastSelectedRom();
return lastSelRom == null ? "" : lastSelRom.getFileName() + " ";
}
public void setLastSelectedRom(Rom lastSelectedRom) {
@ -397,7 +399,8 @@ public class ECUEditor extends AbstractFrame {
public void setUserLevel(int userLevel) {
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
setUserLevelWorker = new SetUserLevelWorker(userLevel);
getSettings().setUserLevel(userLevel);
setUserLevelWorker = new SetUserLevelWorker();
setUserLevelWorker.addPropertyChangeListener(getStatusPanel());
setUserLevelWorker.execute();
}
@ -405,8 +408,12 @@ public class ECUEditor extends AbstractFrame {
public Vector<Rom> getImages() {
Vector<Rom> images = new Vector<Rom>();
for (int i = 0; i < imageRoot.getChildCount(); i++) {
Rom rom = (Rom) imageRoot.getChildAt(i);
images.add(rom);
if(imageRoot.getChildAt(i) instanceof Rom) {
Rom rom = (Rom) imageRoot.getChildAt(i);
if(null != rom) {
images.add(rom);
}
}
}
return images;
}
@ -533,19 +540,15 @@ class LaunchLoggerWorker extends SwingWorker<Void, Void> {
class SetUserLevelWorker extends SwingWorker<Void, Void> {
private final ECUEditor editor = ECUEditorManager.getECUEditor();
int userLevel;
public SetUserLevelWorker(int userLevel) {
this.userLevel = userLevel;
public SetUserLevelWorker() {
}
@Override
protected Void doInBackground() throws Exception {
Settings settings = editor.getSettings();
RomTreeRootNode imageRoot = editor.getImageRoot();
settings.setUserLevel(userLevel);
imageRoot.setUserLevel(userLevel, settings.isDisplayHighTables());
for(Rom rom : editor.getImages()) {
rom.refreshDisplayedTables();
}
return null;
}
@ -571,33 +574,19 @@ class SetUserLevelWorker extends SwingWorker<Void, Void> {
class CloseImageWorker extends SwingWorker<Void, Void> {
private final ECUEditor editor = ECUEditorManager.getECUEditor();
Rom rom;
public CloseImageWorker() {
public CloseImageWorker(Rom romToRemove) {
this.rom = romToRemove;
}
@Override
protected Void doInBackground() throws Exception {
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();
Vector<TreePath> path = new Vector<TreePath>();
path.add(new TreePath(rom.getPath()));
imageRoot.remove(i);
imageList.removeDescendantToggledPaths(path.elements());
path.clear();
break;
}
}
rom.clearData();
rom.removeFromParent();
rom = null;
if (imageRoot.getChildCount() > 0) {
editor.setLastSelectedRom((Rom) imageRoot.getChildAt(0));
@ -657,19 +646,17 @@ class OpenImageWorker extends SwingWorker<Void, Void> {
editor.getStatusPanel().setStatus("Populating tables...");
setProgress(50);
rom.setFullFileName(inputFile);
rom.populateTables(input, editor.getStatusPanel());
rom.setFileName(inputFile.getName());
editor.getStatusPanel().setStatus("Finalizing...");
setProgress(75);
setProgress(90);
editor.addRom(rom);
rom.setFullFileName(inputFile);
editor.getStatusPanel().setStatus("Done loading image...");
setProgress(100);
return null;
} catch (RomNotFoundException ex) {
// rom was not found in current file, skip to next
} 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.showOptionDialog;
import java.beans.PropertyVetoException;
import java.io.File;
import java.io.Serializable;
import java.text.SimpleDateFormat;
@ -40,6 +41,8 @@ import javax.swing.tree.DefaultMutableTreeNode;
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.swing.CategoryTreeNode;
import com.romraider.swing.JProgressPane;
@ -60,21 +63,24 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
public Rom() {
}
public void refresh(int userLevel, boolean isDisplayHighTables) {
public void refreshDisplayedTables() {
// Remove all nodes from the ROM tree node.
super.removeAllChildren();
removeAllChildren();
for (int i = 0; i < tableNodes.size(); i++) {
Table table = tableNodes.get(i).getTable();
String frameTitle = this.getFileName() + " - " + table.getName();
Settings settings = ECUEditorManager.getECUEditor().getSettings();
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;
for (int j = 0; j < getChildCount(); j++) {
if (getChildAt(j).toString().equals(table.getCategory())) {
// add to appropriate category
TableTreeNode tableNode = new TableTreeNode(new TableFrame(frameTitle, table));
getChildAt(j).add(tableNode);
getChildAt(j).add(tableTreeNode);
categoryExists = true;
break;
}
@ -82,8 +88,7 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
if (!categoryExists) { // if category does not already exist, create it
CategoryTreeNode categoryNode = new CategoryTreeNode(table.getCategory());
TableTreeNode tableNode = new TableTreeNode(new TableFrame(frameTitle, table));
categoryNode.add(tableNode);
categoryNode.add(tableTreeNode);
this.add(categoryNode);
}
}
@ -134,14 +139,6 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
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) {
this.binData = binData;
for (int i = 0; i < tableNodes.size(); i++) {
@ -310,6 +307,20 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
}
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();
binData = null;
}
@ -339,15 +350,6 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
this.isAbstract = isAbstract;
}
@Override
public void removeAllChildren() {
// Dispose all table frames.
for(TableTreeNode tableNode : tableNodes) {
tableNode.getFrame().dispose();
}
super.removeAllChildren();
}
@Override
public DefaultMutableTreeNode getChildAt(int i) {
return (DefaultMutableTreeNode) super.getChildAt(i);

View File

@ -131,6 +131,7 @@ public class ECUEditorToolBar extends JToolBar implements ActionListener {
} else if (e.getSource() == saveImage) {
try {
((ECUEditorMenuBar) getEditor().getJMenuBar()).saveImage(getEditor().getLastSelectedRom());
getEditor().refreshUI();
} catch (Exception ex) {
JOptionPane.showMessageDialog(getEditor(), new DebugPanel(ex,
getSettings().getSupportURL()), "Exception", JOptionPane.ERROR_MESSAGE);

View File

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

View File

@ -21,8 +21,6 @@ package com.romraider.swing;
import javax.swing.tree.DefaultMutableTreeNode;
import com.romraider.maps.Rom;
public class RomTreeRootNode extends DefaultMutableTreeNode {
private static final long serialVersionUID = 6810217325725782803L;
@ -30,10 +28,4 @@ public class RomTreeRootNode extends DefaultMutableTreeNode {
public RomTreeRootNode(String 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
public void internalFrameClosing(InternalFrameEvent e) {
TableUpdateHandler.getInstance().deregisterTable(this.getTable());
getEditor().removeDisplayTable(this);
}
@Override