From 33ea1fdfebdf77b82fbe2d0ee8ea3609923e1a3f Mon Sep 17 00:00:00 2001 From: Nathan Glenn Date: Mon, 22 Jul 2024 16:13:34 -0500 Subject: [PATCH] Add debugger menu item to open settings dir. Sometimes the user needs to get to their settings folder (e.g. to inspect, share, or delete it), but it's buried deep somewhere they never go on their hard drive. Add a menu item that opens the File Explorer at the location where the settings are located. Ideally users would never need this, but weird things happen and it's nice to empower users to take care of it when they do. Fixes #481. --- ...{StartBrowser.java => DesktopActions.java} | 20 ++++++++++--- .../umich/soar/debugger/menu/FileMenu.java | 29 +++++++++++++++++++ .../umich/soar/debugger/menu/HelpMenu.java | 4 +-- 3 files changed, 47 insertions(+), 6 deletions(-) rename Java/Debugger/src/edu/umich/soar/debugger/general/{StartBrowser.java => DesktopActions.java} (54%) diff --git a/Java/Debugger/src/edu/umich/soar/debugger/general/StartBrowser.java b/Java/Debugger/src/edu/umich/soar/debugger/general/DesktopActions.java similarity index 54% rename from Java/Debugger/src/edu/umich/soar/debugger/general/StartBrowser.java rename to Java/Debugger/src/edu/umich/soar/debugger/general/DesktopActions.java index 788a67686c..defc0bd3da 100644 --- a/Java/Debugger/src/edu/umich/soar/debugger/general/StartBrowser.java +++ b/Java/Debugger/src/edu/umich/soar/debugger/general/DesktopActions.java @@ -13,15 +13,27 @@ ///////////////////////////////////////////////////////// import java.awt.Desktop; +import java.io.File; +import java.io.IOException; import java.net.URI; -public class StartBrowser +import java.net.URISyntaxException; + +public class DesktopActions { - public static void openURL(String url) throws Exception - { + public static void openURL(String url) throws IOException, URISyntaxException { if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) { Desktop.getDesktop().browse(new URI(url)); } else { - System.err.println("Opening websites URLs is not supported on this platform or machine"); + throw new IOException("Opening websites URLs is not supported on this platform or machine"); + } + } + + public static void openFileOrDirectory(File file) throws IOException { + if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.OPEN)) { + Desktop desktop = Desktop.getDesktop(); + desktop.open(file); + } else { + throw new IOException("Opening directories is not supported on this platform or machine"); } } diff --git a/Java/Debugger/src/edu/umich/soar/debugger/menu/FileMenu.java b/Java/Debugger/src/edu/umich/soar/debugger/menu/FileMenu.java index 6b79b6deb5..da69bd8a45 100644 --- a/Java/Debugger/src/edu/umich/soar/debugger/menu/FileMenu.java +++ b/Java/Debugger/src/edu/umich/soar/debugger/menu/FileMenu.java @@ -11,6 +11,8 @@ ********************************************************************************************/ package edu.umich.soar.debugger.menu; +import edu.umich.soar.debugger.general.AppProperties; +import edu.umich.soar.debugger.general.DesktopActions; import org.eclipse.swt.widgets.Menu; import sml.ClientAnalyzedXML; @@ -19,6 +21,8 @@ import edu.umich.soar.debugger.doc.Document; import edu.umich.soar.debugger.general.SaveLoad; +import java.io.File; + /******************************************************************************************** * * The file menu @@ -107,6 +111,15 @@ public void actionPerformed(ActionEvent e) } }; + private final AbstractAction m_Open = new AbstractAction("&Browse settings files...") + { + @Override + public void actionPerformed(ActionEvent e) + { + openSettingsPerformed(e); + } + }; + private final AbstractAction m_Exit = new AbstractAction("E&xit") { @Override @@ -147,6 +160,8 @@ private BaseMenu makeMenu(Menu parent, String title) menu.add(m_Load); menu.add(m_Save); menu.addSeparator(); + menu.add(m_Open); + menu.addSeparator(); menu.add(m_Exit); return menu; @@ -333,6 +348,20 @@ public void loadPerformed(ActionEvent e) } } + public void openSettingsPerformed(ActionEvent event) { + File settingsDir = AppProperties.GetSettingsFilePath(""); + try + { + DesktopActions.openFileOrDirectory(settingsDir); + } + catch (Exception e) + { + m_Frame.ShowMessageBox("Error opening directory " + settingsDir, e + .getLocalizedMessage()); + } + } + + /** Save the current window layout */ public void savePerformed(ActionEvent e) { diff --git a/Java/Debugger/src/edu/umich/soar/debugger/menu/HelpMenu.java b/Java/Debugger/src/edu/umich/soar/debugger/menu/HelpMenu.java index 93b18c8fad..81a5ee7e30 100644 --- a/Java/Debugger/src/edu/umich/soar/debugger/menu/HelpMenu.java +++ b/Java/Debugger/src/edu/umich/soar/debugger/menu/HelpMenu.java @@ -19,7 +19,7 @@ import edu.umich.soar.debugger.MainFrame; import edu.umich.soar.debugger.doc.Document; import edu.umich.soar.debugger.general.OSName; -import edu.umich.soar.debugger.general.StartBrowser; +import edu.umich.soar.debugger.general.DesktopActions; public class HelpMenu { @@ -143,7 +143,7 @@ private void open(String url) { try { - StartBrowser.openURL(url); + DesktopActions.openURL(url); } catch (Exception e) {