Changeset 9347 in josm for trunk/src/org/openstreetmap/josm/gui/tagging
- Timestamp:
- 2016-01-09T12:00:51+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java
r9304 r9347 8 8 import java.awt.Dimension; 9 9 import java.awt.event.ActionEvent; 10 import java.awt.event.ActionListener;11 10 import java.awt.event.ItemEvent; 12 11 import java.awt.event.ItemListener; 13 import java.awt.event.KeyAdapter;14 import java.awt.event.KeyEvent;15 import java.awt.event.MouseAdapter;16 import java.awt.event.MouseEvent;17 12 import java.util.ArrayList; 18 13 import java.util.Collection; … … 27 22 28 23 import javax.swing.AbstractAction; 29 import javax.swing.AbstractListModel;30 24 import javax.swing.Action; 31 25 import javax.swing.BoxLayout; … … 37 31 import javax.swing.JPanel; 38 32 import javax.swing.JPopupMenu; 39 import javax.swing.JScrollPane;40 33 import javax.swing.ListCellRenderer; 41 import javax.swing.event.DocumentEvent;42 import javax.swing.event.DocumentListener;43 34 import javax.swing.event.ListSelectionEvent; 44 35 import javax.swing.event.ListSelectionListener; … … 54 45 import org.openstreetmap.josm.gui.tagging.presets.items.Roles; 55 46 import org.openstreetmap.josm.gui.tagging.presets.items.Roles.Role; 56 import org.openstreetmap.josm.gui.widgets.JosmTextField;57 47 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher; 48 import org.openstreetmap.josm.gui.widgets.SearchTextResultListPanel; 58 49 import org.openstreetmap.josm.tools.Predicate; 59 50 import org.openstreetmap.josm.tools.Utils; … … 63 54 * @since 6068 64 55 */ 65 public class TaggingPresetSelector extends JPanelimplements SelectionChangedListener {56 public class TaggingPresetSelector extends SearchTextResultListPanel<TaggingPreset> implements SelectionChangedListener { 66 57 67 58 private static final int CLASSIFICATION_IN_FAVORITES = 300; … … 73 64 private static final BooleanProperty ONLY_APPLICABLE = new BooleanProperty("taggingpreset.dialog.only-applicable-to-selection", true); 74 65 75 private final JosmTextField edSearchText;76 private final JList<TaggingPreset> lsResult;77 66 private final JCheckBox ckOnlyApplicable; 78 67 private final JCheckBox ckSearchInTags; … … 80 69 private boolean typesInSelectionDirty = true; 81 70 private final transient PresetClassifications classifications = new PresetClassifications(); 82 private final ResultListModel lsResultModel = new ResultListModel();83 84 private final transient List<ListSelectionListener> listSelectionListeners = new ArrayList<>();85 86 private transient ActionListener dblClickListener;87 private transient ActionListener clickListener;88 71 89 72 private static class ResultListCellRenderer implements ListCellRenderer<TaggingPreset> { … … 96 79 result.setIcon((Icon) tp.getValue(Action.SMALL_ICON)); 97 80 return result; 98 }99 }100 101 private static class ResultListModel extends AbstractListModel<TaggingPreset> {102 103 private transient List<PresetClassification> presets = new ArrayList<>();104 105 public synchronized void setPresets(List<PresetClassification> presets) {106 this.presets = presets;107 fireContentsChanged(this, 0, Integer.MAX_VALUE);108 }109 110 @Override111 public synchronized TaggingPreset getElementAt(int index) {112 return presets.get(index).preset;113 }114 115 @Override116 public synchronized int getSize() {117 return presets.size();118 }119 120 public synchronized boolean isEmpty() {121 return presets.isEmpty();122 81 } 123 82 } … … 219 178 */ 220 179 public TaggingPresetSelector(boolean displayOnlyApplicable, boolean displaySearchInTags) { 221 super(new BorderLayout()); 180 super(); 181 lsResult.setCellRenderer(new ResultListCellRenderer()); 222 182 classifications.loadPresets(TaggingPresets.getTaggingPresets()); 223 224 edSearchText = new JosmTextField();225 edSearchText.getDocument().addDocumentListener(new DocumentListener() {226 @Override227 public void removeUpdate(DocumentEvent e) {228 filterPresets();229 }230 231 @Override232 public void insertUpdate(DocumentEvent e) {233 filterPresets();234 }235 236 @Override237 public void changedUpdate(DocumentEvent e) {238 filterPresets();239 }240 });241 edSearchText.addKeyListener(new KeyAdapter() {242 @Override243 public void keyPressed(KeyEvent e) {244 switch (e.getKeyCode()) {245 case KeyEvent.VK_DOWN:246 selectPreset(lsResult.getSelectedIndex() + 1);247 break;248 case KeyEvent.VK_UP:249 selectPreset(lsResult.getSelectedIndex() - 1);250 break;251 case KeyEvent.VK_PAGE_DOWN:252 selectPreset(lsResult.getSelectedIndex() + 10);253 break;254 case KeyEvent.VK_PAGE_UP:255 selectPreset(lsResult.getSelectedIndex() - 10);256 break;257 case KeyEvent.VK_HOME:258 selectPreset(0);259 break;260 case KeyEvent.VK_END:261 selectPreset(lsResultModel.getSize());262 break;263 }264 }265 });266 add(edSearchText, BorderLayout.NORTH);267 268 lsResult = new JList<>(lsResultModel);269 lsResult.setCellRenderer(new ResultListCellRenderer());270 lsResult.addMouseListener(new MouseAdapter() {271 @Override272 public void mouseClicked(MouseEvent e) {273 if (e.getClickCount() > 1) {274 if (dblClickListener != null)275 dblClickListener.actionPerformed(null);276 } else {277 if (clickListener != null)278 clickListener.actionPerformed(null);279 }280 }281 });282 add(new JScrollPane(lsResult), BorderLayout.CENTER);283 183 284 184 JPanel pnChecks = new JPanel(); … … 292 192 @Override 293 193 public void itemStateChanged(ItemEvent e) { 294 filter Presets();194 filterItems(); 295 195 } 296 196 }); … … 306 206 @Override 307 207 public void itemStateChanged(ItemEvent e) { 308 filter Presets();208 filterItems(); 309 209 } 310 210 }); … … 317 217 318 218 setPreferredSize(new Dimension(400, 300)); 319 filter Presets();219 filterItems(); 320 220 JPopupMenu popupMenu = new JPopupMenu(); 321 221 popupMenu.add(new AbstractAction(tr("Add toolbar button")) { … … 331 231 } 332 232 333 private synchronized void selectPreset(int newIndex) {334 if (newIndex < 0) {335 newIndex = 0;336 }337 if (newIndex > lsResultModel.getSize() - 1) {338 newIndex = lsResultModel.getSize() - 1;339 }340 lsResult.setSelectedIndex(newIndex);341 lsResult.ensureIndexIsVisible(newIndex);342 }343 344 233 /** 345 234 * Search expression can be in form: "group1/group2/name" where names can contain multiple words 346 235 */ 347 private synchronized void filterPresets() { 236 @Override 237 protected synchronized void filterItems() { 348 238 //TODO Save favorites to file 349 239 String text = edSearchText.getText().toLowerCase(Locale.ENGLISH); … … 357 247 358 248 final TaggingPreset oldPreset = lsResult.getSelectedValue(); 359 lsResultModel.setPresets(result); 249 lsResultModel.setItems(Utils.transform(result, new Utils.Function<PresetClassification, TaggingPreset>() { 250 @Override 251 public TaggingPreset apply(PresetClassification x) { 252 return x.preset; 253 } 254 })); 360 255 final TaggingPreset newPreset = lsResult.getSelectedValue(); 361 256 if (!Objects.equals(oldPreset, newPreset)) { … … 491 386 } 492 387 388 @Override 493 389 public synchronized void init() { 494 390 if (ckOnlyApplicable != null) { … … 496 392 ckOnlyApplicable.setSelected(!getTypesInSelection().isEmpty() && ONLY_APPLICABLE.get()); 497 393 } 498 listSelectionListeners.clear(); 499 edSearchText.setText(""); 500 filterPresets(); 394 super.init(); 501 395 } 502 396 … … 505 399 classifications.loadPresets(presets); 506 400 init(); 507 }508 509 public synchronized void clearSelection() {510 lsResult.getSelectionModel().clearSelection();511 401 } 512 402 … … 547 437 lsResult.setSelectedValue(p, true); 548 438 } 549 550 public synchronized int getItemCount() {551 return lsResultModel.getSize();552 }553 554 public void setDblClickListener(ActionListener dblClickListener) {555 this.dblClickListener = dblClickListener;556 }557 558 public void setClickListener(ActionListener clickListener) {559 this.clickListener = clickListener;560 }561 562 /**563 * Adds a selection listener to the presets list.564 * @param selectListener The list selection listener565 * @since 7412566 */567 public synchronized void addSelectionListener(ListSelectionListener selectListener) {568 lsResult.getSelectionModel().addListSelectionListener(selectListener);569 listSelectionListeners.add(selectListener);570 }571 572 /**573 * Removes a selection listener from the presets list.574 * @param selectListener The list selection listener575 * @since 7412576 */577 public synchronized void removeSelectionListener(ListSelectionListener selectListener) {578 listSelectionListeners.remove(selectListener);579 lsResult.getSelectionModel().removeListSelectionListener(selectListener);580 }581 439 }
Note:
See TracChangeset
for help on using the changeset viewer.