- 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.
This commit is contained in:
Scotthew 2012-06-21 16:48:20 -07:00
parent f2cf7f587f
commit a7508828f9
5 changed files with 136 additions and 5 deletions

View File

@ -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<File> ecuDefinitionFiles = new Vector<File>();
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;
}

View File

@ -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<inputFiles.length;j++) {
openImage(inputFiles[j]);
}
}
@ -458,5 +472,7 @@ public class ECUEditor extends AbstractFrame {
return baos.toByteArray();
}
public SettingsManager getSettingsManager() {
return this.settingsManager;
}
}

View File

@ -29,6 +29,7 @@ import static com.romraider.Version.VERSION;
import com.romraider.editor.ecu.ECUEditor;
import com.romraider.logger.ecu.EcuLogger;
import com.romraider.maps.Rom;
import com.romraider.maps.Table;
import com.romraider.ramtune.test.RamTuneTestApp;
import static javax.swing.JFrame.DISPOSE_ON_CLOSE;
import static javax.swing.JOptionPane.CANCEL_OPTION;
@ -45,15 +46,20 @@ import javax.swing.JRadioButtonMenuItem;
import javax.swing.JSeparator;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.util.Vector;
public class ECUEditorMenuBar extends JMenuBar implements ActionListener {
private static final long serialVersionUID = -4777040428837855236L;
private JMenu fileMenu = new JMenu("File");
private JMenuItem openImage = new JMenuItem("Open Image...");
private JMenuItem openImages = new JMenuItem("Open Image(s)...");
private JMenuItem saveImage = new JMenuItem("Save Image As...");
private JMenuItem saveAsRepository = new JMenuItem("Save Image As Repository...");
private JMenuItem refreshImage = new JMenuItem("Refresh Image");
private JMenuItem closeImage = new JMenuItem("Close Image");
private JMenuItem closeAll = new JMenuItem("Close All Images");
@ -96,13 +102,17 @@ public class ECUEditorMenuBar extends JMenuBar implements ActionListener {
add(fileMenu);
fileMenu.setMnemonic('F');
openImage.setMnemonic('O');
openImage.setMnemonic('I');
saveImage.setMnemonic('S');
saveAsRepository.setMnemonic('D');
refreshImage.setMnemonic('R');
closeImage.setMnemonic('C');
closeAll.setMnemonic('A');
exit.setMnemonic('X');
fileMenu.add(openImage);
fileMenu.add(openImages);
fileMenu.add(saveImage);
fileMenu.add(saveAsRepository);
fileMenu.add(refreshImage);
fileMenu.add(new JSeparator());
fileMenu.add(closeImage);
@ -110,7 +120,9 @@ public class ECUEditorMenuBar extends JMenuBar implements ActionListener {
fileMenu.add(new JSeparator());
fileMenu.add(exit);
openImage.addActionListener(this);
openImages.addActionListener(this);
saveImage.addActionListener(this);
saveAsRepository.addActionListener(this);
refreshImage.addActionListener(this);
closeImage.addActionListener(this);
closeAll.addActionListener(this);
@ -210,17 +222,21 @@ public class ECUEditorMenuBar extends JMenuBar implements ActionListener {
String file = getLastSelectedRomFileName();
if ("".equals(file)) {
saveImage.setEnabled(false);
saveAsRepository.setEnabled(false);
closeImage.setEnabled(false);
closeAll.setEnabled(false);
romProperties.setEnabled(false);
saveImage.setText("Save As...");
saveAsRepository.setText("Save As Repository...");
compareImages.setEnabled(false);
} else {
saveImage.setEnabled(true);
saveAsRepository.setEnabled(true);
closeImage.setEnabled(true);
closeAll.setEnabled(true);
romProperties.setEnabled(true);
saveImage.setText("Save " + file + " As...");
saveAsRepository.setText("Save "+ file +" As Repository...");
compareImages.setEnabled(true);
}
refreshImage.setText("Refresh " + file);
@ -237,6 +253,14 @@ public class ECUEditorMenuBar extends JMenuBar implements ActionListener {
new DebugPanel(ex, parent.getSettings().getSupportURL()), "Exception", ERROR_MESSAGE);
}
} else if (e.getSource() == openImages) {
try {
openImagesDialog();
} catch (Exception ex) {
showMessageDialog(parent,
new DebugPanel(ex, parent.getSettings().getSupportURL()), "Exception", ERROR_MESSAGE);
}
} else if (e.getSource() == saveImage) {
try {
this.saveImage(parent.getLastSelectedRom());
@ -244,7 +268,13 @@ public class ECUEditorMenuBar extends JMenuBar implements ActionListener {
showMessageDialog(parent,
new DebugPanel(ex, parent.getSettings().getSupportURL()), "Exception", ERROR_MESSAGE);
}
} else if (e.getSource() == saveAsRepository) {
try {
this.saveAsRepository(parent.getLastSelectedRom(), parent.getSettings().getLastRepositoryDir());
} catch(Exception ex) {
showMessageDialog(parent,
new DebugPanel(ex, parent.getSettings().getSupportURL()), "Exception", ERROR_MESSAGE);
}
} else if (e.getSource() == closeImage) {
this.closeImage();
@ -331,11 +361,25 @@ public class ECUEditorMenuBar extends JMenuBar implements ActionListener {
public void openImageDialog() throws Exception {
JFileChooser fc = new JFileChooser(parent.getSettings().getLastImageDir());
fc.setFileFilter(new ECUImageFilter());
fc.setDialogTitle("Open Image");
if (fc.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) {
parent.openImage(fc.getSelectedFile());
parent.getSettings().setLastImageDir(fc.getCurrentDirectory());
}
}
public void openImagesDialog() throws Exception {
JFileChooser fc = new JFileChooser(parent.getSettings().getLastImageDir());
fc.setFileFilter(new ECUImageFilter());
fc.setMultiSelectionEnabled(true);
fc.setDialogTitle("Open Image(s)");
if(fc.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) {
parent.openImages(fc.getSelectedFiles());
parent.getSettings().setLastImageDir(fc.getCurrentDirectory());
}
}
public void closeImage() {
parent.closeImage();
@ -353,7 +397,10 @@ public class ECUEditorMenuBar extends JMenuBar implements ActionListener {
boolean save = true;
File selectedFile = fc.getSelectedFile();
if (selectedFile.exists()) {
if (showConfirmDialog(parent, selectedFile.getName() + " already exists! Overwrite?") == CANCEL_OPTION) {
int option = showConfirmDialog(parent, selectedFile.getName() + " already exists! Overwrite?");
// option: 0 = Cancel, 1 = No
if (option == CANCEL_OPTION || option == 1) {
save = false;
}
}
@ -373,6 +420,54 @@ public class ECUEditorMenuBar extends JMenuBar implements ActionListener {
}
}
private void saveAsRepository(Rom image, File lastRepositoryDir) throws Exception {
JFileChooser fc = new JFileChooser();
fc.setCurrentDirectory(lastRepositoryDir);
fc.setDialogTitle("Select Repository Directory");
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
// disable the "All files" option
fc.setAcceptAllFileFilterUsed(false);
String separator = System.getProperty("file.separator");
if (fc.showSaveDialog(parent) == JFileChooser.APPROVE_OPTION) {
boolean save = true;
File selectedDir = fc.getSelectedFile();
if (selectedDir.exists()) {
int option = showConfirmDialog(parent, selectedDir.getName() + " already exists! Overwrite?");
// option: 0 = Cancel, 1 = No
if (option == CANCEL_OPTION || option == 1) {
save = false;
}
}
if(save) {
Vector<Table> romTables = image.getTables();
for(int i=0;i<romTables.size();i++) {
Table curTable = romTables.get(i);
String category = curTable.getCategory();
String tableName = curTable.getName();
String tableDirString = selectedDir.getAbsolutePath() + separator + category;
File tableDir = new File(tableDirString.replace('/', '-'));
tableDir.mkdirs();
String tableFileString = tableDir.getAbsolutePath() + separator + tableName+".txt";
File tableFile = new File(tableFileString.replace('/', '-'));
if(tableFile.exists())
{
tableFile.delete();
}
tableFile.createNewFile();
StringBuffer tableData = curTable.getTableAsString();
BufferedWriter out = new BufferedWriter(new FileWriter(tableFile));
try {
out.write(tableData.toString());
} finally {
out.close();
}
}
}
}
}
private String getLastSelectedRomFileName() {
Rom lastSelectedRom = parent.getLastSelectedRom();
return lastSelectedRom == null ? "" : lastSelectedRom.getFileName() + " ";

View File

@ -99,6 +99,11 @@ public final class DOMSettingsBuilder {
IIOMetadataNode imageDir = new IIOMetadataNode("image_dir");
imageDir.setAttribute("path", settings.getLastImageDir().getAbsolutePath());
files.appendChild(imageDir);
// repository directory
IIOMetadataNode repositoryDir = new IIOMetadataNode(Settings.REPOSITORY_ELEMENT_NAME);
repositoryDir.setAttribute(Settings.REPOSITORY_ATTRIBUTE_NAME, settings.getLastRepositoryDir().getAbsolutePath());
files.appendChild(repositoryDir);
// ecu definition files
Vector<File> defFiles = settings.getEcuDefinitionFiles();

View File

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