Ticket #3061: add-search-to-plugin-preferences.patch
File add-search-to-plugin-preferences.patch, 6.3 KB (added by , 15 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 48 51 public void updateDescription(JPanel pluginPanel) { 49 52 int count = PluginDownloader.downloadDescription(); 50 53 if (count > 0) { … … 62 65 JOptionPane.ERROR_MESSAGE 63 66 ); 64 67 } 65 drawPanel(pluginPanel );68 drawPanel(pluginPanel, null); 66 69 } 67 70 68 71 public void update(JPanel pluginPanel) { 69 72 // refresh description 70 73 int num = PluginDownloader.downloadDescription(); 71 74 Boolean done = false; 72 drawPanel(pluginPanel );75 drawPanel(pluginPanel, null); 73 76 74 77 Set<PluginInformation> toUpdate = new HashSet<PluginInformation>(); 75 78 StringBuilder toUpdateStr = new StringBuilder(); … … 111 114 if (done && num >= 1) { 112 115 Main.pref.put("pluginmanager.lastupdate", Long.toString(System.currentTimeMillis())); 113 116 } 114 drawPanel(pluginPanel );117 drawPanel(pluginPanel, null); 115 118 } 116 119 117 120 public boolean finish() { … … 160 163 } 161 164 162 165 /* return true when plugin list changed */ 163 public void drawPanel(JPanel pluginPanel ) {166 public void drawPanel(JPanel pluginPanel, JTextField filter) { 164 167 loadPlugins(); 165 168 Collection<String> enabledPlugins = Main.pref.getCollection("plugins", null); 166 169 170 if (filter != null) { 171 txtFilter = filter; 172 } 173 167 174 if (pluginMap == null) { 168 175 pluginMap = new HashMap<String, Boolean>(); 169 176 } else { … … 188 195 189 196 int row = 0; 190 197 for (final PluginInformation plugin : availablePlugins.values()) { 198 if (txtFilter.getText() != null) { 199 /* This is not the plugin you're looking for */ 200 final String name = plugin.name; 201 final String desc = plugin.getLinkDescription(); 202 if (!filterNameAndDescription(txtFilter, name, desc)) { 203 continue; 204 } 205 } 206 207 191 208 boolean enabled = (enabledPlugins != null) && enabledPlugins.contains(plugin.name); 192 209 if (pluginMap.get(plugin.name) == null) { 193 210 pluginMap.put(plugin.name, enabled); … … 254 271 pluginPanel.updateUI(); 255 272 } 256 273 274 private static boolean filterNameAndDescription(JTextField filter, final String name, final String description) { 275 final String input[] = filter.getText().split("\\s+"); 276 boolean canHas = true; 277 278 // Make 'foo bar' search for 'bar' or 'foo' in both name and description 279 for (String bit : input) { 280 String lc_bit = bit.toLowerCase(); 281 if (!name.toLowerCase().contains(lc_bit) && !description.toLowerCase().contains(lc_bit)) { 282 canHas = false; 283 } 284 } 285 286 return canHas; 287 } 288 257 289 private void loadPlugins() { 258 290 availablePlugins = new TreeMap<String, PluginInformation>(new Comparator<String>(){ 259 291 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, txtFilter); 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 74 selection.drawPanel(pluginPanel );106 selection.drawPanel(pluginPanel, txtFilter); 75 107 } 76 108 77 109 private void configureSites() {