overlay of live log data added to tables

git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@301 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
kascade 2006-09-26 09:55:49 +00:00
parent 6bae0f6c77
commit 25d0d315c9
13 changed files with 41200 additions and 14989 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -21,6 +21,7 @@
</address>
<conversions>
<conversion units="C" expr="x-40" format="0"/>
<conversion units="F" expr="32+9*(x-40)/5" format="0"/>
</conversions>
</parameter>
@ -163,7 +164,7 @@
<byte>0x00001C</byte>
</address>
<conversions>
<conversion units="V" expr="x*8/100" format="0.0"/>
<conversion units="V" expr="x*8/100" format="0.00"/>
</conversions>
</parameter>
@ -172,7 +173,7 @@
<byte>0x00001D</byte>
</address>
<conversions>
<conversion units="V" expr="x/50" format="0.0"/>
<conversion units="V" expr="x/50" format="0.00"/>
</conversions>
</parameter>
@ -181,7 +182,7 @@
<byte>0x00001E</byte>
</address>
<conversions>
<conversion units="V" expr="x/50" format="0.0"/>
<conversion units="V" expr="x/50" format="0.00"/>
</conversions>
</parameter>
@ -190,7 +191,7 @@
<byte>0x00001F</byte>
</address>
<conversions>
<conversion units="V" expr="x/50" format="0.0"/>
<conversion units="V" expr="x/50" format="0.00"/>
</conversions>
</parameter>
@ -620,7 +621,7 @@
<byte>0x0000D2</byte>
</address>
<conversions>
<conversion units="V" expr="x/50" format="0.0"/>
<conversion units="V" expr="x/50" format="0.00"/>
</conversions>
</parameter>
@ -629,7 +630,7 @@
<byte>0x0000D3</byte>
</address>
<conversions>
<conversion units="V" expr="x/50" format="0.0"/>
<conversion units="V" expr="x/50" format="0.00"/>
</conversions>
</parameter>
@ -665,7 +666,7 @@
<byte>0x0000FB</byte>
</address>
<conversions>
<conversion units="V" expr="x*8/100" format="0.0"/>
<conversion units="V" expr="x*8/100" format="0.00"/>
</conversions>
</parameter>

View File

