/* * GroupLayer.java * * Created on 29 de Março de 2006, 11:05 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ import com.bbn.openmap.Layer; import com.bbn.openmap.LayerHandler; import com.bbn.openmap.event.LayerStatusEvent; import com.bbn.openmap.event.LayerStatusListener; import com.bbn.openmap.event.ProjectionEvent; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.util.Arrays; import java.util.Iterator; import java.util.Properties; /** * * @author cicero */ public class GroupLayer extends Layer implements ComponentListener{ public static final String LAYERSPROP = "layers"; private Layer[] layers = null; private String[] stLayers = null; private LayerHandler layerHandler; private boolean hiddenInside = false;//prevents an infinite loop public void projectionChanged(ProjectionEvent projectionEvent) { //doesnt draw anything } public void findAndInit(Object obj) { super.findAndInit(obj); //Finds the LayerHandler if (obj instanceof LayerHandler) { layerHandler = (LayerHandler) obj; return; } //Finds the layers if (obj instanceof Layer) { Layer layer = (Layer) obj; int pos = Arrays.binarySearch(stLayers, layer.getPropertyPrefix()); if (pos >= 0) { layers[pos] = layer; layer.addComponentListener(this); //Turns it on if necessary if (this.isVisible()) { layer.setVisible(true); if (layerHandler!=null) layerHandler.setLayers(); } } } } /** * Show/hiddes all the layers * @param vis */ public void setVisible(boolean vis) { super.setVisible(vis); if (!hiddenInside) for (Layer lay: layers) if (lay!=null) lay.setVisible(vis); } /** * If a layer in the group is hidden, the group layer must be * hidden as well * @param e */ public void componentHidden(ComponentEvent e) { this.hiddenInside = true; this.setVisible(false); this.hiddenInside = false; } public void componentResized(ComponentEvent e) { } public void componentMoved(ComponentEvent e) { } public void componentShown(ComponentEvent e) { } /** * Get the properties */ public void setProperties(String prefix, Properties properties) { super.setProperties(prefix, properties); stLayers = properties.getProperty(prefix + "." + LAYERSPROP).split(" "); Arrays.sort(stLayers); layers = new Layer[stLayers.length]; } }