Changeset 10508 in josm for trunk/src/org/openstreetmap/josm/gui/layer
- Timestamp:
- 2016-07-03T18:26:16+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java
r10507 r10508 96 96 97 97 /** 98 * This event is fired for {@link LayerAvailabilityListener} 99 * @author Michael Zangl 100 * @since 10508 101 */ 102 public class LayerAvailabilityEvent extends LayerManagerEvent { 103 private final boolean hasLayers; 104 105 LayerAvailabilityEvent(LayerManager source, boolean hasLayers) { 106 super(source); 107 this.hasLayers = hasLayers; 108 } 109 110 /** 111 * Checks if this layer manager will have layers afterwards 112 * @return true if layers will be added. 113 */ 114 public boolean hasLayers() { 115 return hasLayers; 116 } 117 } 118 119 /** 120 * A listener that gets informed before any layer is displayed and after all layers are removed. 121 * @author Michael Zangl 122 * @since 10508 123 */ 124 public interface LayerAvailabilityListener { 125 /** 126 * This method is called in the UI thread right before the first layer is added. 127 * @param e The event. 128 */ 129 void beforeFirstLayerAdded(LayerAvailabilityEvent e); 130 131 /** 132 * This method is called in the UI thread after the last layer was removed. 133 * @param e The event. 134 */ 135 void afterLastLayerRemoved(LayerAvailabilityEvent e); 136 } 137 138 /** 98 139 * The layer from the layers list that is currently active. 99 140 */ … … 106 147 107 148 private final List<ActiveLayerChangeListener> activeLayerChangeListeners = new CopyOnWriteArrayList<>(); 149 private final List<LayerAvailabilityListener> layerAvailabilityListeners = new CopyOnWriteArrayList<>(); 108 150 109 151 /** … … 154 196 } 155 197 activeLayerChangeListeners.remove(listener); 198 } 199 200 /** 201 * Add a new {@link LayerAvailabilityListener}. 202 * @param listener The listener 203 * @since 10508 204 */ 205 public synchronized void addLayerAvailabilityListener(LayerAvailabilityListener listener) { 206 if (!layerAvailabilityListeners.add(listener)) { 207 throw new IllegalArgumentException("Attempted to add listener that was already in list: " + listener); 208 } 209 } 210 211 /** 212 * Remove an {@link LayerAvailabilityListener}. 213 * @param listener The listener 214 * @since 10508 215 */ 216 public synchronized void removeLayerAvailabilityListener(LayerAvailabilityListener listener) { 217 if (!layerAvailabilityListeners.remove(listener)) { 218 throw new IllegalArgumentException("Attempted to remove listener that was not in list: " + listener); 219 } 156 220 } 157 221 … … 199 263 @Override 200 264 protected synchronized void realAddLayer(Layer layer) { 265 if (getLayers().isEmpty()) { 266 LayerAvailabilityEvent e = new LayerAvailabilityEvent(this, true); 267 for (LayerAvailabilityListener l : layerAvailabilityListeners) { 268 l.beforeFirstLayerAdded(e); 269 } 270 } 201 271 super.realAddLayer(layer); 202 272 … … 214 284 } 215 285 216 return super.realRemoveSingleLayer(layer); 286 Collection<Layer> toDelete = super.realRemoveSingleLayer(layer); 287 if (getLayers().isEmpty()) { 288 LayerAvailabilityEvent e = new LayerAvailabilityEvent(this, false); 289 for (LayerAvailabilityListener l : layerAvailabilityListeners) { 290 l.afterLastLayerRemoved(e); 291 } 292 } 293 return toDelete; 217 294 } 218 295 … … 320 397 321 398 activeLayerChangeListeners.clear(); 399 layerAvailabilityListeners.clear(); 322 400 } 323 401 }
Note:
See TracChangeset
for help on using the changeset viewer.