added some keyboard shortcuts to logger

git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@498 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
kascade 2007-02-06 07:55:19 +00:00
parent fb8f2f792e
commit 337f613ac4
21 changed files with 550 additions and 278 deletions

View File

@ -42,7 +42,6 @@ import enginuity.logger.profile.UserProfileLoaderImpl;
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;
import enginuity.logger.ui.EcuLoggerMenuBar;
import enginuity.logger.ui.MessageListener; import enginuity.logger.ui.MessageListener;
import enginuity.logger.ui.SerialPortComboBox; import enginuity.logger.ui.SerialPortComboBox;
import enginuity.logger.ui.StatusIndicator; import enginuity.logger.ui.StatusIndicator;
@ -59,6 +58,7 @@ import enginuity.logger.ui.handler.table.TableUpdateHandler;
import enginuity.logger.ui.paramlist.ParameterListTable; import enginuity.logger.ui.paramlist.ParameterListTable;
import enginuity.logger.ui.paramlist.ParameterListTableModel; import enginuity.logger.ui.paramlist.ParameterListTableModel;
import enginuity.logger.ui.paramlist.ParameterRow; import enginuity.logger.ui.paramlist.ParameterRow;
import enginuity.logger.ui.swing.menubar.EcuLoggerMenuBar;
import static enginuity.util.ParamChecker.checkNotNull; import static enginuity.util.ParamChecker.checkNotNull;
import static enginuity.util.ParamChecker.isNullOrEmpty; import static enginuity.util.ParamChecker.isNullOrEmpty;
import static enginuity.util.ThreadUtil.sleep; import static enginuity.util.ThreadUtil.sleep;

View File

