1 package net.sf.openrocket.gui.customexpression;
4 import java.awt.Window;
5 import java.awt.event.ActionEvent;
6 import java.awt.event.ActionListener;
7 import java.awt.event.KeyEvent;
8 import java.awt.event.MouseEvent;
9 import java.awt.event.MouseListener;
10 import java.awt.event.MouseMotionAdapter;
12 import javax.swing.AbstractAction;
13 import javax.swing.ActionMap;
14 import javax.swing.InputMap;
15 import javax.swing.JButton;
16 import javax.swing.JComponent;
17 import javax.swing.JDialog;
18 import javax.swing.JPanel;
19 import javax.swing.JScrollPane;
20 import javax.swing.JTable;
21 import javax.swing.KeyStroke;
22 import javax.swing.event.ListSelectionEvent;
23 import javax.swing.event.ListSelectionListener;
25 import net.miginfocom.swing.MigLayout;
26 import net.sf.openrocket.l10n.Translator;
27 import net.sf.openrocket.logging.LogHelper;
28 import net.sf.openrocket.startup.Application;
29 import net.sf.openrocket.util.TextUtil;
31 public class OperatorSelector extends JDialog {
33 private static final Translator trans = Application.getTranslator();
34 private static final LogHelper log = Application.getLogger();
36 private final Window parentWindow;
38 private final JTable table;
39 private final OperatorTableModel tableModel;
40 private final ExpressionBuilderDialog parentBuilder;
42 public OperatorSelector(Window parent, final ExpressionBuilderDialog parentBuilder){
44 super(parent, trans.get("CustomOperatorSelector.title"), JDialog.ModalityType.DOCUMENT_MODAL);
46 this.parentWindow = parent;
47 this.parentBuilder = parentBuilder;
49 final JButton insertButton = new JButton(trans.get("ExpressionBuilderDialog.InsertOperator"));
51 JPanel mainPanel = new JPanel(new MigLayout());
53 //// Table of variables and model
54 tableModel = new OperatorTableModel();
55 table = new JTable(tableModel);
57 table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
58 int width = table.getColumnModel().getTotalColumnWidth();
59 table.getColumnModel().getColumn(0).setPreferredWidth( (int) (.1 * width));
60 table.getColumnModel().getColumn(1).setPreferredWidth( (int) (.9 * width));
61 table.setAutoCreateRowSorter(true);
63 table.addMouseMotionListener(new MouseMotionAdapter(){
65 public void mouseMoved(MouseEvent e){
66 Point p = e.getPoint();
67 int row = table.rowAtPoint(p);
68 int col = table.columnAtPoint(p);
70 String description = String.valueOf(table.getValueAt(row, 1));
71 description = TextUtil.wrap(description, 60);
72 table.setToolTipText(description);
74 table.setToolTipText(null);
79 table.addMouseListener(new MouseListener(){
81 public void mouseClicked(MouseEvent e){
82 if (e.getClickCount() == 2){
83 log.debug("Selected operator by double clicking.");
88 public void mouseEntered(MouseEvent e) {}
90 public void mouseExited(MouseEvent e) {}
92 public void mousePressed(MouseEvent e) {}
94 public void mouseReleased(MouseEvent e) {}
97 InputMap inputMap = table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
98 ActionMap actionMap = table.getActionMap();
99 KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
100 inputMap.put(enter, "select");
101 actionMap.put("select", new AbstractAction(){
103 public void actionPerformed(ActionEvent arg0) {
104 log.debug("Selected operator by enter key");
109 JScrollPane scrollPane = new JScrollPane(table);
110 table.setFillsViewportHeight(true);
111 table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
113 public void valueChanged(ListSelectionEvent e){
114 if (table.getSelectedRowCount() == 1){
115 insertButton.setEnabled(true);
118 insertButton.setEnabled(false);
123 mainPanel.add(scrollPane, "wrap, push, grow");
126 final JButton cancelButton = new JButton(trans.get("dlg.but.cancel"));
127 cancelButton.addActionListener(new ActionListener() {
129 public void actionPerformed(ActionEvent e) {
130 OperatorSelector.this.dispose();
133 mainPanel.add(cancelButton, "right, width :100:200, split 2");
136 insertButton.addActionListener(new ActionListener() {
138 public void actionPerformed(ActionEvent e) {
142 insertButton.setEnabled(false); // disabled by default, only enable when a variable selected
143 mainPanel.add(insertButton, "right, width :100:200, wrap");
148 this.setLocationByPlatform(true);
151 private void selectOperator(){
152 int row = table.getSelectedRow();
153 String str = tableModel.getOperatorAt(row);
154 parentBuilder.pasteIntoExpression(str);
155 OperatorSelector.this.dispose();