X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=core%2Fsrc%2Fnet%2Fsf%2Fopenrocket%2Fgui%2Fcustomexpression%2FOperatorSelector.java;h=49f4865708bf2fc62cb0600ecddc1b6e8471ec74;hb=cb6cee5e14451dd9b852723a30a5fbdee404d959;hp=bc1f8066c50b86c5ebc44e4a8f4e80ac523700f9;hpb=0be17fea9df8667c018922d9eca1166254dce470;p=debian%2Fopenrocket diff --git a/core/src/net/sf/openrocket/gui/customexpression/OperatorSelector.java b/core/src/net/sf/openrocket/gui/customexpression/OperatorSelector.java index bc1f8066..49f48657 100644 --- a/core/src/net/sf/openrocket/gui/customexpression/OperatorSelector.java +++ b/core/src/net/sf/openrocket/gui/customexpression/OperatorSelector.java @@ -1,14 +1,24 @@ package net.sf.openrocket.gui.customexpression; +import java.awt.Point; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionAdapter; +import javax.swing.AbstractAction; +import javax.swing.ActionMap; +import javax.swing.InputMap; import javax.swing.JButton; +import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; +import javax.swing.KeyStroke; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; @@ -16,6 +26,7 @@ import net.miginfocom.swing.MigLayout; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.logging.LogHelper; import net.sf.openrocket.startup.Application; +import net.sf.openrocket.util.TextUtil; public class OperatorSelector extends JDialog { @@ -24,24 +35,76 @@ public class OperatorSelector extends JDialog { private final Window parentWindow; + private final JTable table; + private final OperatorTableModel tableModel; + private final ExpressionBuilderDialog parentBuilder; + public OperatorSelector(Window parent, final ExpressionBuilderDialog parentBuilder){ super(parent, trans.get("CustomOperatorSelector.title"), JDialog.ModalityType.DOCUMENT_MODAL); this.parentWindow = parent; + this.parentBuilder = parentBuilder; final JButton insertButton = new JButton(trans.get("ExpressionBuilderDialog.InsertOperator")); JPanel mainPanel = new JPanel(new MigLayout()); //// Table of variables and model - final OperatorTableModel tableModel = new OperatorTableModel(); - final JTable table = new JTable(tableModel); + tableModel = new OperatorTableModel(); + table = new JTable(tableModel); table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); int width = table.getColumnModel().getTotalColumnWidth(); - table.getColumnModel().getColumn(0).setPreferredWidth( (int) (.2 * width)); - table.getColumnModel().getColumn(1).setPreferredWidth( (int) (.8 * width)); + table.getColumnModel().getColumn(0).setPreferredWidth( (int) (.1 * width)); + table.getColumnModel().getColumn(1).setPreferredWidth( (int) (.9 * width)); + table.setAutoCreateRowSorter(true); + + table.addMouseMotionListener(new MouseMotionAdapter(){ + @Override + public void mouseMoved(MouseEvent e){ + Point p = e.getPoint(); + int row = table.rowAtPoint(p); + int col = table.columnAtPoint(p); + if (col == 1){ + String description = String.valueOf(table.getValueAt(row, 1)); + description = TextUtil.wrap(description, 60); + table.setToolTipText(description); + } else { + table.setToolTipText(null); + } + } + }); + + table.addMouseListener(new MouseListener(){ + @Override + public void mouseClicked(MouseEvent e){ + if (e.getClickCount() == 2){ + log.debug("Selected operator by double clicking."); + selectOperator(); + } + } + @Override + public void mouseEntered(MouseEvent e) {} + @Override + public void mouseExited(MouseEvent e) {} + @Override + public void mousePressed(MouseEvent e) {} + @Override + public void mouseReleased(MouseEvent e) {} + } ); + + InputMap inputMap = table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + ActionMap actionMap = table.getActionMap(); + KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); + inputMap.put(enter, "select"); + actionMap.put("select", new AbstractAction(){ + @Override + public void actionPerformed(ActionEvent arg0) { + log.debug("Selected operator by enter key"); + selectOperator(); + } + }); JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true); @@ -57,7 +120,7 @@ public class OperatorSelector extends JDialog { } }); - mainPanel.add(scrollPane, "wrap"); + mainPanel.add(scrollPane, "wrap, push, grow"); //// Cancel button final JButton cancelButton = new JButton(trans.get("dlg.but.cancel")); @@ -73,10 +136,7 @@ public class OperatorSelector extends JDialog { insertButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - int row = table.getSelectedRow(); - String str = tableModel.getOperatorAt(row); - parentBuilder.pasteIntoExpression(str); - OperatorSelector.this.dispose(); + selectOperator(); } }); insertButton.setEnabled(false); // disabled by default, only enable when a variable selected @@ -87,4 +147,11 @@ public class OperatorSelector extends JDialog { this.pack(); this.setLocationByPlatform(true); } + + private void selectOperator(){ + int row = table.getSelectedRow(); + String str = tableModel.getOperatorAt(row); + parentBuilder.pasteIntoExpression(str); + OperatorSelector.this.dispose(); + } }