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) {
|
||||
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 {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue