From f241b596501e3689cb16ce207ada3d7e3027f09e Mon Sep 17 00:00:00 2001 From: Robin K Date: Sat, 9 Apr 2022 10:21:33 +0200 Subject: [PATCH] Add option to auto connect on startup --- .../swing/menubar/EcuLoggerMenuBar.properties | 1 + src/main/java/com/romraider/Settings.java | 9 +++++ .../com/romraider/logger/ecu/EcuLogger.java | 7 +++- .../ui/swing/menubar/EcuLoggerMenuBar.java | 6 ++- .../menubar/action/AutoConnectAction.java | 39 +++++++++++++++++++ .../com/romraider/xml/DOMSettingsBuilder.java | 5 +++ .../xml/DOMSettingsUnmarshaller.java | 3 +- 7 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/romraider/logger/ecu/ui/swing/menubar/action/AutoConnectAction.java diff --git a/i18n/com/romraider/logger/ecu/ui/swing/menubar/EcuLoggerMenuBar.properties b/i18n/com/romraider/logger/ecu/ui/swing/menubar/EcuLoggerMenuBar.properties index 81443480..dd5de1cb 100644 --- a/i18n/com/romraider/logger/ecu/ui/swing/menubar/EcuLoggerMenuBar.properties +++ b/i18n/com/romraider/logger/ecu/ui/swing/menubar/EcuLoggerMenuBar.properties @@ -13,6 +13,7 @@ OUTLOCATION = Log File Output Location ... PROTOOPTIONS = Select Logging Protocol Options ... PROTOOPTIONSTT = Select to switch logging communications protocol DEFOGGERSW = Control File Logging With Defogger Switch +AUTOCONNECT= Automatically Connect On Startup COMREFRESH = Enable COM port Auto Refresh COMREFRESHTT = Select to enable automatic COM port refreshing ELM327ENABLED = Enable ELM327 OBD Support diff --git a/src/main/java/com/romraider/Settings.java b/src/main/java/com/romraider/Settings.java index 9ac5b040..873d483d 100644 --- a/src/main/java/com/romraider/Settings.java +++ b/src/main/java/com/romraider/Settings.java @@ -217,6 +217,7 @@ public class Settings implements Serializable { private boolean fileLoggingAbsoluteTimestamp; private String logfileNameText; private boolean logExternalsOnly; + private boolean autoConnectOnStartup = true; private static String userLocale = SYSTEM_NUMFORMAT; private Dimension loggerWindowSize = new Dimension(1000, 600); @@ -567,6 +568,14 @@ public class Settings implements Serializable { this.loggerPortDefault = loggerPortDefault; } + public void setAutoConnectOnStartup(boolean value) { + autoConnectOnStartup = value; + } + + public boolean getAutoConnectOnStartup() { + return autoConnectOnStartup; + } + public void setLoggerProtocol(String protocol) { Settings.loggerProtocol = protocol; } diff --git a/src/main/java/com/romraider/logger/ecu/EcuLogger.java b/src/main/java/com/romraider/logger/ecu/EcuLogger.java index 8b8bde24..c126926d 100644 --- a/src/main/java/com/romraider/logger/ecu/EcuLogger.java +++ b/src/main/java/com/romraider/logger/ecu/EcuLogger.java @@ -2073,6 +2073,10 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { getSettings().setRefreshMode(refreshMode); refresher.setRefreshMode(refreshMode); } + + public void setAutoConnect(boolean connect) { + getSettings().setAutoConnectOnStartup(connect); + } public void setElmEnabled(Boolean value) { getSettings().setElm327Enabled(value); @@ -2102,13 +2106,12 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { //********************************************************************** - public static void startLogger(int defaultCloseOperation, ECUEditor ecuEditor, String[] args) { touchEnabled = setTouchEnabled(args); boolean fullscreen = containsFullScreenArg(args); EcuLogger ecuLogger = getEcuLogger(ecuEditor); createAndShowGui(defaultCloseOperation, ecuLogger, fullscreen); - if (!ecuLogger.isLogging()) ecuLogger.startLogging(); + if (ecuLogger.getSettings().getAutoConnectOnStartup() && !ecuLogger.isLogging()) ecuLogger.startLogging(); } private static boolean containsFullScreenArg(String... args) { diff --git a/src/main/java/com/romraider/logger/ecu/ui/swing/menubar/EcuLoggerMenuBar.java b/src/main/java/com/romraider/logger/ecu/ui/swing/menubar/EcuLoggerMenuBar.java index d583bf8a..11210de2 100644 --- a/src/main/java/com/romraider/logger/ecu/ui/swing/menubar/EcuLoggerMenuBar.java +++ b/src/main/java/com/romraider/logger/ecu/ui/swing/menubar/EcuLoggerMenuBar.java @@ -1,6 +1,6 @@ /* * RomRaider Open-Source Tuning, Logging and Reflashing - * Copyright (C) 2006-2020 RomRaider.com + * Copyright (C) 2006-2022 RomRaider.com * * 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 @@ -59,6 +59,7 @@ import javax.swing.JSeparator; import com.romraider.Settings; import com.romraider.logger.ecu.EcuLogger; +import com.romraider.logger.ecu.ui.swing.menubar.action.AutoConnectAction; import com.romraider.logger.ecu.ui.swing.menubar.action.ComPortAutoRefreshAction; import com.romraider.logger.ecu.ui.swing.menubar.action.DisconnectAction; import com.romraider.logger.ecu.ui.swing.menubar.action.ElmEnabledAction; @@ -121,6 +122,9 @@ public class EcuLoggerMenuBar extends JMenuBar { fileLoggingControl.setSelected(false); settingsMenu.add(fileLoggingControl); logger.getComponentList().put("fileLoggingControl", fileLoggingControl); + RadioButtonMenuItem autoConnect = new RadioButtonMenuItem(rb.getString("AUTOCONNECT"), VK_A, getKeyStroke(VK_A, CTRL_MASK), new AutoConnectAction(logger), logger.getSettings().getAutoConnectOnStartup()); + autoConnect.setToolTipText(rb.getString("AUTOCONNECT")); + settingsMenu.add(autoConnect); RadioButtonMenuItem autoRefresh = new RadioButtonMenuItem(rb.getString("COMREFRESH"), VK_E, getKeyStroke(VK_E, CTRL_MASK), new ComPortAutoRefreshAction(logger), logger.getSettings().getRefreshMode()); autoRefresh.setToolTipText(rb.getString("COMREFRESHTT")); settingsMenu.add(autoRefresh); diff --git a/src/main/java/com/romraider/logger/ecu/ui/swing/menubar/action/AutoConnectAction.java b/src/main/java/com/romraider/logger/ecu/ui/swing/menubar/action/AutoConnectAction.java new file mode 100644 index 00000000..b2d03c0b --- /dev/null +++ b/src/main/java/com/romraider/logger/ecu/ui/swing/menubar/action/AutoConnectAction.java @@ -0,0 +1,39 @@ +/* + * RomRaider Open-Source Tuning, Logging and Reflashing + * Copyright (C) 2006-2022 RomRaider.com + * + * 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 com.romraider.logger.ecu.ui.swing.menubar.action; + +import com.romraider.logger.ecu.EcuLogger; +import com.romraider.swing.menubar.action.AbstractAction; +import java.awt.event.ActionEvent; + +public final class AutoConnectAction extends AbstractAction { + + public AutoConnectAction(EcuLogger logger) { + super(logger); + } + + public void actionPerformed(ActionEvent actionEvent) { + try { + logger.getSettings().setAutoConnectOnStartup((Boolean) getValue(SELECTED_KEY)); + } catch (Exception e) { + logger.reportError(e); + } + } +} diff --git a/src/main/java/com/romraider/xml/DOMSettingsBuilder.java b/src/main/java/com/romraider/xml/DOMSettingsBuilder.java index d221a20b..73c61b4b 100644 --- a/src/main/java/com/romraider/xml/DOMSettingsBuilder.java +++ b/src/main/java/com/romraider/xml/DOMSettingsBuilder.java @@ -322,6 +322,11 @@ public final class DOMSettingsBuilder { IIOMetadataNode loggerSettings = new IIOMetadataNode("logger"); loggerSettings.setAttribute("locale", settings.getLocale()); + // Automatically connect the logger on startup + IIOMetadataNode autoConnect = new IIOMetadataNode("autoConnectOnStartup"); + autoConnect.setAttribute("value", "" + settings.getAutoConnectOnStartup()); + loggerSettings.appendChild(autoConnect); + // serial connection IIOMetadataNode serial = new IIOMetadataNode("serial"); serial.setAttribute("port", validateAttr(settings.getLoggerPortDefault())); diff --git a/src/main/java/com/romraider/xml/DOMSettingsUnmarshaller.java b/src/main/java/com/romraider/xml/DOMSettingsUnmarshaller.java index 41785886..e542dff2 100644 --- a/src/main/java/com/romraider/xml/DOMSettingsUnmarshaller.java +++ b/src/main/java/com/romraider/xml/DOMSettingsUnmarshaller.java @@ -260,7 +260,8 @@ public final class DOMSettingsUnmarshaller { if (n.getNodeType() == ELEMENT_NODE && n.getNodeName().equalsIgnoreCase("serial")) { settings.setLoggerPortDefault(unmarshallAttribute(n, "port", "")); settings.setRefreshMode(unmarshallAttribute(n, "refresh", false)); - + } else if (n.getNodeType() == ELEMENT_NODE && n.getNodeName().equalsIgnoreCase("autoConnectOnStartup")) { + settings.setAutoConnectOnStartup(unmarshallAttribute(n, "value", true)); } else if (n.getNodeType() == ELEMENT_NODE && n.getNodeName().equalsIgnoreCase("protocol")) { settings.setLoggerProtocol(unmarshallAttribute(n, "name", "SSM")); settings.setTransportProtocol(unmarshallAttribute(n, "transport", "ISO9141"));