Ticket #3061: add-search-to-plugin-preferences-2.patch

File add-search-to-plugin-preferences-2.patch, 5.1 KB (added by avarab@…, 16 years ago)

An improved patch to add search to plugin preferences. Gives PluginSelection a copy of PluginPreference's txtField

  • src/org/openstreetmap/josm/plugins/PluginSelection.java

     
    3030import javax.swing.JEditorPane;
    3131import javax.swing.JOptionPane;
    3232import javax.swing.JPanel;
     33import javax.swing.JTextField;
    3334import javax.swing.UIManager;
    3435import javax.swing.event.HyperlinkEvent;
    3536import javax.swing.event.HyperlinkListener;
     
    4546    private Map<String, PluginInformation> availablePlugins;
    4647    private Map<String, PluginInformation> localPlugins;
    4748
     49    private JTextField txtFilter = null;
     50
     51    /* Get a copy of PluginPreference's txtField so we can use it for searching */
     52    public void passTxtFilter(JTextField filter) {
     53        txtFilter = filter;
     54    }
     55
    4856    public void updateDescription(JPanel pluginPanel) {
    4957        int count = PluginDownloader.downloadDescription();
    5058        if (count > 0) {
     
    188196
    189197        int row = 0;
    190198        for (final PluginInformation plugin : availablePlugins.values()) {
     199            if (txtFilter.getText() != null) {
     200                /* This is not the plugin you're looking for */
     201                final String name = plugin.name;
     202                final String desc = plugin.getLinkDescription();
     203                if (!filterNameAndDescription(txtFilter, name, desc)) {
     204                    continue;
     205                }
     206            }
     207
     208
    191209            boolean enabled = (enabledPlugins != null) && enabledPlugins.contains(plugin.name);
    192210            if (pluginMap.get(plugin.name) == null) {
    193211                pluginMap.put(plugin.name, enabled);
     
    254272        pluginPanel.updateUI();
    255273    }
    256274
     275    private static boolean filterNameAndDescription(JTextField filter, final String name, final String description) {
     276        final String input[] = filter.getText().split("\\s+");
     277        boolean canHas = true;
     278
     279        // Make 'foo bar' search for 'bar' or 'foo' in both name and description
     280        for (String bit : input) {
     281            String lc_bit = bit.toLowerCase();
     282            if (!name.toLowerCase().contains(lc_bit) && !description.toLowerCase().contains(lc_bit)) {
     283                canHas = false;
     284            }
     285        }
     286
     287        return canHas;
     288    }
     289
    257290    private void loadPlugins() {
    258291        availablePlugins = new TreeMap<String, PluginInformation>(new Comparator<String>(){
    259292            public int compare(String o1, String o2) {
  • src/org/openstreetmap/josm/gui/preferences/PluginPreference.java

     
    1616import javax.swing.JButton;
    1717import javax.swing.JLabel;
    1818import javax.swing.JList;
     19import javax.swing.JTextField;
    1920import javax.swing.JOptionPane;
    2021import javax.swing.JPanel;
    2122import javax.swing.JScrollPane;
    2223import javax.swing.Scrollable;
     24import javax.swing.event.DocumentEvent;
     25import javax.swing.event.DocumentListener;
    2326
    2427import org.openstreetmap.josm.Main;
    2528import org.openstreetmap.josm.plugins.PluginDownloader;
     
    3942    private PreferenceDialog gui;
    4043    private JScrollPane pluginPane;
    4144    private PluginSelection selection = new PluginSelection();
     45    private JTextField txtFilter;
    4246
    4347    public void addGui(final PreferenceDialog gui) {
    4448        this.gui = gui;
    4549        plugin = gui.createPreferenceTab("plugin", tr("Plugins"), tr("Configure available plugins."), false);
     50
     51        txtFilter = new JTextField();
     52        JLabel lbFilter = new JLabel(tr("Search: "));
     53        lbFilter.setLabelFor(txtFilter);
     54        plugin.add(lbFilter);
     55        plugin.add(txtFilter, GBC.eol().fill(GBC.HORIZONTAL));
     56        txtFilter.getDocument().addDocumentListener(new DocumentListener(){
     57            public void changedUpdate(DocumentEvent e) {
     58                action();
     59            }
     60
     61            public void insertUpdate(DocumentEvent e) {
     62                action();
     63            }
     64
     65            public void removeUpdate(DocumentEvent e) {
     66                action();
     67            }
     68
     69            private void action() {
     70                selection.drawPanel(pluginPanel);
     71            }
     72        });
     73        plugin.add(GBC.glue(0,10), GBC.eol());
     74
     75        /* main plugin area */
    4676        pluginPane = new JScrollPane(pluginPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    4777        pluginPane.setBorder(null);
    4878        plugin.add(pluginPane, GBC.eol().fill(GBC.BOTH));
    4979        plugin.add(GBC.glue(0,10), GBC.eol());
     80
     81        /* buttons at the bottom */
    5082        JButton morePlugins = new JButton(tr("Download List"));
    5183        morePlugins.addActionListener(new ActionListener(){
    5284            public void actionPerformed(ActionEvent e) {
     
    71103        });
    72104        plugin.add(configureSites, GBC.std());
    73105
     106        selection.passTxtFilter(txtFilter);
    74107        selection.drawPanel(pluginPanel);
    75108    }
    76109