@ -1,277 +0,0 @@
/*
*
* Enginuity Open-Source Tuning, Logging and Reflashing
* Copyright (C) 2006 Enginuity.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*/
package enginuity.logger.ui;
import enginuity.logger.EcuLogger;
import enginuity.logger.profile.UserProfileFileFilter;
import javax.swing.*;
import static javax.swing.JFileChooser.APPROVE_OPTION;
import static javax.swing.JFileChooser.DIRECTORIES_ONLY;
import static javax.swing.JOptionPane.OK_OPTION;
import static javax.swing.JOptionPane.showConfirmDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class EcuLoggerMenuBar extends JMenuBar implements ActionListener {
private static final String USER_HOME_DIR = System.getProperty("user.home");
private JMenu fileMenu = new JMenu("File");
private JMenuItem loadProfile = new JMenuItem("Load Profile...");
private JMenuItem reloadProfile = new JMenuItem("Reload Profile");
private JMenuItem saveProfile = new JMenuItem("Save Profile");
private JMenuItem saveProfileAs = new JMenuItem("Save Profile As...");
private JMenuItem exit = new JMenuItem("Exit");
private JMenu settingsMenu = new JMenu("Settings");
private JMenuItem logFileLocation = new JMenuItem("Log File Output Location...");
private JMenuItem logFileControllerSwitch = new JRadioButtonMenuItem("Control File Logging With Defogger Switch");
private JMenuItem logFileAbsoluteTimestamp = new JRadioButtonMenuItem("Use Absolute Timestamp In Log File");
private JMenu connectionMenu = new JMenu("Connection");
private JMenuItem resetConnection = new JMenuItem("Reset");
private JMenuItem disconnect = new JMenuItem("Disconnect");
private JMenu helpMenu = new JMenu("Help");
private JMenuItem about = new JMenuItem("About Enginuity ECU Logger");
private EcuLogger parent;
public EcuLoggerMenuBar(EcuLogger parent) {
this.parent = parent;
// file menu items
add(fileMenu);
fileMenu.setMnemonic('F');
loadProfile.setMnemonic('O');
reloadProfile.setMnemonic('R');
saveProfile.setMnemonic('S');
saveProfileAs.setMnemonic('A');
exit.setMnemonic('X');
fileMenu.add(loadProfile);
fileMenu.add(reloadProfile);
fileMenu.add(saveProfile);
fileMenu.add(saveProfileAs);
fileMenu.add(new JSeparator());
fileMenu.add(exit);
loadProfile.addActionListener(this);
reloadProfile.addActionListener(this);
saveProfile.addActionListener(this);
saveProfileAs.addActionListener(this);
exit.addActionListener(this);
// settings menu items
add(settingsMenu);
settingsMenu.setMnemonic('E');
logFileLocation.setMnemonic('F');
logFileControllerSwitch.setMnemonic('C');
logFileAbsoluteTimestamp.setMnemonic('A');
settingsMenu.add(logFileLocation);
settingsMenu.add(new JSeparator());
settingsMenu.add(logFileControllerSwitch);
settingsMenu.add(logFileAbsoluteTimestamp);
logFileLocation.addActionListener(this);
logFileControllerSwitch.addActionListener(this);
logFileAbsoluteTimestamp.addActionListener(this);
logFileControllerSwitch.setSelected(parent.getSettings().isFileLoggingControllerSwitchActive());
logFileAbsoluteTimestamp.setSelected(parent.getSettings().isFileLoggingAbsoluteTimestamp());
// connection menu items
add(connectionMenu);
connectionMenu.setMnemonic('C');
resetConnection.setMnemonic('R');
disconnect.setMnemonic('D');
connectionMenu.add(resetConnection);
connectionMenu.add(disconnect);
resetConnection.addActionListener(this);
disconnect.addActionListener(this);
// help menu stuff
add(helpMenu);
helpMenu.setMnemonic('H');
about.setMnemonic('A');
helpMenu.add(about);
about.addActionListener(this);
// disable unimplemented buttons!
about.setEnabled(false);
}
public void actionPerformed(ActionEvent evt) {
if (evt.getSource() == loadProfile) {
try {
loadProfileDialog();
} catch (Exception e) {
parent.reportError(e);
}
} else if (evt.getSource() == reloadProfile) {
try {
parent.loadUserProfile(parent.getSettings().getLoggerProfileFilePath());
} catch (Exception e) {
parent.reportError(e);
}
} else if (evt.getSource() == saveProfile) {
try {
saveProfile();
} catch (Exception e) {
parent.reportError(e);
}
} else if (evt.getSource() == saveProfileAs) {
try {
saveProfileAs();
} catch (Exception e) {
parent.reportError(e);
}
} else if (evt.getSource() == exit) {
parent.handleExit();
parent.dispose();
parent.setVisible(false);
} else if (evt.getSource() == logFileLocation) {
try {
setLogFileLocationDialog();
} catch (Exception e) {
parent.reportError(e);
}
} else if (evt.getSource() == logFileControllerSwitch) {
try {
parent.getSettings().setFileLoggingControllerSwitchActive(logFileControllerSwitch.isSelected());
} catch (Exception e) {
parent.reportError(e);
}
} else if (evt.getSource() == logFileAbsoluteTimestamp) {
try {
parent.getSettings().setFileLoggingAbsoluteTimestamp(logFileAbsoluteTimestamp.isSelected());
} catch (Exception e) {
parent.reportError(e);
}
} else if (evt.getSource() == resetConnection) {
try {
parent.restartLogging();
} catch (Exception e) {
parent.reportError(e);
}
} else if (evt.getSource() == disconnect) {
try {
parent.stopLogging();
} catch (Exception e) {
parent.reportError(e);
}
}
}
private void setLogFileLocationDialog() throws Exception {
File lastLoggerOutputDir = getFile(parent.getSettings().getLoggerOutputDirPath());
JFileChooser fc = getLoggerOutputDirFileChooser(lastLoggerOutputDir);
if (fc.showOpenDialog(parent) == APPROVE_OPTION) {
String loggerOutputDirPath = fc.getSelectedFile().getAbsolutePath();
parent.getSettings().setLoggerOutputDirPath(loggerOutputDirPath);
parent.reportMessage("Log file output location successfully updated: " + loggerOutputDirPath);
}
}
private void loadProfileDialog() throws Exception {
File lastProfileFile = getFile(parent.getSettings().getLoggerProfileFilePath());
JFileChooser fc = getProfileFileChooser(lastProfileFile);
if (fc.showOpenDialog(parent) == APPROVE_OPTION) {
String profileFilePath = fc.getSelectedFile().getAbsolutePath();
parent.loadUserProfile(profileFilePath);
parent.getSettings().setLoggerProfileFilePath(profileFilePath);
parent.reportMessageInTitleBar("Profile: " + profileFilePath);
parent.reportMessage("Profile succesfully loaded: " + profileFilePath);
}
}
private void saveProfile() throws Exception {
File lastProfileFile = new File(parent.getSettings().getLoggerProfileFilePath());
saveProfileToFile(lastProfileFile);
}
private void saveProfileAs() throws Exception {
File lastProfileFile = getFile(parent.getSettings().getLoggerProfileFilePath());
JFileChooser fc = getProfileFileChooser(lastProfileFile);
if (fc.showSaveDialog(parent) == APPROVE_OPTION) {
File selectedFile = fc.getSelectedFile();
if (!selectedFile.exists()
|| showConfirmDialog(parent, selectedFile.getName() + " already exists! Overwrite?") == OK_OPTION) {
saveProfileToFile(selectedFile);
}
}
}
private void saveProfileToFile(File destinationFile) throws IOException {
String profileFilePath = destinationFile.getAbsolutePath();
if (!profileFilePath.endsWith(".xml")) {
profileFilePath += ".xml";
destinationFile = new File(profileFilePath);
}
FileOutputStream fos = new FileOutputStream(destinationFile);
try {
fos.write(parent.getCurrentProfile().getBytes());
} finally {
fos.close();
}
parent.getSettings().setLoggerProfileFilePath(profileFilePath);
parent.reportMessageInTitleBar("Profile: " + profileFilePath);
parent.reportMessage("Profile succesfully saved: " + profileFilePath);
}
private JFileChooser getProfileFileChooser(File lastProfileFile) {
JFileChooser fc;
if (lastProfileFile.exists() && lastProfileFile.isFile() && lastProfileFile.getParentFile() != null) {
fc = new JFileChooser(lastProfileFile.getParentFile().getAbsolutePath());
} else {
fc = new JFileChooser();
}
fc.setFileFilter(new UserProfileFileFilter());
return fc;
}
private JFileChooser getLoggerOutputDirFileChooser(File lastLoggerOutputDir) {
JFileChooser fc;
if (lastLoggerOutputDir.exists() && lastLoggerOutputDir.isDirectory()) {
fc = new JFileChooser(lastLoggerOutputDir.getAbsolutePath());
} else {
fc = new JFileChooser();
}
fc.setFileSelectionMode(DIRECTORIES_ONLY);
return fc;
}
private File getFile(String filePath) {
return filePath == null ? new File(USER_HOME_DIR) : new File(filePath);
}
}

