mirror of https://github.com/rusefi/RomRaider.git
updated logger control bar with status indicator
git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@376 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
parent
ed17358051
commit
f019873a8f
|
@ -7,6 +7,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.ControllerButton;
|
||||||
import enginuity.logger.ui.DataRegistrationBroker;
|
import enginuity.logger.ui.DataRegistrationBroker;
|
||||||
import enginuity.logger.ui.DataRegistrationBrokerImpl;
|
import enginuity.logger.ui.DataRegistrationBrokerImpl;
|
||||||
import enginuity.logger.ui.EcuDataComparator;
|
import enginuity.logger.ui.EcuDataComparator;
|
||||||
|
@ -17,6 +18,7 @@ import enginuity.logger.ui.ParameterListTable;
|
||||||
import enginuity.logger.ui.ParameterListTableModel;
|
import enginuity.logger.ui.ParameterListTableModel;
|
||||||
import enginuity.logger.ui.ParameterRow;
|
import enginuity.logger.ui.ParameterRow;
|
||||||
import enginuity.logger.ui.SerialPortComboBox;
|
import enginuity.logger.ui.SerialPortComboBox;
|
||||||
|
import enginuity.logger.ui.StatusIndicator;
|
||||||
import enginuity.logger.ui.UserProfile;
|
import enginuity.logger.ui.UserProfile;
|
||||||
import enginuity.logger.ui.UserProfileImpl;
|
import enginuity.logger.ui.UserProfileImpl;
|
||||||
import enginuity.logger.ui.UserProfileItem;
|
import enginuity.logger.ui.UserProfileItem;
|
||||||
|
@ -354,43 +356,62 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
||||||
}
|
}
|
||||||
|
|
||||||
private JPanel buildControlToolbar() {
|
private JPanel buildControlToolbar() {
|
||||||
JPanel controlPanel = new JPanel(new FlowLayout());
|
JPanel controlPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 50, 0));
|
||||||
controlPanel.add(buildStartButton());
|
|
||||||
controlPanel.add(buildStopButton());
|
|
||||||
controlPanel.add(buildPortsComboBox());
|
controlPanel.add(buildPortsComboBox());
|
||||||
|
controlPanel.add(buildStartStopButtons());
|
||||||
|
controlPanel.add(buildStatusIndicator());
|
||||||
return controlPanel;
|
return controlPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
private JComboBox buildPortsComboBox() {
|
private JPanel buildPortsComboBox() {
|
||||||
portsComboBox.addActionListener(new ActionListener() {
|
portsComboBox.addActionListener(new ActionListener() {
|
||||||
public void actionPerformed(ActionEvent actionEvent) {
|
public void actionPerformed(ActionEvent actionEvent) {
|
||||||
settings.setLoggerPort((String) portsComboBox.getSelectedItem());
|
settings.setLoggerPort((String) portsComboBox.getSelectedItem());
|
||||||
stopLogging();
|
stopLogging();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return portsComboBox;
|
JPanel comboBoxPanel = new JPanel(new FlowLayout());
|
||||||
|
comboBoxPanel.add(new JLabel("Select COM Port:"));
|
||||||
|
comboBoxPanel.add(portsComboBox);
|
||||||
|
return comboBoxPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
private JButton buildStartButton() {
|
private JPanel buildStartStopButtons() {
|
||||||
JButton startButton = new JButton("Start");
|
JPanel buttonPanel = new JPanel(new FlowLayout());
|
||||||
|
buttonPanel.add(buildStartButton());
|
||||||
|
buttonPanel.add(buildStopButton());
|
||||||
|
return buttonPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ControllerButton buildStartButton() {
|
||||||
|
ControllerButton startButton = new ControllerButton("Start", true);
|
||||||
startButton.addActionListener(new ActionListener() {
|
startButton.addActionListener(new ActionListener() {
|
||||||
public void actionPerformed(ActionEvent actionEvent) {
|
public void actionPerformed(ActionEvent actionEvent) {
|
||||||
startLogging();
|
startLogging();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
controller.addListener(startButton);
|
||||||
return startButton;
|
return startButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
private JButton buildStopButton() {
|
private ControllerButton buildStopButton() {
|
||||||
JButton stopButton = new JButton("Stop");
|
ControllerButton stopButton = new ControllerButton("Stop", false);
|
||||||
stopButton.addActionListener(new ActionListener() {
|
stopButton.addActionListener(new ActionListener() {
|
||||||
public void actionPerformed(ActionEvent actionEvent) {
|
public void actionPerformed(ActionEvent actionEvent) {
|
||||||
stopLogging();
|
stopLogging();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
controller.addListener(stopButton);
|
||||||
return stopButton;
|
return stopButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private StatusIndicator buildStatusIndicator() {
|
||||||
|
StatusIndicator statusIndicator = new StatusIndicator();
|
||||||
|
controller.addListener(statusIndicator);
|
||||||
|
fileUpdateHandler.addListener(statusIndicator);
|
||||||
|
return statusIndicator;
|
||||||
|
}
|
||||||
|
|
||||||
private JComponent buildDataTab() {
|
private JComponent buildDataTab() {
|
||||||
return new JScrollPane(new JTable(dataTableModel), VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_NEVER);
|
return new JScrollPane(new JTable(dataTableModel), VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_NEVER);
|
||||||
}
|
}
|
||||||
|
@ -400,7 +421,6 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
||||||
}
|
}
|
||||||
|
|
||||||
private JComponent buildDashboardTab() {
|
private JComponent buildDashboardTab() {
|
||||||
//return new JScrollPane(dashboardPanel, VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_NEVER);
|
|
||||||
return dashboardPanel;
|
return dashboardPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ import java.util.TreeSet;
|
||||||
|
|
||||||
public final class LoggerControllerImpl implements LoggerController {
|
public final class LoggerControllerImpl implements LoggerController {
|
||||||
private final QueryManager queryManager;
|
private final QueryManager queryManager;
|
||||||
private List<ControllerListener> listeners = Collections.synchronizedList(new ArrayList<ControllerListener>());
|
private final List<ControllerListener> listeners = Collections.synchronizedList(new ArrayList<ControllerListener>());
|
||||||
private boolean started = false;
|
private boolean started = false;
|
||||||
|
|
||||||
public LoggerControllerImpl(Settings settings, MessageListener messageListener) {
|
public LoggerControllerImpl(Settings settings, MessageListener messageListener) {
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package enginuity.logger.ui;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
|
||||||
|
public final class ControllerButton extends JButton implements ControllerListener {
|
||||||
|
private final boolean enabledOnInit;
|
||||||
|
|
||||||
|
public ControllerButton(String string, boolean enabledOnInit) {
|
||||||
|
super(string);
|
||||||
|
this.enabledOnInit = enabledOnInit;
|
||||||
|
setEnabled(enabledOnInit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void start() {
|
||||||
|
setEnabled(!enabledOnInit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop() {
|
||||||
|
setEnabled(enabledOnInit);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
package enginuity.logger.ui;
|
||||||
|
|
||||||
|
public interface FileLoggerListener {
|
||||||
|
|
||||||
|
void setLoggingToFile(boolean loggingToFile);
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
package enginuity.logger.ui;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import static java.awt.BorderLayout.WEST;
|
||||||
|
|
||||||
|
public final class StatusIndicator extends JPanel implements ControllerListener, FileLoggerListener {
|
||||||
|
private final JLabel statusLabel = new JLabel();
|
||||||
|
private static final String TEXT_LOGGING = "Logging...";
|
||||||
|
private static final String TEXT_STOPPED = "Stopped.";
|
||||||
|
private static final String TEXT_FILE_LOGGING = "Logging to file...";
|
||||||
|
private static final ImageIcon ICON_FILE_LOGGING = new ImageIcon("./graphics/logger_green.png");
|
||||||
|
private static final ImageIcon ICON_STOPPED = new ImageIcon("./graphics/logger_red.png");
|
||||||
|
private static final ImageIcon ICON_LOGGING = new ImageIcon("./graphics/logger_blue.png");
|
||||||
|
|
||||||
|
public StatusIndicator() {
|
||||||
|
setLayout(new BorderLayout());
|
||||||
|
add(statusLabel, WEST);
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void start() {
|
||||||
|
statusLabel.setText(TEXT_LOGGING);
|
||||||
|
statusLabel.setIcon(ICON_LOGGING);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop() {
|
||||||
|
statusLabel.setText(TEXT_STOPPED);
|
||||||
|
statusLabel.setIcon(ICON_STOPPED);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLoggingToFile(boolean loggingToFile) {
|
||||||
|
if (loggingToFile) {
|
||||||
|
fileLogging();
|
||||||
|
} else {
|
||||||
|
start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fileLogging() {
|
||||||
|
statusLabel.setText(TEXT_FILE_LOGGING);
|
||||||
|
statusLabel.setIcon(ICON_FILE_LOGGING);
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,16 +7,21 @@ import enginuity.logger.definition.EcuDataConvertor;
|
||||||
import enginuity.logger.definition.EcuSwitch;
|
import enginuity.logger.definition.EcuSwitch;
|
||||||
import enginuity.logger.io.file.FileLogger;
|
import enginuity.logger.io.file.FileLogger;
|
||||||
import enginuity.logger.io.file.FileLoggerImpl;
|
import enginuity.logger.io.file.FileLoggerImpl;
|
||||||
|
import enginuity.logger.ui.FileLoggerListener;
|
||||||
import static enginuity.util.ParamChecker.checkNotNull;
|
import static enginuity.util.ParamChecker.checkNotNull;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import static java.util.Collections.synchronizedMap;
|
import static java.util.Collections.synchronizedMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public final class FileUpdateHandler implements DataUpdateHandler, ConvertorUpdateListener {
|
public final class FileUpdateHandler implements DataUpdateHandler, ConvertorUpdateListener {
|
||||||
private final FileLogger fileLogger;
|
private final FileLogger fileLogger;
|
||||||
private final Map<EcuData, Integer> ecuDatas = synchronizedMap(new LinkedHashMap<EcuData, Integer>());
|
private final Map<EcuData, Integer> ecuDatas = synchronizedMap(new LinkedHashMap<EcuData, Integer>());
|
||||||
|
private final List<FileLoggerListener> listeners = Collections.synchronizedList(new ArrayList<FileLoggerListener>());
|
||||||
private Line currentLine = new Line(ecuDatas.keySet());
|
private Line currentLine = new Line(ecuDatas.keySet());
|
||||||
|
|
||||||
public FileUpdateHandler(Settings settings) {
|
public FileUpdateHandler(Settings settings) {
|
||||||
|
@ -24,6 +29,11 @@ public final class FileUpdateHandler implements DataUpdateHandler, ConvertorUpda
|
||||||
fileLogger = new FileLoggerImpl(settings);
|
fileLogger = new FileLoggerImpl(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addListener(FileLoggerListener listener) {
|
||||||
|
checkNotNull(listener, "listener");
|
||||||
|
listeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
public synchronized void registerData(EcuData ecuData) {
|
public synchronized void registerData(EcuData ecuData) {
|
||||||
if (ecuDatas.keySet().contains(ecuData)) {
|
if (ecuDatas.keySet().contains(ecuData)) {
|
||||||
ecuDatas.put(ecuData, ecuDatas.get(ecuData) + 1);
|
ecuDatas.put(ecuData, ecuDatas.get(ecuData) + 1);
|
||||||
|
@ -76,9 +86,11 @@ public final class FileUpdateHandler implements DataUpdateHandler, ConvertorUpda
|
||||||
if (ecuSwitch.isFileLogController()) {
|
if (ecuSwitch.isFileLogController()) {
|
||||||
if (value == 1 && !fileLogger.isStarted()) {
|
if (value == 1 && !fileLogger.isStarted()) {
|
||||||
fileLogger.start();
|
fileLogger.start();
|
||||||
|
notifyListeners(true);
|
||||||
writeHeaders();
|
writeHeaders();
|
||||||
} else if (value == 0 && fileLogger.isStarted()) {
|
} else if (value == 0 && fileLogger.isStarted()) {
|
||||||
fileLogger.stop();
|
fileLogger.stop();
|
||||||
|
notifyListeners(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,6 +102,12 @@ public final class FileUpdateHandler implements DataUpdateHandler, ConvertorUpda
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void notifyListeners(boolean loggingToFile) {
|
||||||
|
for (FileLoggerListener listener : listeners) {
|
||||||
|
listener.setLoggingToFile(loggingToFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static final class Line {
|
private static final class Line {
|
||||||
private static final char DELIMITER = ',';
|
private static final char DELIMITER = ',';
|
||||||
private final Map<EcuData, String> ecuDataValues;
|
private final Map<EcuData, String> ecuDataValues;
|
||||||
|
|
|
@ -1,19 +1,14 @@
|
||||||
package enginuity.logger.xml;
|
package enginuity.logger.xml;
|
||||||
|
|
||||||
import java.beans.XMLDecoder;
|
|
||||||
import java.beans.XMLEncoder;
|
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.BufferedOutputStream;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import javax.swing.JButton;
|
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
import org.xml.sax.helpers.DefaultHandler;
|
||||||
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
import javax.xml.parsers.SAXParser;
|
import javax.xml.parsers.SAXParser;
|
||||||
import javax.xml.parsers.SAXParserFactory;
|
import javax.xml.parsers.SAXParserFactory;
|
||||||
import org.xml.sax.helpers.DefaultHandler;
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
|
||||||
public final class SaxParserFactory {
|
public final class SaxParserFactory {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue