Reworked the ThrustCurveMotorSelectionPanel so a single instance can be
reused for different searches. This means the MotorRowFilter has an easier time remembering its settings on a per rocket basis.
This commit is contained in:
parent
5913fb2533
commit
32817f2cb1
@ -43,9 +43,11 @@ public class MotorConfigurationPanel extends JPanel {
|
||||
private final MotorConfigurationTableModel configurationTableModel;
|
||||
private final JButton selectMotorButton, removeMotorButton, selectIgnitionButton, resetIgnitionButton;
|
||||
|
||||
private final MotorChooserDialog dialog;
|
||||
|
||||
MotorConfigurationPanel(FlightConfigurationDialog flightConfigurationDialog, Rocket rocket) {
|
||||
super(new MigLayout("fill"));
|
||||
dialog = new MotorChooserDialog(flightConfigurationDialog);
|
||||
this.flightConfigurationDialog = flightConfigurationDialog;
|
||||
this.rocket = rocket;
|
||||
|
||||
@ -207,7 +209,7 @@ public class MotorConfigurationPanel extends JPanel {
|
||||
|
||||
MotorConfiguration config = mount.getMotorConfiguration().get(id);
|
||||
|
||||
MotorChooserDialog dialog = new MotorChooserDialog(mount, id, flightConfigurationDialog);
|
||||
dialog.setMotorMountAndConfig(mount, id);
|
||||
dialog.setVisible(true);
|
||||
Motor m = dialog.getSelectedMotor();
|
||||
double d = dialog.getSelectedDelay();
|
||||
|
@ -26,14 +26,18 @@ public class MotorChooserDialog extends JDialog implements CloseableDialog {
|
||||
private boolean okClicked = false;
|
||||
private static final Translator trans = Application.getTranslator();
|
||||
|
||||
|
||||
public MotorChooserDialog(MotorMount mount, String currentConfig, Window owner) {
|
||||
this(owner);
|
||||
setMotorMountAndConfig(mount, currentConfig);
|
||||
}
|
||||
|
||||
public MotorChooserDialog(Window owner) {
|
||||
super(owner, trans.get("MotorChooserDialog.title"), Dialog.ModalityType.APPLICATION_MODAL);
|
||||
|
||||
|
||||
JPanel panel = new JPanel(new MigLayout("fill"));
|
||||
|
||||
selectionPanel = new ThrustCurveMotorSelectionPanel(mount, currentConfig);
|
||||
selectionPanel = new ThrustCurveMotorSelectionPanel();
|
||||
|
||||
panel.add(selectionPanel, "grow, wrap para");
|
||||
|
||||
@ -74,6 +78,9 @@ public class MotorChooserDialog extends JDialog implements CloseableDialog {
|
||||
selectionPanel.setCloseableDialog(this);
|
||||
}
|
||||
|
||||
public void setMotorMountAndConfig( MotorMount mount, String currentConfig ) {
|
||||
selectionPanel.setMotorMountAndConfig(mount, currentConfig);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the motor selected by this chooser dialog, or <code>null</code> if the selection has been aborted.
|
||||
|
@ -30,7 +30,7 @@ class MotorRowFilter extends RowFilter<TableModel, Integer> {
|
||||
|
||||
// configuration data used in the filter process
|
||||
private final ThrustCurveMotorDatabaseModel model;
|
||||
private final Double diameter;
|
||||
private Double diameter;
|
||||
private List<ThrustCurveMotor> usedMotors = new ArrayList<ThrustCurveMotor>();
|
||||
|
||||
// things which can be changed to modify filter behavior
|
||||
@ -50,9 +50,12 @@ class MotorRowFilter extends RowFilter<TableModel, Integer> {
|
||||
// List of ImpulseClasses to exclude.
|
||||
private List<ImpulseClass> excludedImpulseClass = new ArrayList<ImpulseClass>();
|
||||
|
||||
public MotorRowFilter(MotorMount mount, ThrustCurveMotorDatabaseModel model) {
|
||||
public MotorRowFilter(ThrustCurveMotorDatabaseModel model) {
|
||||
super();
|
||||
this.model = model;
|
||||
}
|
||||
|
||||
public void setMotorMount( MotorMount mount ) {
|
||||
if (mount != null) {
|
||||
this.diameter = mount.getMotorMountDiameter();
|
||||
for (MotorConfiguration m : mount.getMotorConfiguration()) {
|
||||
|
@ -98,20 +98,21 @@ public class ThrustCurveMotorSelectionPanel extends JPanel implements MotorSelec
|
||||
|
||||
private static final ThrustCurveMotorComparator MOTOR_COMPARATOR = new ThrustCurveMotorComparator();
|
||||
|
||||
private final List<ThrustCurveMotorSet> database;
|
||||
private List<ThrustCurveMotorSet> database;
|
||||
|
||||
private CloseableDialog dialog = null;
|
||||
|
||||
final ThrustCurveMotorDatabaseModel model;
|
||||
private final JTable table;
|
||||
private final TableRowSorter<TableModel> sorter;
|
||||
private final MotorRowFilter rowFilter;
|
||||
|
||||
private final JCheckBox hideSimilarBox;
|
||||
|
||||
private final JTextField searchField;
|
||||
String[] searchTerms = new String[0];
|
||||
|
||||
|
||||
private final StyledLabel diameterLabel;
|
||||
private final JLabel curveSelectionLabel;
|
||||
private final JComboBox curveSelectionBox;
|
||||
private final DefaultComboBoxModel curveSelectionModel;
|
||||
@ -140,7 +141,11 @@ public class ThrustCurveMotorSelectionPanel extends JPanel implements MotorSelec
|
||||
private ThrustCurveMotorSet selectedMotorSet;
|
||||
private double selectedDelay;
|
||||
|
||||
|
||||
public ThrustCurveMotorSelectionPanel(MotorMount mount, String currentConfig) {
|
||||
this();
|
||||
setMotorMountAndConfig( mount, currentConfig );
|
||||
|
||||
}
|
||||
/**
|
||||
* Sole constructor.
|
||||
*
|
||||
@ -148,42 +153,17 @@ public class ThrustCurveMotorSelectionPanel extends JPanel implements MotorSelec
|
||||
* @param delay the currently selected ejection charge delay.
|
||||
* @param diameter the diameter of the motor mount.
|
||||
*/
|
||||
public ThrustCurveMotorSelectionPanel(MotorMount mount, String currentConfig) {
|
||||
public ThrustCurveMotorSelectionPanel() {
|
||||
super(new MigLayout("fill", "[grow][]"));
|
||||
|
||||
double diameter = 0;
|
||||
if (currentConfig != null && mount != null) {
|
||||
MotorConfiguration motorConf = mount.getMotorConfiguration().get(currentConfig);
|
||||
selectedMotor = (ThrustCurveMotor) motorConf.getMotor();
|
||||
selectedDelay = motorConf.getEjectionDelay();
|
||||
diameter = mount.getMotorMountDiameter();
|
||||
}
|
||||
|
||||
// Construct the database (adding the current motor if not in the db already)
|
||||
List<ThrustCurveMotorSet> db;
|
||||
db = Application.getThrustCurveMotorSetDatabase().getMotorSets();
|
||||
|
||||
// If current motor is not found in db, add a new ThrustCurveMotorSet containing it
|
||||
if (selectedMotor != null) {
|
||||
for (ThrustCurveMotorSet motorSet : db) {
|
||||
if (motorSet.getMotors().contains(selectedMotor)) {
|
||||
selectedMotorSet = motorSet;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (selectedMotorSet == null) {
|
||||
db = new ArrayList<ThrustCurveMotorSet>(db);
|
||||
ThrustCurveMotorSet extra = new ThrustCurveMotorSet();
|
||||
extra.addMotor(selectedMotor);
|
||||
selectedMotorSet = extra;
|
||||
db.add(extra);
|
||||
Collections.sort(db);
|
||||
}
|
||||
}
|
||||
database = db;
|
||||
|
||||
model = new ThrustCurveMotorDatabaseModel(database);
|
||||
final MotorRowFilter rowFilter = new MotorRowFilter(mount, model);
|
||||
rowFilter = new MotorRowFilter(model);
|
||||
|
||||
//// GUI
|
||||
|
||||
@ -369,8 +349,7 @@ public class ThrustCurveMotorSelectionPanel extends JPanel implements MotorSelec
|
||||
|
||||
// Motor mount diameter label
|
||||
//// Motor mount diameter:
|
||||
label = new StyledLabel(trans.get("TCMotorSelPan.lbl.Motormountdia") + " " +
|
||||
UnitGroup.UNITS_MOTOR_DIMENSIONS.getDefaultUnit().toStringUnit(diameter));
|
||||
diameterLabel = new StyledLabel();
|
||||
panel.add(label, "gapright 30lp, spanx, split");
|
||||
|
||||
// Vertical split
|
||||
@ -490,9 +469,6 @@ public class ThrustCurveMotorSelectionPanel extends JPanel implements MotorSelec
|
||||
scrollpane = new JScrollPane(comment);
|
||||
panel.add(scrollpane, "spanx, growx, wrap para");
|
||||
|
||||
|
||||
|
||||
|
||||
// Thrust curve plot
|
||||
chart = ChartFactory.createXYLineChart(
|
||||
null, // title
|
||||
@ -569,6 +545,45 @@ public class ThrustCurveMotorSelectionPanel extends JPanel implements MotorSelec
|
||||
|
||||
}
|
||||
|
||||
public void setMotorMountAndConfig( MotorMount mount, String currentConfig ) {
|
||||
double diameter = 0;
|
||||
|
||||
if (currentConfig != null && mount != null) {
|
||||
MotorConfiguration motorConf = mount.getMotorConfiguration().get(currentConfig);
|
||||
selectedMotor = (ThrustCurveMotor) motorConf.getMotor();
|
||||
selectedDelay = motorConf.getEjectionDelay();
|
||||
diameter = mount.getMotorMountDiameter();
|
||||
}
|
||||
|
||||
// If current motor is not found in db, add a new ThrustCurveMotorSet containing it
|
||||
if (selectedMotor != null) {
|
||||
for (ThrustCurveMotorSet motorSet : database) {
|
||||
if (motorSet.getMotors().contains(selectedMotor)) {
|
||||
selectedMotorSet = motorSet;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (selectedMotorSet == null) {
|
||||
database = new ArrayList<ThrustCurveMotorSet>(database);
|
||||
ThrustCurveMotorSet extra = new ThrustCurveMotorSet();
|
||||
extra.addMotor(selectedMotor);
|
||||
selectedMotorSet = extra;
|
||||
database.add(extra);
|
||||
Collections.sort(database);
|
||||
}
|
||||
}
|
||||
|
||||
updateData();
|
||||
setDelays(true);
|
||||
|
||||
diameterLabel.setText(trans.get("TCMotorSelPan.lbl.Motormountdia") + " " +
|
||||
UnitGroup.UNITS_MOTOR_DIMENSIONS.getDefaultUnit().toStringUnit(0));
|
||||
|
||||
rowFilter.setMotorMount(mount);
|
||||
scrollSelectionVisible();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Motor getSelectedMotor() {
|
||||
return selectedMotor;
|
||||
|
Loading…
x
Reference in New Issue
Block a user