d432a18cf2c30994764ab2bcc318b3dec0c4ee16
[debian/openrocket] / core / src / net / sf / openrocket / gui / customexpression / VariableSelector.java
1 package net.sf.openrocket.gui.customexpression;
2
3 import java.awt.Window;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6
7 import javax.swing.JButton;
8 import javax.swing.JDialog;
9 import javax.swing.JPanel;
10 import javax.swing.JScrollPane;
11 import javax.swing.JTable;
12 import javax.swing.event.ListSelectionEvent;
13 import javax.swing.event.ListSelectionListener;
14
15 import net.miginfocom.swing.MigLayout;
16 import net.sf.openrocket.document.Simulation;
17 import net.sf.openrocket.l10n.Translator;
18 import net.sf.openrocket.logging.LogHelper;
19 import net.sf.openrocket.startup.Application;
20
21 /**
22  * Dialog to select from available custom variables
23  * @author Richard Graham
24  *
25  */
26
27 public class VariableSelector extends JDialog {
28         
29         private static final Translator trans = Application.getTranslator();
30         private static final LogHelper log = Application.getLogger();
31
32         private final Window parentWindow;
33         private final Simulation simulation;
34         
35         public VariableSelector(Window parent, final ExpressionBuilderDialog parentBuilder, final Simulation simulation){
36                 
37                 super(parent, trans.get("CustomVariableSelector.title"), JDialog.ModalityType.DOCUMENT_MODAL);
38                 
39                 this.parentWindow = parent;
40                 this.simulation = simulation;
41                 
42                 final JButton insertButton = new JButton(trans.get("ExpressionBuilderDialog.InsertVariable"));
43                 
44                 JPanel mainPanel = new JPanel(new MigLayout());
45                 
46                 //// Table of variables and model
47                 final VariableTableModel tableModel = new VariableTableModel(simulation);
48                 final JTable table = new JTable(tableModel);
49                 
50                 table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
51                 int width = table.getColumnModel().getTotalColumnWidth();
52                 table.getColumnModel().getColumn(0).setPreferredWidth( (int) (.7 * width));
53                 table.getColumnModel().getColumn(1).setPreferredWidth( (int) (.15 * width));
54                 table.getColumnModel().getColumn(2).setPreferredWidth( (int) (.15 * width));
55                 
56                 JScrollPane scrollPane = new JScrollPane(table);
57                 table.setFillsViewportHeight(true);
58                 table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
59                                 @Override
60                                 public void valueChanged(ListSelectionEvent e){
61                                         if (table.getSelectedRowCount() == 1){
62                                                 insertButton.setEnabled(true);
63                                         }
64                                         else {
65                                                 insertButton.setEnabled(false);
66                                         }
67                                 }
68                         });
69                 
70                 mainPanel.add(scrollPane, "wrap");
71                 
72                 //// Cancel button
73                 final JButton cancelButton = new JButton(trans.get("dlg.but.cancel"));
74                 cancelButton.addActionListener(new ActionListener() {
75                         @Override
76                         public void actionPerformed(ActionEvent e) {
77                                 VariableSelector.this.dispose();
78                         }
79                 });
80                 mainPanel.add(cancelButton, "right, width :100:200, split 2");
81                 
82                 //// Insert button
83                 insertButton.addActionListener(new ActionListener() {
84                         @Override
85                         public void actionPerformed(ActionEvent e) {
86                                 int row = table.getSelectedRow();
87                                 String str = tableModel.getSymbolAt(row);
88                                 parentBuilder.pasteIntoExpression(str);
89                                 VariableSelector.this.dispose();
90                         }
91                 });
92                 insertButton.setEnabled(false); // disabled by default, only enable when a variable selected
93                 mainPanel.add(insertButton, "right, width :100:200, wrap");
94
95                 this.add(mainPanel);
96                 this.validate();
97                 this.pack();
98                 this.setLocationByPlatform(true);       
99         }
100 }