View File

@ -0,0 +1,11 @@
package enginuity.logger.ui.swing.menubar;
import javax.swing.*;
public final class EcuLoggerMenu extends JMenu {
public EcuLoggerMenu(String text, int mnemonic) {
setText(text);
setMnemonic(mnemonic);
}
}

View File

@ -0,0 +1,67 @@
package enginuity.logger.ui.swing.menubar;
import enginuity.logger.EcuLogger;
import enginuity.logger.ui.swing.menubar.action.AboutAction;
import enginuity.logger.ui.swing.menubar.action.DisconnectAction;
import enginuity.logger.ui.swing.menubar.action.ExitAction;
import enginuity.logger.ui.swing.menubar.action.LoadProfileAction;
import enginuity.logger.ui.swing.menubar.action.LogFileAbsoluteTimestampAction;
import enginuity.logger.ui.swing.menubar.action.LogFileControllerSwitchAction;
import enginuity.logger.ui.swing.menubar.action.LogFileLocationAction;
import enginuity.logger.ui.swing.menubar.action.ReloadProfileAction;
import enginuity.logger.ui.swing.menubar.action.ResetConnectionAction;
import enginuity.logger.ui.swing.menubar.action.SaveProfileAction;
import enginuity.logger.ui.swing.menubar.action.SaveProfileAsAction;
import javax.swing.*;
import static javax.swing.KeyStroke.getKeyStroke;
import static java.awt.event.KeyEvent.CTRL_MASK;
import static java.awt.event.KeyEvent.SHIFT_MASK;
import static java.awt.event.KeyEvent.VK_A;
import static java.awt.event.KeyEvent.VK_C;
import static java.awt.event.KeyEvent.VK_D;
import static java.awt.event.KeyEvent.VK_F;
import static java.awt.event.KeyEvent.VK_H;
import static java.awt.event.KeyEvent.VK_L;
import static java.awt.event.KeyEvent.VK_P;
import static java.awt.event.KeyEvent.VK_R;
import static java.awt.event.KeyEvent.VK_S;
import static java.awt.event.KeyEvent.VK_T;
import static java.awt.event.KeyEvent.VK_X;
public class EcuLoggerMenuBar extends JMenuBar {
public EcuLoggerMenuBar(EcuLogger logger) {
// file menu items
JMenu fileMenu = new EcuLoggerMenu("File", VK_F);
fileMenu.add(new EcuLoggerMenuItem("Load Profile...", VK_L, getKeyStroke(VK_L, CTRL_MASK), new LoadProfileAction(logger)));
fileMenu.add(new EcuLoggerMenuItem("Reload Profile", VK_P, getKeyStroke(VK_P, CTRL_MASK), new ReloadProfileAction(logger)));
fileMenu.add(new EcuLoggerMenuItem("Save Profile", VK_S, getKeyStroke(VK_S, CTRL_MASK), new SaveProfileAction(logger)));
fileMenu.add(new EcuLoggerMenuItem("Save Profile As...", VK_A, getKeyStroke(VK_S, CTRL_MASK | SHIFT_MASK), new SaveProfileAsAction(logger)));
fileMenu.add(new JSeparator());
fileMenu.add(new EcuLoggerMenuItem("Exit", VK_X, new ExitAction(logger)));
add(fileMenu);
// settings menu items
JMenu settingsMenu = new EcuLoggerMenu("Settings", VK_S);
settingsMenu.add(new EcuLoggerMenuItem("Log File Output Location...", VK_F, getKeyStroke(VK_F, CTRL_MASK), new LogFileLocationAction(logger)));
settingsMenu.add(new JSeparator());
settingsMenu.add(new EcuLoggerRadioButtonMenuItem("Control File Logging With Defogger Switch", VK_C, getKeyStroke(VK_C, CTRL_MASK), new LogFileControllerSwitchAction(logger), logger.getSettings().isFileLoggingControllerSwitchActive()));
settingsMenu.add(new EcuLoggerRadioButtonMenuItem("Use Absolute Timestamp In Log File", VK_T, getKeyStroke(VK_T, CTRL_MASK), new LogFileAbsoluteTimestampAction(logger), logger.getSettings().isFileLoggingAbsoluteTimestamp()));
add(settingsMenu);
// connection menu items
JMenu connectionMenu = new EcuLoggerMenu("Connection", VK_C);
connectionMenu.add(new EcuLoggerMenuItem("Reset", VK_R, getKeyStroke(VK_R, CTRL_MASK), new ResetConnectionAction(logger)));
connectionMenu.add(new EcuLoggerMenuItem("Disconnect", VK_D, getKeyStroke(VK_D, CTRL_MASK), new DisconnectAction(logger)));
add(connectionMenu);
// help menu stuff
JMenu helpMenu = new EcuLoggerMenu("Help", VK_H);
helpMenu.add(new EcuLoggerMenuItem("About", VK_A, new AboutAction(logger)));
add(helpMenu);
}
}

