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 JTable componentSelectionTable;
35 private final List<ComponentPreset> presets;
37 private boolean okClicked = false;
40 public ComponentPresetChooserDialog(Window owner, RocketComponent component) {
41 super(owner, trans.get("title"), Dialog.ModalityType.APPLICATION_MODAL);
43 final TypedKey<?>[] columnKeys = component.getPresetType().getDisplayedColumns();
45 presets = Application.getComponentPresetDao().listAll();
47 JPanel panel = new JPanel(new MigLayout("fill"));
49 final Column[] columns = new Column[columnKeys.length+1];
51 columns[0] = new Column(trans.get("table.column.Favorite") ) {
53 public Object getValueAt(int row) {
54 return Boolean.valueOf(ComponentPresetChooserDialog.this.presets.get(row).isFavorite());
58 public void setValueAt(int row, Object value) {
59 Application.getComponentPresetDao().setFavorite(ComponentPresetChooserDialog.this.presets.get(row), (Boolean) value);
63 public Class<?> getColumnClass() {
68 for (int i = 0; i < columnKeys.length; i++) {
69 final TypedKey<?> key = columnKeys[i];
70 columns[i+1] = new Column(trans.get("table.column." + columnKeys[i].getName())) {
72 public Object getValueAt(int row) {
73 if (key.getType() == Double.class && key.getUnitGroup() != null) {
74 double v = (Double) ComponentPresetChooserDialog.this.presets.get(row).get(key);
75 return new Value( v, key.getUnitGroup() );
77 return ComponentPresetChooserDialog.this.presets.get(row).get(key);
83 ColumnTableModel tableModel = new ColumnTableModel(columns) {
85 public int getRowCount() {
86 return ComponentPresetChooserDialog.this.presets.size();
90 public boolean isCellEditable(int rowIndex, int columnIndex) {
91 return columnIndex == 0;
96 componentSelectionTable = new JTable( tableModel );
98 componentSelectionTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
100 final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tableModel);
101 // FIXME we might need some custom sorters.
102 /*for (int i = 0; i < columnKeys.length; i++) {
103 TypedKey<?> column = columnKeys[i];
104 sorter.setComparator(i, column.getComparator());
106 componentSelectionTable.setRowSorter(sorter);
108 JScrollPane scrollpane = new JScrollPane();
109 scrollpane.setViewportView(componentSelectionTable);
110 panel.add(scrollpane, "grow, width :500:, height :300:, spanx, wrap para");
113 // OK / Cancel buttons
114 JButton okButton = new JButton(trans.get("dlg.but.ok"));
115 okButton.addActionListener(new ActionListener() {
117 public void actionPerformed(ActionEvent e) {
121 panel.add(okButton, "tag ok, spanx, split");
124 JButton cancelButton = new JButton(trans.get("dlg.but.cancel"));
125 cancelButton.addActionListener(new ActionListener() {
127 public void actionPerformed(ActionEvent e) {
131 panel.add(cancelButton, "tag cancel");
137 this.setLocationByPlatform(true);
138 GUIUtil.setDisposableDialogOptions(this, okButton);
140 //JComponent focus = selectionPanel.getDefaultFocus();
141 //if (focus != null) {
142 // focus.grabFocus();
145 // Set the closeable dialog after all initialization
146 //selectionPanel.setCloseableDialog(this);
150 * Return the motor selected by this chooser dialog, or <code>null</code> if the selection has been aborted.
152 * @return the selected motor, or <code>null</code> if no motor has been selected or the selection was canceled.
154 public ComponentPreset getSelectedComponentPreset() {
157 int row = componentSelectionTable.getSelectedRow();
158 return presets.get(row);
161 public void close(boolean ok) {
163 this.setVisible(false);