@ -20,6 +20,7 @@ import enginuity.logger.ui.handler.DataUpdateHandlerManagerImpl;
import enginuity.logger.ui.handler.FileUpdateHandler;
import enginuity.logger.ui.handler.GraphUpdateHandler;
import enginuity.logger.ui.handler.LiveDataUpdateHandler;
import enginuity.logger.ui.handler.TableUpdateHandler;
import static enginuity.util.ParamChecker.checkNotNull;
import javax.swing.*;
@ -175,6 +176,7 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
private void initParameterUpdateHandlers() {
dataHandlerManager.addHandler(liveDataUpdateHandler);
dataHandlerManager.addHandler(fileUpdateHandler);
dataHandlerManager.addHandler(TableUpdateHandler.getInstance());
graphHandlerManager.addHandler(graphUpdateHandler);
graphHandlerManager.addHandler(fileUpdateHandler);
dashboardHandlerManager.addHandler(dashboardUpdateHandler);

View File

@ -0,0 +1,94 @@
package enginuity.logger.ui.handler;
import enginuity.logger.definition.EcuData;
import enginuity.logger.definition.EcuDataConvertor;
import enginuity.maps.Table;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
public final class TableUpdateHandler implements DataUpdateHandler {
private static final TableUpdateHandler INSTANCE = new TableUpdateHandler();
private final Map<String, List<TableWrapper>> tables = Collections.synchronizedMap(new HashMap<String, List<TableWrapper>>());
private TableUpdateHandler() {
}
public void registerData(EcuData ecuData) {
}
public void handleDataUpdate(EcuData ecuData, byte[] value, long timestamp) {
List<TableWrapper> wrappers = tables.get(ecuData.getId());
if (wrappers != null && !wrappers.isEmpty()) {
EcuDataConvertor[] convertors = ecuData.getConvertors();
for (TableWrapper wrapper : wrappers) {
try {
EcuDataConvertor convertor = convertors[wrapper.getLogParamConvertorIndex()];
wrapper.getTable().setLiveValue(convertor.convert(value));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public void deregisterData(EcuData ecuData) {
}
public void cleanUp() {
}
public void registerTable(Table table) {
TableWrapper wrapper = new TableWrapper(table);
String logParamId = wrapper.getLogParamId();
if (!tables.containsKey(logParamId)) {
tables.put(logParamId, new ArrayList<TableWrapper>());
}
tables.get(logParamId).add(wrapper);
}
public static TableUpdateHandler getInstance() {
return INSTANCE;
}
private static final class TableWrapper {
private final Table table;
private String logParamId;
private int logParamConvertorIndex;
public TableWrapper(Table table) {
this.table = table;
if (table.getLogParam() != null) {
StringTokenizer st = new StringTokenizer(table.getLogParam(), ":");
if (st.hasMoreTokens()) {
logParamId = st.nextToken();
if (st.hasMoreTokens()) {
try {
logParamConvertorIndex = Integer.parseInt(st.nextToken());
} catch (NumberFormatException e) {
logParamConvertorIndex = 0;
}
}
}
}
}
public Table getTable() {
return table;
}
public String getLogParamId() {
return logParamId;
}
public int getLogParamConvertorIndex() {
return logParamConvertorIndex;
}
}
}

View File

@ -1,6 +1,7 @@
package enginuity.maps;
import enginuity.Settings;
import enginuity.logger.ui.handler.TableUpdateHandler;
import enginuity.swing.TableFrame;
import static enginuity.util.ColorScaler.getScaledColor;
import enginuity.util.JEPUtil;
@ -82,6 +83,10 @@ public abstract class Table extends JPanel implements Serializable {
protected Settings settings;
protected boolean locked = false;
protected String logParam;
protected double liveValue = 0.0;
protected boolean overlayLog = false;
public Table(Settings settings) {
this.setSettings(settings);
this.setLayout(borderLayout);
@ -456,6 +461,15 @@ public abstract class Table extends JPanel implements Serializable {
this.flip = flipY;
}
public void setLogParam(String logParam) {
this.logParam = logParam;
TableUpdateHandler.getInstance().registerTable(this);
}
public String getLogParam() {
return logParam;
}
public String toString() {
/*String output = "\n ---- Table " + name + " ----" +
scale +
@ -1107,4 +1121,20 @@ public abstract class Table extends JPanel implements Serializable {
public void setLocked(boolean locked) {
this.locked = locked;
}
public void setOverlayLog(boolean overlayLog) {
this.overlayLog = overlayLog;
}
public void setLiveValue(double liveValue) {
this.liveValue = liveValue;
}
public double getLiveValue() {
return liveValue;
}
protected void highlightLiveData() {
}
}

View File

@ -6,7 +6,6 @@ import javax.swing.*;
import java.awt.*;
public class Table1D extends Table {
private Color axisColor = new Color(255, 255, 255);
public Table1D(Settings settings) {
@ -150,4 +149,12 @@ public class Table1D extends Table {
public void setAxisColor(Color axisColor) {
this.axisColor = axisColor;
}
public void setLiveValue(double value) {
liveValue = value;
Table parent = getAxisParent();
if (parent != null) {
parent.highlightLiveData();
}
}
}

View File

@ -2,6 +2,8 @@ package enginuity.maps;
import enginuity.Settings;
import enginuity.swing.TableFrame;
import enginuity.util.AxisRange;
import static enginuity.util.TableAxisUtil.getLiveDataRangeForAxis;
import javax.swing.*;
import java.awt.*;
@ -13,7 +15,7 @@ import java.io.IOException;
import java.util.StringTokenizer;
public class Table2D extends Table {
private static final String NEW_LINE = System.getProperty("line.separator");
private Table1D axis = new Table1D(new Settings());
public Table2D(Settings settings) {
@ -106,8 +108,8 @@ public class Table2D extends Table {
public void clearSelection() {
axis.clearSelection(true);
for (int i = 0; i < data.length; i++) {
data[i].setSelected(false);
for (DataCell aData : data) {
aData.setSelected(false);
}
}
@ -184,12 +186,11 @@ public class Table2D extends Table {
public void copyTable() {
// create string
String newline = System.getProperty("line.separator");
StringBuffer output = new StringBuffer("[Table2D]" + newline);
output.append(axis.getTableAsString() + newline);
StringBuffer output = new StringBuffer("[Table2D]" + NEW_LINE);
output.append(axis.getTableAsString()).append(NEW_LINE);
output.append(super.getTableAsString());
//copy to clipboard
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(output + ""), null);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(output.toString()), null);
}
public void paste() {
@ -205,18 +206,17 @@ public class Table2D extends Table {
String pasteType = st.nextToken();
if (pasteType.equalsIgnoreCase("[Table2D]")) { // Paste table
String newline = System.getProperty("line.separator");
String axisValues = "[Table1D]" + newline + st.nextToken(newline);
String dataValues = "[Table1D]" + newline + st.nextToken(newline);
String axisValues = "[Table1D]" + NEW_LINE + st.nextToken(NEW_LINE);
String dataValues = "[Table1D]" + NEW_LINE + st.nextToken(NEW_LINE);
// put axis in clipboard and paste
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(axisValues + ""), null);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(axisValues), null);
axis.paste();
// put datavalues in clipboard and paste
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(dataValues + ""), null);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(dataValues), null);
super.paste();
// reset clipboard
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(input + ""), null);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(input), null);
} else if (pasteType.equalsIgnoreCase("[Selection1D]")) { // paste selection
if (data[highlightY].isSelected()) {
@ -240,18 +240,17 @@ public class Table2D extends Table {
String pasteType = st.nextToken();
if (pasteType.equalsIgnoreCase("[Table2D]")) { // Paste table
String newline = System.getProperty("line.separator");
String axisValues = "[Table1D]" + newline + st.nextToken(newline);
String dataValues = "[Table1D]" + newline + st.nextToken(newline);
String axisValues = "[Table1D]" + NEW_LINE + st.nextToken(NEW_LINE);
String dataValues = "[Table1D]" + NEW_LINE + st.nextToken(NEW_LINE);
// put axis in clipboard and paste
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(axisValues + ""), null);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(axisValues), null);
axis.pasteCompare();
// put datavalues in clipboard and paste
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(dataValues + ""), null);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(dataValues), null);
super.pasteCompare();
// reset clipboard
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(input + ""), null);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(input), null);
}
}
@ -269,4 +268,27 @@ public class Table2D extends Table {
super.setScaleIndex(scaleIndex);
axis.setScaleByName(getScale().getName());
}
public void highlightLiveData() {
if (overlayLog) {
AxisRange range = getLiveDataRangeForAxis(axis);
clearSelection();
boolean first = true;
for (int i = range.getStartIndex(); i <= range.getEndIndex(); i++) {
int x = 0;
int y = i;
if (axis.getType() == TABLE_X_AXIS) {
x = i;
y = 0;
}
if (first) {
startHighlight(x, y);
first = false;
} else {
highlight(x, y);
}
}
stopHighlight();
}
}
}

View File

@ -3,7 +3,9 @@ package enginuity.maps;
import enginuity.Settings;
import enginuity.swing.TableFrame;
import enginuity.swing.VTextIcon;
import enginuity.util.AxisRange;
import static enginuity.util.ColorScaler.getScaledColor;
import static enginuity.util.TableAxisUtil.getLiveDataRangeForAxis;
import enginuity.xml.RomAttributeParser;
import javax.swing.*;
@ -209,8 +211,7 @@ public class Table3D extends Table {
} else {
// limits not set, scale based on table values
double scale = 0;
double scale;
if (high - low == 0) {
// if all values are the same, color will be middle value
scale = .5;
@ -854,6 +855,26 @@ public class Table3D extends Table {
}
}
public void highlightLiveData() {
if (overlayLog) {
AxisRange rangeX = getLiveDataRangeForAxis(xAxis);
AxisRange rangeY = getLiveDataRangeForAxis(yAxis);
clearSelection();
boolean first = true;
for (int x = rangeX.getStartIndex(); x <= rangeX.getEndIndex(); x++) {
for (int y = rangeY.getStartIndex(); y <= rangeY.getEndIndex(); y++) {
if (first) {
startHighlight(x, y);
first = false;
} else {
highlight(x, y);
}
}
}
stopHighlight();
}
}
public void setScaleIndex(int scaleIndex) {
super.setScaleIndex(scaleIndex);
xAxis.setScaleByName(getScale().getName());

View File

@ -11,7 +11,7 @@ public class TableMenuBar extends JMenuBar implements ActionListener {
private Table table;
private JMenu fileMenu = new JMenu("Table");
private JMenuItem graph = new JMenuItem("View Graph");
private JMenuItem overlay = new JMenuItem("Overlay Log");
private JRadioButtonMenuItem overlay = new JRadioButtonMenuItem("Overlay Log");
private JMenu compareMenu = new JMenu("Compare");
private JRadioButtonMenuItem compareOriginal = new JRadioButtonMenuItem("Show Changes");
@ -116,7 +116,6 @@ public class TableMenuBar extends JMenuBar implements ActionListener {
close.setMnemonic('X');
graph.setEnabled(false);
overlay.setEnabled(false);
}
public void actionPerformed(ActionEvent e) {
@ -133,7 +132,7 @@ public class TableMenuBar extends JMenuBar implements ActionListener {
table.getFrame().dispose();
} else if (e.getSource() == tableProperties) {
JOptionPane.showMessageDialog(table, (Object) (new TablePropertyPanel(table)),
JOptionPane.showMessageDialog(table, new TablePropertyPanel(table),
table.getName() + " Table Properties", JOptionPane.INFORMATION_MESSAGE);
} else if (e.getSource() == copySel) {
@ -164,6 +163,9 @@ public class TableMenuBar extends JMenuBar implements ActionListener {
} else if (e.getSource() == comparePercent) {
table.setCompareDisplay(Table.COMPARE_PERCENT);
} else if (e.getSource() == overlay) {
table.setOverlayLog(overlay.isSelected());
}
}
}

View File

@ -0,0 +1,20 @@
package enginuity.util;
public final class AxisRange {
private final int startIndex;
private final int endIndex;
public AxisRange(int startIndex, int endIndex) {
this.startIndex = startIndex;
this.endIndex = endIndex;
}
public int getStartIndex() {
return startIndex;
}
public int getEndIndex() {
return endIndex;
}
}

View File

@ -0,0 +1,47 @@
package enginuity.util;
import enginuity.maps.DataCell;
import enginuity.maps.Table1D;
public final class TableAxisUtil {
private TableAxisUtil() {
}
public static AxisRange getLiveDataRangeForAxis(Table1D axis) {
int startIdx = 0;
int endIdx = 0;
double liveAxisValue = axis.getLiveValue();
DataCell[] data = axis.getData();
for (int i = 0; i < data.length; i++) {
DataCell cell = data[i];
double axisValue = cell.getValue();
if (liveAxisValue == axisValue) {
startIdx = i;
endIdx = i;
break;
} else if (liveAxisValue < axisValue) {
startIdx = i - 1;
endIdx = i;
break;
} else {
startIdx = i;
endIdx = i + 1;
}
}
if (startIdx < 0) {
startIdx = 0;
}
if (startIdx >= data.length) {
startIdx = data.length - 1;
}
if (endIdx < 0) {
endIdx = 0;
}
if (endIdx >= data.length) {
endIdx = data.length - 1;
}
return new AxisRange(startIdx, endIdx);
}
}

View File

@ -359,13 +359,14 @@ public class DOMRomUnmarshaller {
table.setStorageAddress(RomAttributeParser.parseHexString(unmarshallAttribute(tableNode, "storageaddress", table.getStorageAddress())));
table.setDescription(unmarshallAttribute(tableNode, "description", table.getDescription()));
table.setDataSize(Integer.parseInt(unmarshallAttribute(tableNode, "sizey", unmarshallAttribute(tableNode, "sizex", table.getDataSize()))));
table.setFlip(Boolean.parseBoolean(unmarshallAttribute(tableNode, "flipy", unmarshallAttribute(tableNode, "flipx", table.getFlip() + ""))));
table.setFlip(Boolean.parseBoolean(unmarshallAttribute(tableNode, "flipy", unmarshallAttribute(tableNode, "flipx", String.valueOf(table.getFlip())))));
table.setUserLevel(Integer.parseInt(unmarshallAttribute(tableNode, "userlevel", table.getUserLevel())));
table.setLocked(Boolean.parseBoolean(unmarshallAttribute(tableNode, "locked", table.isLocked() + "")));
table.setLocked(Boolean.parseBoolean(unmarshallAttribute(tableNode, "locked", String.valueOf(table.isLocked()))));
table.setLogParam(unmarshallAttribute(tableNode, "logparam", table.getLogParam()));
if (table.getType() == Table.TABLE_3D) {
((Table3D) table).setFlipX(Boolean.parseBoolean(unmarshallAttribute(tableNode, "flipx", ((Table3D) table).getFlipX() + "")));
((Table3D) table).setFlipY(Boolean.parseBoolean(unmarshallAttribute(tableNode, "flipy", ((Table3D) table).getFlipY() + "")));
((Table3D) table).setFlipX(Boolean.parseBoolean(unmarshallAttribute(tableNode, "flipx", String.valueOf(((Table3D) table).getFlipX()))));
((Table3D) table).setFlipY(Boolean.parseBoolean(unmarshallAttribute(tableNode, "flipy", String.valueOf(((Table3D) table).getFlipY()))));
((Table3D) table).setSizeX(Integer.parseInt(unmarshallAttribute(tableNode, "sizex", ((Table3D) table).getSizeX())));
((Table3D) table).setSizeY(Integer.parseInt(unmarshallAttribute(tableNode, "sizey", ((Table3D) table).getSizeY())));
}
@ -432,7 +433,7 @@ public class DOMRomUnmarshaller {
DataCell dataCell = new DataCell();
dataCell.setDisplayValue(unmarshallText(n));
dataCell.setTable(table);
((Table1D) table).addStaticDataCell(dataCell);
table.addStaticDataCell(dataCell);
} else if (n.getNodeName().equalsIgnoreCase("description")) {
table.setDescription(unmarshallText(n));
@ -464,7 +465,7 @@ public class DOMRomUnmarshaller {
// check whether name matches base and set scale if so
if (scales.get(i).getName().equalsIgnoreCase(base)) {
try {
scale = (Scale) ObjectCloner.deepCopy((Object) scales.get(i));
scale = (Scale) ObjectCloner.deepCopy(scales.get(i));
} catch (Exception ex) {
JOptionPane.showMessageDialog(parent, new DebugPanel(ex,
@ -485,10 +486,10 @@ public class DOMRomUnmarshaller {
// get coarse increment with new attribute name (coarseincrement), else look for old (increment)
scale.setCoarseIncrement(Double.parseDouble(unmarshallAttribute(scaleNode, "coarseincrement",
unmarshallAttribute(scaleNode, "increment", scale.getCoarseIncrement() + "") + "")));
unmarshallAttribute(scaleNode, "increment", String.valueOf(scale.getCoarseIncrement())))));
scale.setFineIncrement(Double.parseDouble(unmarshallAttribute(scaleNode,
"fineincrement", scale.getFineIncrement() + "")));
"fineincrement", String.valueOf(scale.getFineIncrement()))));
return scale;
}
@ -517,6 +518,6 @@ public class DOMRomUnmarshaller {
}
private String unmarshallAttribute(Node node, String name, int defaultValue) {
return unmarshallAttribute(node, name, defaultValue + "");
return unmarshallAttribute(node, name, String.valueOf(defaultValue));
}
}