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

Last change on this file since 12452 was 9519, checked in by simon04, 8 years ago

fix #7090 - Upload dialog allow select another user open changeset

  • Property svn:eol-style set to native
File size: 3.5 KB
Line 
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;
13
14/**
15 * A combobox model for the list of open changesets. The model is populated with the list
16 * of open changesets kept in the {@link ChangesetCache}.
17 *
18 */
19public class OpenChangesetComboBoxModel extends DefaultComboBoxModel<Changeset> implements ChangesetCacheListener {
20 private final transient List<Changeset> changesets;
21 private transient Changeset selectedChangeset;
22
23 protected Changeset getChangesetById(long id) {
24 for (Changeset cs : changesets) {
25 if (cs.getId() == id) return cs;
26 }
27 return null;
28 }
29
30 /**
31 * Constructs a new {@code OpenChangesetComboBoxModel}.
32 */
33 public OpenChangesetComboBoxModel() {
34 this.changesets = new ArrayList<>();
35 }
36
37 /**
38 * Refreshes the content of the combobox model with the current list of open
39 * changesets from the {@link ChangesetCache}.
40 */
41 public void refresh() {
42 changesets.clear();
43 changesets.addAll(ChangesetCache.getInstance().getOpenChangesetsForCurrentUser());
44 fireContentsChanged(this, 0, getSize());
45 int idx = changesets.indexOf(selectedChangeset);
46 if (idx < 0) {
47 selectFirstChangeset();
48 } else {
49 setSelectedItem(changesets.get(idx));
50 }
51 }
52
53 /**
54 * Selects the first changeset in the current list of open changesets
55 */
56 public void selectFirstChangeset() {
57 if (changesets == null || changesets.isEmpty()) {
58 setSelectedItem(null);
59 } else {
60 setSelectedItem(changesets.get(0));
61 }
62 }
63
64 /* ------------------------------------------------------------------------------------ */
65 /* ChangesetCacheListener */
66 /* ------------------------------------------------------------------------------------ */
67 @Override
68 public void changesetCacheUpdated(ChangesetCacheEvent event) {
69 refresh();
70 }
71
72 /* ------------------------------------------------------------------------------------ */
73 /* ComboBoxModel */
74 /* ------------------------------------------------------------------------------------ */
75 @Override
76 public Changeset getElementAt(int index) {
77 return changesets.get(index);
78 }
79
80 @Override
81 public int getIndexOf(Object anObject) {
82 return changesets.indexOf(anObject);
83 }
84
85 @Override
86 public int getSize() {
87 return changesets.size();
88 }
89
90 @Override
91 public Object getSelectedItem() {
92 return selectedChangeset;
93 }
94
95 @Override
96 public void setSelectedItem(Object anObject) {
97 if (anObject == null) {
98 this.selectedChangeset = null;
99 super.setSelectedItem(null);
100 return;
101 }
102 if (!(anObject instanceof Changeset)) return;
103 Changeset cs = (Changeset) anObject;
104 if (cs.getId() == 0 || !cs.isOpen()) return;
105 Changeset candidate = getChangesetById(cs.getId());
106 if (candidate == null) return;
107 this.selectedChangeset = candidate;
108 super.setSelectedItem(selectedChangeset);
109 }
110}
Note: See TracBrowser for help on using the repository browser.