Include author and version in property view; Optimize table loading

This commit is contained in:
Robin K 2022-04-15 16:35:07 +02:00
parent 796934782f
commit 4e257ad2ee
14 changed files with 241 additions and 288 deletions

View File

@ -12,4 +12,7 @@ LBLTRANS = Transmission:
LBLMDL = Model:
LBLSMDL = Submodel:
LBLYR = Year:
LBLTBLS = Tables:
LBLTBLS = Tables (%d):
LBLAUT = Def. Author:
LBLDEFVER = Def. Version:
LBLTBLCNT = Amount Of Tables:

View File

@ -480,13 +480,11 @@ public class ECUEditor extends AbstractFrame {
editor.setLastSelectedRom(null);
}
editor.refreshTableCompareMenus();
editor.getStatusPanel().setStatus(ECUEditor.rb.getString("STATUSREADY"));
editor.setCursor(null);
editor.refreshUI();
editor.refreshAfterNewRom();
rom.clearData();
System.gc();
rom.clearData();
}
public void closeAllImages() {
@ -553,23 +551,17 @@ public class ECUEditor extends AbstractFrame {
}
return images;
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
imageList.updateUI();
imageList.repaint();
rightPanel.updateUI();
rightPanel.repaint();
}
public void refreshUI()
{
getToolBar().updateButtons();
getEditorMenuBar().updateMenu();
}
public void refreshAfterNewRom() {
refreshTableCompareMenus();
imageList.updateUI();
imageList.repaint();
rightPanel.updateUI();
rightPanel.repaint();
refreshUI();
}
public void refreshTableCompareMenus() {
@ -580,8 +572,7 @@ public class ECUEditor extends AbstractFrame {
}
public void openImage(String filePath){
File file = new File(filePath);
openImage(file);
openImage(new File(filePath));
}
public void openImage(File inputFile){

View File

@ -325,10 +325,8 @@ public class OpenImageWorker extends SwingWorker<Void, Void> {
rom = null;
editor.getStatusPanel().update(finalStatus, 0);
editor.refreshTableCompareMenus();
editor.setCursor(null);
editor.refreshUI();
System.gc();
editor.refreshAfterNewRom();
}
else {
editor.getStatusPanel().update(ECUEditor.rb.getString("STATUSREADY"), 0);

View File

@ -61,7 +61,6 @@ import com.romraider.logger.ecu.definition.LoggerData;
import com.romraider.logger.ecu.ui.DataRegistrationBroker;
import com.romraider.logger.ecu.ui.tab.LoggerChartPanel;
import com.romraider.maps.DataCell;
import com.romraider.maps.DataCellView;
import com.romraider.maps.Rom;
import com.romraider.maps.Table;
import com.romraider.maps.Table2D;

View File

@ -56,7 +56,7 @@ public class DataCell implements Serializable {
private String liveValue = Settings.BLANK;
private String staticText = null;
private Rom rom;
//Index within table
private int index;

View File

@ -66,6 +66,7 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
private static final Logger LOGGER = Logger.getLogger(Rom.class);
private static final ResourceBundle rb = new ResourceUtil().getBundle(
Rom.class.getName());
private RomID romID;
private File definitionPath;
private String fileName = "";
@ -81,11 +82,12 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
private final HashMap<String, TableTreeNode> tableNodes = new HashMap<String, TableTreeNode>();
private LinkedList<ChecksumManager> checksumManagers = new LinkedList<ChecksumManager>();
public Rom(RomID romID) {
this.romID = romID;
}
//This makes sure we automatically sort the tables by name
public void sortedAdd(DefaultMutableTreeNode currentParent, DefaultMutableTreeNode newNode) {
boolean found = false;
for(int k = 0; k < currentParent.getChildCount(); k++){
@ -153,44 +155,24 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
}
}
}
/*
public void addTable(Table table) {
boolean found = false;
table.setRom(this);
for (int i = 0; i < tableNodes.size(); i++) {
if (tableNodes.values()[i].getTable().equalsWithoutData(table)) {
tableNodes.get(i).setUserObject(null);
tableNodes.remove(i);
tableNodes.put(table.getName(), new TableTreeNode(table));
found = true;
break;
}
}
if (!found) {
tableNodes.put(table.getName(), new TableTreeNode(table));
}
}
*/
public void addTableByName(Table table) {
table.setRom(this);
tableNodes.put(table.getName(), new TableTreeNode(table));
tableNodes.put(table.getName().toLowerCase(), new TableTreeNode(table));
}
public void removeTableByName(Table table) {
if(tableNodes.containsKey(table.getName())) {
tableNodes.remove(table.getName());
if(tableNodes.containsKey(table.getName().toLowerCase())) {
tableNodes.remove(table.getName().toLowerCase());
}
}
public Table getTableByName(String tableName) {
if(!tableNodes.containsKey(tableName)) {
if(!tableNodes.containsKey(tableName.toLowerCase())) {
return null;
}
else {
return tableNodes.get(tableName).getTable();
return tableNodes.get(tableName.toLowerCase()).getTable();
}
}
@ -232,7 +214,7 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
int currProgress = (int) (i / (double) size * 100);
progress.update(rb.getString("POPTABLES"), currProgress);
Table table = tableNodes.get(name).getTable();
Table table = tableNodes.get(name.toLowerCase()).getTable();
try {
if (table.getStorageAddress() >= 0) {
@ -255,7 +237,7 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
size--;
}
} else {
tableNodes.remove(table.getName());
tableNodes.remove(table.getName().toLowerCase());
size--;
}
@ -267,10 +249,11 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
}
for(String s: badKeys) {
tableNodes.remove(s);
tableNodes.remove(s.toLowerCase());
}
}
//TODO: Move to Subaru checksum
private void setEditStamp(byte[] binData, int address) {
byte[] stampData = new byte[4];
System.arraycopy(binData, address+204, stampData, 0, stampData.length);
@ -344,8 +327,8 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
return tables;
}
public Collection<TableTreeNode> getTableNodes() {
return this.tableNodes.values();
public HashMap<String, TableTreeNode> getTableNodes() {
return this.tableNodes;
}
public void setFileName(String fileName) {
@ -379,10 +362,8 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
public byte[] saveFile() {
final List<TableTreeNode> checksumTables = new ArrayList<TableTreeNode>();
for (TableTreeNode tableNode : tableNodes.values()) {
if (tableNode.getTable().getName().contains("Checksum Fix")) {
checksumTables.add(tableNode);
}
if(tableNodes.containsKey("checksum fix")) {
checksumTables.add(tableNodes.get("checksum fix"));
}
if (checksumTables.size() == 1) {
@ -494,32 +475,16 @@ public class Rom extends DefaultMutableTreeNode implements Serializable {
public void setAbstract(boolean isAbstract) {
this.isAbstract = isAbstract;
}
public void refreshTableCompareMenus() {
for(TableTreeNode tableNode : getTableNodes()) {
TableFrame f = tableNode.getFrame();
if(f != null) f.refreshSimilarOpenTables();
}
}
@Override
public DefaultMutableTreeNode getChildAt(int i) {
return (DefaultMutableTreeNode) super.getChildAt(i);
}
@Override
public DefaultMutableTreeNode getLastChild() {
return (DefaultMutableTreeNode) super.getLastChild();
}
public void addChecksumManager(ChecksumManager checksumManager) {
this.checksumManagers.add(checksumManager);
}
public ChecksumManager getChecksumType(int index) {
return checksumManagers.get(index);
}
public int getNumChecksumsManagers() {
return checksumManagers.size();
}

View File

@ -155,13 +155,11 @@ public class CompareImagesForm extends JFrame implements ActionListener {
}
private TableTreeNode findAndShowTable(Rom rom, String tableName) {
for(TableTreeNode node : rom.getTableNodes()) {
if(node != null && node.getTable().getName().equals(tableName)){
ECUEditorManager.getECUEditor().displayTable(node);
return node;
}
}
return null;
if(rom.getTableNodes().containsKey(tableName.toLowerCase())) {
return rom.getTableNodes().get(tableName.toLowerCase());
}
return null;
}
public void populateComboBoxes()
@ -184,11 +182,12 @@ public class CompareImagesForm extends JFrame implements ActionListener {
int different = 0;
int missing = 0;
for(TableTreeNode leftNode : left.getTableNodes())
//TODO: Utilize map correctly!
for(TableTreeNode leftNode : left.getTableNodes().values())
{
Boolean found = false;
Table leftTable = leftNode.getTable();
for(TableTreeNode rightNode : right.getTableNodes())
for(TableTreeNode rightNode : right.getTableNodes().values())
{
Table rightTable = rightNode.getTable();
@ -214,9 +213,9 @@ public class CompareImagesForm extends JFrame implements ActionListener {
}
// Check if rightTables has tables that do not exist in left table.
for(TableTreeNode rightFrame : right.getTableNodes()) {
for(TableTreeNode rightFrame : right.getTableNodes().values()) {
Boolean found = false;
for(TableTreeNode leftFrame : left.getTableNodes()) {
for(TableTreeNode leftFrame : left.getTableNodes().values()) {
if(leftFrame.getTable().getName().equalsIgnoreCase(rightFrame.getTable().getName()))
{
found = true;

View File

@ -587,7 +587,7 @@ public class ECUEditorMenuBar extends JMenuBar implements ActionListener {
String separator = System.getProperty("file.separator");
if(null != selectedDir) {
for(TableTreeNode treeNode : ECUEditorManager.getECUEditor().getLastSelectedRom().getTableNodes())
for(TableTreeNode treeNode : ECUEditorManager.getECUEditor().getLastSelectedRom().getTableNodes().values())
{
Table table = treeNode.getTable();
String category = table.getCategory();

View File

@ -66,7 +66,7 @@ public class JTableChooser extends JOptionPane implements MouseListener {
DefaultMutableTreeNode romNode = new DefaultMutableTreeNode(rom.getFileName());
rootNode.add(romNode);
for (TableTreeNode tableTreeNode : rom.getTableNodes()) {
for (TableTreeNode tableTreeNode : rom.getTableNodes().values()) {
Table table = tableTreeNode.getTable();
// use the length of the table name to set the width of the displayTree
// so the entire name can be read without being cut off on the right

View File

@ -43,7 +43,12 @@ public class RomCellRenderer implements TreeCellRenderer {
JLabel fileName;
JLabel carInfo;
DefaultTreeCellRenderer defaultRenderer = new DefaultTreeCellRenderer();
static ImageIcon icon1D = new ImageIcon(RomCellRenderer.class.getResource("/graphics/1d.gif"));
static ImageIcon icon2D = new ImageIcon(RomCellRenderer.class.getResource("/graphics/2d.gif"));
static ImageIcon icon3D = new ImageIcon(RomCellRenderer.class.getResource("/graphics/3d.gif"));
static ImageIcon iconSwitch = new ImageIcon(RomCellRenderer.class.getResource("/graphics/switch.gif"));
public RomCellRenderer() {
fileName = new JLabel(" ");
fileName.setFont(new Font("Tahoma", Font.BOLD, 11));
@ -52,24 +57,60 @@ public class RomCellRenderer implements TreeCellRenderer {
carInfo = new JLabel(" ");
carInfo.setFont(new Font("Tahoma", Font.PLAIN, 10));
carInfo.setHorizontalAlignment(JLabel.CENTER);
}
public static ImageIcon getIconForTable(Table t) {
ImageIcon icon = null;
public static ImageIcon getIconForTable(Table t) {
// display icon
if (t.getType() == Table.TableType.TABLE_1D) {
icon = new ImageIcon(RomCellRenderer.class.getResource("/graphics/1d.gif"));
return icon1D;
} else if (t.getType() == Table.TableType.TABLE_2D) {
icon = new ImageIcon(RomCellRenderer.class.getResource("/graphics/2d.gif"));
}else if (t.getType() == Table.TableType.TABLE_3D) {
icon = new ImageIcon(RomCellRenderer.class.getResource("/graphics/3d.gif"));
return icon2D;
} else if (t.getType() == Table.TableType.TABLE_3D) {
return icon3D;
} else if (t.getType() == Table.TableType.SWITCH) {
icon = new ImageIcon(RomCellRenderer.class.getResource("/graphics/switch.gif"));
return iconSwitch;
}
return icon;
return null;
}
private String buildCarInfoText(Rom rom) {
String carInfoText = "<html>";
RomID id = rom.getRomID();
if(id.getVersion() != null)
carInfoText+= "<B><font color=blue>" + id.getVersion() + " </font></B>";
if(rom.getRomIDString() != null)
carInfoText+=rom.getRomIDString() + ", ";
if(id.getCaseId() != null)
carInfoText+=id.getCaseId() + "; ";
if(id.getYear() != null)
carInfoText+=id.getYear() + " ";
if(id.getMake() != null)
carInfoText+=id.getMake() + " ";
if(id.getModel() != null)
carInfoText+=id.getModel() + " ";
if(id.getSubModel() != null)
carInfoText+=id.getSubModel();
if(id.getTransmission() != null)
carInfoText+=", " + id.getTransmission();
if(carInfoText.endsWith(", ") || carInfoText.endsWith("; "))
carInfoText = carInfoText.substring(0, carInfoText.length() - 2);
if(id.getAuthor() != null)
carInfoText+=" by " + id.getAuthor();
carInfoText+= "</html>";
return carInfoText;
}
@Override
@ -87,54 +128,9 @@ public class RomCellRenderer implements TreeCellRenderer {
} else {
fileName.setText("+ " + rom.getFileName());
}
carInfo.setText(buildCarInfoText(rom));
String carInfoText = "<html>";
RomID id = rom.getRomID();
if(id.getVersion() != null)
carInfoText+= "<B><font color=blue>" + id.getVersion() + " </font></B>";
if(rom.getRomIDString() != null)
carInfoText+=rom.getRomIDString() + ", ";
if(id.getCaseId() != null)
carInfoText+=id.getCaseId() + "; ";
if(id.getYear() != null)
carInfoText+=id.getYear() + " ";
if(id.getMake() != null)
carInfoText+=id.getMake() + " ";
if(id.getModel() != null)
carInfoText+=id.getModel() + " ";
if(id.getSubModel() != null)
carInfoText+=id.getSubModel();
if(id.getTransmission() != null)
carInfoText+=", " + id.getTransmission();
if(carInfoText.endsWith(", ") || carInfoText.endsWith("; "))
carInfoText = carInfoText.substring(0, carInfoText.length() - 2);
if(id.getAuthor() != null)
carInfoText+=" by " + id.getAuthor();
carInfoText+= "</html>";
/*
String carInfoText = rom.getRomIDString() + ", " +
rom.getRomID().getCaseId() + "; " +
rom.getRomID().getYear() + " " +
rom.getRomID().getMake() + " " +
rom.getRomID().getModel() + " " +
rom.getRomID().getSubModel() + ", " +
rom.getRomID().getTransmission();*/
//TODO: Bit of a hack to not show the string when most fields arent set
carInfoText = carInfoText.replace("null, ; Unknown null null null, null", "");
carInfo.setText(carInfoText);
JPanel renderer = new JPanel(new GridLayout(2, 1));
renderer.add(fileName);
renderer.add(carInfo);

View File

@ -22,13 +22,19 @@ package com.romraider.swing;
import java.util.ResourceBundle;
import com.romraider.maps.Rom;
import com.romraider.maps.RomID;
import com.romraider.util.ResourceUtil;
import javax.swing.*;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.AbstractListModel;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
public class RomPropertyPanel extends javax.swing.JPanel {
public class RomPropertyPanel extends JPanel {
private static final long serialVersionUID = 5583360728106071942L;
private static final ResourceBundle rb = new ResourceUtil().getBundle(
@ -37,65 +43,72 @@ public class RomPropertyPanel extends javax.swing.JPanel {
public RomPropertyPanel(Rom rom) {
initComponents();
RomID romID = rom.getRomID();
// populate fields
fileName.setText(rom.getFileName());
xmlID.setText(rom.getRomID().getXmlid());
ecuVersion.setText(rom.getRomID().getCaseId());
xmlID.setText(romID.getXmlid());
ecuVersion.setText(romID.getCaseId());
if (rom.getRealFileSize() > 1024) {
fileSize.setText((rom.getRealFileSize() / 1024) + "kB");
}
else {
fileSize.setText(rom.getRealFileSize() + "B");
}
internalID.setText(rom.getRomID().getInternalIdString());
storageAddress.setText("0x" + Integer.toHexString(rom.getRomID().getInternalIdAddress()));
internalID.setText(romID.getInternalIdString());
storageAddress.setText("0x" + Integer.toHexString(romID.getInternalIdAddress()));
make.setText(rom.getRomID().getMake());
market.setText(rom.getRomID().getMarket());
year.setText(rom.getRomID().getYear());
model.setText(rom.getRomID().getModel());
submodel.setText(rom.getRomID().getSubModel());
transmission.setText(rom.getRomID().getTransmission());
editStamp.setText(rom.getRomID().getEditStamp());
checksum.setText(rom.getRomID().getChecksum());
make.setText(romID.getMake());
market.setText(romID.getMarket());
year.setText(romID.getYear());
model.setText(romID.getModel());
submodel.setText(romID.getSubModel());
transmission.setText(romID.getTransmission());
editStamp.setText(romID.getEditStamp());
checksum.setText(romID.getChecksum());
version.setText(romID.getVersion());
author.setText(romID.getAuthor());
lblTables.setText(String.format(rb.getString("LBLTBLS"), rom.getTables().size()));
tableList.setListData(rom.getTables());
}
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
private void initComponents() {
lblFilename = new javax.swing.JLabel();
fileName = new javax.swing.JLabel();
lblECURevision = new javax.swing.JLabel();
xmlID = new javax.swing.JLabel();
lblFilesize = new javax.swing.JLabel();
fileSize = new javax.swing.JLabel();
lblEcuVersion = new javax.swing.JLabel();
ecuVersion = new javax.swing.JLabel();
lblInternalId = new javax.swing.JLabel();
internalID = new javax.swing.JLabel();
lblStorageAddress = new javax.swing.JLabel();
storageAddress = new javax.swing.JLabel();
lblMake = new javax.swing.JLabel();
lblMarket = new javax.swing.JLabel();
lblTransmission = new javax.swing.JLabel();
lblModel = new javax.swing.JLabel();
lblSubmodel = new javax.swing.JLabel();
lblYear = new javax.swing.JLabel();
make = new javax.swing.JLabel();
market = new javax.swing.JLabel();
year = new javax.swing.JLabel();
model = new javax.swing.JLabel();
submodel = new javax.swing.JLabel();
transmission = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
tableList = new javax.swing.JList();
lblTables = new javax.swing.JLabel();
lblEditStamp = new javax.swing.JLabel();
editStamp = new javax.swing.JLabel();
lblChecksum = new javax.swing.JLabel();
checksum = new javax.swing.JLabel();
lblFilename = new JLabel();
fileName = new JLabel();
lblECURevision = new JLabel();
xmlID = new JLabel();
lblFilesize = new JLabel();
fileSize = new JLabel();
lblEcuVersion = new JLabel();
ecuVersion = new JLabel();
lblInternalId = new JLabel();
internalID = new JLabel();
lblStorageAddress = new JLabel();
storageAddress = new JLabel();
lblMake = new JLabel();
lblMarket = new JLabel();
lblTransmission = new JLabel();
lblModel = new JLabel();
lblSubmodel = new JLabel();
lblYear = new JLabel();
lblVersion = new JLabel();
lblAuthor = new JLabel();
version = new JLabel();
author = new JLabel();
make = new JLabel();
market = new JLabel();
year = new JLabel();
model = new JLabel();
submodel = new JLabel();
transmission = new JLabel();
jScrollPane1 = new JScrollPane();
tableList = new JList();
lblTables = new JLabel();
lblEditStamp = new JLabel();
editStamp = new JLabel();
lblChecksum = new JLabel();
checksum = new JLabel();
lblChecksum.setText(rb.getString("LBLCHKSUM"));
lblEditStamp.setText(rb.getString("LBLEDIT"));
@ -111,26 +124,10 @@ public class RomPropertyPanel extends javax.swing.JPanel {
lblModel.setText(rb.getString("LBLMDL"));
lblSubmodel.setText(rb.getString("LBLSMDL"));
lblYear.setText(rb.getString("LBLYR"));
tableList.setModel(new javax.swing.AbstractListModel() {
/**
*
*/
private static final long serialVersionUID = -8498656966410761726L;
String[] strings = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"};
public int getSize() {
return strings.length;
}
public Object getElementAt(int i) {
return strings[i];
}
});
lblAuthor.setText(rb.getString("LBLAUT"));
lblVersion.setText(rb.getString("LBLDEFVER"));
jScrollPane1.setViewportView(tableList);
lblTables.setText(rb.getString("LBLTBLS"));
GroupLayout layout = new GroupLayout(this);
layout.setHorizontalGroup(
layout.createParallelGroup(Alignment.LEADING)
@ -141,6 +138,14 @@ public class RomPropertyPanel extends javax.swing.JPanel {
.addComponent(lblFilename)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(fileName, GroupLayout.PREFERRED_SIZE, 302, GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(lblAuthor)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(author, GroupLayout.PREFERRED_SIZE, 302, GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(lblVersion)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(version, GroupLayout.PREFERRED_SIZE, 302, GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(Alignment.LEADING)
.addComponent(lblECURevision)
@ -188,6 +193,14 @@ public class RomPropertyPanel extends javax.swing.JPanel {
.addGroup(layout.createParallelGroup(Alignment.LEADING)
.addComponent(lblFilename)
.addComponent(fileName))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(Alignment.LEADING)
.addComponent(lblAuthor)
.addComponent(author))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(Alignment.LEADING)
.addComponent(lblVersion)
.addComponent(version))
.addGap(26)
.addGroup(layout.createParallelGroup(Alignment.LEADING)
.addComponent(lblECURevision)
@ -244,37 +257,41 @@ public class RomPropertyPanel extends javax.swing.JPanel {
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel ecuVersion;
private javax.swing.JLabel fileName;
private javax.swing.JLabel fileSize;
private javax.swing.JLabel internalID;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel lblECURevision;
private javax.swing.JLabel lblEcuVersion;
private javax.swing.JLabel lblFilename;
private javax.swing.JLabel lblFilesize;
private javax.swing.JLabel lblInternalId;
private javax.swing.JLabel lblMake;
private javax.swing.JLabel lblMarket;
private javax.swing.JLabel lblModel;
private javax.swing.JLabel lblStorageAddress;
private javax.swing.JLabel lblSubmodel;
private javax.swing.JLabel lblTables;
private javax.swing.JLabel lblTransmission;
private javax.swing.JLabel lblYear;
private javax.swing.JLabel make;
private javax.swing.JLabel market;
private javax.swing.JLabel model;
private javax.swing.JLabel storageAddress;
private javax.swing.JLabel submodel;
private javax.swing.JList tableList;
private javax.swing.JLabel transmission;
private javax.swing.JLabel xmlID;
private javax.swing.JLabel year;
private javax.swing.JLabel lblEditStamp;
private javax.swing.JLabel editStamp;
private javax.swing.JLabel lblChecksum;
private javax.swing.JLabel checksum;
private JLabel ecuVersion;
private JLabel fileName;
private JLabel fileSize;
private JLabel internalID;
private JScrollPane jScrollPane1;
private JLabel lblECURevision;
private JLabel lblEcuVersion;
private JLabel lblFilename;
private JLabel lblFilesize;
private JLabel lblInternalId;
private JLabel lblMake;
private JLabel lblMarket;
private JLabel lblModel;
private JLabel lblStorageAddress;
private JLabel lblSubmodel;
private JLabel lblTables;
private JLabel lblTransmission;
private JLabel lblYear;
private JLabel make;
private JLabel market;
private JLabel model;
private JLabel storageAddress;
private JLabel submodel;
private JList tableList;
private JLabel transmission;
private JLabel xmlID;
private JLabel year;
private JLabel lblEditStamp;
private JLabel editStamp;
private JLabel lblChecksum;
private JLabel checksum;
private JLabel lblVersion;
private JLabel version;
private JLabel author;
private JLabel lblAuthor;
// End of variables declaration//GEN-END:variables
}

View File

@ -241,19 +241,17 @@ public class TableFrame extends JInternalFrame implements InternalFrameListener,
if(images.size() > 1) {
for(Rom rom : images) {
for(TableTreeNode tableNode : rom.getTableNodes()) {
if(tableNode.getTable().getRom() == getTable().getRom()) break;
if(tableNode.getTable().getName().equalsIgnoreCase(getTable().getName())) {
JRadioButtonMenuItem similarTable = new TableMenuItem(tableNode.getTable());
similarTable.setToolTipText(tableNode.getTable().getName());
similarTable.addActionListener(this);
similarTables.add(similarTable);
addedTable = true;
break;
if (rom == getTable().getRom()) continue;
if(rom.getTableNodes().containsKey(getTable().getName().toLowerCase())) {
TableTreeNode tableNode = rom.getTableNodes().get(getTable().getName().toLowerCase());
JRadioButtonMenuItem similarTable = new TableMenuItem(tableNode.getTable());
similarTable.setToolTipText(tableNode.getTable().getName());
similarTable.addActionListener(this);
similarTables.add(similarTable);
addedTable = true;
break;
}
}
}
}
if(addedTable)

View File

@ -1,6 +1,6 @@
/*
* RomRaider Open-Source Tuning, Logging and Reflashing
* Copyright (C) 2006-2021 RomRaider.com
* Copyright (C) 2006-2022 RomRaider.com
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -23,9 +23,7 @@ import static com.romraider.xml.DOMHelper.unmarshallAttribute;
import static com.romraider.xml.DOMHelper.unmarshallText;
import static org.w3c.dom.Node.ELEMENT_NODE;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.management.modelmbean.XMLParseException;
@ -53,7 +51,7 @@ import com.romraider.util.SettingsManager;
public class TableScaleUnmarshaller {
private static final Logger LOGGER = Logger.getLogger(TableScaleUnmarshaller.class);
private final Map<String, Integer> tableNames = new HashMap<String, Integer>();
private final List<Scale> scales = new ArrayList<Scale>();
private final Map<String, Scale> scales = new HashMap<String, Scale>();
private String memModelEndian = null;
public void setMemModelEndian(String endian) {
@ -354,20 +352,13 @@ public class TableScaleUnmarshaller {
if (!base.equalsIgnoreCase("none")) {
// check whether base value matches the name of a an existing
// scalingbase, if so, inherit from scalingbase
for (Scale scaleItem : scales) {
if (scaleItem.getName().equalsIgnoreCase(base)) {
try {
scale = (Scale) ObjectCloner.deepCopy(scaleItem);
} catch (Exception ex) {
JOptionPane.showMessageDialog(
ECUEditorManager.getECUEditor(),
new DebugPanel(ex, SettingsManager.getSettings()
.getSupportURL()), "Exception",
JOptionPane.ERROR_MESSAGE);
}
}
}
if(scales.containsKey(base.toLowerCase())) {
try {
scale = (Scale) ObjectCloner.deepCopy(scales.get(base.toLowerCase()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
// Set Category to Default if missing or not inherited from scalingbase
@ -380,7 +371,7 @@ public class TableScaleUnmarshaller {
// name, otherwise use none
if (!scale.getCategory().equalsIgnoreCase("Raw Value") &&
scale.getName().equalsIgnoreCase("Raw Value")) {
scale.setName(unmarshallAttribute(scaleNode, "name",
scale.setName(unmarshallAttribute(scaleNode, "name",
unmarshallAttribute(scaleNode, "units", "none")));
}
@ -392,7 +383,7 @@ public class TableScaleUnmarshaller {
String name = attr.getNodeName();
String value = attr.getNodeValue();
if(name.equalsIgnoreCase("units"))scale.setUnit(value);
if(name.equalsIgnoreCase("units")) scale.setUnit(value);
else if(name.equalsIgnoreCase("expression")) scale.setExpression(value);
else if(name.equalsIgnoreCase("format")) scale.setFormat(value);
else if(name.equalsIgnoreCase("max")) scale.setMax(Double.parseDouble(value));
@ -402,18 +393,13 @@ public class TableScaleUnmarshaller {
else if(name.equalsIgnoreCase("fineincrement")) scale.setFineIncrement(Double.parseDouble(value));
}
for (Scale s : scales) {
if (s.equals(scale)) {
return s;
}
}
scales.add(scale);
//Keep track of the scales if the base attribute it used later
scales.put(scale.getName().toLowerCase(), scale);
return scale;
}
// for unit testing
public List<Scale> getScales() {
public Map<String, Scale> getScales() {
return scales;
}
}

View File

@ -24,6 +24,7 @@ import static org.junit.Assert.assertEquals;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.w3c.dom.Document;
@ -43,13 +44,13 @@ public class TableScaleUnmarshallerTest {
public void testScalingBase() {
final List<Scale> expectedScales = buildExpectedScales();
tableScaleHandler.unmarshallBaseScales(document.getDocumentElement());
final List<Scale> scales = tableScaleHandler.getScales();
for (final Scale scale : scales) {
final Map<String, Scale> scales = tableScaleHandler.getScales();
for (final Scale scale : scales.values()) {
System.out.println(scale);
}
assertEquals(expectedScales.size(), scales.size());
for (Scale expectedScale : expectedScales) {
assertEquals(true, scales.contains(expectedScale));
assertEquals(true, scales.values().contains(expectedScale));
}
}