source: josm/trunk/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java@ 13133

Last change on this file since 13133 was 12767, checked in by Don-vip, 7 years ago

see #15229 - see #15182 - do not longer fire ChangesetCacheEvent in EDT - now up to listeners to run their code in it if required

  • Property svn:eol-style set to native
File size: 3.6 KB
RevLine 
[2711]1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.io;
3
4import java.util.ArrayList;
5import java.util.List;
6
7import javax.swing.DefaultComboBoxModel;
8
9import org.openstreetmap.josm.data.osm.Changeset;
10import org.openstreetmap.josm.data.osm.ChangesetCache;
11import org.openstreetmap.josm.data.osm.ChangesetCacheEvent;
12import org.openstreetmap.josm.data.osm.ChangesetCacheListener;
[12767]13import org.openstreetmap.josm.gui.util.GuiHelper;
[2711]14
15/**
[2781]16 * A combobox model for the list of open changesets. The model is populated with the list
[5266]17 * of open changesets kept in the {@link ChangesetCache}.
[2801]18 *
[2711]19 */
[7017]20public class OpenChangesetComboBoxModel extends DefaultComboBoxModel<Changeset> implements ChangesetCacheListener {
[9078]21 private final transient List<Changeset> changesets;
[8840]22 private transient Changeset selectedChangeset;
[2711]23
24 protected Changeset getChangesetById(long id) {
25 for (Changeset cs : changesets) {
26 if (cs.getId() == id) return cs;
27 }
28 return null;
29 }
30
[7017]31 /**
32 * Constructs a new {@code OpenChangesetComboBoxModel}.
33 */
[2711]34 public OpenChangesetComboBoxModel() {
[7005]35 this.changesets = new ArrayList<>();
[2711]36 }
37
[2781]38 /**
39 * Refreshes the content of the combobox model with the current list of open
[5266]40 * changesets from the {@link ChangesetCache}.
[2781]41 */
[2711]42 public void refresh() {
43 changesets.clear();
[9519]44 changesets.addAll(ChangesetCache.getInstance().getOpenChangesetsForCurrentUser());
[2711]45 fireContentsChanged(this, 0, getSize());
46 int idx = changesets.indexOf(selectedChangeset);
47 if (idx < 0) {
[2781]48 selectFirstChangeset();
[2711]49 } else {
50 setSelectedItem(changesets.get(idx));
51 }
52 }
53
[2781]54 /**
55 * Selects the first changeset in the current list of open changesets
56 */
[2711]57 public void selectFirstChangeset() {
58 if (changesets == null || changesets.isEmpty()) {
59 setSelectedItem(null);
60 } else {
61 setSelectedItem(changesets.get(0));
62 }
63 }
64
65 /* ------------------------------------------------------------------------------------ */
66 /* ChangesetCacheListener */
67 /* ------------------------------------------------------------------------------------ */
[6084]68 @Override
[2711]69 public void changesetCacheUpdated(ChangesetCacheEvent event) {
[12767]70 GuiHelper.runInEDT(this::refresh);
[2711]71 }
72
73 /* ------------------------------------------------------------------------------------ */
74 /* ComboBoxModel */
75 /* ------------------------------------------------------------------------------------ */
76 @Override
[7017]77 public Changeset getElementAt(int index) {
[2711]78 return changesets.get(index);
79 }
80
81 @Override
82 public int getIndexOf(Object anObject) {
83 return changesets.indexOf(anObject);
84 }
85
86 @Override
87 public int getSize() {
88 return changesets.size();
89 }
90
91 @Override
92 public Object getSelectedItem() {
93 return selectedChangeset;
94 }
95
96 @Override
97 public void setSelectedItem(Object anObject) {
98 if (anObject == null) {
99 this.selectedChangeset = null;
100 super.setSelectedItem(null);
101 return;
102 }
[8444]103 if (!(anObject instanceof Changeset)) return;
[8510]104 Changeset cs = (Changeset) anObject;
[8444]105 if (cs.getId() == 0 || !cs.isOpen()) return;
[2711]106 Changeset candidate = getChangesetById(cs.getId());
107 if (candidate == null) return;
108 this.selectedChangeset = candidate;
109 super.setSelectedItem(selectedChangeset);
110 }
111}
Note: See TracBrowser for help on using the repository browser.