- Timestamp:
- 2015-07-23T12:06:09+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/MapView.java
r8612 r8613 26 26 import java.util.Collection; 27 27 import java.util.Collections; 28 import java.util.Comparator;29 28 import java.util.EnumSet; 30 29 import java.util.LinkedHashSet; 31 30 import java.util.List; 31 import java.util.ListIterator; 32 32 import java.util.Set; 33 33 import java.util.concurrent.CopyOnWriteArrayList; … … 653 653 * Creates a list of the visible layers in Z-Order, the layer with the lowest Z-Order 654 654 * first, layer with the highest Z-Order last. 655 * <p> 656 * The active data layer is pulled above all adjacent data layers. 655 657 * 656 658 * @return a list of the visible in Z-Order, the layer with the lowest Z-Order … … 661 663 try { 662 664 List<Layer> ret = new ArrayList<>(); 663 for (Layer l: layers) { 664 if (l.isVisible()) { 665 // This is set while we delay the addition of the active layer. 666 boolean activeLayerDelayed = false; 667 for (ListIterator<Layer> iterator = layers.listIterator(layers.size()); iterator.hasPrevious();) { 668 Layer l = iterator.previous(); 669 if (!l.isVisible()) { 670 // ignored 671 } else if (l == activeLayer && l instanceof OsmDataLayer) { 672 // delay and add after the current block of OsmDataLayer 673 activeLayerDelayed = true; 674 } else { 675 if (activeLayerDelayed && !(l instanceof OsmDataLayer)) { 676 // add active layer before the current one. 677 ret.add(activeLayer); 678 activeLayerDelayed = false; 679 } 680 // Add this layer now 665 681 ret.add(l); 666 682 } 667 683 } 668 // sort according to position in the list of layers, with one exception: 669 // an active data layer always becomes a higher Z-Order than all other data layers 670 Collections.sort( 671 ret, 672 new Comparator<Layer>() { 673 @Override 674 public int compare(Layer l1, Layer l2) { 675 if (l1 instanceof OsmDataLayer && l2 instanceof OsmDataLayer) { 676 if (l1 == getActiveLayer()) return -1; 677 if (l2 == getActiveLayer()) return 1; 678 return Integer.compare(layers.indexOf(l1), layers.indexOf(l2)); 679 } else 680 return Integer.compare(layers.indexOf(l1), layers.indexOf(l2)); 681 } 682 } 683 ); 684 if (activeLayerDelayed) { 685 ret.add(activeLayer); 686 } 684 687 Collections.reverse(ret); 685 688 return ret;
Note:
See TracChangeset
for help on using the changeset viewer.