Moved the ComponentPresetChooserDialog from the BodyTubeConfig temporary button to the PresetModel drop down.

This commit is contained in:
Kevin Ruland 2012-04-12 02:35:41 +00:00
parent a64c9e70a6
commit f92034db56
4 changed files with 51 additions and 58 deletions

View File

@ -1,12 +1,15 @@
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;
@ -20,16 +23,17 @@ public class PresetModel extends AbstractListModel implements ComboBoxModel, Com
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();
@ -44,7 +48,7 @@ public class PresetModel extends AbstractListModel implements ComboBoxModel, Com
@Override
public Object getElementAt(int index) {
if (index == 0) {
return SELECT_PRESET;
return NONE_SELECTED;
}
if (index == getSize() - 1) {
return SELECT_DATABASE;
@ -58,10 +62,17 @@ public class PresetModel extends AbstractListModel implements ComboBoxModel, Com
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);
@ -72,7 +83,7 @@ public class PresetModel extends AbstractListModel implements ComboBoxModel, Com
public Object getSelectedItem() {
ComponentPreset preset = component.getPresetComponent();
if (preset == null) {
return SELECT_PRESET;
return NONE_SELECTED;
} else {
return preset;
}

View File

@ -1,16 +1,11 @@
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;
@ -21,10 +16,8 @@ import net.sf.openrocket.gui.adaptors.DoubleModel;
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;
@ -48,34 +41,11 @@ public class BodyTubeConfig extends RocketComponentConfig {
//// 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")));

View File

@ -31,18 +31,16 @@ public class ComponentPresetChooserDialog extends JDialog {
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();
@ -95,9 +93,9 @@ public class ComponentPresetChooserDialog extends JDialog {
};
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.
@ -105,10 +103,10 @@ public class ComponentPresetChooserDialog extends JDialog {
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");
@ -156,18 +154,13 @@ public class ComponentPresetChooserDialog extends JDialog {
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);
}
}
}

View File

@ -36,29 +36,48 @@ public class ComponentPreset implements Comparable<ComponentPreset> {
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);