Changeset 15116 in josm
- Timestamp:
- 2019-05-25T22:32:11+02:00 (6 years ago)
- 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 59 59 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane; 60 60 import org.openstreetmap.josm.gui.util.GuiHelper; 61 import org.openstreetmap.josm.gui.widgets.FilterField; 61 62 import org.openstreetmap.josm.gui.widgets.HtmlPanel; 62 63 import org.openstreetmap.josm.gui.widgets.JosmEditorPane; … … 78 79 /** The table of default providers **/ 79 80 public final JTable defaultTable; 81 /** The filter of default providers **/ 82 private final FilterField defaultFilter; 80 83 /** The selection listener synchronizing map display with table of default providers **/ 81 84 private final transient DefListSelectionListener defaultTableListener; … … 159 162 JLabel label = (JLabel) super.getTableCellRendererComponent( 160 163 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")); 162 166 if (obj != null) { 163 167 label.setToolTipText(tooltip.apply(obj)); … … 225 229 defaultModel = new ImageryDefaultLayerTableModel(); 226 230 defaultTable = new JTable(defaultModel); 231 defaultTable.setAutoCreateRowSorter(true); 232 defaultFilter = new FilterField().filter(defaultTable, defaultModel); 227 233 228 234 defaultModel.addTableModelListener(e -> activeTable.repaint()); … … 251 257 252 258 // Add default item list 259 JPanel defaultPane = new JPanel(new GridBagLayout()); 253 260 JScrollPane scrolldef = new JScrollPane(defaultTable); 254 261 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)); 256 265 257 266 // Add default item map … … 268 277 defaultMap.setZoomControlsVisible(false); 269 278 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)); 271 280 272 281 defaultTableListener = new DefListSelectionListener(); … … 341 350 // Only process complete (final) selection events 342 351 for (int i = e.getFirstIndex(); i <= e.getLastIndex(); i++) { 343 updateBoundsAndShapes( i);352 updateBoundsAndShapes(defaultTable.convertRowIndexToModel(i)); 344 353 } 345 354 // If needed, adjust map to show all map rectangles and polygons … … 351 360 } 352 361 362 /** 363 * update bounds and shapes for a new entry 364 * @param i model index 365 */ 353 366 private void updateBoundsAndShapes(int i) { 354 367 ImageryBounds bounds = defaultModel.getRow(i).getBounds(); 355 368 if (bounds != null) { 369 int viewIndex = defaultTable.convertRowIndexToView(i); 356 370 List<Shape> shapes = bounds.getShapes(); 357 371 if (shapes != null && !shapes.isEmpty()) { 358 if (defaultTable.getSelectionModel().isSelectedIndex( i)) {372 if (defaultTable.getSelectionModel().isSelectedIndex(viewIndex)) { 359 373 if (!mapPolygons.containsKey(i)) { 360 374 List<MapPolygon> list = new ArrayList<>(); … … 376 390 // Only display bounds when no polygons (shapes) are defined for this provider 377 391 } else { 378 if (defaultTable.getSelectionModel().isSelectedIndex( i)) {392 if (defaultTable.getSelectionModel().isSelectedIndex(viewIndex)) { 379 393 if (!mapRectangles.containsKey(i)) { 380 394 // Add new map rectangle -
trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
r14153 r15116 40 40 import javax.swing.SwingUtilities; 41 41 import javax.swing.UIManager; 42 import javax.swing.event.DocumentEvent;43 import javax.swing.event.DocumentListener;44 42 45 43 import org.openstreetmap.josm.actions.ExpertToggleAction; … … 56 54 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane.PreferencePanel; 57 55 import org.openstreetmap.josm.gui.util.GuiHelper; 56 import org.openstreetmap.josm.gui.widgets.FilterField; 58 57 import org.openstreetmap.josm.gui.widgets.JosmTextField; 59 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;60 58 import org.openstreetmap.josm.plugins.PluginDownloadTask; 61 59 import org.openstreetmap.josm.plugins.PluginInformation; … … 192 190 gc.gridx = 1; 193 191 gc.weightx = 1.0; 194 tfFilter = new JosmTextField(); 192 tfFilter = new FilterField().filter(expr -> { 193 model.filterDisplayedPlugins(expr); 194 pnlPluginPreferences.refreshView(); 195 }); 195 196 pnl.add(tfFilter, gc); 196 tfFilter.setToolTipText(tr("Enter a search expression"));197 SelectAllOnFocusGainedDecorator.decorate(tfFilter);198 tfFilter.getDocument().addDocumentListener(new SearchFieldAdapter());199 197 return pnl; 200 198 } … … 565 563 } 566 564 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 @Override581 public void changedUpdate(DocumentEvent evt) {582 filter();583 }584 585 @Override586 public void insertUpdate(DocumentEvent evt) {587 filter();588 }589 590 @Override591 public void removeUpdate(DocumentEvent evt) {592 filter();593 }594 }595 596 565 private static class PluginConfigurationSitesPanel extends JPanel { 597 566 -
trunk/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java
r14012 r15116 16 16 import java.awt.im.InputContext; 17 17 import java.lang.reflect.Field; 18 import java.util.ArrayList;19 18 import java.util.LinkedHashMap; 20 19 import java.util.List; 21 20 import java.util.Map; 22 import java.util.regex.PatternSyntaxException;23 21 24 22 import javax.swing.AbstractAction; … … 33 31 import javax.swing.KeyStroke; 34 32 import javax.swing.ListSelectionModel; 35 import javax.swing.RowFilter;36 33 import javax.swing.SwingConstants; 37 34 import javax.swing.UIManager; 38 import javax.swing.event.DocumentEvent;39 import javax.swing.event.DocumentListener;40 35 import javax.swing.event.ListSelectionEvent; 41 36 import javax.swing.event.ListSelectionListener; … … 43 38 import javax.swing.table.DefaultTableCellRenderer; 44 39 import javax.swing.table.TableColumnModel; 45 import javax.swing.table.TableModel;46 import javax.swing.table.TableRowSorter;47 40 48 41 import org.openstreetmap.josm.data.preferences.NamedColorProperty; 49 42 import org.openstreetmap.josm.gui.util.GuiHelper; 43 import org.openstreetmap.josm.gui.widgets.FilterField; 50 44 import org.openstreetmap.josm.gui.widgets.JosmComboBox; 51 import org.openstreetmap.josm.gui.widgets.JosmTextField;52 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;53 45 import org.openstreetmap.josm.tools.KeyboardUtils; 54 46 import org.openstreetmap.josm.tools.Logging; … … 89 81 90 82 private final JTable shortcutTable = new JTable(); 91 92 private final JosmTextField filterField = new JosmTextField(); 83 private final FilterField filterField; 93 84 94 85 /** Creates new form prefJPanel */ 95 86 public PrefJPanel() { 96 87 this.model = new ScListModel(); 88 this.filterField = new FilterField(); 97 89 initComponents(); 98 90 } … … 207 199 shortcutTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 208 200 shortcutTable.setAutoCreateRowSorter(true); 201 filterField.filter(shortcutTable, model); 209 202 TableColumnModel mod = shortcutTable.getColumnModel(); 210 203 mod.getColumn(0).setCellRenderer(new ShortcutTableCellRenderer(true)); … … 268 261 gc.weightx = 1.0; 269 262 pnl.add(filterField, gc); 270 filterField.setToolTipText(tr("Enter a search expression"));271 SelectAllOnFocusGainedDecorator.decorate(filterField);272 filterField.getDocument().addDocumentListener(new FilterFieldAdapter());273 263 pnl.setMaximumSize(new Dimension(300, 10)); 274 264 return pnl; … … 372 362 } 373 363 } 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 search389 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 @Override402 public void changedUpdate(DocumentEvent e) {403 filter();404 }405 406 @Override407 public void insertUpdate(DocumentEvent e) {408 filter();409 }410 411 @Override412 public void removeUpdate(DocumentEvent e) {413 filter();414 }415 }416 364 }
Note:
See TracChangeset
for help on using the changeset viewer.