mirror of https://github.com/rusefi/RomRaider.git
- 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:
parent
f2cf7f587f
commit
a7508828f9
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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() + " ";
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue