Pulled the setup of the Motor Configuration panel out of
FlightConfigurationDialog in to its own class.
This commit is contained in:
parent
1f445b2268
commit
6e66aeac31
@ -3,56 +3,37 @@ package net.sf.openrocket.gui.dialogs.flightconfiguration;
|
|||||||
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.MouseAdapter;
|
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
import java.awt.event.WindowAdapter;
|
import java.awt.event.WindowAdapter;
|
||||||
import java.awt.event.WindowEvent;
|
import java.awt.event.WindowEvent;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JComboBox;
|
import javax.swing.JComboBox;
|
||||||
import javax.swing.JComponent;
|
|
||||||
import javax.swing.JDialog;
|
import javax.swing.JDialog;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.JScrollPane;
|
|
||||||
import javax.swing.JTabbedPane;
|
import javax.swing.JTabbedPane;
|
||||||
import javax.swing.JTable;
|
|
||||||
import javax.swing.ListSelectionModel;
|
|
||||||
import javax.swing.table.TableColumn;
|
|
||||||
import javax.swing.table.TableColumnModel;
|
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import net.sf.openrocket.document.OpenRocketDocument;
|
import net.sf.openrocket.document.OpenRocketDocument;
|
||||||
import net.sf.openrocket.gui.dialogs.motor.MotorChooserDialog;
|
|
||||||
import net.sf.openrocket.gui.main.BasicFrame;
|
import net.sf.openrocket.gui.main.BasicFrame;
|
||||||
import net.sf.openrocket.gui.util.GUIUtil;
|
import net.sf.openrocket.gui.util.GUIUtil;
|
||||||
import net.sf.openrocket.l10n.Translator;
|
import net.sf.openrocket.l10n.Translator;
|
||||||
import net.sf.openrocket.motor.Motor;
|
|
||||||
import net.sf.openrocket.rocketcomponent.MotorMount;
|
|
||||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
|
||||||
import net.sf.openrocket.rocketcomponent.MotorMount.IgnitionEvent;
|
|
||||||
import net.sf.openrocket.startup.Application;
|
import net.sf.openrocket.startup.Application;
|
||||||
import net.sf.openrocket.util.Chars;
|
|
||||||
|
|
||||||
public class FlightConfigurationDialog extends JDialog {
|
public class FlightConfigurationDialog extends JDialog {
|
||||||
|
|
||||||
|
static final Translator trans = Application.getTranslator();
|
||||||
|
|
||||||
private final Rocket rocket;
|
private final Rocket rocket;
|
||||||
|
|
||||||
final MotorMount[] mounts;
|
|
||||||
|
|
||||||
private MotorConfigurationTableModel configurationTableModel;
|
|
||||||
private FlightConfigurationModel flightConfigurationModel;
|
private FlightConfigurationModel flightConfigurationModel;
|
||||||
|
|
||||||
private final JButton renameConfButton, removeConfButton, copyConfButton;
|
private final JButton renameConfButton, removeConfButton, copyConfButton;
|
||||||
private JButton selectMotorButton, removeMotorButton;
|
|
||||||
|
private final MotorConfigurationPanel motorConfigurationPanel;
|
||||||
|
|
||||||
private String currentID = null;
|
private String currentID = null;
|
||||||
private MotorMount currentMount = null;
|
|
||||||
|
|
||||||
static final Translator trans = Application.getTranslator();
|
|
||||||
|
|
||||||
public FlightConfigurationDialog(final Rocket rocket, Window parent) {
|
public FlightConfigurationDialog(final Rocket rocket, Window parent) {
|
||||||
//// Edit motor configurations
|
//// Edit motor configurations
|
||||||
@ -67,8 +48,6 @@ public class FlightConfigurationDialog extends JDialog {
|
|||||||
|
|
||||||
this.rocket = rocket;
|
this.rocket = rocket;
|
||||||
|
|
||||||
mounts = getPotentialMotorMounts();
|
|
||||||
|
|
||||||
JPanel panel = new JPanel(new MigLayout("fill"));
|
JPanel panel = new JPanel(new MigLayout("fill"));
|
||||||
|
|
||||||
JLabel label = new JLabel("Selected Configuration: ");
|
JLabel label = new JLabel("Selected Configuration: ");
|
||||||
@ -125,8 +104,8 @@ public class FlightConfigurationDialog extends JDialog {
|
|||||||
panel.add( tabs, "spanx, w 700lp, h 500lp, wrap");
|
panel.add( tabs, "spanx, w 700lp, h 500lp, wrap");
|
||||||
|
|
||||||
//// Motor tabs
|
//// Motor tabs
|
||||||
JComponent motorTab = makeMotorTab();
|
motorConfigurationPanel = new MotorConfigurationPanel(this,rocket);
|
||||||
tabs.add(trans.get("edtmotorconfdlg.lbl.Motortab"), motorTab);
|
tabs.add(trans.get("edtmotorconfdlg.lbl.Motortab"), motorConfigurationPanel);
|
||||||
|
|
||||||
//// Recovery tab
|
//// Recovery tab
|
||||||
tabs.add(trans.get("edtmotorconfdlg.lbl.Recoverytab"), new RecoveryConfigurationPanel(this,rocket));
|
tabs.add(trans.get("edtmotorconfdlg.lbl.Recoverytab"), new RecoveryConfigurationPanel(this,rocket));
|
||||||
@ -164,34 +143,27 @@ public class FlightConfigurationDialog extends JDialog {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private MotorMount[] getPotentialMotorMounts() {
|
public void selectConfiguration( String id ) {
|
||||||
List<MotorMount> list = new ArrayList<MotorMount>();
|
|
||||||
for (RocketComponent c : rocket) {
|
|
||||||
if (c instanceof MotorMount) {
|
|
||||||
list.add((MotorMount) c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return list.toArray(new MotorMount[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void selectConfiguration( String id ) {
|
|
||||||
currentID = id;
|
currentID = id;
|
||||||
rocket.getDefaultConfiguration().setMotorConfigurationID(currentID);
|
rocket.getDefaultConfiguration().setMotorConfigurationID(currentID);
|
||||||
configurationTableModel.fireTableDataChanged();
|
motorConfigurationPanel.fireTableDataChanged();
|
||||||
|
// FIXME - update data in recovery configuration panel
|
||||||
updateButtonState();
|
updateButtonState();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addConfiguration() {
|
public void addConfiguration() {
|
||||||
currentID = rocket.newMotorConfigurationID();
|
currentID = rocket.newMotorConfigurationID();
|
||||||
rocket.getDefaultConfiguration().setMotorConfigurationID(currentID);
|
rocket.getDefaultConfiguration().setMotorConfigurationID(currentID);
|
||||||
configurationTableModel.fireTableDataChanged();
|
motorConfigurationPanel.fireTableDataChanged();
|
||||||
|
// FIXME - update data in recovery configuration panel
|
||||||
flightConfigurationModel.fireContentsUpdated();
|
flightConfigurationModel.fireContentsUpdated();
|
||||||
updateButtonState();
|
updateButtonState();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeConfigurationName( String newName ) {
|
public void changeConfigurationName( String newName ) {
|
||||||
rocket.setMotorConfigurationName(currentID, newName);
|
rocket.setMotorConfigurationName(currentID, newName);
|
||||||
configurationTableModel.fireTableDataChanged();
|
motorConfigurationPanel.fireTableDataChanged();
|
||||||
|
// FIXME - update data in recovery configuration panel
|
||||||
flightConfigurationModel.fireContentsUpdated();
|
flightConfigurationModel.fireContentsUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,194 +172,25 @@ public class FlightConfigurationDialog extends JDialog {
|
|||||||
return;
|
return;
|
||||||
rocket.removeMotorConfigurationID(currentID);
|
rocket.removeMotorConfigurationID(currentID);
|
||||||
rocket.getDefaultConfiguration().setMotorConfigurationID(null);
|
rocket.getDefaultConfiguration().setMotorConfigurationID(null);
|
||||||
configurationTableModel.fireTableDataChanged();
|
motorConfigurationPanel.fireTableDataChanged();
|
||||||
|
// FIXME - update data in recovery configuration panel
|
||||||
flightConfigurationModel.fireContentsUpdated();
|
flightConfigurationModel.fireContentsUpdated();
|
||||||
updateButtonState();
|
updateButtonState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call this from other panels when a change might cause the names of the configurations to change.
|
||||||
|
*/
|
||||||
|
public void fireContentsUpdated() {
|
||||||
|
flightConfigurationModel.fireContentsUpdated();
|
||||||
|
}
|
||||||
|
|
||||||
private void updateButtonState() {
|
private void updateButtonState() {
|
||||||
removeConfButton.setEnabled(currentID != null);
|
removeConfButton.setEnabled(currentID != null);
|
||||||
renameConfButton.setEnabled(currentID != null);
|
renameConfButton.setEnabled(currentID != null);
|
||||||
selectMotorButton.setEnabled(currentMount != null && currentID != null);
|
motorConfigurationPanel.updateButtonState();
|
||||||
removeMotorButton.setEnabled(currentMount != null && currentID != null);
|
// FIXME - update button state in recovery configuration panel
|
||||||
}
|
|
||||||
|
|
||||||
private void selectMotor() {
|
|
||||||
if (currentID == null || currentMount == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
MotorChooserDialog dialog = new MotorChooserDialog(currentMount.getMotor(currentID),
|
|
||||||
currentMount.getMotorDelay(currentID), currentMount.getMotorMountDiameter(), this);
|
|
||||||
dialog.setVisible(true);
|
|
||||||
Motor m = dialog.getSelectedMotor();
|
|
||||||
double d = dialog.getSelectedDelay();
|
|
||||||
|
|
||||||
if (m != null) {
|
|
||||||
currentMount.setMotor(currentID, m);
|
|
||||||
currentMount.setMotorDelay(currentID, d);
|
|
||||||
}
|
|
||||||
|
|
||||||
configurationTableModel.fireTableDataChanged();
|
|
||||||
updateButtonState();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void removeMotor() {
|
|
||||||
if (currentID == null || currentMount == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
currentMount.setMotor(currentID, null);
|
|
||||||
|
|
||||||
configurationTableModel.fireTableDataChanged();
|
|
||||||
updateButtonState();
|
|
||||||
}
|
|
||||||
|
|
||||||
void makeMotorMount( MotorMount mount, boolean isMotorMount ) {
|
|
||||||
mount.setMotorMount( isMotorMount );
|
|
||||||
configurationTableModel.fireTableStructureChanged();
|
|
||||||
updateButtonState();
|
|
||||||
}
|
|
||||||
|
|
||||||
MotorMount findMount(int column) {
|
|
||||||
MotorMount mount = null;
|
|
||||||
|
|
||||||
int count = column;
|
|
||||||
for (MotorMount m : mounts) {
|
|
||||||
if (m.isMotorMount())
|
|
||||||
count--;
|
|
||||||
if (count < 0) {
|
|
||||||
mount = m;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mount == null) {
|
|
||||||
throw new IndexOutOfBoundsException("motor mount not found, column=" + column);
|
|
||||||
}
|
|
||||||
return mount;
|
|
||||||
}
|
|
||||||
|
|
||||||
String findMotorForDisplay( int column ) {
|
|
||||||
String id = currentID;
|
|
||||||
MotorMount mount = findMount(column);
|
|
||||||
Motor motor = mount.getMotor(id);
|
|
||||||
if (motor == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
String str = motor.getDesignation(mount.getMotorDelay(id));
|
|
||||||
int count = mount.getMotorCount();
|
|
||||||
if (count > 1) {
|
|
||||||
str = "" + count + Chars.TIMES + " " + str;
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
String findIgnitionForDisplay( int column ) {
|
|
||||||
String id = currentID;
|
|
||||||
MotorMount mount = findMount(column);
|
|
||||||
Motor motor = mount.getMotor(id);
|
|
||||||
if (motor == null)
|
|
||||||
//// None
|
|
||||||
return null;
|
|
||||||
IgnitionEvent ignition = mount.getIgnitionEvent();
|
|
||||||
return ignition.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private JComponent makeMotorTab( ) {
|
|
||||||
|
|
||||||
JPanel panel = new JPanel(new MigLayout("fill"));
|
|
||||||
|
|
||||||
//// Motor mount selection
|
|
||||||
//// <html><b>Motor mounts:</b>
|
|
||||||
JLabel label = new JLabel(trans.get("edtmotorconfdlg.lbl.Motormounts"));
|
|
||||||
panel.add(label, "gapbottom para");
|
|
||||||
|
|
||||||
//// Motor selection
|
|
||||||
//// <html><b>Motor configurations:</b>
|
|
||||||
label = new JLabel(trans.get("edtmotorconfdlg.lbl.Motorconfig"));
|
|
||||||
panel.add(label, "gapbottom para, wrap");
|
|
||||||
|
|
||||||
//// <html>Select which components function as motor mounts:
|
|
||||||
label = new JLabel(trans.get("edtmotorconfdlg.selectcomp"));
|
|
||||||
panel.add(label, "ay 100%, w 1px, growx, wrap");
|
|
||||||
|
|
||||||
//// Motor Mount selection
|
|
||||||
JTable table = new JTable(new MotorMountTableModel(this));
|
|
||||||
table.setTableHeader(null);
|
|
||||||
table.setShowVerticalLines(false);
|
|
||||||
table.setRowSelectionAllowed(false);
|
|
||||||
table.setColumnSelectionAllowed(false);
|
|
||||||
|
|
||||||
TableColumnModel columnModel = table.getColumnModel();
|
|
||||||
TableColumn col0 = columnModel.getColumn(0);
|
|
||||||
int w = table.getRowHeight() + 2;
|
|
||||||
col0.setMinWidth(w);
|
|
||||||
col0.setPreferredWidth(w);
|
|
||||||
col0.setMaxWidth(w);
|
|
||||||
|
|
||||||
table.addMouseListener(new GUIUtil.BooleanTableClickListener(table));
|
|
||||||
JScrollPane scroll = new JScrollPane(table);
|
|
||||||
panel.add(scroll, "w 200lp, h 150lp, grow");
|
|
||||||
|
|
||||||
//// Motor selection table.
|
|
||||||
configurationTableModel = new MotorConfigurationTableModel(this, true);
|
|
||||||
final JTable configurationTable = new JTable(configurationTableModel);
|
|
||||||
configurationTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
|
||||||
configurationTable.setCellSelectionEnabled(true);
|
|
||||||
|
|
||||||
configurationTable.addMouseListener(new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mouseClicked(MouseEvent e) {
|
|
||||||
JTable table = (JTable) e.getComponent();
|
|
||||||
int row = configurationTable.getSelectedRow();
|
|
||||||
int column = configurationTable.getSelectedColumn();
|
|
||||||
|
|
||||||
if ( row >= 0 & column == 1) {
|
|
||||||
currentMount = findMount(row);
|
|
||||||
} else {
|
|
||||||
currentMount = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e.getClickCount() == 1) {
|
|
||||||
|
|
||||||
// Single click updates selection
|
|
||||||
updateButtonState();
|
|
||||||
|
|
||||||
} else if (e.getClickCount() == 2) {
|
|
||||||
|
|
||||||
// Double-click edits motor
|
|
||||||
selectMotor();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
scroll = new JScrollPane(configurationTable);
|
|
||||||
panel.add(scroll, "w 500lp, h 150lp, grow, wrap");
|
|
||||||
|
|
||||||
//// Select motor
|
|
||||||
selectMotorButton = new JButton(trans.get("edtmotorconfdlg.but.Selectmotor"));
|
|
||||||
selectMotorButton.addActionListener(new ActionListener() {
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
selectMotor();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
panel.add(selectMotorButton, "skip, split, sizegroup button");
|
|
||||||
|
|
||||||
//// Remove motor button
|
|
||||||
removeMotorButton = new JButton(trans.get("edtmotorconfdlg.but.removemotor"));
|
|
||||||
removeMotorButton.addActionListener(new ActionListener() {
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
removeMotor();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
panel.add(removeMotorButton,"sizegroup button, wrap");
|
|
||||||
|
|
||||||
return panel;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,246 @@
|
|||||||
|
package net.sf.openrocket.gui.dialogs.flightconfiguration;
|
||||||
|
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JScrollPane;
|
||||||
|
import javax.swing.JTable;
|
||||||
|
import javax.swing.ListSelectionModel;
|
||||||
|
import javax.swing.table.TableColumn;
|
||||||
|
import javax.swing.table.TableColumnModel;
|
||||||
|
|
||||||
|
import net.miginfocom.swing.MigLayout;
|
||||||
|
import net.sf.openrocket.gui.dialogs.motor.MotorChooserDialog;
|
||||||
|
import net.sf.openrocket.gui.util.GUIUtil;
|
||||||
|
import net.sf.openrocket.motor.Motor;
|
||||||
|
import net.sf.openrocket.rocketcomponent.MotorMount;
|
||||||
|
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||||
|
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||||
|
import net.sf.openrocket.rocketcomponent.MotorMount.IgnitionEvent;
|
||||||
|
import net.sf.openrocket.util.Chars;
|
||||||
|
|
||||||
|
public class MotorConfigurationPanel extends JPanel {
|
||||||
|
|
||||||
|
private final FlightConfigurationDialog flightConfigurationDialog;
|
||||||
|
private final Rocket rocket;
|
||||||
|
|
||||||
|
private final MotorConfigurationTableModel configurationTableModel;
|
||||||
|
private final JButton selectMotorButton, removeMotorButton;
|
||||||
|
|
||||||
|
private MotorMount currentMount = null;
|
||||||
|
final MotorMount[] mounts;
|
||||||
|
|
||||||
|
MotorConfigurationPanel(FlightConfigurationDialog flightConfigurationDialog, Rocket rocket) {
|
||||||
|
super(new MigLayout("fill"));
|
||||||
|
this.flightConfigurationDialog = flightConfigurationDialog;
|
||||||
|
this.rocket = rocket;
|
||||||
|
|
||||||
|
mounts = getPotentialMotorMounts();
|
||||||
|
|
||||||
|
//// Motor mount selection
|
||||||
|
//// <html><b>Motor mounts:</b>
|
||||||
|
JLabel label = new JLabel(FlightConfigurationDialog.trans.get("edtmotorconfdlg.lbl.Motormounts"));
|
||||||
|
this.add(label, "gapbottom para");
|
||||||
|
|
||||||
|
//// Motor selection
|
||||||
|
//// <html><b>Motor configurations:</b>
|
||||||
|
label = new JLabel(FlightConfigurationDialog.trans.get("edtmotorconfdlg.lbl.Motorconfig"));
|
||||||
|
this.add(label, "gapbottom para, wrap");
|
||||||
|
|
||||||
|
//// <html>Select which components function as motor mounts:
|
||||||
|
label = new JLabel(FlightConfigurationDialog.trans.get("edtmotorconfdlg.selectcomp"));
|
||||||
|
this.add(label, "ay 100%, w 1px, growx, wrap");
|
||||||
|
|
||||||
|
//// Motor Mount selection
|
||||||
|
JTable table = new JTable(new MotorMountTableModel(this));
|
||||||
|
table.setTableHeader(null);
|
||||||
|
table.setShowVerticalLines(false);
|
||||||
|
table.setRowSelectionAllowed(false);
|
||||||
|
table.setColumnSelectionAllowed(false);
|
||||||
|
|
||||||
|
TableColumnModel columnModel = table.getColumnModel();
|
||||||
|
TableColumn col0 = columnModel.getColumn(0);
|
||||||
|
int w = table.getRowHeight() + 2;
|
||||||
|
col0.setMinWidth(w);
|
||||||
|
col0.setPreferredWidth(w);
|
||||||
|
col0.setMaxWidth(w);
|
||||||
|
|
||||||
|
table.addMouseListener(new GUIUtil.BooleanTableClickListener(table));
|
||||||
|
JScrollPane scroll = new JScrollPane(table);
|
||||||
|
this.add(scroll, "w 200lp, h 150lp, grow");
|
||||||
|
|
||||||
|
//// Motor selection table.
|
||||||
|
configurationTableModel = new MotorConfigurationTableModel(this, true);
|
||||||
|
final JTable configurationTable = new JTable(configurationTableModel);
|
||||||
|
configurationTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||||
|
configurationTable.setCellSelectionEnabled(true);
|
||||||
|
|
||||||
|
configurationTable.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(MouseEvent e) {
|
||||||
|
int row = configurationTable.getSelectedRow();
|
||||||
|
int column = configurationTable.getSelectedColumn();
|
||||||
|
|
||||||
|
if ( row >= 0 & column == 1) {
|
||||||
|
currentMount = findMount(row);
|
||||||
|
} else {
|
||||||
|
currentMount = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.getClickCount() == 1) {
|
||||||
|
|
||||||
|
// Single click updates selection
|
||||||
|
updateButtonState();
|
||||||
|
|
||||||
|
} else if (e.getClickCount() == 2) {
|
||||||
|
|
||||||
|
// Double-click edits motor
|
||||||
|
selectMotor();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
scroll = new JScrollPane(configurationTable);
|
||||||
|
this.add(scroll, "w 500lp, h 150lp, grow, wrap");
|
||||||
|
|
||||||
|
//// Select motor
|
||||||
|
selectMotorButton = new JButton(FlightConfigurationDialog.trans.get("edtmotorconfdlg.but.Selectmotor"));
|
||||||
|
selectMotorButton.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
selectMotor();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.add(selectMotorButton, "skip, split, sizegroup button");
|
||||||
|
|
||||||
|
//// Remove motor button
|
||||||
|
removeMotorButton = new JButton(FlightConfigurationDialog.trans.get("edtmotorconfdlg.but.removemotor"));
|
||||||
|
removeMotorButton.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
removeMotor();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.add(removeMotorButton,"sizegroup button, wrap");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fireTableDataChanged() {
|
||||||
|
configurationTableModel.fireTableDataChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateButtonState() {
|
||||||
|
String currentID = rocket.getDefaultConfiguration().getMotorConfigurationID();
|
||||||
|
selectMotorButton.setEnabled(currentMount != null && currentID != null);
|
||||||
|
removeMotorButton.setEnabled(currentMount != null && currentID != null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void selectMotor() {
|
||||||
|
String currentID = rocket.getDefaultConfiguration().getMotorConfigurationID();
|
||||||
|
if (currentID == null || currentMount == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
MotorChooserDialog dialog = new MotorChooserDialog(
|
||||||
|
currentMount.getMotor(currentID),
|
||||||
|
currentMount.getMotorDelay(currentID),
|
||||||
|
currentMount.getMotorMountDiameter(),
|
||||||
|
flightConfigurationDialog);
|
||||||
|
dialog.setVisible(true);
|
||||||
|
Motor m = dialog.getSelectedMotor();
|
||||||
|
double d = dialog.getSelectedDelay();
|
||||||
|
|
||||||
|
if (m != null) {
|
||||||
|
currentMount.setMotor(currentID, m);
|
||||||
|
currentMount.setMotorDelay(currentID, d);
|
||||||
|
}
|
||||||
|
|
||||||
|
flightConfigurationDialog.fireContentsUpdated();
|
||||||
|
configurationTableModel.fireTableDataChanged();
|
||||||
|
updateButtonState();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeMotor() {
|
||||||
|
String currentID = rocket.getDefaultConfiguration().getMotorConfigurationID();
|
||||||
|
if (currentID == null || currentMount == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
currentMount.setMotor(currentID, null);
|
||||||
|
|
||||||
|
flightConfigurationDialog.fireContentsUpdated();
|
||||||
|
configurationTableModel.fireTableDataChanged();
|
||||||
|
updateButtonState();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void makeMotorMount( MotorMount mount, boolean isMotorMount ) {
|
||||||
|
mount.setMotorMount( isMotorMount );
|
||||||
|
configurationTableModel.fireTableStructureChanged();
|
||||||
|
updateButtonState();
|
||||||
|
}
|
||||||
|
|
||||||
|
private MotorMount[] getPotentialMotorMounts() {
|
||||||
|
List<MotorMount> list = new ArrayList<MotorMount>();
|
||||||
|
for (RocketComponent c : rocket) {
|
||||||
|
if (c instanceof MotorMount) {
|
||||||
|
list.add((MotorMount) c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list.toArray(new MotorMount[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MotorMount findMount(int column) {
|
||||||
|
MotorMount mount = null;
|
||||||
|
|
||||||
|
int count = column;
|
||||||
|
for (MotorMount m : mounts) {
|
||||||
|
if (m.isMotorMount())
|
||||||
|
count--;
|
||||||
|
if (count < 0) {
|
||||||
|
mount = m;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mount == null) {
|
||||||
|
throw new IndexOutOfBoundsException("motor mount not found, column=" + column);
|
||||||
|
}
|
||||||
|
return mount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String findMotorForDisplay( int column ) {
|
||||||
|
String currentID = rocket.getDefaultConfiguration().getMotorConfigurationID();
|
||||||
|
MotorMount mount = findMount(column);
|
||||||
|
Motor motor = mount.getMotor(currentID);
|
||||||
|
if (motor == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
String str = motor.getDesignation(mount.getMotorDelay(currentID));
|
||||||
|
int count = mount.getMotorCount();
|
||||||
|
if (count > 1) {
|
||||||
|
str = "" + count + Chars.TIMES + " " + str;
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String findIgnitionForDisplay( int column ) {
|
||||||
|
String currentID = rocket.getDefaultConfiguration().getMotorConfigurationID();
|
||||||
|
MotorMount mount = findMount(column);
|
||||||
|
Motor motor = mount.getMotor(currentID);
|
||||||
|
if (motor == null)
|
||||||
|
//// None
|
||||||
|
return null;
|
||||||
|
IgnitionEvent ignition = mount.getIgnitionEvent();
|
||||||
|
return ignition.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -18,15 +18,15 @@ class MotorConfigurationTableModel extends AbstractTableModel {
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private final FlightConfigurationDialog flightConfigurationDialog;
|
private final MotorConfigurationPanel motorConfigurationPanel;
|
||||||
|
|
||||||
private final boolean advanced;
|
private final boolean advanced;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param flightConfigurationDialog
|
* @param motorConfigurationPanel
|
||||||
*/
|
*/
|
||||||
MotorConfigurationTableModel( FlightConfigurationDialog flightConfigurationDialog, boolean advanced) {
|
MotorConfigurationTableModel( MotorConfigurationPanel motorConfigurationPanel, boolean advanced) {
|
||||||
this.flightConfigurationDialog = flightConfigurationDialog;
|
this.motorConfigurationPanel = motorConfigurationPanel;
|
||||||
this.advanced = advanced;
|
this.advanced = advanced;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ class MotorConfigurationTableModel extends AbstractTableModel {
|
|||||||
@Override
|
@Override
|
||||||
public int getRowCount() {
|
public int getRowCount() {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (MotorMount m : this.flightConfigurationDialog.mounts) {
|
for (MotorMount m : this.motorConfigurationPanel.mounts) {
|
||||||
if (m.isMotorMount())
|
if (m.isMotorMount())
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
@ -52,7 +52,7 @@ class MotorConfigurationTableModel extends AbstractTableModel {
|
|||||||
switch( column ) {
|
switch( column ) {
|
||||||
case 0:
|
case 0:
|
||||||
{
|
{
|
||||||
MotorMount mount = this.flightConfigurationDialog.findMount(row);
|
MotorMount mount = this.motorConfigurationPanel.findMount(row);
|
||||||
String name = mount.toString();
|
String name = mount.toString();
|
||||||
int count = mount.getMotorCount();
|
int count = mount.getMotorCount();
|
||||||
if (count > 1) {
|
if (count > 1) {
|
||||||
@ -62,7 +62,7 @@ class MotorConfigurationTableModel extends AbstractTableModel {
|
|||||||
}
|
}
|
||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
String str = this.flightConfigurationDialog.findMotorForDisplay(row);
|
String str = this.motorConfigurationPanel.findMotorForDisplay(row);
|
||||||
if (str == null)
|
if (str == null)
|
||||||
//// None
|
//// None
|
||||||
return NONE;
|
return NONE;
|
||||||
@ -71,7 +71,7 @@ class MotorConfigurationTableModel extends AbstractTableModel {
|
|||||||
}
|
}
|
||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
String str = this.flightConfigurationDialog.findIgnitionForDisplay(row);
|
String str = this.motorConfigurationPanel.findIgnitionForDisplay(row);
|
||||||
if (str == null)
|
if (str == null)
|
||||||
//// None
|
//// None
|
||||||
return NONE;
|
return NONE;
|
||||||
|
@ -10,13 +10,13 @@ class MotorMountTableModel extends AbstractTableModel {
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private final FlightConfigurationDialog flightConfigurationDialog;
|
private final MotorConfigurationPanel motorConfigurationPanel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param flightConfigurationDialog
|
* @param motorConfigurationPanel
|
||||||
*/
|
*/
|
||||||
MotorMountTableModel(FlightConfigurationDialog flightConfigurationDialog) {
|
MotorMountTableModel(MotorConfigurationPanel motorConfigurationPanel) {
|
||||||
this.flightConfigurationDialog = flightConfigurationDialog;
|
this.motorConfigurationPanel = motorConfigurationPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -26,7 +26,7 @@ class MotorMountTableModel extends AbstractTableModel {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getRowCount() {
|
public int getRowCount() {
|
||||||
return this.flightConfigurationDialog.mounts.length;
|
return this.motorConfigurationPanel.mounts.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -47,10 +47,10 @@ class MotorMountTableModel extends AbstractTableModel {
|
|||||||
public Object getValueAt(int row, int column) {
|
public Object getValueAt(int row, int column) {
|
||||||
switch (column) {
|
switch (column) {
|
||||||
case 0:
|
case 0:
|
||||||
return new Boolean(this.flightConfigurationDialog.mounts[row].isMotorMount());
|
return new Boolean(this.motorConfigurationPanel.mounts[row].isMotorMount());
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
return this.flightConfigurationDialog.mounts[row].toString();
|
return this.motorConfigurationPanel.mounts[row].toString();
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new IndexOutOfBoundsException("column=" + column);
|
throw new IndexOutOfBoundsException("column=" + column);
|
||||||
@ -68,6 +68,6 @@ class MotorMountTableModel extends AbstractTableModel {
|
|||||||
throw new IllegalArgumentException("column=" + column + ", value=" + value);
|
throw new IllegalArgumentException("column=" + column + ", value=" + value);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.flightConfigurationDialog.makeMotorMount( this.flightConfigurationDialog.mounts[row], (Boolean) value);
|
this.motorConfigurationPanel.makeMotorMount( this.motorConfigurationPanel.mounts[row], (Boolean) value);
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user