bc1f8066c50b86c5ebc44e4a8f4e80ac523700f9
[debian/openrocket] / core / src / net / sf / openrocket / gui / customexpression / OperatorSelector.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.l10n.Translator;
17 import net.sf.openrocket.logging.LogHelper;
18 import net.sf.openrocket.startup.Application;
19
20 public class OperatorSelector extends JDialog {
21         
22         private static final Translator trans = Application.getTranslator();
23         private static final LogHelper log = Application.getLogger();
24
25         private final Window parentWindow;
26         
27         public OperatorSelector(Window parent, final ExpressionBuilderDialog parentBuilder){
28                 
29                 super(parent, trans.get("CustomOperatorSelector.title"), JDialog.ModalityType.DOCUMENT_MODAL);
30                 
31                 this.parentWindow = parent;
32                 
33                 final JButton insertButton = new JButton(trans.get("ExpressionBuilderDialog.InsertOperator"));
34                 
35                 JPanel mainPanel = new JPanel(new MigLayout());
36                 
37                 //// Table of variables and model
38                 final OperatorTableModel tableModel = new OperatorTableModel();
39                 final JTable table = new JTable(tableModel);
40                 
41                 table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
42                 int width = table.getColumnModel().getTotalColumnWidth();
43                 table.getColumnModel().getColumn(0).setPreferredWidth( (int) (.2 * width));
44                 table.getColumnModel().getColumn(1).setPreferredWidth( (int) (.8 * width));
45                 
46                 JScrollPane scrollPane = new JScrollPane(table);
47                 table.setFillsViewportHeight(true);
48                 table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
49                                 @Override
50                                 public void valueChanged(ListSelectionEvent e){
51                                         if (table.getSelectedRowCount() == 1){
52                                                 insertButton.setEnabled(true);
53                                         }
54                                         else {
55                                                 insertButton.setEnabled(false);
56                                         }
57                                 }
58                         });
59                 
60                 mainPanel.add(scrollPane, "wrap");
61                 
62                 //// Cancel button
63                 final JButton cancelButton = new JButton(trans.get("dlg.but.cancel"));
64                 cancelButton.addActionListener(new ActionListener() {
65                         @Override
66                         public void actionPerformed(ActionEvent e) {
67                                 OperatorSelector.this.dispose();
68                         }
69                 });
70                 mainPanel.add(cancelButton, "right, width :100:200, split 2");
71                 
72                 //// Insert button
73                 insertButton.addActionListener(new ActionListener() {
74                         @Override
75                         public void actionPerformed(ActionEvent e) {
76                                 int row = table.getSelectedRow();
77                                 String str = tableModel.getOperatorAt(row);
78                                 parentBuilder.pasteIntoExpression(str);
79                                 OperatorSelector.this.dispose();
80                         }
81                 });
82                 insertButton.setEnabled(false); // disabled by default, only enable when a variable selected
83                 mainPanel.add(insertButton, "right, width :100:200, wrap");
84
85                 this.add(mainPanel);
86                 this.validate();
87                 this.pack();
88                 this.setLocationByPlatform(true);       
89         }
90 }