1 package net.sf.openrocket.gui.dialogs.preset;
4 import java.awt.Dialog;
5 import java.awt.Window;
6 import java.awt.event.ActionEvent;
7 import java.awt.event.ActionListener;
10 import javax.swing.JButton;
11 import javax.swing.JDialog;
12 import javax.swing.JPanel;
13 import javax.swing.JScrollPane;
14 import javax.swing.JTable;
15 import javax.swing.ListSelectionModel;
16 import javax.swing.table.TableModel;
17 import javax.swing.table.TableRowSorter;
19 import net.miginfocom.swing.MigLayout;
20 import net.sf.openrocket.gui.adaptors.Column;
21 import net.sf.openrocket.gui.adaptors.ColumnTableModel;
22 import net.sf.openrocket.gui.util.GUIUtil;
23 import net.sf.openrocket.l10n.Translator;
24 import net.sf.openrocket.preset.ComponentPreset;
25 import net.sf.openrocket.preset.TypedKey;
26 import net.sf.openrocket.rocketcomponent.RocketComponent;
27 import net.sf.openrocket.startup.Application;
28 import net.sf.openrocket.unit.Value;
30 public class ComponentPresetChooserDialog extends JDialog {
32 private static final Translator trans = Application.getTranslator();
34 // private final ThrustCurveMotorSelectionPanel selectionPanel;
36 private final RocketComponent component;
37 private final List<ComponentPreset> presets;
39 private boolean okClicked = false;
42 public ComponentPresetChooserDialog(Window owner, RocketComponent component, final TypedKey<?>... columnKeys) {
43 super(owner, trans.get("title"), Dialog.ModalityType.APPLICATION_MODAL);
45 this.component = component;
47 presets = Application.getComponentPresetDao().listAll();
49 JPanel panel = new JPanel(new MigLayout("fill"));
51 final Column[] columns = new Column[columnKeys.length+1];
53 columns[0] = new Column(trans.get("table.column.Favorite") ) {
55 public Object getValueAt(int row) {
56 return Boolean.valueOf(ComponentPresetChooserDialog.this.presets.get(row).isFavorite());
60 public void setValueAt(int row, Object value) {
61 Application.getComponentPresetDao().setFavorite(ComponentPresetChooserDialog.this.presets.get(row), (Boolean) value);
65 public Class<?> getColumnClass() {
70 for (int i = 0; i < columnKeys.length; i++) {
71 final TypedKey<?> key = columnKeys[i];
72 columns[i+1] = new Column(trans.get("table.column." + columnKeys[i].getName())) {
74 public Object getValueAt(int row) {
75 if (key.getType() == Double.class && key.getUnitGroup() != null) {
76 double v = (Double) ComponentPresetChooserDialog.this.presets.get(row).get(key);
77 return new Value( v, key.getUnitGroup() );
79 return ComponentPresetChooserDialog.this.presets.get(row);
85 ColumnTableModel tableModel = new ColumnTableModel(columns) {
87 public int getRowCount() {
88 return ComponentPresetChooserDialog.this.presets.size();
92 public boolean isCellEditable(int rowIndex, int columnIndex) {
93 return columnIndex == 0;
98 final JTable table = new JTable( tableModel );
100 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
102 final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tableModel);
103 // FIXME we might need some custom sorters.
104 /*for (int i = 0; i < columnKeys.length; i++) {
105 TypedKey<?> column = columnKeys[i];
106 sorter.setComparator(i, column.getComparator());
108 table.setRowSorter(sorter);
110 JScrollPane scrollpane = new JScrollPane();
111 scrollpane.setViewportView(table);
112 panel.add(scrollpane, "grow, width :500:, height :300:, spanx, wrap para");
115 // OK / Cancel buttons
116 JButton okButton = new JButton(trans.get("dlg.but.ok"));
117 okButton.addActionListener(new ActionListener() {
119 public void actionPerformed(ActionEvent e) {
123 panel.add(okButton, "tag ok, spanx, split");
126 JButton cancelButton = new JButton(trans.get("dlg.but.cancel"));
127 cancelButton.addActionListener(new ActionListener() {
129 public void actionPerformed(ActionEvent e) {
133 panel.add(cancelButton, "tag cancel");
139 this.setLocationByPlatform(true);
140 GUIUtil.setDisposableDialogOptions(this, okButton);
142 //JComponent focus = selectionPanel.getDefaultFocus();
143 //if (focus != null) {
144 // focus.grabFocus();
147 // Set the closeable dialog after all initialization
148 //selectionPanel.setCloseableDialog(this);
152 * Return the motor selected by this chooser dialog, or <code>null</code> if the selection has been aborted.
154 * @return the selected motor, or <code>null</code> if no motor has been selected or the selection was canceled.
156 public ComponentPreset getSelectedComponentPreset() {
159 //return selectionPanel.getSelectedMotor();
163 public void close(boolean ok) {
165 this.setVisible(false);
167 ComponentPreset preset = getSelectedComponentPreset();
168 if (okClicked && preset != null) {
169 //selectionPanel.selectedMotor(selected);