Make ComponentPresetDao and interface with implementation in ComponentPresetDatabase...
[debian/openrocket] / core / src / net / sf / openrocket / gui / dialogs / preset / ComponentPresetChooserDialog.java
1 package net.sf.openrocket.gui.dialogs.preset;
2
3
4 import java.awt.Dialog;
5 import java.awt.Window;
6 import java.awt.event.ActionEvent;
7 import java.awt.event.ActionListener;
8 import java.util.List;
9
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;
18
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;
29
30 public class ComponentPresetChooserDialog extends JDialog {
31         
32         private static final Translator trans = Application.getTranslator();
33         
34         //      private final ThrustCurveMotorSelectionPanel selectionPanel;
35         
36         private final RocketComponent component;
37         private final List<ComponentPreset> presets;
38         
39         private boolean okClicked = false;
40         
41         
42         public ComponentPresetChooserDialog(Window owner, RocketComponent component, final TypedKey<?>... columnKeys) {
43                 super(owner, trans.get("title"), Dialog.ModalityType.APPLICATION_MODAL);
44                 
45                 this.component = component;
46                 
47                 presets = Application.getComponentPresetDao().listAll();
48                 
49                 JPanel panel = new JPanel(new MigLayout("fill"));
50                 
51                 final Column[] columns = new Column[columnKeys.length+1];
52                 
53                 columns[0] = new Column(trans.get("table.column.Favorite") ) {
54                         @Override
55                         public Object getValueAt(int row) {
56                                 return Boolean.valueOf(ComponentPresetChooserDialog.this.presets.get(row).isFavorite());
57                         }
58                         
59                         @Override
60                         public void setValueAt(int row, Object value) {
61                                 Application.getComponentPresetDao().setFavorite(ComponentPresetChooserDialog.this.presets.get(row), (Boolean) value);
62                         }
63
64                         @Override
65                         public Class<?> getColumnClass() {
66                                 return Boolean.class;
67                         }
68                         
69                 };
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())) {
73                                 @Override
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() );
78                                         } else {
79                                                 return ComponentPresetChooserDialog.this.presets.get(row).get(key);
80                                         }
81                                 }
82                         };
83                 }
84                 
85                 ColumnTableModel tableModel = new ColumnTableModel(columns) {
86                         @Override
87                         public int getRowCount() {
88                                 return ComponentPresetChooserDialog.this.presets.size();
89                         }
90
91                         @Override
92                         public boolean isCellEditable(int rowIndex, int columnIndex) {
93                                 return columnIndex == 0;
94                         }
95                         
96                 };
97                 
98                 final JTable table = new JTable( tableModel );
99                 
100                 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
101
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());
107                 }*/
108                 table.setRowSorter(sorter);
109
110                 JScrollPane scrollpane = new JScrollPane();
111                 scrollpane.setViewportView(table);
112                 panel.add(scrollpane, "grow, width :500:, height :300:, spanx, wrap para");
113
114                 
115                 // OK / Cancel buttons
116                 JButton okButton = new JButton(trans.get("dlg.but.ok"));
117                 okButton.addActionListener(new ActionListener() {
118                         @Override
119                         public void actionPerformed(ActionEvent e) {
120                                 close(true);
121                         }
122                 });
123                 panel.add(okButton, "tag ok, spanx, split");
124                 
125                 //// Cancel button
126                 JButton cancelButton = new JButton(trans.get("dlg.but.cancel"));
127                 cancelButton.addActionListener(new ActionListener() {
128                         @Override
129                         public void actionPerformed(ActionEvent e) {
130                                 close(false);
131                         }
132                 });
133                 panel.add(cancelButton, "tag cancel");
134                 
135                 this.add(panel);
136                 
137                 this.setModal(true);
138                 this.pack();
139                 this.setLocationByPlatform(true);
140                 GUIUtil.setDisposableDialogOptions(this, okButton);
141                 
142                 //JComponent focus = selectionPanel.getDefaultFocus();
143                 //if (focus != null) {
144                 //      focus.grabFocus();
145                 //}
146                 
147                 // Set the closeable dialog after all initialization
148                 //selectionPanel.setCloseableDialog(this);
149         }
150         
151         /**
152          * Return the motor selected by this chooser dialog, or <code>null</code> if the selection has been aborted.
153          * 
154          * @return      the selected motor, or <code>null</code> if no motor has been selected or the selection was canceled.
155          */
156         public ComponentPreset getSelectedComponentPreset() {
157                 if (!okClicked)
158                         return null;
159                 //return selectionPanel.getSelectedMotor();
160                 return null;
161         }
162         
163         public void close(boolean ok) {
164                 okClicked = ok;
165                 this.setVisible(false);
166                 
167                 ComponentPreset preset = getSelectedComponentPreset();
168                 if (okClicked && preset != null) {
169                         //selectionPanel.selectedMotor(selected);
170                 }
171         }
172         
173 }