View File

@ -0,0 +1,18 @@
package enginuity.logger.ui.swing.menubar;
import javax.swing.*;
public final class EcuLoggerMenuItem extends JMenuItem {
public EcuLoggerMenuItem(String text, int mnemonic, Action action) {
super(action);
setText(text);
setMnemonic(mnemonic);
}
public EcuLoggerMenuItem(String text, int mnemonic, KeyStroke accelerator, Action action) {
this(text, mnemonic, action);
setAccelerator(accelerator);
}
}

View File

@ -0,0 +1,22 @@
package enginuity.logger.ui.swing.menubar;
import enginuity.logger.ui.swing.menubar.util.SelectionStateAdaptor;
import javax.swing.*;
public final class EcuLoggerRadioButtonMenuItem extends JRadioButtonMenuItem {
public EcuLoggerRadioButtonMenuItem(String text, int mnemonic, KeyStroke accelerator, Action action, boolean selected) {
super(action);
initSelectionStateAdaptor(action);
setText(text);
setMnemonic(mnemonic);
setAccelerator(accelerator);
setSelected(selected);
}
private void initSelectionStateAdaptor(Action action) {
new SelectionStateAdaptor(action, this).configure();
}
}

View File

@ -0,0 +1,18 @@
package enginuity.logger.ui.swing.menubar.action;
import enginuity.logger.EcuLogger;
import static javax.swing.JOptionPane.INFORMATION_MESSAGE;
import static javax.swing.JOptionPane.showMessageDialog;
import java.awt.event.ActionEvent;
public final class AboutAction extends AbstractAction {
public AboutAction(EcuLogger logger) {
super(logger);
}
public void actionPerformed(ActionEvent actionEvent) {
showMessageDialog(logger, "Enginuity ECU Logger\nhttp://www.enginuity.org/", "About", INFORMATION_MESSAGE);
}
}

