mirror of https://github.com/rusefi/RomRaider.git
dashboard panel updates
git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@294 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
parent
b9b3aefeb8
commit
c18b661cd1
|
@ -6,6 +6,7 @@ import enginuity.logger.definition.EcuDataLoaderImpl;
|
||||||
import enginuity.logger.definition.EcuParameter;
|
import enginuity.logger.definition.EcuParameter;
|
||||||
import enginuity.logger.definition.EcuSwitch;
|
import enginuity.logger.definition.EcuSwitch;
|
||||||
import enginuity.logger.io.serial.SerialPortRefresher;
|
import enginuity.logger.io.serial.SerialPortRefresher;
|
||||||
|
import enginuity.logger.ui.DashboardPanel;
|
||||||
import enginuity.logger.ui.EcuLoggerMenuBar;
|
import enginuity.logger.ui.EcuLoggerMenuBar;
|
||||||
import enginuity.logger.ui.LoggerDataTableModel;
|
import enginuity.logger.ui.LoggerDataTableModel;
|
||||||
import enginuity.logger.ui.MessageListener;
|
import enginuity.logger.ui.MessageListener;
|
||||||
|
@ -114,9 +115,9 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
||||||
fileUpdateHandler = new FileUpdateHandler(settings);
|
fileUpdateHandler = new FileUpdateHandler(settings);
|
||||||
dataTableModel = new LoggerDataTableModel();
|
dataTableModel = new LoggerDataTableModel();
|
||||||
liveDataUpdateHandler = new LiveDataUpdateHandler(dataTableModel);
|
liveDataUpdateHandler = new LiveDataUpdateHandler(dataTableModel);
|
||||||
graphPanel = new JPanel();
|
graphPanel = new JPanel(new SpringLayout());
|
||||||
graphUpdateHandler = new GraphUpdateHandler(graphPanel);
|
graphUpdateHandler = new GraphUpdateHandler(graphPanel);
|
||||||
dashboardPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
dashboardPanel = new DashboardPanel(new FlowLayout(FlowLayout.LEFT));
|
||||||
dashboardUpdateHandler = new DashboardUpdateHandler(dashboardPanel);
|
dashboardUpdateHandler = new DashboardUpdateHandler(dashboardPanel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,8 +138,7 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
||||||
setJMenuBar(buildMenubar());
|
setJMenuBar(buildMenubar());
|
||||||
|
|
||||||
// setup main panel
|
// setup main panel
|
||||||
JPanel mainPanel = new JPanel();
|
JPanel mainPanel = new JPanel(new BorderLayout());
|
||||||
mainPanel.setLayout(new BorderLayout());
|
|
||||||
mainPanel.add(buildControlToolbar(), NORTH);
|
mainPanel.add(buildControlToolbar(), NORTH);
|
||||||
mainPanel.add(buildTabbedPane(), CENTER);
|
mainPanel.add(buildTabbedPane(), CENTER);
|
||||||
mainPanel.add(buildStatusBar(), SOUTH);
|
mainPanel.add(buildStatusBar(), SOUTH);
|
||||||
|
@ -213,8 +213,7 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
||||||
}
|
}
|
||||||
|
|
||||||
private JComponent buildStatusBar() {
|
private JComponent buildStatusBar() {
|
||||||
JPanel statusBar = new JPanel();
|
JPanel statusBar = new JPanel(new BorderLayout());
|
||||||
statusBar.setLayout(new BorderLayout());
|
|
||||||
statusBar.add(statusBarLabel, CENTER);
|
statusBar.add(statusBarLabel, CENTER);
|
||||||
statusBar.setBorder(new BevelBorder(LOWERED));
|
statusBar.setBorder(new BevelBorder(LOWERED));
|
||||||
return statusBar;
|
return statusBar;
|
||||||
|
@ -275,7 +274,6 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
||||||
}
|
}
|
||||||
|
|
||||||
private JComponent buildGraphTab() {
|
private JComponent buildGraphTab() {
|
||||||
graphPanel.setLayout(new SpringLayout());
|
|
||||||
return new JScrollPane(graphPanel, VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
return new JScrollPane(graphPanel, VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
package enginuity.logger.ui;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public final class DashboardPanel extends JPanel {
|
||||||
|
private boolean resizing = false;
|
||||||
|
|
||||||
|
public DashboardPanel(LayoutManager layoutManager) {
|
||||||
|
super(layoutManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO: This thing is horrible and still dodgy - how to fix it properly???
|
||||||
|
public void doLayout() {
|
||||||
|
if (!resizing && getSize().getWidth() > getVisibleRect().getWidth()) {
|
||||||
|
setSize(new Dimension((int) getVisibleRect().getWidth(), (int) getSize().getHeight()));
|
||||||
|
super.doLayout();
|
||||||
|
resizing = true;
|
||||||
|
} else if (getSize().getWidth() <= getVisibleRect().getWidth()) {
|
||||||
|
super.doLayout();
|
||||||
|
resizing = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,10 +2,8 @@ package enginuity.logger.ui.handler;
|
||||||
|
|
||||||
import enginuity.logger.definition.ConvertorUpdateListener;
|
import enginuity.logger.definition.ConvertorUpdateListener;
|
||||||
import enginuity.logger.definition.EcuData;
|
import enginuity.logger.definition.EcuData;
|
||||||
import enginuity.logger.definition.EcuDataConvertor;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.border.BevelBorder;
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import static java.util.Collections.synchronizedMap;
|
import static java.util.Collections.synchronizedMap;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -13,27 +11,21 @@ import java.util.Map;
|
||||||
|
|
||||||
public final class DashboardUpdateHandler implements DataUpdateHandler, ConvertorUpdateListener {
|
public final class DashboardUpdateHandler implements DataUpdateHandler, ConvertorUpdateListener {
|
||||||
private final JPanel dashboardPanel;
|
private final JPanel dashboardPanel;
|
||||||
private final Map<EcuData, JLabel> gauges = synchronizedMap(new HashMap<EcuData, JLabel>());
|
private final Map<EcuData, Gauge> gauges = synchronizedMap(new HashMap<EcuData, Gauge>());
|
||||||
|
|
||||||
public DashboardUpdateHandler(JPanel dashboardPanel) {
|
public DashboardUpdateHandler(JPanel dashboardPanel) {
|
||||||
this.dashboardPanel = dashboardPanel;
|
this.dashboardPanel = dashboardPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerData(EcuData ecuData) {
|
public void registerData(EcuData ecuData) {
|
||||||
JLabel label = new JLabel();
|
Gauge gauge = new PlainGauge(ecuData);
|
||||||
label.setPreferredSize(new Dimension(100, 100));
|
gauges.put(ecuData, gauge);
|
||||||
label.setBorder(new BevelBorder(BevelBorder.LOWERED));
|
dashboardPanel.add(gauge);
|
||||||
label.setFont(label.getFont().deriveFont(Font.PLAIN, 50F));
|
|
||||||
label.setText(ecuData.getSelectedConvertor().format(0.0));
|
|
||||||
gauges.put(ecuData, label);
|
|
||||||
dashboardPanel.add(label);
|
|
||||||
repaintDashboardPanel();
|
repaintDashboardPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleDataUpdate(EcuData ecuData, byte[] value, long timestamp) {
|
public void handleDataUpdate(EcuData ecuData, byte[] value, long timestamp) {
|
||||||
JLabel label = gauges.get(ecuData);
|
gauges.get(ecuData).updateValue(value);
|
||||||
EcuDataConvertor convertor = ecuData.getSelectedConvertor();
|
|
||||||
label.setText(convertor.format(convertor.convert(value)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deregisterData(EcuData ecuData) {
|
public void deregisterData(EcuData ecuData) {
|
||||||
|
@ -46,10 +38,16 @@ public final class DashboardUpdateHandler implements DataUpdateHandler, Converto
|
||||||
}
|
}
|
||||||
|
|
||||||
public void notifyConvertorUpdate(EcuData updatedEcuData) {
|
public void notifyConvertorUpdate(EcuData updatedEcuData) {
|
||||||
|
Gauge gauge = gauges.get(updatedEcuData);
|
||||||
|
gauge.resetValue();
|
||||||
|
gauge.refreshTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void repaintDashboardPanel() {
|
private void repaintDashboardPanel() {
|
||||||
dashboardPanel.doLayout();
|
dashboardPanel.doLayout();
|
||||||
|
for (Component component : dashboardPanel.getComponents()) {
|
||||||
|
component.doLayout();
|
||||||
|
}
|
||||||
dashboardPanel.repaint();
|
dashboardPanel.repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
package enginuity.logger.ui.handler;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
|
||||||
|
public abstract class Gauge extends JPanel {
|
||||||
|
|
||||||
|
public abstract void refreshTitle();
|
||||||
|
|
||||||
|
public abstract void updateValue(byte[] value);
|
||||||
|
|
||||||
|
public abstract void resetValue();
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
package enginuity.logger.ui.handler;
|
||||||
|
|
||||||
|
import enginuity.logger.definition.EcuData;
|
||||||
|
import static enginuity.util.ParamChecker.checkNotNull;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.border.BevelBorder;
|
||||||
|
import java.awt.*;
|
||||||
|
import static java.awt.BorderLayout.CENTER;
|
||||||
|
import static java.awt.BorderLayout.NORTH;
|
||||||
|
|
||||||
|
public final class PlainGauge extends Gauge {
|
||||||
|
private static final double ZERO = 0.0;
|
||||||
|
private final EcuData ecuData;
|
||||||
|
private final JLabel data = new JLabel();
|
||||||
|
private final JLabel title = new JLabel();
|
||||||
|
|
||||||
|
public PlainGauge(EcuData ecuData) {
|
||||||
|
checkNotNull(ecuData, "ecuData");
|
||||||
|
this.ecuData = ecuData;
|
||||||
|
initLabelLayout();
|
||||||
|
initGaugeLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void refreshTitle() {
|
||||||
|
title.setText(ecuData.getName() + " (" + ecuData.getSelectedConvertor().getUnits() + ')');
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateValue(byte[] value) {
|
||||||
|
refreshValue(ecuData.getSelectedConvertor().convert(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void resetValue() {
|
||||||
|
refreshValue(ZERO);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initLabelLayout() {
|
||||||
|
data.setMinimumSize(new Dimension(150, 100));
|
||||||
|
data.setMaximumSize(new Dimension(150, 100));
|
||||||
|
data.setPreferredSize(new Dimension(150, 100));
|
||||||
|
data.setBorder(new BevelBorder(BevelBorder.LOWERED));
|
||||||
|
data.setFont(data.getFont().deriveFont(Font.PLAIN, 50F));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initGaugeLayout() {
|
||||||
|
refreshValue(ZERO);
|
||||||
|
refreshTitle();
|
||||||
|
setLayout(new BorderLayout());
|
||||||
|
setPreferredSize(new Dimension(150, 150));
|
||||||
|
setBackground(Color.GREEN);
|
||||||
|
add(data, CENTER);
|
||||||
|
add(title, NORTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void refreshValue(double value) {
|
||||||
|
data.setText(ecuData.getSelectedConvertor().format(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue