Fix multi-comp separation editing
This commit is contained in:
parent
1ed7354337
commit
532e94838f
@ -4,6 +4,7 @@ import java.awt.Dialog;
|
|||||||
import java.awt.Window;
|
import java.awt.Window;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.ItemEvent;
|
||||||
|
|
||||||
import javax.swing.ButtonGroup;
|
import javax.swing.ButtonGroup;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
@ -39,9 +40,10 @@ public class SeparationSelectionDialog extends JDialog {
|
|||||||
|
|
||||||
private StageSeparationConfiguration newConfiguration;
|
private StageSeparationConfiguration newConfiguration;
|
||||||
|
|
||||||
public SeparationSelectionDialog(Window parent, final Rocket rocket, final AxialStage stage) {
|
private boolean isOverrideDefault;
|
||||||
|
|
||||||
|
public SeparationSelectionDialog(Window parent, final Rocket rocket, final AxialStage stage, FlightConfigurationId id) {
|
||||||
super(parent, trans.get("edtmotorconfdlg.title.Selectseparationconf"), Dialog.ModalityType.APPLICATION_MODAL);
|
super(parent, trans.get("edtmotorconfdlg.title.Selectseparationconf"), Dialog.ModalityType.APPLICATION_MODAL);
|
||||||
final FlightConfigurationId id = rocket.getSelectedConfiguration().getFlightConfigurationID();
|
|
||||||
|
|
||||||
newConfiguration = stage.getSeparationConfigurations().get(id);
|
newConfiguration = stage.getSeparationConfigurations().get(id);
|
||||||
if( stage.getSeparationConfigurations().isDefault( newConfiguration )){
|
if( stage.getSeparationConfigurations().isDefault( newConfiguration )){
|
||||||
@ -59,7 +61,9 @@ public class SeparationSelectionDialog extends JDialog {
|
|||||||
panel.add(defaultButton, "span, gapleft para, wrap rel");
|
panel.add(defaultButton, "span, gapleft para, wrap rel");
|
||||||
String str = trans.get("SeparationSelectionDialog.opt.override");
|
String str = trans.get("SeparationSelectionDialog.opt.override");
|
||||||
str = str.replace("{0}", descriptor.format(rocket, id));
|
str = str.replace("{0}", descriptor.format(rocket, id));
|
||||||
final JRadioButton overrideButton = new JRadioButton(str, false);
|
final JRadioButton overrideButton = new JRadioButton(str);
|
||||||
|
overrideButton.addItemListener(e -> isOverrideDefault = e.getStateChange() == ItemEvent.SELECTED);
|
||||||
|
overrideButton.setSelected(false);
|
||||||
panel.add(overrideButton, "span, gapleft para, wrap para");
|
panel.add(overrideButton, "span, gapleft para, wrap para");
|
||||||
|
|
||||||
ButtonGroup buttonGroup = new ButtonGroup();
|
ButtonGroup buttonGroup = new ButtonGroup();
|
||||||
@ -123,5 +127,14 @@ public class SeparationSelectionDialog extends JDialog {
|
|||||||
this.setContentPane(panel);
|
this.setContentPane(panel);
|
||||||
|
|
||||||
GUIUtil.setDisposableDialogOptions(this, okButton);
|
GUIUtil.setDisposableDialogOptions(this, okButton);
|
||||||
|
GUIUtil.installEscapeCloseButtonOperation(this, okButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if this dialog was used to override the default configuration.
|
||||||
|
* @return true if this dialog was used to override the default configuration.
|
||||||
|
*/
|
||||||
|
public boolean isOverrideDefault() {
|
||||||
|
return isOverrideDefault;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,6 @@ import java.util.List;
|
|||||||
import javax.swing.AbstractAction;
|
import javax.swing.AbstractAction;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
import javax.swing.JDialog;
|
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
@ -181,9 +180,8 @@ public class SeparationConfigurationPanel extends FlightConfigurablePanel<AxialS
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean update = false;
|
|
||||||
AxialStage initStage = stages.get(0); // Arbitrary choice of stage (all stages should have the same settings due to multi-comp editing)
|
AxialStage initStage = stages.get(0); // Arbitrary choice of stage (all stages should have the same settings due to multi-comp editing)
|
||||||
FlightConfigurationId initFcId = rocket.getSelectedConfiguration().getId(); // The SeparationSelectionDialog should apply its separation settings to the selected configuration
|
FlightConfigurationId initFcId = fcIds.get(0);
|
||||||
|
|
||||||
// Store the initial configuration so we can check later whether something changed
|
// Store the initial configuration so we can check later whether something changed
|
||||||
StageSeparationConfiguration initialConfig = initStage.getSeparationConfigurations().get(initFcId).copy(initFcId);
|
StageSeparationConfiguration initialConfig = initStage.getSeparationConfigurations().get(initFcId).copy(initFcId);
|
||||||
@ -191,37 +189,38 @@ public class SeparationConfigurationPanel extends FlightConfigurablePanel<AxialS
|
|||||||
document.addUndoPosition("Select separation");
|
document.addUndoPosition("Select separation");
|
||||||
|
|
||||||
// Launch the separation config dialog
|
// Launch the separation config dialog
|
||||||
JDialog d = new SeparationSelectionDialog(SwingUtilities.getWindowAncestor(this), rocket, initStage);
|
SeparationSelectionDialog d = new SeparationSelectionDialog(SwingUtilities.getWindowAncestor(this), rocket, initStage, initFcId);
|
||||||
d.setVisible(true);
|
d.setVisible(true);
|
||||||
|
|
||||||
if (!initialConfig.equals(initStage.getSeparationConfigurations().get(initFcId))) {
|
final StageSeparationConfiguration modifiedConfig = initStage.getSeparationConfigurations().get(initFcId);
|
||||||
update = true;
|
boolean update = !initialConfig.equals(modifiedConfig);
|
||||||
}
|
|
||||||
|
|
||||||
double separationDelay = initStage.getSeparationConfigurations().get(initFcId).getSeparationDelay();
|
double separationDelay = initStage.getSeparationConfigurations().get(initFcId).getSeparationDelay();
|
||||||
SeparationEvent separationEvent= initStage.getSeparationConfigurations().get(initFcId).getSeparationEvent();
|
SeparationEvent separationEvent= initStage.getSeparationConfigurations().get(initFcId).getSeparationEvent();
|
||||||
|
boolean isOverrideDefault = d.isOverrideDefault();
|
||||||
|
|
||||||
// Parse all stages and flight configurations to check whether we need to update
|
// Parse all stages and flight configurations to check whether we need to update
|
||||||
for (int i = 0; i < stages.size(); i++) {
|
for (AxialStage stage : stages) {
|
||||||
for (int j = 0; j < fcIds.size(); j++) {
|
for (FlightConfigurationId fcId : fcIds) {
|
||||||
if ((i == 0) && (j == 0)) break;
|
if ((stage == initStage) && (fcId == initFcId))
|
||||||
|
continue;
|
||||||
|
|
||||||
final AxialStage stage = stages.get(i);
|
// It could be that the current config is the default config, but the user has selected to override it.
|
||||||
final FlightConfigurationId fcId = fcIds.get(j);
|
if (isOverrideDefault && !stage.getSeparationConfigurations().containsId(fcId)) {
|
||||||
StageSeparationConfiguration config = stage.getSeparationConfigurations().get(fcId);
|
stage.getSeparationConfigurations().set(fcId, stage.getSeparationConfigurations().getDefault().clone());
|
||||||
initialConfig = config.copy(fcId);
|
|
||||||
|
|
||||||
if (stage.getSeparationConfigurations().isDefault(config)) {
|
|
||||||
config = config.copy(fcId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
config.setSeparationDelay(separationDelay);
|
StageSeparationConfiguration currentConfig = stage.getSeparationConfigurations().get(fcId);
|
||||||
config.setSeparationEvent(separationEvent);
|
|
||||||
stage.getSeparationConfigurations().set(fcId, config);
|
if (currentConfig.equals(modifiedConfig)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!initialConfig.equals(config)) {
|
|
||||||
update = true;
|
update = true;
|
||||||
}
|
|
||||||
|
currentConfig.setSeparationDelay(separationDelay);
|
||||||
|
currentConfig.setSeparationEvent(separationEvent);
|
||||||
|
stage.getSeparationConfigurations().set(fcId, currentConfig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user