From a7508828f9e8f919b47843b1036b2cae86ba9583 Mon Sep 17 00:00:00 2001 From: Scotthew Date: Thu, 21 Jun 2012 16:48:20 -0700 Subject: [PATCH] - Added ability to open multiple images - Added ability to save as repository. This basically dumps the tables into a file structure represented by the categories and saves the tables as a text file. I use this for tracking changes made to my ROMs using revision control. --- src/com/romraider/Settings.java | 14 ++- src/com/romraider/editor/ecu/ECUEditor.java | 20 +++- src/com/romraider/swing/ECUEditorMenuBar.java | 99 ++++++++++++++++++- src/com/romraider/xml/DOMSettingsBuilder.java | 5 + .../xml/DOMSettingsUnmarshaller.java | 3 + 5 files changed, 136 insertions(+), 5 deletions(-) diff --git a/src/com/romraider/Settings.java b/src/com/romraider/Settings.java index 6411e4c9..25577bc3 100644 --- a/src/com/romraider/Settings.java +++ b/src/com/romraider/Settings.java @@ -37,7 +37,10 @@ import java.util.Vector; public class Settings implements Serializable { private static final long serialVersionUID = 1026542922680475190L; - private Dimension windowSize = new Dimension(800, 600); + public static final String REPOSITORY_ELEMENT_NAME = "repository-dir"; + public static final String REPOSITORY_ATTRIBUTE_NAME = "path"; + + private Dimension windowSize = new Dimension(800, 600); private Point windowLocation = new Point(); private int splitPaneLocation = 150; private boolean windowMaximized = false; @@ -46,6 +49,7 @@ public class Settings implements Serializable { private Vector ecuDefinitionFiles = new Vector(); private File lastImageDir = new File("images"); + private File lastRepositoryDir = new File("repositories"); private boolean obsoleteWarning = true; private boolean calcConflictWarning = true; private boolean debug = false; @@ -135,6 +139,14 @@ public class Settings implements Serializable { this.lastImageDir = lastImageDir; } + public File getLastRepositoryDir() { + return lastRepositoryDir; + } + + public void setLastRepositoryDir(File lastRepositoryDir) { + this.lastRepositoryDir = lastRepositoryDir; + } + public int getSplitPaneLocation() { return splitPaneLocation; } diff --git a/src/com/romraider/editor/ecu/ECUEditor.java b/src/com/romraider/editor/ecu/ECUEditor.java index 5882a10e..f4b4326d 100644 --- a/src/com/romraider/editor/ecu/ECUEditor.java +++ b/src/com/romraider/editor/ecu/ECUEditor.java @@ -200,6 +200,7 @@ public class ECUEditor extends AbstractFrame { settings.setWindowSize(getSize()); settings.setWindowLocation(getLocation()); + // Save when exit to save file settings. settingsManager.save(settings, statusPanel); statusPanel.update("Ready...", 0); repaint(); @@ -433,13 +434,26 @@ public class ECUEditor extends AbstractFrame { } catch (StackOverflowError ex) { // handles looped inheritance, which will use up all available memory - showMessageDialog(this, "Looped \"base\" attribute in XML definitions.", "Error Loading ROM", ERROR_MESSAGE); + showMessageDialog(this, "Looped \"base\" attribute in XML definitions.", "Error Loading "+inputFile.getName(), ERROR_MESSAGE); + } catch (OutOfMemoryError ome) { + // handles Java heap space issues when loading multiple Roms. + showMessageDialog(this, "Error loading Image. Out of memeory.", "Error Loading "+inputFile.getName(), ERROR_MESSAGE); + } finally { // remove progress bar //progress.dispose(); statusPanel.update("Ready...", 0); + } + } + public void openImages(File[] inputFiles) throws Exception { + if(inputFiles.length < 1) { + showMessageDialog(this, "Image Not Found", "Error Loading Image(s)", ERROR_MESSAGE); + return; + } + for(int j=0;j romTables = image.getTables(); + for(int i=0;i defFiles = settings.getEcuDefinitionFiles(); diff --git a/src/com/romraider/xml/DOMSettingsUnmarshaller.java b/src/com/romraider/xml/DOMSettingsUnmarshaller.java index 2718806b..026f4ef2 100644 --- a/src/com/romraider/xml/DOMSettingsUnmarshaller.java +++ b/src/com/romraider/xml/DOMSettingsUnmarshaller.java @@ -104,6 +104,9 @@ public final class DOMSettingsUnmarshaller { } else if (n.getNodeType() == ELEMENT_NODE && n.getNodeName().equalsIgnoreCase("image_dir")) { settings.setLastImageDir(new File(unmarshallAttribute(n, "path", "ecu_defs.xml"))); + } else if (n.getNodeType() == ELEMENT_NODE && n.getNodeName().equalsIgnoreCase(Settings.REPOSITORY_ELEMENT_NAME)) { + settings.setLastRepositoryDir(new File(unmarshallAttribute(n, Settings.REPOSITORY_ATTRIBUTE_NAME, "repositories"))); + } } return settings;