Ticket #3061: add-search-to-plugin-preferences-2.patch
| File add-search-to-plugin-preferences-2.patch, 5.1 KB (added by , 16 years ago) |
|---|
-
src/org/openstreetmap/josm/plugins/PluginSelection.java
30 30 import javax.swing.JEditorPane; 31 31 import javax.swing.JOptionPane; 32 32 import javax.swing.JPanel; 33 import javax.swing.JTextField; 33 34 import javax.swing.UIManager; 34 35 import javax.swing.event.HyperlinkEvent; 35 36 import javax.swing.event.HyperlinkListener; … … 45 46 private Map<String, PluginInformation> availablePlugins; 46 47 private Map<String, PluginInformation> localPlugins; 47 48 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 48 56 public void updateDescription(JPanel pluginPanel) { 49 57 int count = PluginDownloader.downloadDescription(); 50 58 if (count > 0) { … … 188 196 189 197 int row = 0; 190 198 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 191 209 boolean enabled = (enabledPlugins != null) && enabledPlugins.contains(plugin.name); 192 210 if (pluginMap.get(plugin.name) == null) { 193 211 pluginMap.put(plugin.name, enabled); … … 254 272 pluginPanel.updateUI(); 255 273 } 256 274 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 257 290 private void loadPlugins() { 258 291 availablePlugins = new TreeMap<String, PluginInformation>(new Comparator<String>(){ 259 292 public int compare(String o1, String o2) { -
src/org/openstreetmap/josm/gui/preferences/PluginPreference.java
16 16 import javax.swing.JButton; 17 17 import javax.swing.JLabel; 18 18 import javax.swing.JList; 19 import javax.swing.JTextField; 19 20 import javax.swing.JOptionPane; 20 21 import javax.swing.JPanel; 21 22 import javax.swing.JScrollPane; 22 23 import javax.swing.Scrollable; 24 import javax.swing.event.DocumentEvent; 25 import javax.swing.event.DocumentListener; 23 26 24 27 import org.openstreetmap.josm.Main; 25 28 import org.openstreetmap.josm.plugins.PluginDownloader; … … 39 42 private PreferenceDialog gui; 40 43 private JScrollPane pluginPane; 41 44 private PluginSelection selection = new PluginSelection(); 45 private JTextField txtFilter; 42 46 43 47 public void addGui(final PreferenceDialog gui) { 44 48 this.gui = gui; 45 49 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 */ 46 76 pluginPane = new JScrollPane(pluginPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 47 77 pluginPane.setBorder(null); 48 78 plugin.add(pluginPane, GBC.eol().fill(GBC.BOTH)); 49 79 plugin.add(GBC.glue(0,10), GBC.eol()); 80 81 /* buttons at the bottom */ 50 82 JButton morePlugins = new JButton(tr("Download List")); 51 83 morePlugins.addActionListener(new ActionListener(){ 52 84 public void actionPerformed(ActionEvent e) { … … 71 103 }); 72 104 plugin.add(configureSites, GBC.std()); 73 105 106 selection.passTxtFilter(txtFilter); 74 107 selection.drawPanel(pluginPanel); 75 108 } 76 109
