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

Last change on this file since 11105 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
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;
13
14/**
[2781]15 * A combobox model for the list of open changesets. The model is populated with the list
[5266]16 * of open changesets kept in the {@link ChangesetCache}.
[2801]17 *
[2711]18 */
[7017]19public class OpenChangesetComboBoxModel extends DefaultComboBoxModel<Changeset> implements ChangesetCacheListener {
[9078]20 private final transient List<Changeset> changesets;
[8840]21 private transient Changeset selectedChangeset;
[2711]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
[7017]30 /**
31 * Constructs a new {@code OpenChangesetComboBoxModel}.
32 */
[2711]33 public OpenChangesetComboBoxModel() {
[7005]34 this.changesets = new ArrayList<>();
[2711]35 }
36
[2781]37 /**
38 * Refreshes the content of the combobox model with the current list of open
[5266]39 * changesets from the {@link ChangesetCache}.
[2781]40 */
[2711]41 public void refresh() {
42 changesets.clear();
[9519]43 changesets.addAll(ChangesetCache.getInstance().getOpenChangesetsForCurrentUser());
[2711]44 fireContentsChanged(this, 0, getSize());
45 int idx = changesets.indexOf(selectedChangeset);
46 if (idx < 0) {
[2781]47 selectFirstChangeset();
[2711]48 } else {
49 setSelectedItem(changesets.get(idx));
50 }
51 }
52
[2781]53 /**
54 * Selects the first changeset in the current list of open changesets
55 */
[2711]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 /* ------------------------------------------------------------------------------------ */
[6084]67 @Override
[2711]68 public void changesetCacheUpdated(ChangesetCacheEvent event) {
69 refresh();
70 }
71
72 /* ------------------------------------------------------------------------------------ */
73 /* ComboBoxModel */
74 /* ------------------------------------------------------------------------------------ */
75 @Override
[7017]76 public Changeset getElementAt(int index) {
[2711]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 }
[8444]102 if (!(anObject instanceof Changeset)) return;
[8510]103 Changeset cs = (Changeset) anObject;
[8444]104 if (cs.getId() == 0 || !cs.isOpen()) return;
[2711]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.