From d8460941511264fdcaf4a767e3922a7aa0820076 Mon Sep 17 00:00:00 2001 From: Remington Holder Date: Sat, 19 Mar 2022 22:15:12 -0400 Subject: [PATCH 1/5] Adds Export PNG Button To Sim Chart Page --- .../gui/plot/SimulationPlotDialog.java | 51 +++++++++++++++++-- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java b/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java index d2d322a8b..cc6ed951d 100644 --- a/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java +++ b/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java @@ -6,26 +6,32 @@ import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; +import java.io.File; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JDialog; +import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JPanel; import net.miginfocom.swing.MigLayout; import net.sf.openrocket.document.Simulation; import net.sf.openrocket.gui.components.StyledLabel; +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.SwingPreferences; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.startup.Application; import net.sf.openrocket.startup.Preferences; import net.sf.openrocket.gui.widgets.SelectColorButton; import org.jfree.chart.ChartPanel; +import org.jfree.chart.ChartUtilities; +import org.jfree.chart.JFreeChart; /** * Dialog that shows a plot of a simulation results based on user options. @@ -50,6 +56,7 @@ public class SimulationPlotDialog extends JDialog { this.add(panel); final ChartPanel chartPanel = new SimulationChart(myPlot.getJFreeChart()); + final JFreeChart jChart = myPlot.getJFreeChart(); panel.add(chartPanel, "grow, wrap 20lp"); //// Description text @@ -108,6 +115,16 @@ public class SimulationPlotDialog extends JDialog { } }); panel.add(button, "gapleft rel"); + + //// Print chart button + button = new SelectColorButton(Icons.FILE_PRINT); + button.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + doPngExport(jChart); + } + }); + panel.add(button, "gapleft rel"); //// Add series selection box ArrayList stages = new ArrayList(); @@ -141,16 +158,42 @@ public class SimulationPlotDialog extends JDialog { } }); panel.add(button, "right"); - this.setLocationByPlatform(true); this.pack(); GUIUtil.setDisposableDialogOptions(this, button); GUIUtil.rememberWindowSize(this); } - - - + + private boolean doPngExport(JFreeChart chart){ + JFileChooser chooser = new JFileChooser(); + chooser.setFileFilter(FileHelper.getImageFileFilter()); + chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory()); + + /* Ensures No Problems When Choosing File */ + if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) + return false; + + File file = chooser.getSelectedFile(); + if (file == null) + return false; + + file = FileHelper.forceExtension(file, "png"); + if (!FileHelper.confirmWrite(file, this)) { + return false; + } + + /* Uses JFreeChart Built In PNG Export Method */ + try{ + ChartUtilities.saveChartAsPNG(file, chart, 1000, 500); + } catch(Exception e){ + return false; + } + + return true; + } + + /** * Static method that shows a plot with the specified parameters. * From c73a41071a262542dbb5c44a79893f50e472870a Mon Sep 17 00:00:00 2001 From: Remington Holder Date: Sun, 20 Mar 2022 20:38:20 -0400 Subject: [PATCH 2/5] Various Small Updates To PNG Chart Export - Creates PNG file filter - Adds new file filter to translation file - Makes Exported Chart's Width & Height as it is displayed - Changes Button From Print Icon to "Save As Image" text --- core/resources/l10n/messages.properties | 1 + .../sf/openrocket/gui/plot/SimulationPlotDialog.java | 11 ++++++----- swing/src/net/sf/openrocket/gui/util/FileHelper.java | 4 ++++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 9e4a2782b..49a7e3769 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -96,6 +96,7 @@ FileHelper.ALL_DESIGNS_FILTER = All rocket designs (*.ork; *.rkt) FileHelper.OPENROCKET_DESIGN_FILTER = OpenRocket designs (*.ork) FileHelper.ROCKSIM_DESIGN_FILTER = RockSim designs (*.rkt) FileHelper.OPEN_ROCKET_COMPONENT_FILTER = OpenRocket presets (*.orc) +FileHelper.PNG_FILTER = PNG image (*.png) FileHelper.IMAGES = Image files diff --git a/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java b/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java index cc6ed951d..a3dd2a462 100644 --- a/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java +++ b/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java @@ -117,11 +117,11 @@ public class SimulationPlotDialog extends JDialog { panel.add(button, "gapleft rel"); //// Print chart button - button = new SelectColorButton(Icons.FILE_PRINT); + button = new SelectColorButton("Save As Image"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - doPngExport(jChart); + doPngExport(chartPanel,jChart); } }); panel.add(button, "gapleft rel"); @@ -165,9 +165,10 @@ public class SimulationPlotDialog extends JDialog { GUIUtil.rememberWindowSize(this); } - private boolean doPngExport(JFreeChart chart){ + private boolean doPngExport(ChartPanel chartPanel, JFreeChart chart){ JFileChooser chooser = new JFileChooser(); - chooser.setFileFilter(FileHelper.getImageFileFilter()); + chooser.setAcceptAllFileFilterUsed(false); + chooser.setFileFilter(FileHelper.PNG_FILTER); chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory()); /* Ensures No Problems When Choosing File */ @@ -185,7 +186,7 @@ public class SimulationPlotDialog extends JDialog { /* Uses JFreeChart Built In PNG Export Method */ try{ - ChartUtilities.saveChartAsPNG(file, chart, 1000, 500); + ChartUtilities.saveChartAsPNG(file, chart, chartPanel.getWidth(), chartPanel.getHeight()); } catch(Exception e){ return false; } diff --git a/swing/src/net/sf/openrocket/gui/util/FileHelper.java b/swing/src/net/sf/openrocket/gui/util/FileHelper.java index c88b99a58..96d8234f4 100644 --- a/swing/src/net/sf/openrocket/gui/util/FileHelper.java +++ b/swing/src/net/sf/openrocket/gui/util/FileHelper.java @@ -56,6 +56,10 @@ public final class FileHelper { public static final FileFilter CSV_FILTER = new SimpleFileFilter(trans.get("FileHelper.CSV_FILTER"), ".csv"); + /** File filter for PNG files (*.png) */ + public static final FileFilter PNG_FILTER = + new SimpleFileFilter(trans.get("FileHelper.PNG_FILTER"), ".png"); + From 670455fb2d8ee3c833dd84b05cc7e30efb54867a Mon Sep 17 00:00:00 2001 From: Remington Holder Date: Sun, 20 Mar 2022 21:39:26 -0400 Subject: [PATCH 3/5] Formats Comments & Makes "Save As Image" Translatable --- core/resources/l10n/messages.properties | 2 +- .../net/sf/openrocket/gui/plot/SimulationPlotDialog.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 49a7e3769..4f194e109 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -1274,7 +1274,7 @@ TCMotorSelPan.btn.close = Close ! PlotDialog PlotDialog.CheckBox.Showdatapoints = Show data points PlotDialog.lbl.Chart = left click drag to zoom area. mouse wheel to zoom. ctrl-mouse wheel to zoom x axis only. ctrl-left click drag to pan. right click drag to zoom dynamically. - +PlotDialog.btn.saveAsImage = Save As Image ComponentTree.ttip.massoverride = mass override ComponentTree.ttip.cgoverride = cg override ! "main" prefix is used for the main application dialog diff --git a/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java b/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java index a3dd2a462..1848c753a 100644 --- a/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java +++ b/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java @@ -117,7 +117,7 @@ public class SimulationPlotDialog extends JDialog { panel.add(button, "gapleft rel"); //// Print chart button - button = new SelectColorButton("Save As Image"); + button = new SelectColorButton(trans.get("PlotDialog.btn.saveAsImage")); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -171,7 +171,7 @@ public class SimulationPlotDialog extends JDialog { chooser.setFileFilter(FileHelper.PNG_FILTER); chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory()); - /* Ensures No Problems When Choosing File */ + //// Ensures No Problems When Choosing File if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) return false; @@ -184,7 +184,7 @@ public class SimulationPlotDialog extends JDialog { return false; } - /* Uses JFreeChart Built In PNG Export Method */ + //// Uses JFreeChart Built In PNG Export Method try{ ChartUtilities.saveChartAsPNG(file, chart, chartPanel.getWidth(), chartPanel.getHeight()); } catch(Exception e){ From 0a45df51670b5ec07a11d7316402c8f7136e7904 Mon Sep 17 00:00:00 2001 From: Remington Holder Date: Sun, 20 Mar 2022 21:49:39 -0400 Subject: [PATCH 4/5] (Minor) Adds Newline For Code Readability --- core/resources/l10n/messages.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 4f194e109..a1019a12f 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -1275,6 +1275,7 @@ TCMotorSelPan.btn.close = Close PlotDialog.CheckBox.Showdatapoints = Show data points PlotDialog.lbl.Chart = left click drag to zoom area. mouse wheel to zoom. ctrl-mouse wheel to zoom x axis only. ctrl-left click drag to pan. right click drag to zoom dynamically. PlotDialog.btn.saveAsImage = Save As Image + ComponentTree.ttip.massoverride = mass override ComponentTree.ttip.cgoverride = cg override ! "main" prefix is used for the main application dialog From 2d5d1b3eca87b40dc66f41e65f5ea49f9b0e01b0 Mon Sep 17 00:00:00 2001 From: Remington Holder Date: Sun, 20 Mar 2022 22:08:03 -0400 Subject: [PATCH 5/5] Changes "Save As PNG" to "Export Image" - Change improves application uniformity --- core/resources/l10n/messages.properties | 2 +- swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index a1019a12f..117978079 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -1274,7 +1274,7 @@ TCMotorSelPan.btn.close = Close ! PlotDialog PlotDialog.CheckBox.Showdatapoints = Show data points PlotDialog.lbl.Chart = left click drag to zoom area. mouse wheel to zoom. ctrl-mouse wheel to zoom x axis only. ctrl-left click drag to pan. right click drag to zoom dynamically. -PlotDialog.btn.saveAsImage = Save As Image +PlotDialog.btn.exportImage = Export Image ComponentTree.ttip.massoverride = mass override ComponentTree.ttip.cgoverride = cg override diff --git a/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java b/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java index 1848c753a..22165524c 100644 --- a/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java +++ b/swing/src/net/sf/openrocket/gui/plot/SimulationPlotDialog.java @@ -117,7 +117,7 @@ public class SimulationPlotDialog extends JDialog { panel.add(button, "gapleft rel"); //// Print chart button - button = new SelectColorButton(trans.get("PlotDialog.btn.saveAsImage")); + button = new SelectColorButton(trans.get("PlotDialog.btn.exportImage")); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) {