Changeset 4909 in josm


Ignore:
Timestamp:
2012-02-09T06:24:53+01:00 (8 years ago)
Author:
akks
Message:

fix #6239: Search filter for keyboard shortcuts list

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/preferences/PrefJPanel.java

    r4897 r4909  
    22package org.openstreetmap.josm.gui.preferences;
    33
     4import java.awt.Dimension;
     5import java.awt.GridBagConstraints;
     6import java.awt.GridBagLayout;
     7import java.awt.Insets;
    48import static org.openstreetmap.josm.tools.I18n.tr;
    59
     
    913import java.util.Map;
    1014
     15import java.util.regex.PatternSyntaxException;
    1116import javax.swing.AbstractAction;
     17import javax.swing.BorderFactory;
    1218import javax.swing.JEditorPane;
     19import javax.swing.JLabel;
     20import javax.swing.JPanel;
    1321import javax.swing.JScrollPane;
     22import javax.swing.JTextField;
    1423import javax.swing.ListSelectionModel;
     24import javax.swing.RowFilter;
     25import javax.swing.event.DocumentEvent;
     26import javax.swing.event.DocumentListener;
    1527import javax.swing.event.ListSelectionEvent;
    1628import javax.swing.event.ListSelectionListener;
    1729import javax.swing.table.TableModel;
    1830
     31import javax.swing.table.TableRowSorter;
    1932import org.openstreetmap.josm.Main;
     33import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
    2034import org.openstreetmap.josm.tools.Shortcut;
    2135
     
    184198        shortcutTab.setLayout(new javax.swing.BoxLayout(shortcutTab, javax.swing.BoxLayout.Y_AXIS));
    185199
     200        shortcutTab.add(buildFilterPanel());
    186201        listPane.setLayout(new java.awt.GridLayout());
    187202
     
    195210
    196211        listPane.add(listScrollPane);
    197 
     212       
    198213        shortcutTab.add(listPane);
    199214
     
    358373
    359374        add(prefTabPane);
     375    }
     376
     377    private JPanel buildFilterPanel() {
     378        // copied from PluginPreference
     379        JPanel pnl  = new JPanel(new GridBagLayout());
     380        pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
     381        GridBagConstraints gc = new GridBagConstraints();
     382
     383        gc.anchor = GridBagConstraints.NORTHWEST;
     384        gc.fill = GridBagConstraints.HORIZONTAL;
     385        gc.weightx = 0.0;
     386        gc.insets = new Insets(0,0,0,5);
     387        pnl.add(new JLabel(tr("Search:")), gc);
     388
     389        gc.gridx = 1;
     390        gc.weightx = 1.0;
     391        pnl.add(filterField = new JTextField(), gc);
     392        filterField.setToolTipText(tr("Enter a search expression"));
     393        SelectAllOnFocusGainedDecorator.decorate(filterField);
     394        filterField.getDocument().addDocumentListener(new FilterFieldAdapter());
     395        pnl.setMaximumSize(new Dimension(300,10));
     396        return pnl;
    360397    }
    361398
     
    551588    private javax.swing.JLabel tfKeyLabel;
    552589    private javax.swing.JPanel infoTab;
     590    private JTextField filterField;
     591   
     592     class FilterFieldAdapter implements DocumentListener {
     593        public void filter() {
     594            String expr = filterField.getText().trim();
     595            if (expr.length()==0) { expr=null; }
     596            try {
     597                final TableRowSorter<TableModel> sorter =
     598                    ((TableRowSorter<TableModel> )shortcutTable.getRowSorter());
     599                if (expr==null) sorter.setRowFilter(null);
     600                    else  sorter.setRowFilter(  RowFilter.regexFilter(expr) );
     601            }
     602            catch (PatternSyntaxException ex) { }
     603            catch (ClassCastException ex2) { /* eliminate warning */  }
     604        }
     605
     606        public void changedUpdate(DocumentEvent arg0) { filter(); }
     607        public void insertUpdate(DocumentEvent arg0) {  filter(); }
     608        public void removeUpdate(DocumentEvent arg0) { filter(); }
     609    }
     610   
    553611}
Note: See TracChangeset for help on using the changeset viewer.