From 34bd8d2e5f45fd0abf0bf14b54d376b8beea50ac Mon Sep 17 00:00:00 2001
From: Michael Zangl <michael.zangl@student.kit.edu>
Date: Sun, 5 Jul 2015 14:21:51 +0200
Subject: [PATCH 2/2] MapView: Use enum set instead of integer flags.
---
src/org/openstreetmap/josm/gui/MapView.java | 48 +++++++++++++++--------------
1 file changed, 25 insertions(+), 23 deletions(-)
diff --git a/src/org/openstreetmap/josm/gui/MapView.java b/src/org/openstreetmap/josm/gui/MapView.java
index 70afe09..a0b161d 100644
|
a
|
b
|
import java.util.Arrays;
|
| 26 | 26 | import java.util.Collection; |
| 27 | 27 | import java.util.Collections; |
| 28 | 28 | import java.util.Comparator; |
| | 29 | import java.util.EnumSet; |
| 29 | 30 | import java.util.LinkedHashSet; |
| 30 | 31 | import java.util.List; |
| 31 | 32 | import java.util.Set; |
| … |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
| 406 | 407 | boolean isOsmDataLayer = layer instanceof OsmDataLayer; |
| 407 | 408 | layerLock.writeLock().lock(); |
| 408 | 409 | layerLock.readLock().lock(); |
| 409 | | int listenersToFire = 0; |
| | 410 | EnumSet<LayerListenerType> listenersToFire = EnumSet.noneOf(LayerListenerType.class); |
| 410 | 411 | Layer oldActiveLayer = activeLayer; |
| 411 | 412 | OsmDataLayer oldEditLayer = editLayer; |
| 412 | 413 | try { |
| … |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
| 433 | 434 | |
| 434 | 435 | if (isOsmDataLayer || oldActiveLayer == null) { |
| 435 | 436 | // autoselect the new layer |
| 436 | | listenersToFire = setActiveLayer(layer, true); |
| | 437 | listenersToFire.addAll(setActiveLayer(layer, true)); |
| 437 | 438 | } |
| 438 | 439 | } finally { |
| 439 | 440 | layerLock.writeLock().unlock(); |
| … |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
| 450 | 451 | } finally { |
| 451 | 452 | layerLock.readLock().unlock(); |
| 452 | 453 | } |
| 453 | | if (listenersToFire != 0) { |
| | 454 | if (!listenersToFire.isEmpty()) { |
| 454 | 455 | repaint(); |
| 455 | 456 | } |
| 456 | 457 | } |
| … |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
| 532 | 533 | layerLock.writeLock().lock(); |
| 533 | 534 | layerLock.readLock().lock(); |
| 534 | 535 | |
| 535 | | int listenersToFire = 0; |
| | 536 | EnumSet<LayerListenerType> listenersToFire = EnumSet.noneOf(LayerListenerType.class); |
| 536 | 537 | Layer oldActiveLayer = activeLayer; |
| 537 | 538 | OsmDataLayer oldEditLayer = editLayer; |
| 538 | 539 | try { |
| … |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
| 545 | 546 | listenersToFire = setEditLayer(layersList); |
| 546 | 547 | |
| 547 | 548 | if (layer == activeLayer) { |
| 548 | | listenersToFire |= setActiveLayer(determineNextActiveLayer(layersList), false); |
| | 549 | listenersToFire.addAll(setActiveLayer(determineNextActiveLayer(layersList), false)); |
| 549 | 550 | } |
| 550 | 551 | |
| 551 | 552 | if (layer instanceof OsmDataLayer) { |
| … |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
| 602 | 603 | public void moveLayer(Layer layer, int pos) { |
| 603 | 604 | layerLock.writeLock().lock(); |
| 604 | 605 | layerLock.readLock().lock(); |
| 605 | | int listenersToFire; |
| | 606 | EnumSet<LayerListenerType> listenersToFire; |
| 606 | 607 | Layer oldActiveLayer = activeLayer; |
| 607 | 608 | OsmDataLayer oldEditLayer = editLayer; |
| 608 | 609 | try { |
| … |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
| 936 | 937 | * <p> |
| 937 | 938 | * You must own a write {@link #layerLock} when calling this method. |
| 938 | 939 | * @param layersList A list to select that layer from. |
| 939 | | * @return A list of change listeners that should be fired using {@link #onActiveEditLayerChanged(Layer, Layer, int)} |
| | 940 | * @return A list of change listeners that should be fired using {@link #onActiveEditLayerChanged(Layer, OsmDataLayer, EnumSet)} |
| 940 | 941 | */ |
| 941 | | private int setEditLayer(List<Layer> layersList) { |
| | 942 | private EnumSet<LayerListenerType> setEditLayer(List<Layer> layersList) { |
| 942 | 943 | final OsmDataLayer newEditLayer = findNewEditLayer(layersList); |
| 943 | 944 | |
| 944 | 945 | // Set new edit layer |
| … |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
| 949 | 950 | } |
| 950 | 951 | |
| 951 | 952 | editLayer = newEditLayer; |
| 952 | | return FIRE_CHANGE_EDIT_LAYER; |
| | 953 | return EnumSet.of(LayerListenerType.EDIT_LAYER_CHANGE); |
| 953 | 954 | } else { |
| 954 | | return 0; |
| | 955 | return EnumSet.noneOf(LayerListenerType.class); |
| 955 | 956 | } |
| 956 | 957 | |
| 957 | 958 | } |
| … |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
| 984 | 985 | public void setActiveLayer(Layer layer) { |
| 985 | 986 | layerLock.writeLock().lock(); |
| 986 | 987 | layerLock.readLock().lock(); |
| 987 | | int listenersToFire; |
| | 988 | EnumSet<LayerListenerType> listenersToFire; |
| 988 | 989 | Layer oldActiveLayer = activeLayer; |
| 989 | 990 | OsmDataLayer oldEditLayer = editLayer; |
| 990 | 991 | try { |
| … |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
| 1004 | 1005 | * Sets the active layer. Propagates this change to all map buttons. |
| 1005 | 1006 | * @param layer The layer to be active. |
| 1006 | 1007 | * @param setEditLayer if this is <code>true</code>, the edit layer is also set. |
| 1007 | | * @return A list of change listeners that should be fired using {@link #onActiveEditLayerChanged(Layer, Layer, int)} |
| | 1008 | * @return A list of change listeners that should be fired using {@link #onActiveEditLayerChanged(Layer, OsmDataLayer, EnumSet)} |
| 1008 | 1009 | */ |
| 1009 | | private int setActiveLayer(final Layer layer, boolean setEditLayer) { |
| | 1010 | private EnumSet<LayerListenerType> setActiveLayer(final Layer layer, boolean setEditLayer) { |
| 1010 | 1011 | if (layer != null && !layers.contains(layer)) |
| 1011 | 1012 | throw new IllegalArgumentException(tr("Layer ''{0}'' must be in list of layers", layer.toString())); |
| 1012 | 1013 | |
| 1013 | 1014 | if (layer == activeLayer) |
| 1014 | | return 0; |
| 1015 | | |
| | 1015 | return EnumSet.noneOf(LayerListenerType.class); |
| 1016 | 1016 | |
| 1017 | 1017 | activeLayer = layer; |
| 1018 | | int listenersToFire = FIRE_CHANGE_ACTIVE_LAYER; |
| | 1018 | EnumSet<LayerListenerType> listenersToFire = EnumSet.of(LayerListenerType.ACTIVE_LAYER_CHANGE); |
| 1019 | 1019 | if (setEditLayer) { |
| 1020 | | listenersToFire |= setEditLayer(layers); |
| | 1020 | listenersToFire.addAll(setEditLayer(layers)); |
| 1021 | 1021 | } |
| 1022 | 1022 | |
| 1023 | 1023 | return listenersToFire; |
| … |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
| 1037 | 1037 | } |
| 1038 | 1038 | } |
| 1039 | 1039 | |
| 1040 | | private static final int FIRE_CHANGE_ACTIVE_LAYER = 1; |
| 1041 | | private static final int FIRE_CHANGE_EDIT_LAYER = 2; |
| | 1040 | private enum LayerListenerType { |
| | 1041 | ACTIVE_LAYER_CHANGE, |
| | 1042 | EDIT_LAYER_CHANGE |
| | 1043 | } |
| 1042 | 1044 | |
| 1043 | 1045 | /** |
| 1044 | 1046 | * This is called whenever one of active layer/edit layer or both may have been changed, |
| 1045 | 1047 | * @param oldActive The old active layer |
| 1046 | 1048 | * @param oldEdit The old edit layer. |
| 1047 | | * @param listenersToFire A bitmask using {@link #FIRE_CHANGE_ACTIVE_LAYER} and {@link #FIRE_CHANGE_EDIT_LAYER} |
| | 1049 | * @param listenersToFire A mask of listeners to fire using {@link LayerListenerType}s |
| 1048 | 1050 | */ |
| 1049 | | private void onActiveEditLayerChanged(final Layer oldActive, final OsmDataLayer oldEdit, int listenersToFire) { |
| 1050 | | if ((listenersToFire & FIRE_CHANGE_EDIT_LAYER) != 0) { |
| | 1051 | private void onActiveEditLayerChanged(final Layer oldActive, final OsmDataLayer oldEdit, EnumSet<LayerListenerType> listenersToFire) { |
| | 1052 | if (listenersToFire.contains(LayerListenerType.EDIT_LAYER_CHANGE)) { |
| 1051 | 1053 | onEditLayerChanged(oldEdit); |
| 1052 | 1054 | } |
| 1053 | | if ((listenersToFire & FIRE_CHANGE_ACTIVE_LAYER) != 0) { |
| | 1055 | if (listenersToFire.contains(LayerListenerType.ACTIVE_LAYER_CHANGE)) { |
| 1054 | 1056 | onActiveLayerChanged(oldActive); |
| 1055 | 1057 | } |
| 1056 | 1058 | } |