dashboard panel updates

git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@294 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
kascade 2006-09-17 12:45:49 +00:00
parent b9b3aefeb8
commit c18b661cd1
5 changed files with 113 additions and 20 deletions

View File

@ -6,6 +6,7 @@ import enginuity.logger.definition.EcuDataLoaderImpl;
import enginuity.logger.definition.EcuParameter;
import enginuity.logger.definition.EcuSwitch;
import enginuity.logger.io.serial.SerialPortRefresher;
import enginuity.logger.ui.DashboardPanel;
import enginuity.logger.ui.EcuLoggerMenuBar;
import enginuity.logger.ui.LoggerDataTableModel;
import enginuity.logger.ui.MessageListener;
@ -114,9 +115,9 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
fileUpdateHandler = new FileUpdateHandler(settings);
dataTableModel = new LoggerDataTableModel();
liveDataUpdateHandler = new LiveDataUpdateHandler(dataTableModel);
graphPanel = new JPanel();
graphPanel = new JPanel(new SpringLayout());
graphUpdateHandler = new GraphUpdateHandler(graphPanel);
dashboardPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
dashboardPanel = new DashboardPanel(new FlowLayout(FlowLayout.LEFT));
dashboardUpdateHandler = new DashboardUpdateHandler(dashboardPanel);
}
@ -137,8 +138,7 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
setJMenuBar(buildMenubar());
// setup main panel
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
JPanel mainPanel = new JPanel(new BorderLayout());
mainPanel.add(buildControlToolbar(), NORTH);
mainPanel.add(buildTabbedPane(), CENTER);
mainPanel.add(buildStatusBar(), SOUTH);
@ -213,8 +213,7 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
}
private JComponent buildStatusBar() {
JPanel statusBar = new JPanel();
statusBar.setLayout(new BorderLayout());
JPanel statusBar = new JPanel(new BorderLayout());
statusBar.add(statusBarLabel, CENTER);
statusBar.setBorder(new BevelBorder(LOWERED));
return statusBar;
@ -275,7 +274,6 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
}
private JComponent buildGraphTab() {
graphPanel.setLayout(new SpringLayout());
return new JScrollPane(graphPanel, VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_AS_NEEDED);
}

View File

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

View File

@ -2,10 +2,8 @@ package enginuity.logger.ui.handler;
import enginuity.logger.definition.ConvertorUpdateListener;
import enginuity.logger.definition.EcuData;
import enginuity.logger.definition.EcuDataConvertor;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.*;
import static java.util.Collections.synchronizedMap;
import java.util.HashMap;
@ -13,27 +11,21 @@ import java.util.Map;
public final class DashboardUpdateHandler implements DataUpdateHandler, ConvertorUpdateListener {
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) {
this.dashboardPanel = dashboardPanel;
}
public void registerData(EcuData ecuData) {
JLabel label = new JLabel();
label.setPreferredSize(new Dimension(100, 100));
label.setBorder(new BevelBorder(BevelBorder.LOWERED));
label.setFont(label.getFont().deriveFont(Font.PLAIN, 50F));
label.setText(ecuData.getSelectedConvertor().format(0.0));
gauges.put(ecuData, label);
dashboardPanel.add(label);
Gauge gauge = new PlainGauge(ecuData);
gauges.put(ecuData, gauge);
dashboardPanel.add(gauge);
repaintDashboardPanel();
}
public void handleDataUpdate(EcuData ecuData, byte[] value, long timestamp) {
JLabel label = gauges.get(ecuData);
EcuDataConvertor convertor = ecuData.getSelectedConvertor();
label.setText(convertor.format(convertor.convert(value)));
gauges.get(ecuData).updateValue(value);
}
public void deregisterData(EcuData ecuData) {
@ -46,10 +38,16 @@ public final class DashboardUpdateHandler implements DataUpdateHandler, Converto
}
public void notifyConvertorUpdate(EcuData updatedEcuData) {
Gauge gauge = gauges.get(updatedEcuData);
gauge.resetValue();
gauge.refreshTitle();
}
private void repaintDashboardPanel() {
dashboardPanel.doLayout();
for (Component component : dashboardPanel.getComponents()) {
component.doLayout();
}
dashboardPanel.repaint();
}

View File

@ -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();
}

View File

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