package net.sf.openrocket.gui.adaptors;
+import java.awt.Component;
import java.util.List;
import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel;
+import javax.swing.SwingUtilities;
import net.sf.openrocket.database.Database;
import net.sf.openrocket.database.DatabaseListener;
+import net.sf.openrocket.gui.dialogs.preset.ComponentPresetChooserDialog;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.logging.LogHelper;
import net.sf.openrocket.preset.ComponentPreset;
private static final LogHelper log = Application.getLogger();
private static final Translator trans = Application.getTranslator();
- private static final String SELECT_PRESET = trans.get("lbl.select");
+ private static final String NONE_SELECTED = "";
private static final String SELECT_DATABASE = trans.get("lbl.database");
-
+ private final Component parent;
private final RocketComponent component;
private ComponentPreset previousPreset;
private List<ComponentPreset> presets;
- public PresetModel(RocketComponent component) {
+ public PresetModel(Component parent, RocketComponent component) {
+ this.parent = parent;
presets = Application.getComponentPresetDao().listForType(component.getPresetType(), true);
this.component = component;
previousPreset = component.getPresetComponent();
@Override
public Object getElementAt(int index) {
if (index == 0) {
- return SELECT_PRESET;
+ return NONE_SELECTED;
}
if (index == getSize() - 1) {
return SELECT_DATABASE;
if (item == null) {
// FIXME: What to do?
- } else if (item.equals(SELECT_PRESET)) {
+ } else if (item.equals(NONE_SELECTED)) {
component.clearPreset();
} else if (item.equals(SELECT_DATABASE)) {
- // FIXME: Open database dialog
+ // FIXME - when the dialog first appears, the preset drop down still is open and has focus.
+ // we need to force focus to the new dialog.
+ ComponentPresetChooserDialog dialog =
+ new ComponentPresetChooserDialog( SwingUtilities.getWindowAncestor(PresetModel.this.parent),
+ PresetModel.this.component);
+ dialog.setVisible(true);
+ ComponentPreset preset = dialog.getSelectedComponentPreset();
+ setSelectedItem(preset);
} else {
// FIXME: Add undo point here
component.loadPreset((ComponentPreset) item);
public Object getSelectedItem() {
ComponentPreset preset = component.getPresetComponent();
if (preset == null) {
- return SELECT_PRESET;
+ return NONE_SELECTED;
} else {
return preset;
}
package net.sf.openrocket.gui.configdialog;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
-import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.database.ComponentPresetDatabase;
import net.sf.openrocket.gui.adaptors.PresetModel;
import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.UnitSelector;
-import net.sf.openrocket.gui.dialogs.preset.ComponentPresetChooserDialog;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.material.Material;
-import net.sf.openrocket.preset.ComponentPreset;
import net.sf.openrocket.rocketcomponent.BodyTube;
import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.startup.Application;
//// Body tube template
// FIXME: Move to proper location
panel.add(new JLabel(trans.get("PresetModel.lbl.select")));
- presetModel = new PresetModel(component);
+ presetModel = new PresetModel( this, component);
((ComponentPresetDatabase)Application.getComponentPresetDao()).addDatabaseListener(presetModel);
presetComboBox = new JComboBox(presetModel);
presetComboBox.setEditable(false);
panel.add(presetComboBox, "wrap para");
- //FIXME: temporarily put the select from table button in the config dialog.
- {
- JButton opendialog = new JButton("o");
- opendialog.addActionListener(
- new ActionListener() {
-
- @Override
- public void actionPerformed(ActionEvent e) {
- ComponentPresetChooserDialog dialog =
- new ComponentPresetChooserDialog( SwingUtilities.getWindowAncestor(BodyTubeConfig.this),
- BodyTubeConfig.this.component,
- ComponentPreset.MANUFACTURER,
- ComponentPreset.PARTNO,
- ComponentPreset.OUTER_DIAMETER,
- ComponentPreset.INNER_DIAMETER,
- ComponentPreset.LENGTH);
- dialog.setVisible(true);
- ComponentPreset preset = dialog.getSelectedComponentPreset();
- }
- });
- panel.add( opendialog, "wrap" );
- }
-
//// Body tube length
panel.add(new JLabel(trans.get("BodyTubecfg.lbl.Bodytubelength")));
private static final Translator trans = Application.getTranslator();
- // private final ThrustCurveMotorSelectionPanel selectionPanel;
-
- private final RocketComponent component;
+ private final JTable componentSelectionTable;
private final List<ComponentPreset> presets;
private boolean okClicked = false;
- public ComponentPresetChooserDialog(Window owner, RocketComponent component, final TypedKey<?>... columnKeys) {
+ public ComponentPresetChooserDialog(Window owner, RocketComponent component) {
super(owner, trans.get("title"), Dialog.ModalityType.APPLICATION_MODAL);
- this.component = component;
+ final TypedKey<?>[] columnKeys = component.getPresetType().getDisplayedColumns();
presets = Application.getComponentPresetDao().listAll();
};
- final JTable table = new JTable( tableModel );
+ componentSelectionTable = new JTable( tableModel );
- table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+ componentSelectionTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tableModel);
// FIXME we might need some custom sorters.
TypedKey<?> column = columnKeys[i];
sorter.setComparator(i, column.getComparator());
}*/
- table.setRowSorter(sorter);
+ componentSelectionTable.setRowSorter(sorter);
JScrollPane scrollpane = new JScrollPane();
- scrollpane.setViewportView(table);
+ scrollpane.setViewportView(componentSelectionTable);
panel.add(scrollpane, "grow, width :500:, height :300:, spanx, wrap para");
public ComponentPreset getSelectedComponentPreset() {
if (!okClicked)
return null;
- //return selectionPanel.getSelectedMotor();
- return null;
+ int row = componentSelectionTable.getSelectedRow();
+ return presets.get(row);
}
public void close(boolean ok) {
okClicked = ok;
this.setVisible(false);
-
- ComponentPreset preset = getSelectedComponentPreset();
- if (okClicked && preset != null) {
- //selectionPanel.selectedMotor(selected);
- }
}
}
private String digest = "";
public enum Type {
- BODY_TUBE,
- NOSE_CONE;
+ BODY_TUBE( new TypedKey<?>[] {
+ ComponentPreset.MANUFACTURER,
+ ComponentPreset.PARTNO,
+ ComponentPreset.OUTER_DIAMETER,
+ ComponentPreset.INNER_DIAMETER,
+ ComponentPreset.LENGTH} ),
+
+ NOSE_CONE( new TypedKey<?>[] {
+ ComponentPreset.MANUFACTURER,
+ ComponentPreset.PARTNO,
+ ComponentPreset.OUTER_DIAMETER,
+ ComponentPreset.INNER_DIAMETER,
+ ComponentPreset.LENGTH} ) ;
Type[] compatibleTypes;
+ TypedKey<?>[] displayedColumns;
- Type () {
+ Type( TypedKey<?>[] displayedColumns) {
compatibleTypes = new Type[1];
compatibleTypes[0] = this;
+ this.displayedColumns = displayedColumns;
}
- Type( Type ... t ) {
+ Type( Type[] t, TypedKey<?>[] displayedColumns ) {
compatibleTypes = new Type[t.length+1];
compatibleTypes[0] = this;
for( int i=0; i<t.length; i++ ) {
compatibleTypes[i+1] = t[i];
}
+
+ this.displayedColumns = displayedColumns;
}
public Type[] getCompatibleTypes() {
return compatibleTypes;
}
+ public TypedKey<?>[] getDisplayedColumns() {
+ return displayedColumns;
+ }
+
}
public final static TypedKey<Manufacturer> MANUFACTURER = new TypedKey<Manufacturer>("Manufacturer", Manufacturer.class);