From 735966de36049c079df18a7f3eac3719322f2577 Mon Sep 17 00:00:00 2001 From: hcraigmiller <68821492+hcraigmiller@users.noreply.github.com> Date: Sun, 1 May 2022 00:12:09 -0700 Subject: [PATCH 1/7] NEW Export Feature Replaces previous commit --- core/resources/l10n/messages.properties | 4 +- core/resources/pix/icons/RASAero_16.png | Bin 0 -> 681 bytes core/resources/pix/icons/Rocksim_16.png | Bin 0 -> 891 bytes core/resources/pix/icons/model_export.png | Bin 0 -> 497 bytes core/resources/pix/icons/model_import.png | Bin 0 -> 726 bytes .../sf/openrocket/gui/main/BasicFrame.java | 216 ++++++++---------- .../src/net/sf/openrocket/gui/util/Icons.java | 25 +- 7 files changed, 115 insertions(+), 130 deletions(-) create mode 100644 core/resources/pix/icons/RASAero_16.png create mode 100644 core/resources/pix/icons/Rocksim_16.png create mode 100644 core/resources/pix/icons/model_export.png create mode 100644 core/resources/pix/icons/model_import.png diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 0b0465672..363c32b1e 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -1298,8 +1298,8 @@ main.menu.file.saveAs = Save as... main.menu.file.saveAs.desc = Save the current rocket design to a new file main.menu.file.import = Import... main.menu.file.import.desc = Import model from RockSim rkt file -main.menu.file.export = Export... -main.menu.file.export.desc = Export model to RockSim rkt file +main.menu.file.export_as = Export... +main.menu.file.export_as.desc = Export model to RockSim rkt file main.menu.file.print = Print / Export PDF... main.menu.file.print.desc = Print or save as PDF the parts list and fin templates main.menu.file.close = Close diff --git a/core/resources/pix/icons/RASAero_16.png b/core/resources/pix/icons/RASAero_16.png new file mode 100644 index 0000000000000000000000000000000000000000..c9fc75446180769f3b43a38f8e8053c821eadd6f GIT binary patch literal 681 zcmV;a0#^NrP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0zOGZK~y+Tos!FI z8c`I+kB(z}BxJA~p|*~TrYbZVX;Mg2F`I$}O5Ao4l7+iMvdbUfuA8*0(pE{k=}OQb z6e3M)q0om^g+PrHMlB91(ZR{!Gd^y|VF+z7N!uUX#pQh8x%a#0%HTgpnN0SgPPcx7 zce#IVurqxtG+Sk^TNhvDn)Zho)Pn2}`X z69@!|L?V$al}e~msh~!qfpUQWdSftb4C``HbphpaSy-hMj^m(KtKpdAfVJ6T4;kjk zuzqO+i`l$wv)NaNX5n;bwwj>V>+@3i{03gHmk0)f+xMK#WemfhR;vL`(_xy<#)S8f zRKFo)C5L&XEePhVLZN`_^*Rz_pm;nUibkV^+wCTNKA&BZfjEU6eMoAx;~#JZMs|CB z=nn>fDR9teG|+4|fnk`i!{P9Vjx&f6p1<@HFzDssqz?TS4>HsPwMr$L)9G}I=lL~J zeG!kQ)XTw@yNEsfj+&L9=%`pgR3?r5et%MujO6qY-8Uw-mhOy!oTs48Re-M+VO*;P zr_=dbl8gj%8z+dz3%X}Z4`y7-S&K0EeJFqV1e&W>P)%NebcQJ>gvd_% z)r)v-(dwA@997xH`2}ZK(vC#7dH)(=m^OvTHc!?Ln5Qf6s^S;@I{1BCpEP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0}x3>K~y+TWs+@3 zlTj4M&wP2DekdJ}Q@@xt(_|$}%U;}kp|qNl*~gJgXQnum!axZ_3{+y!hrmF}*U$>V z93{Rm*p?AEqkJ3HrhzDKN>H0_+MMoo?^P@F2j|}VJoo(1J@=do8(kgw@E;7raMfzH zsJpu--((uUA{3rT*xfn+XZ5wtzyU|gEGeAQ_!vlE#FXN+c z@5jW(BBinr+3m~J>gwufkm>2^UHJ|?9uNB|QA1;6-i{h$o-u!Ubgvd=WMu5iAR;0H z`Fy@z=?=-s$q3g44Gav75UpQMPEMlDZadD*&cR)U0!$_owfg#cSXo(tv9U4Y_Xk`f zz;OU)mX5E;1eBJRu~w@US}j%>3Fia9tc*I64iF|LCSY=MlCB97i5R3(Dd5_0b7it9 zC@3hn(Am*}mX}wM?agcC864Wl6{FQ^QD$c5zH1RvC={r=x*DaVq#W_{YuD>s{r$AHEF1nKEG%q+I_h+~_Z>J3g3swh ztHn3ydV6~tsZ=T?6beydVj?vXx2dTK_4W0=AXPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0ftFLK~y+Tm6A;; zL{SvS&mHq-3^Bt*SxA$el3^t@AsZx9E>b#y^jP(}(SwQ8ng-WP0$Enis8Ug4cgI&cpTiS08>Ypw+Tq715tC ziDe{~;{gh#E+^GK%LWwwS>O*fKqI_*?4di=Km}|CPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0&7V`K~y+TeUe*9 zltC27&$KsFvJG4bH)Vr1=w?gxkfbI_i}Vuq&`Y60Z9!1jqoufkM4LWDJw$}!rW8hn z(NiK>Q4rKd5h1Zb8+&OlSnGa!`R>!qFnqZf`-8(db7sze&Kw5*hx|M1Nj!Qy$d?sa z!@Ys3>2^7to)XfjO*~bRRRXA3?3a>>o%wt|!&4P06G$e7MkJOlGRD^ey< zj|#mwpWjdv1R5fzUgyf%7z;}o{57HB25PqDyJ z;vK3PTD8L{!b|=M=vy1=mQ*dXAeJDkD9v|AieAkGL!@ZEW+vjqNE}=~hWdC3!+1hU z!)=SQ3~^PPy__k1vB)r9Rf5{8A^`DVBSzw0$9;U2moS*X;`DS^Y=7HCv}PUD?AjCD zdnb;<=TVjv`I*29vx+d#5XAkgn!p6Gq8t*I!fS0icEf=l-{#O+C#HF;1UJd;F;-jx zfp$WThz!$x3KM8@d>w4Ll9t@Xt`GCiW`5E$lp{XuB7b83`E9g? zu2 "Export as..." menu and submenu + + // INITIALIZE "Export as..." submenu with options list + JMenu exportSubMenu = new JMenu(); + JMenuItem exportMenu = new JMenuItem(), + RASAero= new JMenuItem("RASAero - Future"), + Rocksim = new JMenuItem("Rocksim"); + + // CREATE File > "Export as..." menu line with icon + exportSubMenu = new JMenu(trans.get("main.menu.file.export_as")); + exportSubMenu.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.file.export_as.desc")); + exportSubMenu.setIcon(Icons.FILE_EXPORT_AS); + + // CREATE "Export as..." submenu + // ADD Export option items with icons to submenu + exportSubMenu.add(Rocksim); + Rocksim.setIcon(Icons.ROCKSIM_ICON); + exportSubMenu.add(RASAero); + RASAero.setIcon(Icons.RASAERO_ICON); + + // ADD Listeners + RASAero.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - log.info(Markers.USER_MARKER, "Export... selected"); - exportAction(); - } - }); - menu.add(item); + exportRASAeroAction();}}); + Rocksim.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + exportRocksimAction();}}); + + // ADD Export options submenu to export menu + menu.add(exportSubMenu); + +// END Create and implement File > "Export as..." menu and submenu //// Export decal... item = new JMenuItem(trans.get("main.menu.file.exportDecal")); @@ -1169,7 +1134,7 @@ public class BasicFrame extends JFrame { } } - private void importAction() { + public void importAction() { JFileChooser chooser = new JFileChooser(); chooser.addChoosableFileFilter(FileHelper.ALL_DESIGNS_FILTER); @@ -1275,7 +1240,7 @@ public class BasicFrame extends JFrame { * * @param worker the OpenFileWorker that loads the file. * @param displayName the file name to display in dialogs. - * @param file the File to set the document to (may be null). +// * @param file the File to set the document to (may be null). * @param parent * @param openRocketConfigDialog if true, will open the configuration dialog of the rocket. This is useful for examples. * @return @@ -1376,20 +1341,35 @@ public class BasicFrame extends JFrame { log.info("Document does not contain file, opening save as dialog instead"); return saveAsAction(); } - log.info("Saving document to " + file); - return saveAsOpenRocket(file); } - /** - * "Export" action. + // BEGIN RASAERO Export Action *** UNDER CONSTRUCTION -- CURRENTLY FOR TESTING ONLY *** + /** + * MODEL "Export as" RASAero file format * - * @return true if the file was saved, false otherwise + * @return true if the file was saved, false otherwise */ - private boolean exportAction() { - File file = null; + public boolean exportRASAeroAction() { + return false; + } + // END RASAERO Export Action + + public void actionPerformed(ActionEvent e) { + log.info(Markers.USER_MARKER, "Import... selected"); + importAction(); + } + + // BEGIN ROCKSIM Export Action + /** + * MODEL "Export as" RASAero file format + * + * @return true if the file was saved, false otherwise + */ + public boolean exportRocksimAction() { + File file; final SaveAsFileChooser chooser = SaveAsFileChooser.build(document, FileType.ROCKSIM); @@ -1414,6 +1394,7 @@ public class BasicFrame extends JFrame { } return false; } + // END ROCKSIM Export Action /** * Perform the writing of the design to the given file in Rocksim format. @@ -1473,7 +1454,7 @@ public class BasicFrame extends JFrame { if (!DecalNotFoundDialog.showDialog(null, decex) && decal != null) { decal.setIgnored(true); } - return saveRocksimFile(file, options); // Resave + return saveRocksimFile(file, options); // Re-save } } @@ -1565,7 +1546,7 @@ public class BasicFrame extends JFrame { if (!DecalNotFoundDialog.showDialog(null, decex) && decal != null) { decal.setIgnored(true); } - return saveAsOpenRocket(file); // Resave + return saveAsOpenRocket(file); // Re-save } else { Reflection.handleWrappedException(e); @@ -1734,8 +1715,10 @@ public class BasicFrame extends JFrame { simulationPanel.activating(); } } -} + public void open() { + } +} class BasicFrame_changeAdapter implements javax.swing.event.ChangeListener { BasicFrame adaptee; @@ -1746,5 +1729,4 @@ class BasicFrame_changeAdapter implements javax.swing.event.ChangeListener { public void stateChanged(ChangeEvent e) { adaptee.stateChanged(e); } -} - +} \ No newline at end of file diff --git a/swing/src/net/sf/openrocket/gui/util/Icons.java b/swing/src/net/sf/openrocket/gui/util/Icons.java index 76ed87fdd..00b7dd63e 100644 --- a/swing/src/net/sf/openrocket/gui/util/Icons.java +++ b/swing/src/net/sf/openrocket/gui/util/Icons.java @@ -1,20 +1,17 @@ package net.sf.openrocket.gui.util; -import java.net.URL; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import javax.swing.Icon; -import javax.swing.ImageIcon; - import net.sf.openrocket.document.Simulation; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.startup.Application; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.swing.*; +import java.net.URL; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + public class Icons { private static final Logger log = LoggerFactory.getLogger(Icons.class); @@ -52,6 +49,8 @@ public class Icons { public static final Icon FILE_OPEN_EXAMPLE = loadImageIcon("pix/icons/document-open-example.png", "Open example document"); public static final Icon FILE_SAVE = loadImageIcon("pix/icons/document-save.png", "Save document"); public static final Icon FILE_SAVE_AS = loadImageIcon("pix/icons/document-save-as.png", "Save document as"); + public static final Icon FILE_IMPORT = loadImageIcon("pix/icons/model_import.png", "Import"); + public static final Icon FILE_EXPORT_AS = loadImageIcon("pix/icons/model_export.png", "Export model as..."); public static final Icon FILE_PRINT = loadImageIcon("pix/icons/document-print.png", "Print document"); public static final Icon FILE_CLOSE = loadImageIcon("pix/icons/document-close.png", "Close document"); public static final Icon FILE_QUIT = loadImageIcon("pix/icons/application-exit.png", "Quit OpenRocket"); @@ -88,8 +87,12 @@ public class Icons { public static final Icon CG_OVERRIDE = loadImageIcon("pix/icons/cg-override.png", "CG Override"); public static final Icon MASS_OVERRIDE = loadImageIcon("pix/icons/mass-override.png", "Mass Override"); - - + +// MANUFACTURERS ICONS + public static final Icon RASAERO_ICON = loadImageIcon("pix/icons/RASAero_16.png", "RASAero Icon"); + public static final Icon ROCKSIM_ICON = loadImageIcon("pix/icons/Rocksim_16.png", "Rocksim Icon"); + + static { log.debug("Icons loaded"); } From 0e0e006553c0f0609c81fef6438df97558da8b8e Mon Sep 17 00:00:00 2001 From: hcraigmiller <68821492+hcraigmiller@users.noreply.github.com> Date: Sun, 1 May 2022 01:40:12 -0700 Subject: [PATCH 2/7] Removed comment on line 1243 The compiler was throwing a warning related to the "file" indicated, so I commented the line out. This change restores the line's prior status. --- swing/src/net/sf/openrocket/gui/main/BasicFrame.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java index 23ff313d5..811a12976 100644 --- a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java +++ b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java @@ -1240,7 +1240,7 @@ public class BasicFrame extends JFrame { * * @param worker the OpenFileWorker that loads the file. * @param displayName the file name to display in dialogs. -// * @param file the File to set the document to (may be null). + * @param file the File to set the document to (may be null). * @param parent * @param openRocketConfigDialog if true, will open the configuration dialog of the rocket. This is useful for examples. * @return @@ -1729,4 +1729,4 @@ class BasicFrame_changeAdapter implements javax.swing.event.ChangeListener { public void stateChanged(ChangeEvent e) { adaptee.stateChanged(e); } -} \ No newline at end of file +} From c00788817290fc957f8633f22ebe9339a68361dd Mon Sep 17 00:00:00 2001 From: hcraigmiller <68821492+hcraigmiller@users.noreply.github.com> Date: Sun, 1 May 2022 01:53:52 -0700 Subject: [PATCH 3/7] Clean up messages From: main.menu.file.export_as = Export... To: main.menu.file.export_as = Export as... From: main.menu.file.export_as.desc = Export model to Rocksim .rkt file To: main.menu.file.export_as.desc = Export model to selected file format --- core/resources/l10n/messages.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 363c32b1e..c0278d698 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -1298,8 +1298,8 @@ main.menu.file.saveAs = Save as... main.menu.file.saveAs.desc = Save the current rocket design to a new file main.menu.file.import = Import... main.menu.file.import.desc = Import model from RockSim rkt file -main.menu.file.export_as = Export... -main.menu.file.export_as.desc = Export model to RockSim rkt file +main.menu.file.export_as = Export as... +main.menu.file.export_as.desc = Export model to selected file format main.menu.file.print = Print / Export PDF... main.menu.file.print.desc = Print or save as PDF the parts list and fin templates main.menu.file.close = Close From ac9d1770126a41687eaa5a1e9d19c8e8b722b3b7 Mon Sep 17 00:00:00 2001 From: hcraigmiller <68821492+hcraigmiller@users.noreply.github.com> Date: Sun, 1 May 2022 11:11:34 -0700 Subject: [PATCH 4/7] Removed RASAero export option Pending the creation of the RASAero export translator, the export menu option for RASAero has been removed. --- swing/src/net/sf/openrocket/gui/main/BasicFrame.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java index 811a12976..ac33f9baa 100644 --- a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java +++ b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java @@ -499,10 +499,10 @@ public class BasicFrame extends JFrame { // CREATE "Export as..." submenu // ADD Export option items with icons to submenu + /* exportSubMenu.add(RASAero); + RASAero.setIcon(Icons.RASAERO_ICON); */ exportSubMenu.add(Rocksim); Rocksim.setIcon(Icons.ROCKSIM_ICON); - exportSubMenu.add(RASAero); - RASAero.setIcon(Icons.RASAERO_ICON); // ADD Listeners RASAero.addActionListener(new ActionListener() { From d9b3b77eb7c63ad910725292db0a8e6c13dadf48 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Sun, 1 May 2022 22:28:51 +0200 Subject: [PATCH 5/7] Fix imports in BasicFrame --- .../sf/openrocket/gui/main/BasicFrame.java | 151 ++++++++++++------ 1 file changed, 106 insertions(+), 45 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java index ac33f9baa..d88b599a4 100644 --- a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java +++ b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java @@ -1,49 +1,17 @@ package net.sf.openrocket.gui.main; -import net.miginfocom.swing.MigLayout; -import net.sf.openrocket.aerodynamics.WarningSet; -import net.sf.openrocket.appearance.DecalImage; -import net.sf.openrocket.document.OpenRocketDocument; -import net.sf.openrocket.document.OpenRocketDocumentFactory; -import net.sf.openrocket.document.StorageOptions; -import net.sf.openrocket.document.StorageOptions.FileType; -import net.sf.openrocket.file.GeneralRocketSaver; -import net.sf.openrocket.file.RocketLoadException; -import net.sf.openrocket.gui.components.StyledLabel; -import net.sf.openrocket.gui.configdialog.ComponentConfigDialog; -import net.sf.openrocket.gui.customexpression.CustomExpressionDialog; -import net.sf.openrocket.gui.dialogs.*; -import net.sf.openrocket.gui.dialogs.optimization.GeneralOptimizationDialog; -import net.sf.openrocket.gui.dialogs.preferences.PreferencesDialog; -import net.sf.openrocket.gui.figure3d.photo.PhotoFrame; -import net.sf.openrocket.gui.help.tours.GuidedTourSelectionDialog; -import net.sf.openrocket.gui.main.componenttree.ComponentTree; -import net.sf.openrocket.gui.main.flightconfigpanel.FlightConfigurationPanel; -import net.sf.openrocket.gui.scalefigure.RocketPanel; -import net.sf.openrocket.gui.util.*; -import net.sf.openrocket.gui.widgets.SelectColorButton; -import net.sf.openrocket.l10n.Translator; -import net.sf.openrocket.logging.Markers; -import net.sf.openrocket.rocketcomponent.*; -import net.sf.openrocket.startup.Application; -import net.sf.openrocket.startup.Preferences; -import net.sf.openrocket.util.*; -import net.sf.openrocket.util.MemoryManagement.MemoryData; -import net.sf.openrocket.utils.ComponentPresetEditor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.swing.*; -import javax.swing.border.BevelBorder; -import javax.swing.border.TitledBorder; -import javax.swing.event.ChangeEvent; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultTreeSelectionModel; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; -import java.awt.*; -import java.awt.event.*; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Toolkit; +import java.awt.Window; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -53,10 +21,103 @@ import java.net.URISyntaxException; import java.net.URL; import java.net.URLDecoder; import java.util.ArrayList; +import java.util.Arrays; +import java.util.EventObject; +import java.util.LinkedList; import java.util.List; -import java.util.*; import java.util.concurrent.ExecutionException; +import javax.swing.Action; +import javax.swing.BorderFactory; +import javax.swing.InputMap; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JFileChooser; +import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JScrollPane; +import javax.swing.JSpinner; +import javax.swing.JSplitPane; +import javax.swing.JTabbedPane; +import javax.swing.JTextField; +import javax.swing.KeyStroke; +import javax.swing.ListSelectionModel; +import javax.swing.ScrollPaneConstants; +import javax.swing.SwingUtilities; +import javax.swing.border.BevelBorder; +import javax.swing.border.TitledBorder; +import javax.swing.event.ChangeEvent; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.tree.DefaultTreeSelectionModel; +import javax.swing.tree.TreePath; +import javax.swing.tree.TreeSelectionModel; + +import net.sf.openrocket.appearance.DecalImage; +import net.sf.openrocket.gui.dialogs.DecalNotFoundDialog; +import net.sf.openrocket.gui.widgets.SelectColorButton; +import net.sf.openrocket.rocketcomponent.AxialStage; +import net.sf.openrocket.util.DecalNotFoundException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import net.miginfocom.swing.MigLayout; +import net.sf.openrocket.aerodynamics.WarningSet; +import net.sf.openrocket.document.OpenRocketDocument; +import net.sf.openrocket.document.OpenRocketDocumentFactory; +import net.sf.openrocket.document.StorageOptions; +import net.sf.openrocket.document.StorageOptions.FileType; +import net.sf.openrocket.file.GeneralRocketSaver; +import net.sf.openrocket.file.RocketLoadException; +import net.sf.openrocket.gui.components.StyledLabel; +import net.sf.openrocket.gui.configdialog.ComponentConfigDialog; +import net.sf.openrocket.gui.customexpression.CustomExpressionDialog; +import net.sf.openrocket.gui.dialogs.AboutDialog; +import net.sf.openrocket.gui.dialogs.BugReportDialog; +import net.sf.openrocket.gui.dialogs.ComponentAnalysisDialog; +import net.sf.openrocket.gui.dialogs.DebugLogDialog; +import net.sf.openrocket.gui.dialogs.DetailDialog; +import net.sf.openrocket.gui.dialogs.LicenseDialog; +import net.sf.openrocket.gui.dialogs.PrintDialog; +import net.sf.openrocket.gui.dialogs.ScaleDialog; +import net.sf.openrocket.gui.dialogs.SwingWorkerDialog; +import net.sf.openrocket.gui.dialogs.WarningDialog; +import net.sf.openrocket.gui.dialogs.optimization.GeneralOptimizationDialog; +import net.sf.openrocket.gui.dialogs.preferences.PreferencesDialog; +import net.sf.openrocket.gui.figure3d.photo.PhotoFrame; +import net.sf.openrocket.gui.help.tours.GuidedTourSelectionDialog; +import net.sf.openrocket.gui.main.componenttree.ComponentTree; +import net.sf.openrocket.gui.main.flightconfigpanel.FlightConfigurationPanel; +import net.sf.openrocket.gui.scalefigure.RocketPanel; +import net.sf.openrocket.gui.util.FileHelper; +import net.sf.openrocket.gui.util.GUIUtil; +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.l10n.Translator; +import net.sf.openrocket.logging.Markers; +import net.sf.openrocket.rocketcomponent.ComponentChangeEvent; +import net.sf.openrocket.rocketcomponent.ComponentChangeListener; +import net.sf.openrocket.rocketcomponent.Rocket; +import net.sf.openrocket.rocketcomponent.RocketComponent; +import net.sf.openrocket.startup.Application; +import net.sf.openrocket.startup.Preferences; +import net.sf.openrocket.util.BugException; +import net.sf.openrocket.util.MemoryManagement; +import net.sf.openrocket.util.MemoryManagement.MemoryData; +import net.sf.openrocket.util.Reflection; +import net.sf.openrocket.util.StateChangeListener; +import net.sf.openrocket.util.TestRockets; +import net.sf.openrocket.utils.ComponentPresetEditor; + public class BasicFrame extends JFrame { private static final long serialVersionUID = 948877655223365313L; From 85559d6da2fda8b43037871cc5f7af27806814c8 Mon Sep 17 00:00:00 2001 From: hcraigmiller <68821492+hcraigmiller@users.noreply.github.com> Date: Wed, 4 May 2022 12:53:31 -0700 Subject: [PATCH 6/7] Update File menu and submenu Improves File menu and submenus in preparation for the addition of future features. --- core/resources/l10n/messages.properties | 28 +- .../pix/icons/Painting-Transparent-PNG_16.png | Bin 0 -> 876 bytes .../pix/icons/document-print-Specs.png | Bin 0 -> 943 bytes core/resources/pix/icons/model_encode3d.png | Bin 0 -> 740 bytes core/resources/pix/icons/model_export.png | Bin 497 -> 482 bytes .../sf/openrocket/gui/main/BasicFrame.java | 330 +++++++++--------- .../util/ExportFileTranslator_RASAero.java | 10 + .../src/net/sf/openrocket/gui/util/Icons.java | 11 +- 8 files changed, 197 insertions(+), 182 deletions(-) create mode 100644 core/resources/pix/icons/Painting-Transparent-PNG_16.png create mode 100644 core/resources/pix/icons/document-print-Specs.png create mode 100644 core/resources/pix/icons/model_encode3d.png create mode 100644 swing/src/net/sf/openrocket/gui/util/ExportFileTranslator_RASAero.java diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index c0278d698..d2cb4f148 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -1286,28 +1286,30 @@ main.menu.file = File main.menu.file.desc = File-handling related tasks main.menu.file.new = New main.menu.file.new.desc = Create a new rocket design -main.menu.file.open = Open... +main.menu.file.open = Open. . . main.menu.file.open.desc = Open a rocket design -main.menu.file.openRecent = Open Recent... +main.menu.file.openRecent = Open recent main.menu.file.openRecent.desc = Open a recent rocket design -main.menu.file.openExample = Open Example... +main.menu.file.openExample = Open example main.menu.file.openExample.desc = Open an example rocket design main.menu.file.save = Save main.menu.file.save.desc = Save the current rocket design -main.menu.file.saveAs = Save as... +main.menu.file.saveAs = Save as. . . main.menu.file.saveAs.desc = Save the current rocket design to a new file -main.menu.file.import = Import... -main.menu.file.import.desc = Import model from RockSim rkt file -main.menu.file.export_as = Export as... -main.menu.file.export_as.desc = Export model to selected file format -main.menu.file.print = Print / Export PDF... -main.menu.file.print.desc = Print or save as PDF the parts list and fin templates -main.menu.file.close = Close +// main.menu.file.import = Import. . . +// main.menu.file.import.desc = Import design from RockSim rkt file +main.menu.file.export_as = Export as +main.menu.file.export_as.desc = Export design as selected file format +main.menu.file.encode_3d = Encode 3D +main.menu.file.encode_3d.desc = Encode design to selected 3D file format +main.menu.file.print = Print specs. . . +main.menu.file.print.desc = Print design specifications, including the parts list and fin templates, print or save as PDF +main.menu.file.close = Close design main.menu.file.close.desc = Close the current rocket design main.menu.file.quit = Quit main.menu.file.quit.desc = Quit the program -main.menu.file.exportDecal = Export Decal -main.menu.file.exportDecal.desc = Export a decal from the current rocket design to a file for editing. +main.menu.file.exportDecal = Save decal image. . . +main.menu.file.exportDecal.desc = Save a decal from the current rocket design to a file for editing. main.menu.edit = Edit main.menu.edit.desc = Rocket editing diff --git a/core/resources/pix/icons/Painting-Transparent-PNG_16.png b/core/resources/pix/icons/Painting-Transparent-PNG_16.png new file mode 100644 index 0000000000000000000000000000000000000000..884436f7a8ca7c1fbbd0cb8af46e80c649b5fc78 GIT binary patch literal 876 zcmV-y1C#uTP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0|7}yK~y+Tjgx;! z6JZ#~pSzpeZFAdA*D`-jYnesqnxdt~B8iG513@T4|EQoM>=*qPSdjkFFS0*^2u#GH z$Tll1LQ0Ctz?E4krZ{zF{%YRNwsW`Lz1^)#kP7<1z4v^d_j$g&-1{8-51uXg)y(!{ zi!2v_%kMvUZO=M7o|kEH+sqUa2s3&0`k1`+Z&F(`OXM(0-4@Qm&iysCwF9umU603-Uk2Mv2Om_mZ+AP zH$a%8YO$c{mExXsEyc0HW(5F+0~S3xUgtidL3oGIQ0kKOZ!l@Wj}esKPCcM^e=nAF ze@1+nLaA~R;w~HHcIIAiTLdO#@vdB6!_62DPIxg>vX#8gho-9V#r66|v3W|tF ziDi<3QlqI8xeIM}Xwc^R7wOplH-HGuL z2q6}heqf&oTv*3x^>C{2F!0tSsJ9uONyW_Pr4FWhlQY)Bl+AewDFwI}JnhEuz%-hh zf*8R7cG?8mcnY4T6hf~y34%O=iyvpT%t-b&LN(-6n!*l@#Ob)LUq_<`Xh(Q>qs4lH z(3o6doe?4{QbDED!=Nq^lo$fFS^>w*ht3MVo@NwA6bRy%C$J6@GmDXEAT2l7xAYq^ zdt(C2!Yk!x;6of_vtIylKfo4x0S@S>LOh5QiHX-81HhrnQlG^9988zAy3!_*?TLQ& zja%o3Wxf%J40xd;&;+Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D14KzgK~y+TWm8>j zQ)L)_zVoyG(4Mv{ZE07tmJK#cC}mN)t+LHbg#^hkkRWK{t(S76aBZUA>kWx`GjDbw zCOU#dSQ;)ie^C=4TgDixZYwc6r>8yt=ky%E)@BL%Bwya2@BN;<-}Aj6!GCb&%157{ zJ9p|lbsf+1s39PvT}HV1`S0f!7k_-~)~z|WUE2oNwYw06aC~H>5bB1{U}@=>y@p}1 z)ZHaux^@?yM;zDvci&ZH$oGDR`S+hRvO&`hA#%H|UHp&0=kr+|$8#xx0<$i|Y}9GO zMNdz_u2d>cXTOVQ2!@A;!BNB-n=*y(~b;AN@Yw&clb6H)}VVWwEiQbW!nKO&i)6=Wf_3AfLQ@qBO%f~;w zbm{$1&cFHgz|mqcwj~+F@kP-xO!%n=x+Fn#SnT+ckQzF9WnwZiG4)!0@ZiwN$7`!` zrc^q1VRWnnAJ0J3R3P;nWPcd4=D-nmpfwddQh9vWNMbeE51Hz+Tw6!9uMaOCEuG=^ z@6Shh`j|%3gkrh)L5*Yi4}wE0Pw?L3>)0@C%q3pMf<_Q&h3Fw2hm%pTegV0Ge1MT8 zjcjg;@LCpR$B(a<0=Q9Ov3gH|dgl(dDtEEA#zI^MHdcbz(L;!a{ZLf{O~vv!QIy>W z4>sWMp`*tI@ovtBneot%ZD>?NC$I;v=X9JtvW+lfA=)zW)9)&%z7WL*I6_=KmD(Gv zR-fSdSDzuahr_;>jo!__&?FXk+S$JKIn?YWJat<5vQEinF5aX|juVHd>ydVf6*j59KbpwgQLkPtp_`_%6asJNa@jQ#GSHHNquyFeWRh4GB_H5I2 z^YZ17%d%Wo6s6f>S`z8CANfNuoi~i8C5l_7gK*~)@jS;8(z7)?d+l2Q_y@9wXq$eV R0=xhK002ovPDHLkV1j+!!m$7V literal 0 HcmV?d00001 diff --git a/core/resources/pix/icons/model_encode3d.png b/core/resources/pix/icons/model_encode3d.png new file mode 100644 index 0000000000000000000000000000000000000000..f4aee1785efd02f42f84607552777c52fdfa4ba0 GIT binary patch literal 740 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0(nV9K~y+Tt&&S< z6Hyd~&%JYJCdo9(G)<#LO=}diaUR-{x4YAdEmYfJ6RCY73G@|ek;nd?kCv_uLn^xK@n|DSvA%s&JF3UX=%bn}z! z!z`-g)rcRP!LIg*JUp?eEUXpZE7vIu?PU zu~|qYS3oq)vcO=F(~Wnix$#Z9r(?2m7W%(MO$O(zK5Cjwu*I!l)DT#qbOL7!_r&4P z@y6qizuP({9Ig!1h&=3RkWF6XuOW`RD2gOmF)T!{$LTgfN-<@3 zh4SLe<&H#_L33(vm+l;De!QYSt1Uuabwz)QsRWI<@B!T0)fsk$&!Gn&v!T3T3`rl5&P$K0h z)`Bw+ULbNmF&Vn`G0~AporkNf1JKhxAbH(m&J0K%(I?%RkaqwL1!x%rO>-P8H~!(2 zOf~%%(skJF7onIh&KlGJtW#gtp8c#Fl>pIe!DNm5OK3QSBS2`) z1AYrRD)q+_p7rZG904QCw&Am|!v>==g~(^dI&lOXZK_;4p+cSy%rGchGr^@^Qb)s2 z5YE=r-o=Uvd4J1@GU$d=SjTwD!{53!pPf+d#vh;!W(?c&WZVb|H zI!gJs`VP6GVJdwG)O8PH^p*C|TY5~pXfM5{Df*4u1oF#6^qxwy+`rQkT6Y?56FgGc ztT!5=lk}9GWB`EqRL-wzCGIRF3v07*qoM6N<$f}irg A(EtDd delta 421 zcmV;W0b2gz1MvfpR)2;`L_t(IPnD8QC`3^d$Il(}W(+aIL|I6aoswZCG$9)#Q{*cf zDOt$Jg6!BRJF&23Wu@3iR<;%z7WPUuA|Zu0Gd;ii=3$hNdH?$LfA`*V&b#;At0YUc zt5$2$FKwn@Vo9GorF?RUAKeY9L;s;Qn=&Ml?ocyMxGlRtY=7Pgk+el{92ZrhP09*hAEhK`yLK@;T96WZHVy>Cnull if none selected. */ @@ -417,6 +379,7 @@ public class BasicFrame extends JFrame { return (RocketComponent) path.getLastPathComponent(); } + /** * Return the currently selected rocket component, or null if none selected. */ @@ -435,7 +398,6 @@ public class BasicFrame extends JFrame { return result; } - /** * Creates the menu for the window. */ @@ -528,60 +490,53 @@ public class BasicFrame extends JFrame { }); menu.add(item); - menu.addSeparator(); + //// BEGIN CREATE and implement File > "Export as" menu and submenu - //// Import Rocksim - JMenuItem importMenu; - - item = new JMenuItem(trans.get("main.menu.file.import")); - item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.file.import.desc")); - item.setIcon(Icons.FILE_IMPORT); - item.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - log.info(Markers.USER_MARKER, "Import... selected"); - importAction(); - } - }); - menu.add(item); - -// BEGIN Create, add options to, and implement File > "Export as..." menu and submenu - - // INITIALIZE "Export as..." submenu with options list + // // INITIALIZE "Export as" submenu with options list JMenu exportSubMenu = new JMenu(); JMenuItem exportMenu = new JMenuItem(), - RASAero= new JMenuItem("RASAero - Future"), - Rocksim = new JMenuItem("Rocksim"); + RASAero= new JMenuItem("RASAero (Unavailable)"), + Rocksim = new JMenuItem("Rocksim"), + Print3D = new JMenuItem("Exterior airframe"); - // CREATE File > "Export as..." menu line with icon + // // CREATE File > "Export as" menu line with icon, and "Export as" submenu exportSubMenu = new JMenu(trans.get("main.menu.file.export_as")); exportSubMenu.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.file.export_as.desc")); exportSubMenu.setIcon(Icons.FILE_EXPORT_AS); - // CREATE "Export as..." submenu - // ADD Export option items with icons to submenu - /* exportSubMenu.add(RASAero); - RASAero.setIcon(Icons.RASAERO_ICON); */ - exportSubMenu.add(Rocksim); - Rocksim.setIcon(Icons.ROCKSIM_ICON); +/* // // PENDING Future development + // // ADD RASAero to "Export as" exportSubMenu options + exportSubMenu.add(RASAero); + RASAero.setForeground(Color.lightGray); - // ADD Listeners + // // PENDING Future development + // // CREATE RASAero listener RASAero.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { exportRASAeroAction();}}); +*/ + // // ADD Rocksim to "Export as" exportSubMenu options + exportSubMenu.add(Rocksim); + + // // CREATE Rocksim listener Rocksim.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { exportRocksimAction();}}); - // ADD Export options submenu to export menu + // // ADD Export options in exportSubMenu to "Export as" menu menu.add(exportSubMenu); -// END Create and implement File > "Export as..." menu and submenu + // // END CREATE and implement File > "Export as" menu and submenu - //// Export decal... + //// BEGIN CREATE na implement File > "Save decal image. . . menu and submenu + + menu.addSeparator(); + + //// Save decal image... item = new JMenuItem(trans.get("main.menu.file.exportDecal")); + item.setIcon(Icons.SAVE_DECAL); item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.file.exportDecal.desc")); item.addActionListener(new ActionListener() { @Override @@ -591,21 +546,24 @@ public class BasicFrame extends JFrame { }); item.setEnabled(document.getDecalList().size() > 0); final JMenuItem exportMenuItem = item; +/** document.getRocket().addChangeListener(new StateChangeListener() { - @Override - public void stateChanged(EventObject e) { - exportMenuItem.setEnabled(document.getDecalList().size() > 0); - } - + @Override + public void stateChanged(EventObject e) { + exportMenuItem.setEnabled(document.getDecalList().size() > 0); + } }); + */ menu.add(item); + //// END CREATE na implement File > "Save decal image. . . menu and submenu + + //// BEGIN PRINT Design specifications, including parts list and templates - //// Print... item = new JMenuItem(trans.get("main.menu.file.print"), KeyEvent.VK_P); item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, SHORTCUT_KEY)); - //// Print parts list and fin template + //// Print specifications, including parts list and fin template item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.file.print.desc")); item.setIcon(Icons.FILE_PRINT); item.addActionListener(new ActionListener() { @@ -617,10 +575,58 @@ public class BasicFrame extends JFrame { }); menu.add(item); + //// END PRINT Design specifications, including parts list and templates + +/* //// THE IMPORT ROCKSIM .RKT FEATURE IS FULLY WITHIN THE SCOPE OF THE "OPEN" FEATURE + //// THIS FEATURE IS BEING DEACTIVATED PENDING REMOVAL menu.addSeparator(); - //// Close + //// BEGIN IMPORT Rocksim RKT design file + JMenuItem importMenu; + item = new JMenuItem(trans.get("main.menu.file.import")); + item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.file.import.desc")); + item.setIcon(Icons.FILE_IMPORT); + item.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + log.info(Markers.USER_MARKER, "Import... selected"); + importAction(); + } + }); + menu.add(item); + //// END IMPORT Rocksim RKT design file +*/ + +/* //// PENDING Future development + //// BEGIN CREATE and implement File > "Encode 3D" menu and submenu + + // // INITIALIZE "Encode 3D" submenu with options list + JMenu encode3dSubmenu = new JMenu(); + JMenuItem encodeMenu = new JMenuItem(), + External_Airframe = new JMenuItem("External airframe (unavailable)"), + Single_Component = new JMenuItem("Component (unavailable)"); + + // // CREATE File > "Encode 3D" menu line with icon + JMenuItem encode3dSubMenu = new JMenu(trans.get("main.menu.file.encode_3d")); + encode3dSubMenu.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.file.encode_3d.desc")); + encode3dSubMenu.setForeground(Color.lightGray); + encode3dSubMenu.setIcon(Icons.ENCODE_3D); + + // // CREATE "Encode 3D" submenu + // // ADD Encode 3D option items to submenu + encode3dSubMenu.add(External_Airframe); + External_Airframe.setForeground(Color.lightGray); + encode3dSubMenu.add(Single_Component); + Single_Component.setForeground(Color.lightGray); + + // // ADD Listeners + + //// END CREATE and implement File > "Encode 3D" menu and submenu +*/ + menu.addSeparator(); + + //// Close item = new JMenuItem(trans.get("main.menu.file.close"), KeyEvent.VK_C); item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, SHORTCUT_KEY)); //// Close the current rocket design @@ -633,11 +639,12 @@ public class BasicFrame extends JFrame { closeAction(); } }); + menu.add(item); menu.addSeparator(); - //// Quit + //// Quit item = new JMenuItem(trans.get("main.menu.file.quit"), KeyEvent.VK_Q); item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, SHORTCUT_KEY)); //// Quit the program @@ -652,21 +659,20 @@ public class BasicFrame extends JFrame { }); menu.add(item); - - - //// Edit + //// Edit menu = new JMenu(trans.get("main.menu.edit")); menu.setMnemonic(KeyEvent.VK_E); - //// Rocket editing + + //// Rocket editing menu.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.edit.desc")); menubar.add(menu); - Action action = UndoRedoAction.newUndoAction(document); item = new JMenuItem(action); item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, SHORTCUT_KEY)); item.setMnemonic(KeyEvent.VK_U); - //// Undo the previous operation + + //// Undo the previous operation item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.edit.undo.desc")); menu.add(item); @@ -675,7 +681,8 @@ public class BasicFrame extends JFrame { item = new JMenuItem(action); item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y, SHORTCUT_KEY)); item.setMnemonic(KeyEvent.VK_R); - //// Redo the previously undone operation + + //// Redo the previously undone operation item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.edit.redo.desc")); menu.add(item); @@ -697,7 +704,6 @@ public class BasicFrame extends JFrame { menu.addSeparator(); - item = new JMenuItem(trans.get("main.menu.edit.resize")); item.setIcon(Icons.EDIT_SCALE); item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.edit.resize.desc")); @@ -713,11 +719,11 @@ public class BasicFrame extends JFrame { menu.add(item); - - //// Preferences + //// Preferences item = new JMenuItem(trans.get("main.menu.edit.preferences")); item.setIcon(Icons.PREFERENCES); - //// Setup the application preferences + + //// Setup the application preferences item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.edit.preferences.desc")); item.addActionListener(new ActionListener() { @Override @@ -728,7 +734,7 @@ public class BasicFrame extends JFrame { }); menu.add(item); - //// Edit Component Preset File + //// Edit Component Preset File if (System.getProperty("openrocket.preseteditor.menu") != null) { item = new JMenuItem(trans.get("main.menu.edit.editpreset")); item.addActionListener(new ActionListener() { @@ -745,17 +751,18 @@ public class BasicFrame extends JFrame { } - //// Analyze + //// Analyze menu = new JMenu(trans.get("main.menu.analyze")); menu.setMnemonic(KeyEvent.VK_A); - //// Analyzing the rocket + + //// Analyzing the rocket menu.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.analyze.desc")); menubar.add(menu); - - //// Component analysis + //// Component analysis item = new JMenuItem(trans.get("main.menu.analyze.componentAnalysis"), KeyEvent.VK_C); - //// Analyze the rocket components separately + + //// Analyze the rocket components separately item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.analyze.componentAnalysis.desc")); item.addActionListener(new ActionListener() { @Override @@ -766,7 +773,7 @@ public class BasicFrame extends JFrame { }); menu.add(item); - //// Optimize + //// Optimize item = new JMenuItem(trans.get("main.menu.analyze.optimization"), KeyEvent.VK_O); item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.analyze.optimization.desc")); item.addActionListener(new ActionListener() { @@ -782,7 +789,7 @@ public class BasicFrame extends JFrame { }); menu.add(item); - //// Custom expressions + //// Custom expressions item = new JMenuItem(trans.get("main.menu.analyze.customExpressions"), KeyEvent.VK_E); item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.analyze.customExpressions.desc")); item.addActionListener(new ActionListener() { @@ -806,24 +813,19 @@ public class BasicFrame extends JFrame { }); menu.add(item); - //// Debug - // (shown if openrocket.debug.menu is defined) + //// Debug + // // (shown if openrocket.debug.menu is defined) if (System.getProperty("openrocket.debug.menu") != null) { menubar.add(makeDebugMenu()); } - - - //// Help - + //// 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 - + //// 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")); @@ -838,7 +840,7 @@ public class BasicFrame extends JFrame { menu.addSeparator(); - //// Bug report + //// Bug report item = new JMenuItem(trans.get("main.menu.help.bugReport"), KeyEvent.VK_B); item.setIcon(Icons.HELP_BUG_REPORT); item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.help.bugReport.desc")); @@ -851,9 +853,9 @@ public class BasicFrame extends JFrame { }); menu.add(item); - //// Debug log + //// Debug log item = new JMenuItem(trans.get("main.menu.help.debugLog"), KeyEvent.VK_D); - item.setIcon(Icons.HELP_DEBUG_LOG); + item.setIcon(Icons.HELP_DEBUG_LOG); item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, SHORTCUT_KEY)); item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.help.debugLog.desc")); item.addActionListener(new ActionListener() { @@ -867,8 +869,7 @@ public class BasicFrame extends JFrame { menu.addSeparator(); - - //// License + //// 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")); @@ -881,8 +882,7 @@ public class BasicFrame extends JFrame { }); menu.add(item); - - //// About + //// 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")); @@ -895,7 +895,6 @@ public class BasicFrame extends JFrame { }); menu.add(item); - this.setJMenuBar(menubar); } @@ -907,12 +906,13 @@ public class BasicFrame extends JFrame { * This menu is intentionally left untranslated. */ - //// Debug menu + //// Debug menu menu = new JMenu("Debug"); - //// OpenRocket debugging tasks + + //// OpenRocket debugging tasks menu.getAccessibleContext().setAccessibleDescription("OpenRocket debugging tasks"); - //// What is this menu? + //// What is this menu? item = new JMenuItem("What is this menu?"); item.addActionListener(new ActionListener() { @Override @@ -932,7 +932,7 @@ public class BasicFrame extends JFrame { menu.addSeparator(); - //// Create test rocket + //// Create test rocket item = new JMenuItem("Create test rocket"); item.addActionListener(new ActionListener() { @Override @@ -965,7 +965,6 @@ public class BasicFrame extends JFrame { menu.add(item); - item = new JMenuItem("Create 'Iso-Haisu'"); item.addActionListener(new ActionListener() { @Override @@ -980,7 +979,6 @@ public class BasicFrame extends JFrame { }); menu.add(item); - item = new JMenuItem("Create 'Big Blue'"); item.addActionListener(new ActionListener() { @Override @@ -997,14 +995,13 @@ public class BasicFrame extends JFrame { menu.addSeparator(); - item = new JMenuItem("Memory statistics"); item.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { log.info(Markers.USER_MARKER, "Memory statistics selected"); - // Get discarded but remaining objects (this also runs System.gc multiple times) + // // Get discarded but remaining objects (this also runs System.gc multiple times) List objects = MemoryManagement.getRemainingCollectableObjects(); StringBuilder sb = new StringBuilder(); sb.append("Objects that should have been garbage-collected but have not been:\n"); @@ -1016,7 +1013,7 @@ public class BasicFrame extends JFrame { sb.append("Age ").append(System.currentTimeMillis() - data.getRegistrationTime()) .append(" ms: ").append(o).append('\n'); count++; - // Explicitly null the strong reference to avoid possibility of invisible references + // // Explicitly null the strong reference to avoid possibility of invisible references o = null; } sb.append("Total: " + count); @@ -1039,7 +1036,7 @@ public class BasicFrame extends JFrame { }); menu.add(item); - //// Exhaust memory + //// Exhaust memory item = new JMenuItem("Exhaust memory"); item.addActionListener(new ActionListener() { @Override @@ -1069,10 +1066,9 @@ public class BasicFrame extends JFrame { }); menu.add(item); - menu.addSeparator(); - //// Exception here + //// Exception here item = new JMenuItem("Exception here"); item.addActionListener(new ActionListener() { @Override @@ -1127,7 +1123,6 @@ public class BasicFrame extends JFrame { menu.addSeparator(); - item = new JMenuItem("Test popup"); item.addActionListener(new ActionListener() { @Override @@ -1144,9 +1139,6 @@ public class BasicFrame extends JFrame { }); menu.add(item); - - - return menu; } @@ -1239,6 +1231,7 @@ public class BasicFrame extends JFrame { } + /** * Open a file based on a URL. * @param url the file to open. @@ -1273,8 +1266,7 @@ public class BasicFrame extends JFrame { displayName = displayName.substring(displayName.lastIndexOf('/') + 1); } - - // Open the file + //// Open the file log.info("Opening file from url=" + url + " filename=" + displayName); OpenFileWorker worker = new OpenFileWorker(url); @@ -1307,16 +1299,15 @@ public class BasicFrame extends JFrame { * @return */ private static boolean open(OpenFileWorker worker, String displayName, Window parent, boolean openRocketConfigDialog) { - // Open the file in a Swing worker thread + //// Open the file in a Swing worker thread log.info("Starting OpenFileWorker"); if (!SwingWorkerDialog.runWorker(parent, "Opening file", "Reading " + displayName + "...", worker)) { - // User cancelled the operation + // // User cancelled the operation log.info("User cancelled the OpenFileWorker"); return false; } - - // Handle the document + //// Handle the document OpenRocketDocument doc = null; try { @@ -1358,22 +1349,22 @@ public class BasicFrame extends JFrame { } - // Show warnings + //// Show warnings WarningSet warnings = worker.getRocketLoader().getWarnings(); if (!warnings.isEmpty()) { log.info("Warnings while reading file: " + warnings); WarningDialog.showWarnings(parent, new Object[] { - //// The following problems were encountered while opening + // // The following problems were encountered while opening trans.get("BasicFrame.WarningDialog.txt1") + " " + displayName + ".", - //// Some design features may not have been loaded correctly. + // // Some design features may not have been loaded correctly. trans.get("BasicFrame.WarningDialog.txt2") }, - //// Warnings while opening file + // // Warnings while opening file trans.get("BasicFrame.WarningDialog.title"), warnings); } - // Open the frame + //// Open the frame log.debug("Opening new frame with the document"); BasicFrame frame = new BasicFrame(doc); frame.setVisible(true); @@ -1388,6 +1379,7 @@ public class BasicFrame extends JFrame { return true; } + /** * "Save" action. If the design is new, then this is identical to "Save As", with a default file filter for .ork. * If the rocket being edited previously was opened from a .ork file, then it will be saved immediately to the same @@ -1407,23 +1399,28 @@ public class BasicFrame extends JFrame { } - // BEGIN RASAERO Export Action *** UNDER CONSTRUCTION -- CURRENTLY FOR TESTING ONLY *** + //// BEGIN RASAERO Export Action *** UNDER CONSTRUCTION -- CURRENTLY FOR TESTING ONLY *** /** * MODEL "Export as" RASAero file format * * @return true if the file was saved, false otherwise */ + + /* public boolean exportRASAeroAction() { - return false; + Object exportRASAeroAction = ExportFileTranslator_RASAero.exportRASAeroAction; + return false; } - // END RASAERO Export Action + */ + //// END RASAERO Export Action public void actionPerformed(ActionEvent e) { log.info(Markers.USER_MARKER, "Import... selected"); importAction(); } - // BEGIN ROCKSIM Export Action + + //// BEGIN ROCKSIM Export Action /** * MODEL "Export as" RASAero file format * @@ -1457,6 +1454,7 @@ public class BasicFrame extends JFrame { } // END ROCKSIM Export Action + /** * Perform the writing of the design to the given file in Rocksim format. * @@ -1496,6 +1494,7 @@ public class BasicFrame extends JFrame { return saveRocksimFile(file, options); } + /** * Perform the actual saving of the Rocksim file * @param file file to be stored @@ -1519,6 +1518,7 @@ public class BasicFrame extends JFrame { } } + /** * "Save As" action. * @@ -1554,6 +1554,7 @@ public class BasicFrame extends JFrame { return result; } + /** * Perform the writing of the design to the given file in OpenRocket format. * @@ -1673,6 +1674,7 @@ public class BasicFrame extends JFrame { new PrintDialog(this, document, rotation).setVisible(true); } + /** * Open a new design window with a basic rocket+stage. */ @@ -1686,6 +1688,7 @@ public class BasicFrame extends JFrame { frame.setVisible(true); } + /** * Quit the application. Confirms saving unsaved designs. The action of File->Quit. */ @@ -1725,7 +1728,6 @@ public class BasicFrame extends JFrame { } - /** * Find a currently open BasicFrame containing the specified rocket. This method * can be used to map a Rocket to a BasicFrame from GUI methods. diff --git a/swing/src/net/sf/openrocket/gui/util/ExportFileTranslator_RASAero.java b/swing/src/net/sf/openrocket/gui/util/ExportFileTranslator_RASAero.java new file mode 100644 index 000000000..18d8c6f93 --- /dev/null +++ b/swing/src/net/sf/openrocket/gui/util/ExportFileTranslator_RASAero.java @@ -0,0 +1,10 @@ +package net.sf.openrocket.gui.util; + +public interface ExportFileTranslator_RASAero { + /* + Utility that translates OpenRocket models to RASAero .CDX1 file format. + + @author H. Craig Miller + */ +// Object exportRASAeroAction = ; +} diff --git a/swing/src/net/sf/openrocket/gui/util/Icons.java b/swing/src/net/sf/openrocket/gui/util/Icons.java index 00b7dd63e..b3814e98e 100644 --- a/swing/src/net/sf/openrocket/gui/util/Icons.java +++ b/swing/src/net/sf/openrocket/gui/util/Icons.java @@ -49,12 +49,13 @@ public class Icons { public static final Icon FILE_OPEN_EXAMPLE = loadImageIcon("pix/icons/document-open-example.png", "Open example document"); public static final Icon FILE_SAVE = loadImageIcon("pix/icons/document-save.png", "Save document"); public static final Icon FILE_SAVE_AS = loadImageIcon("pix/icons/document-save-as.png", "Save document as"); - public static final Icon FILE_IMPORT = loadImageIcon("pix/icons/model_import.png", "Import"); - public static final Icon FILE_EXPORT_AS = loadImageIcon("pix/icons/model_export.png", "Export model as..."); - public static final Icon FILE_PRINT = loadImageIcon("pix/icons/document-print.png", "Print document"); + public static final Icon SAVE_DECAL = loadImageIcon("pix/icons/Painting-Transparent-PNG_16.png", "Save decal image"); + public static final Icon FILE_PRINT = loadImageIcon("pix/icons/document-print-specs.png", "Print specifications"); +// public static final Icon FILE_IMPORT = loadImageIcon("pix/icons/model_import.png", "Import"); + public static final Icon FILE_EXPORT_AS = loadImageIcon("pix/icons/model_export.png", "Export model as"); + public static final Icon ENCODE_3D = loadImageIcon("pix/icons/model_encode3d.png", "Encode 3D"); public static final Icon FILE_CLOSE = loadImageIcon("pix/icons/document-close.png", "Close document"); public static final Icon FILE_QUIT = loadImageIcon("pix/icons/application-exit.png", "Quit OpenRocket"); - public static final Icon EDIT_UNDO = loadImageIcon("pix/icons/edit-undo.png", trans.get("Icons.Undo")); public static final Icon EDIT_REDO = loadImageIcon("pix/icons/edit-redo.png", trans.get("Icons.Redo")); public static final Icon EDIT_CUT = loadImageIcon("pix/icons/edit-cut.png", "Cut"); @@ -104,7 +105,7 @@ public class Icons { * * @param file the file to load. * @param name the description of the icon. - * @return the ImageIcon, or null if could not be loaded (after the user closes the dialog) + * @return the ImageIcon, or null if the ImageIcon could not be loaded (after the user closes the dialog) */ public static ImageIcon loadImageIcon(String file, String name) { if (System.getProperty("openrocket.unittest") != null) { From 9f85681629cf22772acef4908088d27b4bbe25b3 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Wed, 4 May 2022 23:49:25 +0200 Subject: [PATCH 7/7] Use horizontal ellipsis character for ... --- core/resources/l10n/messages.properties | 30 ++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index d2cb4f148..05e740f1b 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -314,7 +314,7 @@ pref.dlg.lbl.Pressure = Pressure: pref.dlg.lbl.Stability = Stability: pref.dlg.lbl.FlightTime = Flight time: pref.dlg.lbl.effect1 = The effects will take place the next time you open a window. -pref.dlg.lbl.Checkingupdates = Checking for updates... +pref.dlg.lbl.Checkingupdates = Checking for updates\u2026 pref.dlg.PrefChoiseSelector1 = Always ask pref.dlg.PrefChoiseSelector2 = Insert in middle pref.dlg.PrefChoiseSelector3 = Add to end @@ -512,8 +512,8 @@ simpanel.ttip.noWarnings = No warnings. simpanel.ttip.warnings = Warnings: ! SimulationRunDialog -SimuRunDlg.title.RunSim = Running simulations... -SimuRunDlg.lbl.Running = Running ... +SimuRunDlg.title.RunSim = Running simulations\u2026 +SimuRunDlg.lbl.Running = Running\u2026 SimuRunDlg.lbl.Simutime = Simulation time: SimuRunDlg.lbl.Altitude = Altitude: SimuRunDlg.lbl.Velocity = Velocity: @@ -818,7 +818,7 @@ MotorDbLoaderDlg.message2 = You can try replacing, deleting or manually editing ! MotorDatabaseLoadingDialog MotorDbLoadDlg.title = Loading motors -MotorDbLoadDlg.Loadingmotors = Loading motors... +MotorDbLoadDlg.Loadingmotors = Loading motors\u2026 ! AppearanceConfig AppearanceCfg.lbl.Appearance = Appearance @@ -1286,7 +1286,7 @@ main.menu.file = File main.menu.file.desc = File-handling related tasks main.menu.file.new = New main.menu.file.new.desc = Create a new rocket design -main.menu.file.open = Open. . . +main.menu.file.open = Open\u2026 main.menu.file.open.desc = Open a rocket design main.menu.file.openRecent = Open recent main.menu.file.openRecent.desc = Open a recent rocket design @@ -1294,21 +1294,21 @@ main.menu.file.openExample = Open example main.menu.file.openExample.desc = Open an example rocket design main.menu.file.save = Save main.menu.file.save.desc = Save the current rocket design -main.menu.file.saveAs = Save as. . . +main.menu.file.saveAs = Save as\u2026 main.menu.file.saveAs.desc = Save the current rocket design to a new file -// main.menu.file.import = Import. . . -// main.menu.file.import.desc = Import design from RockSim rkt file +! main.menu.file.import = Import\u2026 +! main.menu.file.import.desc = Import design from RockSim rkt file main.menu.file.export_as = Export as main.menu.file.export_as.desc = Export design as selected file format main.menu.file.encode_3d = Encode 3D main.menu.file.encode_3d.desc = Encode design to selected 3D file format -main.menu.file.print = Print specs. . . +main.menu.file.print = Print specs\u2026 main.menu.file.print.desc = Print design specifications, including the parts list and fin templates, print or save as PDF main.menu.file.close = Close design main.menu.file.close.desc = Close the current rocket design main.menu.file.quit = Quit main.menu.file.quit.desc = Quit the program -main.menu.file.exportDecal = Save decal image. . . +main.menu.file.exportDecal = Save decal image\u2026 main.menu.file.exportDecal.desc = Save a decal from the current rocket design to a file for editing. main.menu.edit = Edit @@ -1321,7 +1321,7 @@ main.menu.edit.cut = Cut main.menu.edit.copy = Copy main.menu.edit.paste = Paste main.menu.edit.delete = Delete -main.menu.edit.resize = Scale... +main.menu.edit.resize = Scale\u2026 main.menu.edit.resize.desc = Scale parts of the rocket design main.menu.edit.editpreset= Edit Component Preset File main.menu.edit.preferences = Preferences @@ -1655,7 +1655,7 @@ RocketInfo.cpText = CP: RocketInfo.stabText = Stability: RocketInfo.Warning = Warning: RocketInfo.Warning.TubeFinExperimental = Tube fin support is experimental -RocketInfo.Calculating = Calculating... +RocketInfo.Calculating = Calculating\u2026 RocketInfo.Apogee = Apogee: RocketInfo.Maxvelocity = Max. velocity: RocketInfo.Maxacceleration = Max. acceleration: @@ -2028,10 +2028,10 @@ CustomFinImport.description = The image will be converted internally to black an PresetModel.lbl.select = Select preset -PresetModel.lbl.database = From database... +PresetModel.lbl.database = From database\u2026 DecalModel.lbl.select = -DecalModel.lbl.choose = From file... +DecalModel.lbl.choose = From file\u2026 ! Export Decal Dialog ExportDecalDialog.title = Export Decal @@ -2127,7 +2127,7 @@ MotorDescriptionSubstitutor.description = Motors in the configuration !Photo Panel PhotoFrame.title = Photo Studio PhotoFrame.desc = Create realistic 3D images of the rocket -PhotoFrame.menu.file.save = Save Image... +PhotoFrame.menu.file.save = Save Image\u2026 PhotoFrame.fileFilter.png = PNG Image PhotoFrame.menu.edit.copy = Copy Image PhotoFrame.menu.edit.copy.desc = Copy image to clipboard