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.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.ItemEvent;
|
||||
|
||||
import javax.swing.ButtonGroup;
|
||||
import javax.swing.JButton;
|
||||
@ -39,9 +40,10 @@ public class SeparationSelectionDialog extends JDialog {
|
||||
|
||||
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);
|
||||
final FlightConfigurationId id = rocket.getSelectedConfiguration().getFlightConfigurationID();
|
||||
|
||||
newConfiguration = stage.getSeparationConfigurations().get(id);
|
||||
if( stage.getSeparationConfigurations().isDefault( newConfiguration )){
|
||||
@ -59,7 +61,9 @@ public class SeparationSelectionDialog extends JDialog {
|
||||
panel.add(defaultButton, "span, gapleft para, wrap rel");
|
||||
String str = trans.get("SeparationSelectionDialog.opt.override");
|
||||
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");
|
||||
|
||||
ButtonGroup buttonGroup = new ButtonGroup();
|
||||
@ -123,5 +127,14 @@ public class SeparationSelectionDialog extends JDialog {
|
||||
this.setContentPane(panel);
|
||||
|
||||
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.JButton;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPopupMenu;
|
||||
import javax.swing.JScrollPane;
|
||||
@ -181,9 +180,8 @@ public class SeparationConfigurationPanel extends FlightConfigurablePanel<AxialS
|
||||
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)
|
||||
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
|
||||
StageSeparationConfiguration initialConfig = initStage.getSeparationConfigurations().get(initFcId).copy(initFcId);
|
||||
@ -191,37 +189,38 @@ public class SeparationConfigurationPanel extends FlightConfigurablePanel<AxialS
|
||||
document.addUndoPosition("Select separation");
|
||||
|
||||
// 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);
|
||||
|
||||
if (!initialConfig.equals(initStage.getSeparationConfigurations().get(initFcId))) {
|
||||
update = true;
|
||||
}
|
||||
final StageSeparationConfiguration modifiedConfig = initStage.getSeparationConfigurations().get(initFcId);
|
||||
boolean update = !initialConfig.equals(modifiedConfig);
|
||||
|
||||
double separationDelay = initStage.getSeparationConfigurations().get(initFcId).getSeparationDelay();
|
||||
SeparationEvent separationEvent= initStage.getSeparationConfigurations().get(initFcId).getSeparationEvent();
|
||||
boolean isOverrideDefault = d.isOverrideDefault();
|
||||
|
||||
// Parse all stages and flight configurations to check whether we need to update
|
||||
for (int i = 0; i < stages.size(); i++) {
|
||||
for (int j = 0; j < fcIds.size(); j++) {
|
||||
if ((i == 0) && (j == 0)) break;
|
||||
for (AxialStage stage : stages) {
|
||||
for (FlightConfigurationId fcId : fcIds) {
|
||||
if ((stage == initStage) && (fcId == initFcId))
|
||||
continue;
|
||||
|
||||
final AxialStage stage = stages.get(i);
|
||||
final FlightConfigurationId fcId = fcIds.get(j);
|
||||
StageSeparationConfiguration config = stage.getSeparationConfigurations().get(fcId);
|
||||
initialConfig = config.copy(fcId);
|
||||
|
||||
if (stage.getSeparationConfigurations().isDefault(config)) {
|
||||
config = config.copy(fcId);
|
||||
// It could be that the current config is the default config, but the user has selected to override it.
|
||||
if (isOverrideDefault && !stage.getSeparationConfigurations().containsId(fcId)) {
|
||||
stage.getSeparationConfigurations().set(fcId, stage.getSeparationConfigurations().getDefault().clone());
|
||||
}
|
||||
|
||||
config.setSeparationDelay(separationDelay);
|
||||
config.setSeparationEvent(separationEvent);
|
||||
stage.getSeparationConfigurations().set(fcId, config);
|
||||
StageSeparationConfiguration currentConfig = stage.getSeparationConfigurations().get(fcId);
|
||||
|
||||
if (!initialConfig.equals(config)) {
|
||||
update = true;
|
||||
if (currentConfig.equals(modifiedConfig)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
update = true;
|
||||
|
||||
currentConfig.setSeparationDelay(separationDelay);
|
||||
currentConfig.setSeparationEvent(separationEvent);
|
||||
stage.getSeparationConfigurations().set(fcId, currentConfig);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user