/* * uDig - User Friendly Desktop Internet GIS client * http://udig.refractions.net * (C) 2004, Refractions Research Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * */ package net.refractions.udig.transformtool; import java.util.List; import net.refractions.udig.project.IBlackboard; import net.refractions.udig.project.IMap; import net.refractions.udig.project.internal.Layer; import net.refractions.udig.project.internal.Map; import net.refractions.udig.project.internal.impl.LayerImpl; import net.refractions.udig.project.ui.ApplicationGIS; import net.refractions.udig.project.ui.tool.IToolManager; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.AttributeDescriptor; import com.vividsolutions.jts.geom.LineString; class VectorToolComposite { private RadioGroupComposite radios; Composite parent; protected VectorToolComposite(Composite parent) { this.parent = parent; } protected void addWidgets(GridData gridData, RadioGroupComposite radios) { this.radios = radios; IToolManager manager = ApplicationGIS .getToolManager(); Group group = new Group(parent, SWT.NULL); group.setText("Transformation method:"); group.setLayoutData(gridData); GridLayout layout = new GridLayout(); layout.numColumns = 2; layout.makeColumnsEqualWidth = true; group.setLayout(layout); GridData localGridData = new GridData(); localGridData.verticalSpan = 1; localGridData.horizontalSpan = 2; localGridData.horizontalAlignment = SWT.FILL; // localGridData.minimumWidth = group.getSize().x*2; final Label labelvector = new Label(group, SWT.SINGLE); labelvector.setText("Vector Layer (leave empty to create new): "); labelvector.setLayoutData(localGridData); IMap map = ApplicationGIS.getActiveMap(); localGridData = new GridData(); localGridData.verticalSpan = 1; localGridData.horizontalSpan = 2; localGridData.horizontalAlignment = GridData.FILL; final ComboViewer comboVector = new ComboViewer(group, SWT.SINGLE); comboVector.setLabelProvider(new LayerLabelProvider()); comboVector.setContentProvider(new ArrayContentProvider()); comboVector.setInput(map.getMapLayers().toArray()); comboVector.getCombo().setLayoutData(localGridData); IBlackboard blackboard = map.getBlackboard(); if (blackboard.get(TransformTool.BLACKBOARD_VECTORLAYER) != null) { comboVector.setSelection((ISelection) (new StructuredSelection( (Layer) blackboard.get(TransformTool.BLACKBOARD_VECTORLAYER))), true); } if (blackboard.get(TransformTool.BLACKBOARD_VECTORLAYER) != null) { comboVector.setSelection((ISelection) (new StructuredSelection( (Layer) blackboard.get(TransformTool.BLACKBOARD_VECTORLAYER))), true); } comboVector.addSelectionChangedListener(new ComboHandler()); Button addButton = new Button(group, SWT.BUTTON1); addButton.setData( manager.getTool("net.refractions.udig.ui.transformtool.lineEdit", "net.refractions.udig.tool.edit.create")); addButton.setText("Add Vectors"); localGridData = new GridData(); localGridData.verticalSpan = 1; localGridData.horizontalSpan = 1; localGridData.horizontalAlignment = GridData.FILL; addButton.setLayoutData(localGridData); addButton.addSelectionListener(new AddHandler()); Button deleteButton = new Button(group, SWT.BUTTON1); deleteButton.setData(manager.getTool("net.refractions.udig.ui.transformtool.deleteTool", "net.refractions.udig.tool.edit.feature")); deleteButton.setText("Remove Vectors"); deleteButton.addSelectionListener(new AddHandler()); deleteButton.setLayoutData(localGridData); } private class ComboHandler implements ISelectionChangedListener { public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection selection = (IStructuredSelection) event .getSelection(); IMap map = ApplicationGIS.getActiveMap(); IBlackboard blackboard = map.getBlackboard(); blackboard.put(TransformTool.BLACKBOARD_VECTORLAYER, (LayerImpl) selection.getFirstElement()); (new DialogUtility()).readLayer(); radios.refresh(); } }; private class AddHandler extends SelectionAdapter { public void widgetSelected(SelectionEvent event) { parent.getShell().setVisible(false); final Button button = (Button) event.widget; // createLayer("vector"); Display.getDefault().asyncExec(new Runnable() { public void run() { IMap map = ApplicationGIS.getActiveMap(); IBlackboard blackboard = map.getBlackboard(); Layer sourceLayer = (Layer)blackboard.get( TransformTool.BLACKBOARD_SOURCELAYER); if (blackboard.get( TransformTool.BLACKBOARD_VECTORLAYER) == null) { SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder(); builder.setName(sourceLayer.getName() + "_vector" ); builder.setCRS( sourceLayer.getCRS() ); builder.add( "Location", LineString.class ); SimpleFeatureType FLAG = builder.buildFeatureType(); //SimpleFeature flag1 = SimpleFeatureBuilder.build( FLAG, new Object[]{ point, "Here"}, "flag.1" ); List<AttributeDescriptor> attributes = FLAG.getAttributeDescriptors(); (new DialogUtility()).createLayer( sourceLayer .getName() + "_vector", FLAG.getAttributeDescriptors()); } Layer vectorLayer = (Layer)blackboard.get( TransformTool.BLACKBOARD_VECTORLAYER); ((Map) map).getEditManagerInternal() .setSelectedLayer(vectorLayer); ((IAction)button.getData()).run(); } }); } } }