// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.print;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.data.osm.DataSet;
import org.openstreetmap.josm.gui.layer.Layer;
import org.openstreetmap.josm.gui.layer.MainLayerManager;
import org.openstreetmap.josm.gui.layer.OsmDataLayer;
public class PrintableLayerManager extends MainLayerManager {
private static final MainLayerManager layerManager = Main.getLayerManager();
@Override
public synchronized void removeActiveLayerChangeListener(ActiveLayerChangeListener listener) {
layerManager.removeActiveLayerChangeListener(listener);
}
@Override
public void setActiveLayer(Layer layer) {
layerManager.setActiveLayer(layer);
}
@Override
public synchronized Layer getActiveLayer() {
return layerManager.getActiveLayer();
}
@Override
public synchronized OsmDataLayer getEditLayer() {
return layerManager.getEditLayer();
}
@Override
public synchronized DataSet getEditDataSet() {
return layerManager.getEditDataSet();
}
@Override
public synchronized List<Layer> getVisibleLayersInZOrder() {
ArrayList<Layer> layers = new ArrayList<>();
for (Layer l: layerManager.getLayers()) {
if (l.isVisible()) {
layers.add(l);
}
}
Collections.sort(
layers,
new Comparator<Layer>() {
@Override
public int compare(Layer l2, Layer l1) { // l1 and l2 swapped!
if (l1 instanceof OsmDataLayer && l2 instanceof OsmDataLayer) {
if (l1 == layerManager.getActiveLayer()) return -1;
if (l2 == layerManager.getActiveLayer()) return 1;
return Integer.valueOf(layerManager.getLayers().indexOf(l1)).
compareTo(layerManager.getLayers().indexOf(l2));
} else
return Integer.valueOf(layerManager.getLayers().indexOf(l1)).
compareTo(layerManager.getLayers().indexOf(l2));
}
}
);
return layers;
}
@Override
public void addLayer(Layer layer) {
layerManager.addLayer(layer);
}
@Override
public void removeLayer(Layer layer) {
layerManager.removeLayer(layer);
}
@Override
public void moveLayer(Layer layer, int position) {
layerManager.moveLayer(layer, position);
}
@Override
public List<Layer> getLayers() {
return layerManager.getLayers();
}
@Override
public <T extends Layer> List<T> getLayersOfType(Class<T> ofType) {
return layerManager.getLayersOfType(ofType);
}
@Override
public synchronized boolean containsLayer(Layer layer) {
return layerManager.containsLayer(layer);
}
@Override
public synchronized void addLayerChangeListener(LayerChangeListener listener) {
layerManager.addLayerChangeListener(listener);
}
@Override
public synchronized void addAndFireLayerChangeListener(LayerChangeListener listener) {
layerManager.addAndFireLayerChangeListener(listener);
}
@Override
public synchronized void removeLayerChangeListener(LayerChangeListener listener) {
layerManager.removeLayerChangeListener(listener);
}
@Override
public synchronized void removeAndFireLayerChangeListener(LayerChangeListener listener) {
layerManager.removeAndFireLayerChangeListener(listener);
}
}