mirror of https://github.com/rusefi/RomRaider.git
tabs further split out to allow monitoring of different parameters across different tabs
git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@261 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
parent
738ec2917e
commit
e952c89012
|
@ -25,6 +25,7 @@ import static javax.swing.JSplitPane.HORIZONTAL_SPLIT;
|
|||
import static javax.swing.JSplitPane.VERTICAL_SPLIT;
|
||||
import javax.swing.border.BevelBorder;
|
||||
import static javax.swing.border.BevelBorder.LOWERED;
|
||||
import javax.swing.table.TableModel;
|
||||
import java.awt.*;
|
||||
import static java.awt.BorderLayout.CENTER;
|
||||
import static java.awt.BorderLayout.NORTH;
|
||||
|
@ -37,17 +38,36 @@ import java.beans.PropertyChangeEvent;
|
|||
import java.beans.PropertyChangeListener;
|
||||
import java.util.List;
|
||||
|
||||
/*
|
||||
TODO: add better debug logging, preferably to a file and switchable (on/off)
|
||||
TODO: finish dashboard tab
|
||||
TODO: add configuration screen (log file destination, etc)
|
||||
TODO: add user definable addresses
|
||||
TODO: Clean up this class!
|
||||
*/
|
||||
|
||||
public final class EcuLogger extends JFrame implements WindowListener, PropertyChangeListener, MessageListener {
|
||||
private static final String HEADING_PARAMETERS = "Parameters";
|
||||
private static final String HEADING_SWITCHES = "Switches";
|
||||
private final Settings settings = new Settings();
|
||||
private final LoggerController controller = new LoggerControllerImpl(settings, this);
|
||||
private final JLabel statusBarLabel = new JLabel("Enginuity ECU Logger");
|
||||
private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.BOTTOM);
|
||||
private final JComboBox portsComboBox = new JComboBox();
|
||||
private final LoggerDataTableModel dataTableModel = new LoggerDataTableModel();
|
||||
private final JPanel graphPanel = new JPanel();
|
||||
private final DataUpdateHandlerManager handlerManager = new DataUpdateHandlerManagerImpl();
|
||||
private final ParameterRegistrationBroker broker = new ParameterRegistrationBrokerImpl(handlerManager, settings, this);
|
||||
private final ParameterListTableModel paramListTableModel = new ParameterListTableModel(broker, "Parameters");
|
||||
private final ParameterListTableModel switchListTableModel = new ParameterListTableModel(broker, "Switches");
|
||||
private final DataUpdateHandlerManager dataHandlerManager = new DataUpdateHandlerManagerImpl();
|
||||
private final ParameterRegistrationBroker dataTabBroker = new ParameterRegistrationBrokerImpl(controller, dataHandlerManager);
|
||||
private final ParameterListTableModel dataTabParamListTableModel = new ParameterListTableModel(dataTabBroker, HEADING_PARAMETERS);
|
||||
private final ParameterListTableModel dataTabSwitchListTableModel = new ParameterListTableModel(dataTabBroker, HEADING_SWITCHES);
|
||||
private final DataUpdateHandlerManager graphHandlerManager = new DataUpdateHandlerManagerImpl();
|
||||
private final ParameterRegistrationBroker graphTabBroker = new ParameterRegistrationBrokerImpl(controller, graphHandlerManager);
|
||||
private final ParameterListTableModel graphTabParamListTableModel = new ParameterListTableModel(graphTabBroker, HEADING_PARAMETERS);
|
||||
private final ParameterListTableModel graphTabSwitchListTableModel = new ParameterListTableModel(graphTabBroker, HEADING_SWITCHES);
|
||||
private final DataUpdateHandlerManager dashboardHandlerManager = new DataUpdateHandlerManagerImpl();
|
||||
private final ParameterRegistrationBroker dashboardTabBroker = new ParameterRegistrationBrokerImpl(controller, dashboardHandlerManager);
|
||||
private final ParameterListTableModel dashboardTabParamListTableModel = new ParameterListTableModel(dashboardTabBroker, HEADING_PARAMETERS);
|
||||
private final ParameterListTableModel dashboardTabSwitchListTableModel = new ParameterListTableModel(dashboardTabBroker, HEADING_SWITCHES);
|
||||
|
||||
public EcuLogger(String title) {
|
||||
super(title);
|
||||
|
@ -64,22 +84,12 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
}
|
||||
|
||||
private void initUserInterface() {
|
||||
// build left and right components of split pane
|
||||
JComponent leftComponent = buildLeftComponent();
|
||||
JComponent rightComponent = buildRightComponent();
|
||||
|
||||
// build split pane
|
||||
JSplitPane splitPane = buildSplitPane(leftComponent, rightComponent);
|
||||
splitPane.addPropertyChangeListener(this);
|
||||
|
||||
// build statusbar
|
||||
JComponent statusBar = buildStatusBar();
|
||||
|
||||
// setup main panel
|
||||
JPanel mainPanel = new JPanel();
|
||||
mainPanel.setLayout(new BorderLayout());
|
||||
mainPanel.add(splitPane, CENTER);
|
||||
mainPanel.add(statusBar, SOUTH);
|
||||
mainPanel.add(buildControlToolbar(), NORTH);
|
||||
mainPanel.add(buildTabbedPane(), CENTER);
|
||||
mainPanel.add(buildStatusBar(), SOUTH);
|
||||
|
||||
// add to container
|
||||
getContentPane().add(mainPanel);
|
||||
|
@ -91,11 +101,15 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
dataLoader.loadFromXml(settings.getLoggerConfigFilePath(), settings.getLoggerProtocol());
|
||||
List<EcuParameter> ecuParams = dataLoader.getEcuParameters();
|
||||
for (EcuParameter ecuParam : ecuParams) {
|
||||
paramListTableModel.addParam(ecuParam);
|
||||
dataTabParamListTableModel.addParam(ecuParam);
|
||||
graphTabParamListTableModel.addParam(ecuParam);
|
||||
dashboardTabParamListTableModel.addParam(ecuParam);
|
||||
}
|
||||
List<EcuSwitch> ecuSwitches = dataLoader.getEcuSwitches();
|
||||
for (EcuSwitch ecuSwitch : ecuSwitches) {
|
||||
switchListTableModel.addParam(ecuSwitch);
|
||||
dataTabSwitchListTableModel.addParam(ecuSwitch);
|
||||
graphTabSwitchListTableModel.addParam(ecuSwitch);
|
||||
dashboardTabSwitchListTableModel.addParam(ecuSwitch);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
@ -104,10 +118,29 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
}
|
||||
|
||||
private void initParameterUpdateHandlers() {
|
||||
handlerManager.addHandler(new LiveDataUpdateHandler(dataTableModel));
|
||||
handlerManager.addHandler(new GraphUpdateHandler(graphPanel));
|
||||
handlerManager.addHandler(new DashboardUpdateHandler());
|
||||
handlerManager.addHandler(new FileUpdateHandler(settings));
|
||||
FileUpdateHandler fileUpdateHandler = new FileUpdateHandler(settings);
|
||||
dataHandlerManager.addHandler(new LiveDataUpdateHandler(dataTableModel));
|
||||
dataHandlerManager.addHandler(fileUpdateHandler);
|
||||
graphHandlerManager.addHandler(new GraphUpdateHandler(graphPanel));
|
||||
graphHandlerManager.addHandler(fileUpdateHandler);
|
||||
dashboardHandlerManager.addHandler(new DashboardUpdateHandler());
|
||||
dashboardHandlerManager.addHandler(fileUpdateHandler);
|
||||
}
|
||||
|
||||
private JComponent buildTabbedPane() {
|
||||
tabbedPane.add("Data", buildSplitPane(buildParamListPane(dataTabParamListTableModel, dataTabSwitchListTableModel), buildDataTab()));
|
||||
tabbedPane.add("Graph", buildSplitPane(buildParamListPane(graphTabParamListTableModel, graphTabSwitchListTableModel), buildGraphTab()));
|
||||
tabbedPane.add("Dashboard", buildSplitPane(buildParamListPane(dashboardTabParamListTableModel, dashboardTabSwitchListTableModel), buildDashboardTab()));
|
||||
return tabbedPane;
|
||||
}
|
||||
|
||||
private JComponent buildParamListPane(TableModel paramListTableModel, TableModel switchListTableModel) {
|
||||
JScrollPane paramList = new JScrollPane(new JTable(paramListTableModel), VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||
JScrollPane switchList = new JScrollPane(new JTable(switchListTableModel), VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||
JSplitPane splitPane1 = new JSplitPane(VERTICAL_SPLIT, paramList, switchList);
|
||||
splitPane1.setDividerSize(2);
|
||||
splitPane1.setDividerLocation(300);
|
||||
return splitPane1;
|
||||
}
|
||||
|
||||
private JComponent buildStatusBar() {
|
||||
|
@ -118,27 +151,12 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
return statusBar;
|
||||
}
|
||||
|
||||
private JComponent buildLeftComponent() {
|
||||
JScrollPane paramList = new JScrollPane(new JTable(paramListTableModel), VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||
JScrollPane switchList = new JScrollPane(new JTable(switchListTableModel), VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||
JSplitPane splitPane = new JSplitPane(VERTICAL_SPLIT, paramList, switchList);
|
||||
splitPane.setDividerSize(2);
|
||||
splitPane.setDividerLocation(300);
|
||||
return splitPane;
|
||||
}
|
||||
|
||||
|
||||
private JComponent buildRightComponent() {
|
||||
JPanel rightPanel = new JPanel(new BorderLayout());
|
||||
rightPanel.add(buildControlToolbar(), NORTH);
|
||||
rightPanel.add(buildTabbedDataPane(), CENTER);
|
||||
return rightPanel;
|
||||
}
|
||||
|
||||
private JSplitPane buildSplitPane(JComponent leftComponent, JComponent rightComponent) {
|
||||
JSplitPane splitPane = new JSplitPane(HORIZONTAL_SPLIT, leftComponent, rightComponent);
|
||||
splitPane.setDividerSize(2);
|
||||
splitPane.setDividerLocation(300);
|
||||
splitPane.addPropertyChangeListener(this);
|
||||
return splitPane;
|
||||
}
|
||||
|
||||
|
@ -155,14 +173,16 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
portsComboBox.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent actionEvent) {
|
||||
settings.setLoggerPort((String) portsComboBox.getSelectedItem());
|
||||
broker.stop();
|
||||
dataTabBroker.stop();
|
||||
graphTabBroker.stop();
|
||||
dashboardTabBroker.stop();
|
||||
}
|
||||
});
|
||||
return portsComboBox;
|
||||
}
|
||||
|
||||
private void refreshPortsComboBox() {
|
||||
List<String> ports = broker.listSerialPorts();
|
||||
List<String> ports = controller.listSerialPorts();
|
||||
for (String port : ports) {
|
||||
portsComboBox.addItem(port);
|
||||
}
|
||||
|
@ -174,7 +194,9 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
startButton.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent actionEvent) {
|
||||
settings.setLoggerPort((String) portsComboBox.getSelectedItem());
|
||||
broker.start();
|
||||
dataTabBroker.start();
|
||||
graphTabBroker.start();
|
||||
dashboardTabBroker.start();
|
||||
}
|
||||
});
|
||||
return startButton;
|
||||
|
@ -184,19 +206,14 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
JButton stopButton = new JButton("Stop");
|
||||
stopButton.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent actionEvent) {
|
||||
broker.stop();
|
||||
dataTabBroker.stop();
|
||||
graphTabBroker.stop();
|
||||
dashboardTabBroker.stop();
|
||||
}
|
||||
});
|
||||
return stopButton;
|
||||
}
|
||||
|
||||
private JTabbedPane buildTabbedDataPane() {
|
||||
tabbedPane.add("Data", buildDataTab());
|
||||
tabbedPane.add("Graph", buildGraphTab());
|
||||
tabbedPane.add("Dashboard", buildDashboardTab());
|
||||
return tabbedPane;
|
||||
}
|
||||
|
||||
private JComponent buildDataTab() {
|
||||
return new JScrollPane(new JTable(dataTableModel), VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_NEVER);
|
||||
}
|
||||
|
@ -216,9 +233,13 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
|
||||
public void windowClosing(WindowEvent windowEvent) {
|
||||
try {
|
||||
broker.stop();
|
||||
dataTabBroker.stop();
|
||||
graphTabBroker.stop();
|
||||
dashboardTabBroker.stop();
|
||||
} finally {
|
||||
handlerManager.cleanUp();
|
||||
dataHandlerManager.cleanUp();
|
||||
graphHandlerManager.cleanUp();
|
||||
dashboardHandlerManager.cleanUp();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
package enginuity.logger.ui;
|
||||
|
||||
import enginuity.Settings;
|
||||
import enginuity.logger.LoggerController;
|
||||
import enginuity.logger.LoggerControllerImpl;
|
||||
import enginuity.logger.definition.EcuData;
|
||||
import enginuity.logger.query.LoggerCallback;
|
||||
import enginuity.logger.ui.handler.DataUpdateHandlerManager;
|
||||
|
@ -18,10 +16,10 @@ public final class ParameterRegistrationBrokerImpl implements ParameterRegistrat
|
|||
private final List<EcuData> registeredEcuParameters = Collections.synchronizedList(new ArrayList<EcuData>());
|
||||
private long loggerStartTime = 0;
|
||||
|
||||
public ParameterRegistrationBrokerImpl(DataUpdateHandlerManager handlerManager, Settings settings, MessageListener messageListener) {
|
||||
checkNotNull(handlerManager, settings, messageListener);
|
||||
public ParameterRegistrationBrokerImpl(LoggerController controller, DataUpdateHandlerManager handlerManager) {
|
||||
checkNotNull(controller, handlerManager);
|
||||
this.controller = controller;
|
||||
this.handlerManager = handlerManager;
|
||||
this.controller = new LoggerControllerImpl(settings, messageListener);
|
||||
}
|
||||
|
||||
public synchronized void registerEcuParameterForLogging(final EcuData ecuData) {
|
||||
|
|
Loading…
Reference in New Issue