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.EcuSwitch;
import enginuity.logger.io.serial.SerialPortRefresher;
import enginuity.logger.ui.ControllerButton;
import enginuity.logger.ui.DataRegistrationBroker;
import enginuity.logger.ui.DataRegistrationBrokerImpl;
import enginuity.logger.ui.EcuDataComparator;
@ -17,6 +18,7 @@ import enginuity.logger.ui.ParameterListTable;
import enginuity.logger.ui.ParameterListTableModel;
import enginuity.logger.ui.ParameterRow;
import enginuity.logger.ui.SerialPortComboBox;
import enginuity.logger.ui.StatusIndicator;
import enginuity.logger.ui.UserProfile;
import enginuity.logger.ui.UserProfileImpl;
import enginuity.logger.ui.UserProfileItem;
@ -354,43 +356,62 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
}
private JPanel buildControlToolbar() {
JPanel controlPanel = new JPanel(new FlowLayout());
controlPanel.add(buildStartButton());
controlPanel.add(buildStopButton());
JPanel controlPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 50, 0));
controlPanel.add(buildPortsComboBox());
controlPanel.add(buildStartStopButtons());
controlPanel.add(buildStatusIndicator());
return controlPanel;
}
private JComboBox buildPortsComboBox() {
private JPanel buildPortsComboBox() {
portsComboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
settings.setLoggerPort((String) portsComboBox.getSelectedItem());
stopLogging();
}
});
return portsComboBox;
JPanel comboBoxPanel = new JPanel(new FlowLayout());
comboBoxPanel.add(new JLabel("Select COM Port:"));
comboBoxPanel.add(portsComboBox);
return comboBoxPanel;
}
private JButton buildStartButton() {
JButton startButton = new JButton("Start");
private JPanel buildStartStopButtons() {
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() {
public void actionPerformed(ActionEvent actionEvent) {
startLogging();
}
});
controller.addListener(startButton);
return startButton;
}
private JButton buildStopButton() {
JButton stopButton = new JButton("Stop");
private ControllerButton buildStopButton() {
ControllerButton stopButton = new ControllerButton("Stop", false);
stopButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
stopLogging();
}
});
controller.addListener(stopButton);
return stopButton;
}
private StatusIndicator buildStatusIndicator() {
StatusIndicator statusIndicator = new StatusIndicator();
controller.addListener(statusIndicator);
fileUpdateHandler.addListener(statusIndicator);
return statusIndicator;
}
private JComponent buildDataTab() {
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() {
//return new JScrollPane(dashboardPanel, VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_NEVER);
return dashboardPanel;
}

View File

@ -22,7 +22,7 @@ import java.util.TreeSet;
public final class LoggerControllerImpl implements LoggerController {
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;
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.io.file.FileLogger;
import enginuity.logger.io.file.FileLoggerImpl;
import enginuity.logger.ui.FileLoggerListener;
import static enginuity.util.ParamChecker.checkNotNull;
import java.util.ArrayList;
import java.util.Collections;
import static java.util.Collections.synchronizedMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public final class FileUpdateHandler implements DataUpdateHandler, ConvertorUpdateListener {
private final FileLogger fileLogger;
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());
public FileUpdateHandler(Settings settings) {
@ -24,6 +29,11 @@ public final class FileUpdateHandler implements DataUpdateHandler, ConvertorUpda
fileLogger = new FileLoggerImpl(settings);
}
public void addListener(FileLoggerListener listener) {
checkNotNull(listener, "listener");
listeners.add(listener);
}
public synchronized void registerData(EcuData ecuData) {
if (ecuDatas.keySet().contains(ecuData)) {
ecuDatas.put(ecuData, ecuDatas.get(ecuData) + 1);
@ -76,9 +86,11 @@ public final class FileUpdateHandler implements DataUpdateHandler, ConvertorUpda
if (ecuSwitch.isFileLogController()) {
if (value == 1 && !fileLogger.isStarted()) {
fileLogger.start();
notifyListeners(true);
writeHeaders();
} else if (value == 0 && fileLogger.isStarted()) {
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 char DELIMITER = ',';
private final Map<EcuData, String> ecuDataValues;

View File

@ -1,19 +1,14 @@
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.helpers.DefaultHandler;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
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 {
@ -27,7 +22,7 @@ public final class SaxParserFactory {
parserFactory.setXIncludeAware(false);
return parserFactory.newSAXParser();
}
public static void main(String args[]) {
try {
SAXParser parser = SaxParserFactory.getSaxParser();
@ -35,7 +30,7 @@ public final class SaxParserFactory {
System.out.println(b.available());
parser.parse(b, new DefaultHandler());
System.out.println(parser.isValidating());
} catch (Exception ex) {
System.err.println(ex);
}