diff --git a/swing/src/net/sf/openrocket/gui/adaptors/DoubleModel.java b/swing/src/net/sf/openrocket/gui/adaptors/DoubleModel.java index d7c58e352..fa73b044f 100644 --- a/swing/src/net/sf/openrocket/gui/adaptors/DoubleModel.java +++ b/swing/src/net/sf/openrocket/gui/adaptors/DoubleModel.java @@ -580,7 +580,7 @@ public class DoubleModel implements StateChangeListener, ChangeSource, Invalidat private final ArrayList listeners = new ArrayList(); - private final UnitGroup units; + private UnitGroup units; private Unit currentUnit; private final double minValue; @@ -877,6 +877,13 @@ public class DoubleModel implements StateChangeListener, ChangeSource, Invalidat currentUnit = u; fireStateChanged(); } + + public void setUnitGroup(UnitGroup unitGroup) { + this.units = unitGroup; + this.currentUnit = units.getDefaultUnit(); + this.lastValue = this.currentUnit.toUnit(this.lastValue); + fireStateChanged(); + } /** 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 e28bf0ad9..59ce8c45a 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/optimization/GeneralOptimizationDialog.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/optimization/GeneralOptimizationDialog.java @@ -380,6 +380,12 @@ public class GeneralOptimizationDialog extends JDialog { optimizationParameterCombo.setToolTipText(tip); populateParameters(); optimizationParameterCombo.addActionListener(clearHistoryActionListener); + optimizationParameterCombo.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + updateSeekValueUnits(); + } + }); disableComponents.add(optimizationParameterCombo); sub.add(optimizationParameterCombo, "growx, wrap unrel"); @@ -404,7 +410,7 @@ public class GeneralOptimizationDialog extends JDialog { optimizationGoalSpinner = new JSpinner(optimizationSeekValue.getSpinnerModel()); tip = trans.get("lbl.optimizeGoalValue.ttip"); optimizationGoalSpinner.setToolTipText(tip); - optimizationGoalSpinner.setEditor(new SpinnerEditor(optimizationGoalSpinner)); + optimizationGoalSpinner.setEditor(new SpinnerEditor(optimizationGoalSpinner, 4)); disableComponents.add(optimizationGoalSpinner); sub.add(optimizationGoalSpinner, "width 30lp"); @@ -554,6 +560,7 @@ public class GeneralOptimizationDialog extends JDialog { Collections.unmodifiableMap(evaluationHistory), Collections.unmodifiableList(selectedModifiers), getSelectedParameter(), + optimizationGoalUnitSelector.getSelectedUnit(), UnitGroup.stabilityUnits(getSelectedSimulation().getRocket()), GeneralOptimizationDialog.this); dialog.setVisible(true); @@ -606,6 +613,7 @@ public class GeneralOptimizationDialog extends JDialog { this.add(new JScrollPane(panel)); clearHistory(); updateComponents(); + updateSeekValueUnits(); GUIUtil.setDisposableDialogOptions(this, null); int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height; @@ -834,13 +842,22 @@ public class GeneralOptimizationDialog extends JDialog { evaluationHistory.clear(); optimizationPath.clear(); bestValue = Double.NaN; - bestValueUnit = getSelectedParameter().getUnitGroup().getDefaultUnit(); + bestValueUnit = optimizationGoalUnitSelector.getSelectedUnit(); stepCount = 0; evaluationCount = 0; stepSize = 0.5; updateCounters(); updateComponents(); } + + private void updateSeekValueUnits() { + if (optimizationSeekValue != null && optimizationGoalUnitSelector != null) { + optimizationSeekValue.setUnitGroup(getSelectedParameter().getUnitGroup()); + optimizationSeekValue.setValue(0); + optimizationGoalUnitSelector.setModel(optimizationSeekValue); + optimizationGoalUnitSelector.revalidate(); + } + } private void applyDesign() { // TODO: MEDIUM: Apply also potential changes to simulations @@ -1168,7 +1185,7 @@ public class GeneralOptimizationDialog extends JDialog { writer.write(fieldSeparator); } writer.write(getSelectedParameter().getName() + " / " + - getSelectedParameter().getUnitGroup().getDefaultUnit().getUnit()); + optimizationGoalUnitSelector.getSelectedUnit().getUnit()); writer.write("\n"); } @@ -1187,7 +1204,7 @@ public class GeneralOptimizationDialog extends JDialog { } if (data.getParameterValue() != null) { - writer.write(TextUtil.doubleToString(data.getParameterValue().getUnitValue())); + writer.write(TextUtil.doubleToString(optimizationGoalUnitSelector.getSelectedUnit().toUnit(data.getParameterValue().getValue()))); } else { writer.write("N/A"); } diff --git a/swing/src/net/sf/openrocket/gui/dialogs/optimization/OptimizationPlotDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/optimization/OptimizationPlotDialog.java index 6dda9fa3e..d92438b2c 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/optimization/OptimizationPlotDialog.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/optimization/OptimizationPlotDialog.java @@ -80,7 +80,7 @@ public class OptimizationPlotDialog extends JDialog { public OptimizationPlotDialog(List path, Map evaluations, - List modifiers, OptimizableParameter parameter, UnitGroup stabilityUnit, Window parent) { + List modifiers, OptimizableParameter parameter, Unit parameterUnit, UnitGroup stabilityUnit, Window parent) { super(parent, trans.get("title"), ModalityType.APPLICATION_MODAL); @@ -88,9 +88,9 @@ public class OptimizationPlotDialog extends JDialog { ChartPanel chart; if (modifiers.size() == 1) { - chart = create1DPlot(path, evaluations, modifiers, parameter, stabilityUnit); + chart = create1DPlot(path, evaluations, modifiers, parameter, parameterUnit, stabilityUnit); } else if (modifiers.size() == 2) { - chart = create2DPlot(path, evaluations, modifiers, parameter, stabilityUnit); + chart = create2DPlot(path, evaluations, modifiers, parameter, parameterUnit, stabilityUnit); } else { throw new IllegalArgumentException("Invalid dimensionality, dim=" + modifiers.size()); } @@ -134,11 +134,11 @@ public class OptimizationPlotDialog extends JDialog { * Create a 1D plot of the optimization path. */ private ChartPanel create1DPlot(List path, Map evaluations, - List modifiers, OptimizableParameter parameter, UnitGroup stabilityUnit) { + List modifiers, OptimizableParameter parameter, Unit parameterUnit, UnitGroup stabilityUnit) { SimulationModifier modX = modifiers.get(0); Unit xUnit = modX.getUnitGroup().getDefaultUnit(); - Unit yUnit = parameter.getUnitGroup().getDefaultUnit(); + Unit yUnit = parameterUnit; // Create the optimization path (with autosort) XYSeries series = new XYSeries(trans.get("plot1d.series"), true, true); @@ -232,10 +232,7 @@ public class OptimizationPlotDialog extends JDialog { * Create a 2D plot of the optimization path. */ private ChartPanel create2DPlot(List path, Map evaluations, - List modifiers, OptimizableParameter parameter, UnitGroup stabilityUnit) { - - Unit parameterUnit = parameter.getUnitGroup().getDefaultUnit(); - + List modifiers, OptimizableParameter parameter, Unit parameterUnit, UnitGroup stabilityUnit) { SimulationModifier modX = modifiers.get(0); SimulationModifier modY = modifiers.get(1);