From 3e6d327e1c9f7df7d2930425a8e664a8f176ea6e Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 14 Feb 2023 03:26:32 +0000 Subject: [PATCH 1/5] Refactor help menu --- .../sf/openrocket/gui/main/BasicFrame.java | 21 +++++--- .../gui/util/DummyFrameMenuOSX.java | 48 +------------------ 2 files changed, 15 insertions(+), 54 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java index d505e00f1..acb3a134d 100644 --- a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java +++ b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java @@ -751,6 +751,15 @@ public class BasicFrame extends JFrame { } //// Help + generateHelpMenu(menubar, this); + + this.setJMenuBar(menubar); + } + + public static void generateHelpMenu(JMenuBar menubar, JFrame parent) { + JMenu menu; + JMenuItem item; + menu = new JMenu(trans.get("main.menu.help")); menu.setMnemonic(KeyEvent.VK_H); menu.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.help.desc")); @@ -764,7 +773,7 @@ public class BasicFrame extends JFrame { @Override public void actionPerformed(ActionEvent e) { log.info(Markers.USER_MARKER, "Guided tours selected"); - GuidedTourSelectionDialog.showDialog(BasicFrame.this); + GuidedTourSelectionDialog.showDialog(parent); } }); menu.add(item); @@ -779,7 +788,7 @@ public class BasicFrame extends JFrame { @Override public void actionPerformed(ActionEvent e) { log.info(Markers.USER_MARKER, "Bug report selected"); - BugReportDialog.showBugReportDialog(BasicFrame.this); + BugReportDialog.showBugReportDialog(parent); } }); menu.add(item); @@ -793,7 +802,7 @@ public class BasicFrame extends JFrame { @Override public void actionPerformed(ActionEvent e) { log.info(Markers.USER_MARKER, "Debug log selected"); - new DebugLogDialog(BasicFrame.this).setVisible(true); + new DebugLogDialog(parent).setVisible(true); } }); menu.add(item); @@ -808,7 +817,7 @@ public class BasicFrame extends JFrame { @Override public void actionPerformed(ActionEvent e) { log.info(Markers.USER_MARKER, "License selected"); - new LicenseDialog(BasicFrame.this).setVisible(true); + new LicenseDialog(parent).setVisible(true); } }); menu.add(item); @@ -821,12 +830,10 @@ public class BasicFrame extends JFrame { @Override public void actionPerformed(ActionEvent e) { log.info(Markers.USER_MARKER, "About selected"); - new AboutDialog(BasicFrame.this).setVisible(true); + new AboutDialog(parent).setVisible(true); } }); menu.add(item); - - this.setJMenuBar(menubar); } public RocketActions getRocketActions() { diff --git a/swing/src/net/sf/openrocket/gui/util/DummyFrameMenuOSX.java b/swing/src/net/sf/openrocket/gui/util/DummyFrameMenuOSX.java index 1d0bf444e..a509d172f 100644 --- a/swing/src/net/sf/openrocket/gui/util/DummyFrameMenuOSX.java +++ b/swing/src/net/sf/openrocket/gui/util/DummyFrameMenuOSX.java @@ -131,54 +131,8 @@ public class DummyFrameMenuOSX extends JFrame { }); menu.add(item); - //// Help - menu = new JMenu(trans.get("main.menu.help")); - menu.setMnemonic(KeyEvent.VK_H); - menu.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.help.desc")); - menubar.add(menu); - - //// Guided tours - item = new JMenuItem(trans.get("main.menu.help.tours"), KeyEvent.VK_L); - item.setIcon(Icons.HELP_TOURS); - item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.help.tours.desc")); - item.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - log.info(Markers.USER_MARKER, "Guided tours selected"); - GuidedTourSelectionDialog.showDialog(DummyFrameMenuOSX.this); - } - }); - menu.add(item); - - menu.addSeparator(); - - //// License - item = new JMenuItem(trans.get("main.menu.help.license"), KeyEvent.VK_L); - item.setIcon(Icons.HELP_LICENSE); - item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.help.license.desc")); - item.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - log.info(Markers.USER_MARKER, "License selected"); - new LicenseDialog(DummyFrameMenuOSX.this).setVisible(true); - } - }); - menu.add(item); - - //// About - item = new JMenuItem(trans.get("main.menu.help.about"), KeyEvent.VK_A); - item.setIcon(Icons.HELP_ABOUT); - item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.help.about.desc")); - item.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - log.info(Markers.USER_MARKER, "About selected"); - new AboutDialog(DummyFrameMenuOSX.this).setVisible(true); - } - }); - menu.add(item); - + BasicFrame.generateHelpMenu(menubar, this); this.setJMenuBar(menubar); } From 17199f016012c037fabd436c8aa4efa80ad70a93 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 14 Feb 2023 03:35:58 +0000 Subject: [PATCH 2/5] Remove unused imports --- swing/src/net/sf/openrocket/gui/util/GUIUtil.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/util/GUIUtil.java b/swing/src/net/sf/openrocket/gui/util/GUIUtil.java index cb17d0dd2..af1d3d16d 100644 --- a/swing/src/net/sf/openrocket/gui/util/GUIUtil.java +++ b/swing/src/net/sf/openrocket/gui/util/GUIUtil.java @@ -20,7 +20,6 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; -import java.util.LinkedList; import java.util.List; import java.util.Set; @@ -54,11 +53,9 @@ import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.border.TitledBorder; import javax.swing.event.ChangeListener; -import javax.swing.event.TableColumnModelListener; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.DefaultTableModel; -import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import javax.swing.table.TableModel; import javax.swing.tree.DefaultMutableTreeNode; @@ -69,7 +66,6 @@ import javax.swing.tree.TreeSelectionModel; import net.sf.openrocket.gui.Resettable; import net.sf.openrocket.logging.Markers; -import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.startup.Application; import net.sf.openrocket.util.BugException; import net.sf.openrocket.util.Invalidatable; From c35a15a8cd9e0d2dcf2af7df4a67a620cf5ecc73 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 14 Feb 2023 03:40:40 +0000 Subject: [PATCH 3/5] Refactor URL opening in dedicated method --- .../gui/components/DescriptionArea.java | 4 ++- .../openrocket/gui/components/URLLabel.java | 8 ++--- .../gui/dialogs/UpdateInfoDialog.java | 7 ++--- .../openrocket/gui/dialogs/WelcomeDialog.java | 4 +-- .../gui/help/tours/SlideShowLinkListener.java | 11 +++---- .../net/sf/openrocket/gui/util/URLUtil.java | 30 +++++++++++++++++++ 6 files changed, 45 insertions(+), 19 deletions(-) create mode 100644 swing/src/net/sf/openrocket/gui/util/URLUtil.java diff --git a/swing/src/net/sf/openrocket/gui/components/DescriptionArea.java b/swing/src/net/sf/openrocket/gui/components/DescriptionArea.java index 4061e2ba1..b60d4f6ad 100644 --- a/swing/src/net/sf/openrocket/gui/components/DescriptionArea.java +++ b/swing/src/net/sf/openrocket/gui/components/DescriptionArea.java @@ -1,5 +1,7 @@ package net.sf.openrocket.gui.components; +import net.sf.openrocket.gui.util.URLUtil; + import java.awt.Color; import java.awt.Desktop; import java.awt.Dimension; @@ -143,7 +145,7 @@ public class DescriptionArea extends JScrollPane { } try { - Desktop.getDesktop().browse(uri); + URLUtil.openWebpage(uri); } catch (Exception ex) { throw new RuntimeException(ex); diff --git a/swing/src/net/sf/openrocket/gui/components/URLLabel.java b/swing/src/net/sf/openrocket/gui/components/URLLabel.java index 182f3b127..5656eaa96 100644 --- a/swing/src/net/sf/openrocket/gui/components/URLLabel.java +++ b/swing/src/net/sf/openrocket/gui/components/URLLabel.java @@ -12,6 +12,7 @@ import java.net.URISyntaxException; import java.util.HashMap; import java.util.Map; +import net.sf.openrocket.gui.util.URLUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,12 +61,9 @@ public class URLLabel extends SelectableLabel { this.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - Desktop d = Desktop.getDesktop(); try { - d.browse(new URI(url)); - } catch (URISyntaxException e1) { - throw new BugException("Illegal URL: " + url, e1); - } catch (IOException e1) { + URLUtil.openWebpage(url); + } catch (Exception e1) { log.error("Unable to launch browser: " + e1.getMessage(), e1); } } diff --git a/swing/src/net/sf/openrocket/gui/dialogs/UpdateInfoDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/UpdateInfoDialog.java index c2122f19c..006222aed 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/UpdateInfoDialog.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/UpdateInfoDialog.java @@ -33,6 +33,7 @@ import net.sf.openrocket.gui.components.StyledLabel; import net.sf.openrocket.gui.util.GUIUtil; import net.sf.openrocket.gui.util.Icons; import net.sf.openrocket.gui.util.SwingPreferences; +import net.sf.openrocket.gui.util.URLUtil; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.startup.Application; import net.sf.openrocket.gui.widgets.SelectColorButton; @@ -94,9 +95,8 @@ public class UpdateInfoDialog extends JDialog { @Override public void hyperlinkUpdate(HyperlinkEvent e) { if (e.getEventType().equals(HyperlinkEvent.EventType.ACTIVATED)) { - Desktop desktop = Desktop.getDesktop(); try { - desktop.browse(e.getURL().toURI()); + URLUtil.openWebpage(e.getURL().toURI()); } catch (Exception ex) { log.warn("Exception hyperlink: " + ex.getMessage()); } @@ -180,9 +180,8 @@ public class UpdateInfoDialog extends JDialog { String url = AssetHandler.getInstallerURLForPlatform((UpdatePlatform) comboBox.getSelectedItem(), release.getReleaseName()); if (url == null) return; - Desktop desktop = Desktop.getDesktop(); try { - desktop.browse(new URI(url)); + URLUtil.openWebpage(url); } catch (Exception ex) { log.warn("Exception install link: " + ex.getMessage()); } diff --git a/swing/src/net/sf/openrocket/gui/dialogs/WelcomeDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/WelcomeDialog.java index 4e4119188..4cc65eabf 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/WelcomeDialog.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/WelcomeDialog.java @@ -4,6 +4,7 @@ import net.miginfocom.swing.MigLayout; import net.sf.openrocket.gui.components.StyledLabel; import net.sf.openrocket.gui.util.GUIUtil; import net.sf.openrocket.gui.util.Icons; +import net.sf.openrocket.gui.util.URLUtil; import net.sf.openrocket.gui.widgets.SelectColorButton; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.startup.Application; @@ -68,9 +69,8 @@ public class WelcomeDialog extends JDialog { @Override public void hyperlinkUpdate(HyperlinkEvent e) { if (e.getEventType().equals(HyperlinkEvent.EventType.ACTIVATED)) { - Desktop desktop = Desktop.getDesktop(); try { - desktop.browse(e.getURL().toURI()); + URLUtil.openWebpage(e.getURL().toURI()); } catch (Exception ex) { log.warn("Exception hyperlink: " + ex.getMessage()); } diff --git a/swing/src/net/sf/openrocket/gui/help/tours/SlideShowLinkListener.java b/swing/src/net/sf/openrocket/gui/help/tours/SlideShowLinkListener.java index 0ac1620b8..58675e21c 100644 --- a/swing/src/net/sf/openrocket/gui/help/tours/SlideShowLinkListener.java +++ b/swing/src/net/sf/openrocket/gui/help/tours/SlideShowLinkListener.java @@ -9,6 +9,7 @@ import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkEvent.EventType; import javax.swing.event.HyperlinkListener; +import net.sf.openrocket.gui.util.URLUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,13 +36,9 @@ public class SlideShowLinkListener implements HyperlinkListener { URL url = event.getURL(); if (url != null && (url.getProtocol().equalsIgnoreCase("http") || url.getProtocol().equals("https"))) { - - if (Desktop.isDesktopSupported()) { - try { - Desktop.getDesktop().browse(url.toURI()); - } catch (Exception e) { - // Ignore - } + try { + URLUtil.openWebpage(url.toURI()); + } catch (Exception ignore) { } } else { diff --git a/swing/src/net/sf/openrocket/gui/util/URLUtil.java b/swing/src/net/sf/openrocket/gui/util/URLUtil.java new file mode 100644 index 000000000..5a273d9e7 --- /dev/null +++ b/swing/src/net/sf/openrocket/gui/util/URLUtil.java @@ -0,0 +1,30 @@ +package net.sf.openrocket.gui.util; + +import net.sf.openrocket.util.BugException; + +import java.awt.Desktop; +import java.net.URI; +import java.net.URISyntaxException; + +public abstract class URLUtil { + public static boolean openWebpage(URI uri) { + Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null; + if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) { + try { + desktop.browse(uri); + return true; + } catch (Exception e) { + e.printStackTrace(); + } + } + return false; + } + + public static boolean openWebpage(String url) { + try { + return openWebpage(new URI(url)); + } catch (URISyntaxException e) { + throw new BugException("Illegal URL: " + url, e); + } + } +} From cff2cf4f3c287b64a7e142146000688b478c5bed Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 14 Feb 2023 03:51:39 +0000 Subject: [PATCH 4/5] [#2046] Add Wiki button to help menu --- core/resources/l10n/messages.properties | 2 ++ .../src/net/sf/openrocket/gui/main/BasicFrame.java | 14 ++++++++++++++ swing/src/net/sf/openrocket/gui/util/Icons.java | 1 + swing/src/net/sf/openrocket/gui/util/URLUtil.java | 2 ++ 4 files changed, 19 insertions(+) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index e7f8ae5e9..0169179a5 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -1464,6 +1464,8 @@ main.menu.help = Help main.menu.help.desc = Information about OpenRocket main.menu.help.tours = Guided tours main.menu.help.tours.desc = Take guided tours on OpenRocket +main.menu.help.wiki = Wiki (Online Help) +main.menu.help.wiki.desc = Open the OpenRocket Wiki site, containing documentation, in your default webbrowser main.menu.help.license = License main.menu.help.license.desc = OpenRocket license information main.menu.help.bugReport = Bug report diff --git a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java index acb3a134d..82a6fb014 100644 --- a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java +++ b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java @@ -84,6 +84,7 @@ import net.sf.openrocket.gui.util.Icons; import net.sf.openrocket.gui.util.OpenFileWorker; import net.sf.openrocket.gui.util.SaveFileWorker; import net.sf.openrocket.gui.util.SwingPreferences; +import net.sf.openrocket.gui.util.URLUtil; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.logging.Markers; import net.sf.openrocket.rocketcomponent.AxialStage; @@ -778,6 +779,19 @@ public class BasicFrame extends JFrame { }); menu.add(item); + //// Wiki (Online Help) + item = new JMenuItem(trans.get("main.menu.help.wiki")); + item.setIcon(Icons.WIKI); + item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.help.wiki.desc")); + item.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + log.info(Markers.USER_MARKER, "Wiki selected"); + URLUtil.openWebpage(URLUtil.WIKI_URL); + } + }); + menu.add(item); + menu.addSeparator(); //// Bug report diff --git a/swing/src/net/sf/openrocket/gui/util/Icons.java b/swing/src/net/sf/openrocket/gui/util/Icons.java index 76190fbc1..0ebd96ab0 100644 --- a/swing/src/net/sf/openrocket/gui/util/Icons.java +++ b/swing/src/net/sf/openrocket/gui/util/Icons.java @@ -78,6 +78,7 @@ public class Icons { public static final Icon HELP_BUG_REPORT = loadImageIcon("pix/icons/help-bug.png", "Bug report"); public static final Icon HELP_DEBUG_LOG = loadImageIcon("pix/icons/help-log.png", "Debug log"); public static final Icon HELP_TOURS = loadImageIcon("pix/icons/help-tours.png", "Guided tours"); + public static final Icon WIKI = loadImageIcon("pix/icons/wiki.png", "Wiki (Documentation)"); public static final Icon ZOOM_IN = loadImageIcon("pix/icons/zoom-in.png", "Zoom in"); public static final Icon ZOOM_OUT = loadImageIcon("pix/icons/zoom-out.png", "Zoom out"); diff --git a/swing/src/net/sf/openrocket/gui/util/URLUtil.java b/swing/src/net/sf/openrocket/gui/util/URLUtil.java index 5a273d9e7..fdace3cdb 100644 --- a/swing/src/net/sf/openrocket/gui/util/URLUtil.java +++ b/swing/src/net/sf/openrocket/gui/util/URLUtil.java @@ -7,6 +7,8 @@ import java.net.URI; import java.net.URISyntaxException; public abstract class URLUtil { + public static final String WIKI_URL = "http://wiki.openrocket.info/"; + public static boolean openWebpage(URI uri) { Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null; if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) { From b15dcd36688d736028ab3ff855a0f25d91d1a1dc Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 14 Feb 2023 11:26:30 +0000 Subject: [PATCH 5/5] Include icon --- core/resources/pix/icons/wiki.png | Bin 0 -> 622 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 core/resources/pix/icons/wiki.png diff --git a/core/resources/pix/icons/wiki.png b/core/resources/pix/icons/wiki.png new file mode 100644 index 0000000000000000000000000000000000000000..7d863f949741ff83fd8373a77c0d95a3d95e441f GIT binary patch literal 622 zcmV-!0+IcRP)YeaZ-G+53gSTz{SPWVdFiPaPX+$~@n)fi9>qgJ zh4fN-QcEhq^wI<|vImjml9)pF*W2zl+qWbTPaSyKyqWKt`DS)j3xa?yVgf%ewhl|m zA$_0x^Rx4E@d&=>uRoSN*Cm&aL#`7&zr0;L(pKMn1G#$ZszFkMC^?B8f`0w&-UD$u zd-(?iK6#!;xZ`>J^A9DGiTfguewDOKwDEKoL}`ZE_M}0=xvsgf$usmJeV$oo28d0#yu!pdgpag$giC zhlKP!CMX3wsPMGgZ5n>Xg+hV--ENofAcH61#0B7Hvl-7Il}g2A6;lfG`FxbX8A>p$ z0P;GW4il9Mr9jO9)xB^Rgy%*CSTdQ6D;kDDnM{U{5Q21FA4#ZM71$_Dba8z<-Y_Na zS@|v#c0PZNDux9AoXD-ZoWP~q)7QrC`G