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:
kascade 2006-12-06 13:26:22 +00:00
parent ed17358051
commit f019873a8f
7 changed files with 127 additions and 22 deletions

View File

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

View File

@ -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) {

View File

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

View File

@ -0,0 +1,6 @@
package enginuity.logger.ui;
public interface FileLoggerListener {
void setLoggingToFile(boolean loggingToFile);
}

View File

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

View File

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

View File

@ -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 {