X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=gis%2Fplugins%2Forg.argeo.gis.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fgis%2Fui%2Fviews%2FLayersView.java;fp=gis%2Fplugins%2Forg.argeo.gis.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fgis%2Fui%2Fviews%2FLayersView.java;h=56fb03fe1b11e6c00925331e25ed35de1048d9be;hb=77eaf70d8b929dab68211d6a01f68eeb71a1dceb;hp=0000000000000000000000000000000000000000;hpb=ab41c59dc92ba8bbc4b64f8f619ac30bfe4c4630;p=lgpl%2Fargeo-commons.git diff --git a/gis/plugins/org.argeo.gis.ui/src/main/java/org/argeo/gis/ui/views/LayersView.java b/gis/plugins/org.argeo.gis.ui/src/main/java/org/argeo/gis/ui/views/LayersView.java new file mode 100644 index 000000000..56fb03fe1 --- /dev/null +++ b/gis/plugins/org.argeo.gis.ui/src/main/java/org/argeo/gis/ui/views/LayersView.java @@ -0,0 +1,152 @@ +package org.argeo.gis.ui.views; + +import org.argeo.eclipse.ui.TreeParent; +import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IViewSite; +import org.eclipse.ui.part.ViewPart; +import org.geotools.map.MapContext; +import org.geotools.map.MapLayer; +import org.geotools.map.event.MapLayerListEvent; +import org.geotools.map.event.MapLayerListListener; + +public class LayersView extends ViewPart implements MapLayerListListener { + public final static String ID = "org.argeo.gis.ui.layersView"; + + private TreeViewer viewer; + + private MapContext mapContext; + + @Override + public void createPartControl(Composite parent) { + viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); + viewer.setContentProvider(new MapContextContentProvider()); + viewer.setLabelProvider(new MapContextLabelProvider()); + viewer.setInput(getViewSite()); + } + + public void setMapContext(MapContext mapContext) { + viewer.setInput(mapContext); + if (this.mapContext != null) { + this.mapContext.removeMapLayerListListener(this); + } + this.mapContext = mapContext; + this.mapContext.addMapLayerListListener(this); + } + + /* + * MAP LAYER LIST LISTENER + */ + public void layerAdded(MapLayerListEvent event) { + viewer.refresh(); + } + + public void layerRemoved(MapLayerListEvent event) { + viewer.refresh(); + } + + public void layerChanged(MapLayerListEvent event) { + viewer.refresh(); + } + + public void layerMoved(MapLayerListEvent event) { + viewer.refresh(); + } + + /* + * VIEW + */ + @Override + public void setFocus() { + viewer.getTree().setFocus(); + } + + public void refresh() { + viewer.refresh(); + } + + private class MapContextContentProvider implements ITreeContentProvider { + + public void dispose() { + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } + + public Object[] getElements(Object inputElement) { + if (inputElement instanceof MapContext) + return new Object[] { new MapContextNode( + (MapContext) inputElement) }; + else if (inputElement instanceof IViewSite) + return new Object[] {}; + else + return getChildren(inputElement); + } + + public Object[] getChildren(Object element) { + if (element instanceof MapContextNode) { + MapContextNode mapContextNode = (MapContextNode) element; + return mapContextNode.getMapContext().getLayers(); + } else if (element instanceof MapLayer) { + // MapLayer mapLayer = (MapLayer) element; + + } else if (element instanceof TreeParent) { + return ((TreeParent) element).getChildren(); + } + return new Object[0]; + } + + public Object getParent(Object element) { + if (element instanceof TreeParent) { + return ((TreeParent) element).getParent(); + } + return null; + } + + public boolean hasChildren(Object element) { + if (element instanceof MapContextNode) { + return true; + } else if (element instanceof TreeParent) { + return ((TreeParent) element).hasChildren(); + } else if (element instanceof MapLayer) { + return false; + } + return false; + } + + } + + private class MapContextLabelProvider extends LabelProvider { + + @Override + public String getText(Object element) { + if (element instanceof MapLayer) { + MapLayer mapLayer = (MapLayer) element; + String title = mapLayer.getTitle(); + if (title == null || title.trim().equals("")) + title = mapLayer.toString(); + return title; + } + return super.getText(element); + } + + } + + private class MapContextNode extends TreeParent { + private MapContext mapContext; + + public MapContextNode(MapContext mapContext) { + super("Map Context"); + this.mapContext = mapContext; + } + + public MapContext getMapContext() { + return mapContext; + } + + } +}