Changeset 4909 in josm for trunk/src/org/openstreetmap/josm


Ignore:
Timestamp:
09.02.2012 06:24:53 (4 months 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.