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

Last change on this file since 3128 was 3083, checked in by bastiK, 14 years ago

added svn:eol-style=native to source files

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