| 1 | // License: GPL. For details, see LICENSE file.
|
|---|
| 2 | package org.openstreetmap.josm.gui.io;
|
|---|
| 3 |
|
|---|
| 4 | import java.util.ArrayList;
|
|---|
| 5 | import java.util.List;
|
|---|
| 6 |
|
|---|
| 7 | import javax.swing.DefaultComboBoxModel;
|
|---|
| 8 |
|
|---|
| 9 | import org.openstreetmap.josm.data.osm.Changeset;
|
|---|
| 10 | import org.openstreetmap.josm.data.osm.ChangesetCache;
|
|---|
| 11 | import org.openstreetmap.josm.data.osm.ChangesetCacheEvent;
|
|---|
| 12 | import 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 | */
|
|---|
| 19 | public 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 | }
|
|---|