Changeset 15116 in josm


Ignore:
Timestamp:
2019-05-25T22:32:11+02:00 (5 months ago)
Author:
Don-vip
Message:

fix #16301 - add filter for default imagery entries

Location:
trunk/src/org/openstreetmap/josm/gui
Files:
1 added
3 edited

Legend:

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

    r15115 r15116  
    5959import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
    6060import org.openstreetmap.josm.gui.util.GuiHelper;
     61import org.openstreetmap.josm.gui.widgets.FilterField;
    6162import org.openstreetmap.josm.gui.widgets.HtmlPanel;
    6263import org.openstreetmap.josm.gui.widgets.JosmEditorPane;
     
    7879    /** The table of default providers **/
    7980    public final JTable defaultTable;
     81    /** The filter of default providers **/
     82    private final FilterField defaultFilter;
    8083    /** The selection listener synchronizing map display with table of default providers **/
    8184    private final transient DefListSelectionListener defaultTableListener;
     
    159162            JLabel label = (JLabel) super.getTableCellRendererComponent(
    160163                    table, mapper.apply(obj), isSelected, hasFocus, row, column);
    161             GuiHelper.setBackgroundReadable(label, UIManager.getColor("Table.background"));
     164            GuiHelper.setBackgroundReadable(label,
     165                    isSelected ? UIManager.getColor("Table.selectionBackground") : UIManager.getColor("Table.background"));
    162166            if (obj != null) {
    163167                label.setToolTipText(tooltip.apply(obj));
     
    225229        defaultModel = new ImageryDefaultLayerTableModel();
    226230        defaultTable = new JTable(defaultModel);
     231        defaultTable.setAutoCreateRowSorter(true);
     232        defaultFilter = new FilterField().filter(defaultTable, defaultModel);
    227233
    228234        defaultModel.addTableModelListener(e -> activeTable.repaint());
     
    251257
    252258        // Add default item list
     259        JPanel defaultPane = new JPanel(new GridBagLayout());
    253260        JScrollPane scrolldef = new JScrollPane(defaultTable);
    254261        scrolldef.setPreferredSize(new Dimension(200, 200));
    255         add(scrolldef, GBC.std().insets(0, 5, 0, 0).fill(GridBagConstraints.BOTH).weight(1.0, 0.6).insets(5, 0, 0, 0));
     262        defaultPane.add(defaultFilter, GBC.eol().insets(0, 0, 0, 0).fill(GridBagConstraints.HORIZONTAL));
     263        defaultPane.add(scrolldef, GBC.eol().insets(0, 0, 0, 0).fill(GridBagConstraints.BOTH));
     264        add(defaultPane, GBC.std().fill(GridBagConstraints.BOTH).weight(1.0, 0.6).insets(5, 0, 0, 0));
    256265
    257266        // Add default item map
     
    268277        defaultMap.setZoomControlsVisible(false);
    269278        defaultMap.setMinimumSize(new Dimension(100, 200));
    270         add(defaultMap, GBC.std().insets(5, 5, 0, 0).fill(GridBagConstraints.BOTH).weight(0.33, 0.6).insets(5, 0, 0, 0));
     279        add(defaultMap, GBC.std().fill(GridBagConstraints.BOTH).weight(0.33, 0.6).insets(5, 0, 0, 0));
    271280
    272281        defaultTableListener = new DefListSelectionListener();
     
    341350                // Only process complete (final) selection events
    342351                for (int i = e.getFirstIndex(); i <= e.getLastIndex(); i++) {
    343                     updateBoundsAndShapes(i);
     352                    updateBoundsAndShapes(defaultTable.convertRowIndexToModel(i));
    344353                }
    345354                // If needed, adjust map to show all map rectangles and polygons
     
    351360        }
    352361
     362        /**
     363         * update bounds and shapes for a new entry
     364         * @param i model index
     365         */
    353366        private void updateBoundsAndShapes(int i) {
    354367            ImageryBounds bounds = defaultModel.getRow(i).getBounds();
    355368            if (bounds != null) {
     369                int viewIndex = defaultTable.convertRowIndexToView(i);
    356370                List<Shape> shapes = bounds.getShapes();
    357371                if (shapes != null && !shapes.isEmpty()) {
    358                     if (defaultTable.getSelectionModel().isSelectedIndex(i)) {
     372                    if (defaultTable.getSelectionModel().isSelectedIndex(viewIndex)) {
    359373                        if (!mapPolygons.containsKey(i)) {
    360374                            List<MapPolygon> list = new ArrayList<>();
     
    376390                    // Only display bounds when no polygons (shapes) are defined for this provider
    377391                } else {
    378                     if (defaultTable.getSelectionModel().isSelectedIndex(i)) {
     392                    if (defaultTable.getSelectionModel().isSelectedIndex(viewIndex)) {
    379393                        if (!mapRectangles.containsKey(i)) {
    380394                            // Add new map rectangle
  • trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java

    r14153 r15116  
    4040import javax.swing.SwingUtilities;
    4141import javax.swing.UIManager;
    42 import javax.swing.event.DocumentEvent;
    43 import javax.swing.event.DocumentListener;
    4442
    4543import org.openstreetmap.josm.actions.ExpertToggleAction;
     
    5654import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane.PreferencePanel;
    5755import org.openstreetmap.josm.gui.util.GuiHelper;
     56import org.openstreetmap.josm.gui.widgets.FilterField;
    5857import org.openstreetmap.josm.gui.widgets.JosmTextField;
    59 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
    6058import org.openstreetmap.josm.plugins.PluginDownloadTask;
    6159import org.openstreetmap.josm.plugins.PluginInformation;
     
    192190        gc.gridx = 1;
    193191        gc.weightx = 1.0;
    194         tfFilter = new JosmTextField();
     192        tfFilter = new FilterField().filter(expr -> {
     193            model.filterDisplayedPlugins(expr);
     194            pnlPluginPreferences.refreshView();
     195        });
    195196        pnl.add(tfFilter, gc);
    196         tfFilter.setToolTipText(tr("Enter a search expression"));
    197         SelectAllOnFocusGainedDecorator.decorate(tfFilter);
    198         tfFilter.getDocument().addDocumentListener(new SearchFieldAdapter());
    199197        return pnl;
    200198    }
     
    565563    }
    566564
    567     /**
    568      * Applies the current filter condition in the filter text field to the model.
    569      */
    570     class SearchFieldAdapter implements DocumentListener {
    571         private void filter() {
    572             String expr = tfFilter.getText().trim();
    573             if (expr.isEmpty()) {
    574                 expr = null;
    575             }
    576             model.filterDisplayedPlugins(expr);
    577             pnlPluginPreferences.refreshView();
    578         }
    579 
    580         @Override
    581         public void changedUpdate(DocumentEvent evt) {
    582             filter();
    583         }
    584 
    585         @Override
    586         public void insertUpdate(DocumentEvent evt) {
    587             filter();
    588         }
    589 
    590         @Override
    591         public void removeUpdate(DocumentEvent evt) {
    592             filter();
    593         }
    594     }
    595 
    596565    private static class PluginConfigurationSitesPanel extends JPanel {
    597566
  • trunk/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java

    r14012 r15116  
    1616import java.awt.im.InputContext;
    1717import java.lang.reflect.Field;
    18 import java.util.ArrayList;
    1918import java.util.LinkedHashMap;
    2019import java.util.List;
    2120import java.util.Map;
    22 import java.util.regex.PatternSyntaxException;
    2321
    2422import javax.swing.AbstractAction;
     
    3331import javax.swing.KeyStroke;
    3432import javax.swing.ListSelectionModel;
    35 import javax.swing.RowFilter;
    3633import javax.swing.SwingConstants;
    3734import javax.swing.UIManager;
    38 import javax.swing.event.DocumentEvent;
    39 import javax.swing.event.DocumentListener;
    4035import javax.swing.event.ListSelectionEvent;
    4136import javax.swing.event.ListSelectionListener;
     
    4338import javax.swing.table.DefaultTableCellRenderer;
    4439import javax.swing.table.TableColumnModel;
    45 import javax.swing.table.TableModel;
    46 import javax.swing.table.TableRowSorter;
    4740
    4841import org.openstreetmap.josm.data.preferences.NamedColorProperty;
    4942import org.openstreetmap.josm.gui.util.GuiHelper;
     43import org.openstreetmap.josm.gui.widgets.FilterField;
    5044import org.openstreetmap.josm.gui.widgets.JosmComboBox;
    51 import org.openstreetmap.josm.gui.widgets.JosmTextField;
    52 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
    5345import org.openstreetmap.josm.tools.KeyboardUtils;
    5446import org.openstreetmap.josm.tools.Logging;
     
    8981
    9082    private final JTable shortcutTable = new JTable();
    91 
    92     private final JosmTextField filterField = new JosmTextField();
     83    private final FilterField filterField;
    9384
    9485    /** Creates new form prefJPanel */
    9586    public PrefJPanel() {
    9687        this.model = new ScListModel();
     88        this.filterField = new FilterField();
    9789        initComponents();
    9890    }
     
    207199        shortcutTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    208200        shortcutTable.setAutoCreateRowSorter(true);
     201        filterField.filter(shortcutTable, model);
    209202        TableColumnModel mod = shortcutTable.getColumnModel();
    210203        mod.getColumn(0).setCellRenderer(new ShortcutTableCellRenderer(true));
     
    268261        gc.weightx = 1.0;
    269262        pnl.add(filterField, gc);
    270         filterField.setToolTipText(tr("Enter a search expression"));
    271         SelectAllOnFocusGainedDecorator.decorate(filterField);
    272         filterField.getDocument().addDocumentListener(new FilterFieldAdapter());
    273263        pnl.setMaximumSize(new Dimension(300, 10));
    274264        return pnl;
     
    372362        }
    373363    }
    374 
    375     class FilterFieldAdapter implements DocumentListener {
    376         private void filter() {
    377             String expr = filterField.getText().trim();
    378             if (expr.isEmpty()) {
    379                 expr = null;
    380             }
    381             try {
    382                 final TableRowSorter<? extends TableModel> sorter =
    383                     (TableRowSorter<? extends TableModel>) shortcutTable.getRowSorter();
    384                 if (expr == null) {
    385                     sorter.setRowFilter(null);
    386                 } else {
    387                     expr = expr.replace("+", "\\+");
    388                     // split search string on whitespace, do case-insensitive AND search
    389                     List<RowFilter<Object, Object>> andFilters = new ArrayList<>();
    390                     for (String word : expr.split("\\s+")) {
    391                         andFilters.add(RowFilter.regexFilter("(?i)" + word));
    392                     }
    393                     sorter.setRowFilter(RowFilter.andFilter(andFilters));
    394                 }
    395                 model.fireTableDataChanged();
    396             } catch (PatternSyntaxException | ClassCastException ex) {
    397                 Logging.warn(ex);
    398             }
    399         }
    400 
    401         @Override
    402         public void changedUpdate(DocumentEvent e) {
    403             filter();
    404         }
    405 
    406         @Override
    407         public void insertUpdate(DocumentEvent e) {
    408             filter();
    409         }
    410 
    411         @Override
    412         public void removeUpdate(DocumentEvent e) {
    413             filter();
    414         }
    415     }
    416364}
Note: See TracChangeset for help on using the changeset viewer.