From 103283c898f56043f4656500ab7a926220fd5362 Mon Sep 17 00:00:00 2001 From: Sibo Van Gool Date: Thu, 11 Nov 2021 01:08:30 +0100 Subject: [PATCH] [fixes #1058] Launch info dialog for no simulations GeneralOptimizer When the OR document does not have simulations present, it is unable to run the optimizer. This commit shows an info dialog for that and stops the creation of the GeneralOptimizationDialog --- core/resources/l10n/messages.properties | 3 ++- .../GeneralOptimizationDialog.java | 18 ++++++++++++++++-- .../net/sf/openrocket/gui/main/BasicFrame.java | 6 +++++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 220db8c4a..c878c8a81 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -1877,7 +1877,8 @@ optimization.modifier.motormount.delay.desc = Optimize the motor ignition delay. ! General rocket design optimization dialog - +GeneralOptimizationDialog.info.noSims.title = No simulations +GeneralOptimizationDialog.info.noSims.message = No simulations created yet to optimize GeneralOptimizationDialog.title = Rocket optimization GeneralOptimizationDialog.goal.maximize = Maximize value GeneralOptimizationDialog.goal.minimize = Minimize value diff --git a/swing/src/net/sf/openrocket/gui/dialogs/optimization/GeneralOptimizationDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/optimization/GeneralOptimizationDialog.java index 5408cc53c..545aa0a47 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/optimization/GeneralOptimizationDialog.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/optimization/GeneralOptimizationDialog.java @@ -190,12 +190,13 @@ public class GeneralOptimizationDialog extends JDialog { * @param document the document * @param parent the parent window */ - public GeneralOptimizationDialog(OpenRocketDocument document, Window parent) { + public GeneralOptimizationDialog(OpenRocketDocument document, Window parent) throws InterruptedException { super(parent, trans.get("title")); this.baseDocument = document; this.documentCopy = document.copy(); - + + checkExistingSimulations(); loadOptimizationParameters(); loadSimulationModifiers(); @@ -904,6 +905,19 @@ public class GeneralOptimizationDialog extends JDialog { populateParameters(); } + + /** + * Checks whether there are simulations present in the document. If not, a pop-up information + * dialog launches stating that the optimizer cannot be launched. + * @throws InterruptedException when no simulations present + */ + private void checkExistingSimulations() throws InterruptedException { + if (documentCopy.getSimulations().size() == 0) { + JOptionPane.showMessageDialog(null, trans.get("GeneralOptimizationDialog.info.noSims.message"), + trans.get("GeneralOptimizationDialog.info.noSims.title"), JOptionPane.INFORMATION_MESSAGE); + throw new InterruptedException("No simulations to optimize"); + } + } private void populateSimulations() { String current = null; diff --git a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java index 305e5ce29..74279499b 100644 --- a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java +++ b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java @@ -716,7 +716,11 @@ public class BasicFrame extends JFrame { @Override public void actionPerformed(ActionEvent e) { log.info(Markers.USER_MARKER, "Rocket optimization selected"); - new GeneralOptimizationDialog(document, BasicFrame.this).setVisible(true); + try { + new GeneralOptimizationDialog(document, BasicFrame.this).setVisible(true); + } catch (InterruptedException ex) { + log.warn(ex.getMessage()); + } } }); menu.add(item);