View File

@ -0,0 +1,42 @@
package enginuity.logger.ui.swing.menubar.action;
import enginuity.logger.EcuLogger;
import javax.swing.*;
import java.beans.PropertyChangeListener;
import java.util.HashMap;
import java.util.Map;
public abstract class AbstractAction implements Action {
public static final String SELECTED = "selected";
private final Map<String, Object> valueMap = new HashMap<String, Object>();
private boolean enabled = true;
protected EcuLogger logger;
public static final String SELECTED_KEY = "selected";
public AbstractAction(EcuLogger logger) {
this.logger = logger;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public void addPropertyChangeListener(PropertyChangeListener propertyChangeListener) {
}
public void removePropertyChangeListener(PropertyChangeListener propertyChangeListener) {
}
public Object getValue(String key) {
return valueMap.get(key);
}
public void putValue(String key, Object value) {
valueMap.put(key, value);
}
}

View File

@ -0,0 +1,20 @@
package enginuity.logger.ui.swing.menubar.action;
import enginuity.logger.EcuLogger;
import java.awt.event.ActionEvent;
public final class DisconnectAction extends AbstractAction {
public DisconnectAction(EcuLogger logger) {
super(logger);
}
public void actionPerformed(ActionEvent actionEvent) {
try {
logger.stopLogging();
} catch (Exception e) {
logger.reportError(e);
}
}
}

View File

@ -0,0 +1,19 @@
package enginuity.logger.ui.swing.menubar.action;
import enginuity.logger.EcuLogger;
import java.awt.event.ActionEvent;
public final class ExitAction extends AbstractAction {
public ExitAction(EcuLogger logger) {
super(logger);
}
public void actionPerformed(ActionEvent actionEvent) {
logger.handleExit();
logger.dispose();
logger.setVisible(false);
}
}

View File

@ -0,0 +1,37 @@
package enginuity.logger.ui.swing.menubar.action;
import enginuity.logger.EcuLogger;
import static enginuity.logger.ui.swing.menubar.util.FileHelper.getFile;
import static enginuity.logger.ui.swing.menubar.util.FileHelper.getProfileFileChooser;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.io.File;
public final class LoadProfileAction extends AbstractAction {
public LoadProfileAction(EcuLogger logger) {
super(logger);
}
public void actionPerformed(ActionEvent actionEvent) {
try {
loadProfileDialog();
} catch (Exception e) {
logger.reportError(e);
}
}
private void loadProfileDialog() throws Exception {
File lastProfileFile = getFile(logger.getSettings().getLoggerProfileFilePath());
JFileChooser fc = getProfileFileChooser(lastProfileFile);
if (fc.showOpenDialog(logger) == JFileChooser.APPROVE_OPTION) {
String profileFilePath = fc.getSelectedFile().getAbsolutePath();
logger.loadUserProfile(profileFilePath);
logger.getSettings().setLoggerProfileFilePath(profileFilePath);
logger.reportMessageInTitleBar("Profile: " + profileFilePath);
logger.reportMessage("Profile succesfully loaded: " + profileFilePath);
}
}
}

View File

@ -0,0 +1,20 @@
package enginuity.logger.ui.swing.menubar.action;
import enginuity.logger.EcuLogger;
import java.awt.event.ActionEvent;
public final class LogFileAbsoluteTimestampAction extends AbstractAction {
public LogFileAbsoluteTimestampAction(EcuLogger logger) {
super(logger);
}
public void actionPerformed(ActionEvent actionEvent) {
try {
logger.getSettings().setFileLoggingAbsoluteTimestamp((Boolean) getValue(SELECTED_KEY));
} catch (Exception e) {
logger.reportError(e);
}
}
}

View File

@ -0,0 +1,20 @@
package enginuity.logger.ui.swing.menubar.action;
import enginuity.logger.EcuLogger;
import java.awt.event.ActionEvent;
public final class LogFileControllerSwitchAction extends AbstractAction {
public LogFileControllerSwitchAction(EcuLogger logger) {
super(logger);
}
public void actionPerformed(ActionEvent actionEvent) {
try {
logger.getSettings().setFileLoggingControllerSwitchActive((Boolean) getValue(SELECTED_KEY));
} catch (Exception e) {
logger.reportError(e);
}
}
}

View File

@ -0,0 +1,35 @@
package enginuity.logger.ui.swing.menubar.action;
import enginuity.logger.EcuLogger;
import static enginuity.logger.ui.swing.menubar.util.FileHelper.getFile;
import static enginuity.logger.ui.swing.menubar.util.FileHelper.getLoggerOutputDirFileChooser;
import javax.swing.*;
import static javax.swing.JFileChooser.APPROVE_OPTION;
import java.awt.event.ActionEvent;
import java.io.File;
public final class LogFileLocationAction extends AbstractAction {
public LogFileLocationAction(EcuLogger logger) {
super(logger);
}
public void actionPerformed(ActionEvent actionEvent) {
try {
setLogFileLocationDialog();
} catch (Exception e) {
logger.reportError(e);
}
}
private void setLogFileLocationDialog() throws Exception {
File lastLoggerOutputDir = getFile(logger.getSettings().getLoggerOutputDirPath());
JFileChooser fc = getLoggerOutputDirFileChooser(lastLoggerOutputDir);
if (fc.showOpenDialog(logger) == APPROVE_OPTION) {
String loggerOutputDirPath = fc.getSelectedFile().getAbsolutePath();
logger.getSettings().setLoggerOutputDirPath(loggerOutputDirPath);
logger.reportMessage("Log file output location successfully updated: " + loggerOutputDirPath);
}
}
}

View File

@ -0,0 +1,20 @@
package enginuity.logger.ui.swing.menubar.action;
import enginuity.logger.EcuLogger;
import java.awt.event.ActionEvent;
public final class ReloadProfileAction extends AbstractAction {
public ReloadProfileAction(EcuLogger logger) {
super(logger);
}
public void actionPerformed(ActionEvent actionEvent) {
try {
logger.loadUserProfile(logger.getSettings().getLoggerProfileFilePath());
} catch (Exception e) {
logger.reportError(e);
}
}
}

View File

@ -0,0 +1,20 @@
package enginuity.logger.ui.swing.menubar.action;
import enginuity.logger.EcuLogger;
import java.awt.event.ActionEvent;
public final class ResetConnectionAction extends AbstractAction {
public ResetConnectionAction(EcuLogger logger) {
super(logger);
}
public void actionPerformed(ActionEvent actionEvent) {
try {
logger.restartLogging();
} catch (Exception e) {
logger.reportError(e);
}
}
}

View File

@ -0,0 +1,30 @@
package enginuity.logger.ui.swing.menubar.action;
import enginuity.logger.EcuLogger;
import static enginuity.logger.ui.swing.menubar.util.FileHelper.saveProfileToFile;
import java.awt.event.ActionEvent;
import java.io.File;
public final class SaveProfileAction extends AbstractAction {
public SaveProfileAction(EcuLogger logger) {
super(logger);
}
public void actionPerformed(ActionEvent actionEvent) {
try {
saveProfile();
} catch (Exception e) {
logger.reportError(e);
}
}
private void saveProfile() throws Exception {
File lastProfileFile = new File(logger.getSettings().getLoggerProfileFilePath());
String profileFilePath = saveProfileToFile(logger.getCurrentProfile(), lastProfileFile);
logger.getSettings().setLoggerProfileFilePath(profileFilePath);
logger.reportMessageInTitleBar("Profile: " + profileFilePath);
logger.reportMessage("Profile succesfully saved: " + profileFilePath);
}
}

View File

@ -0,0 +1,39 @@
package enginuity.logger.ui.swing.menubar.action;
import enginuity.logger.EcuLogger;
import static enginuity.logger.ui.swing.menubar.util.FileHelper.getFile;
import static enginuity.logger.ui.swing.menubar.util.FileHelper.getProfileFileChooser;
import static enginuity.logger.ui.swing.menubar.util.FileHelper.saveProfileToFile;
import javax.swing.*;
import static javax.swing.JFileChooser.APPROVE_OPTION;
import static javax.swing.JOptionPane.OK_OPTION;
import static javax.swing.JOptionPane.showConfirmDialog;
import java.awt.event.ActionEvent;
import java.io.File;
public final class SaveProfileAsAction extends AbstractAction {
public SaveProfileAsAction(EcuLogger logger) {
super(logger);
}
public void actionPerformed(ActionEvent actionEvent) {
try {
saveProfileAs();
} catch (Exception e) {
logger.reportError(e);
}
}
private void saveProfileAs() throws Exception {
File lastProfileFile = getFile(logger.getSettings().getLoggerProfileFilePath());
JFileChooser fc = getProfileFileChooser(lastProfileFile);
if (fc.showSaveDialog(logger) == APPROVE_OPTION) {
File selectedFile = fc.getSelectedFile();
if (!selectedFile.exists() || showConfirmDialog(logger, selectedFile.getName() + " already exists! Overwrite?") == OK_OPTION) {
saveProfileToFile(logger.getCurrentProfile(), selectedFile);
}
}
}
}

View File

@ -0,0 +1,58 @@
package enginuity.logger.ui.swing.menubar.util;
import enginuity.logger.profile.UserProfile;
import javax.swing.*;
import static javax.swing.JFileChooser.DIRECTORIES_ONLY;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public final class FileHelper {
private static final String USER_HOME_DIR = System.getProperty("user.home");
private FileHelper() {
throw new UnsupportedOperationException();
}
public static File getFile(String filePath) {
return filePath == null ? new File(USER_HOME_DIR) : new File(filePath);
}
public static JFileChooser getProfileFileChooser(File lastProfileFile) {
JFileChooser fc;
if (lastProfileFile.exists() && lastProfileFile.isFile() && lastProfileFile.getParentFile() != null) {
fc = new JFileChooser(lastProfileFile.getParentFile().getAbsolutePath());
} else {
fc = new JFileChooser();
}
fc.setFileFilter(new UserProfileFileFilter());
return fc;
}
public static String saveProfileToFile(UserProfile profile, File destinationFile) throws IOException {
String profileFilePath = destinationFile.getAbsolutePath();
if (!profileFilePath.endsWith(".xml")) {
profileFilePath += ".xml";
destinationFile = new File(profileFilePath);
}
FileOutputStream fos = new FileOutputStream(destinationFile);
try {
fos.write(profile.getBytes());
} finally {
fos.close();
}
return profileFilePath;
}
public static JFileChooser getLoggerOutputDirFileChooser(File lastLoggerOutputDir) {
JFileChooser fc;
if (lastLoggerOutputDir.exists() && lastLoggerOutputDir.isDirectory()) {
fc = new JFileChooser(lastLoggerOutputDir.getAbsolutePath());
} else {
fc = new JFileChooser();
}
fc.setFileSelectionMode(DIRECTORIES_ONLY);
return fc;
}
}

View File

@ -0,0 +1,34 @@
package enginuity.logger.ui.swing.menubar.util;
import static enginuity.logger.ui.swing.menubar.action.AbstractAction.SELECTED_KEY;
import javax.swing.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
public final class SelectionStateAdaptor implements PropertyChangeListener, ItemListener {
private final Action action;
private final AbstractButton button;
public SelectionStateAdaptor(Action action, AbstractButton button) {
this.action = action;
this.button = button;
}
public void configure() {
action.addPropertyChangeListener(this);
button.addItemListener(this);
}
public void itemStateChanged(ItemEvent e) {
action.putValue(SELECTED_KEY, e.getStateChange() == ItemEvent.SELECTED);
}
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals(SELECTED_KEY)) {
button.setSelected((Boolean) evt.getNewValue());
}
}
}

View File

@ -0,0 +1,19 @@
package enginuity.logger.ui.swing.menubar.util;
import enginuity.swing.GenericFileFilter;
import javax.swing.filechooser.FileFilter;
import java.io.File;
public final class UserProfileFileFilter extends FileFilter {
private final FileFilter filter = new GenericFileFilter("ECU Logger User Profiles", "xml");
public boolean accept(File file) {
return filter.accept(file);
}
public String getDescription() {
return filter.getDescription();
}
}