/* * This is part of Geomajas, a GIS framework, http://www.geomajas.org/. * * Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium. * * The program is available in open source according to the GNU Affero * General Public License. All contributions in this program are covered * by the Geomajas Contributors License Agreement. For full licensing * details, see LICENSE.txt in the project root. */ package org.geomajas.plugin.editing.gwt.example.client.split; import java.util.ArrayList; import java.util.List; import org.geomajas.geometry.Geometry; import org.geomajas.gwt.client.gfx.paintable.GfxGeometry; import org.geomajas.gwt.client.gfx.style.ShapeStyle; import org.geomajas.gwt.client.util.GeometryConverter; import org.geomajas.gwt.client.widget.MapWidget; import org.geomajas.plugin.editing.client.GeometryArrayFunction; import org.geomajas.plugin.editing.client.split.GeometrySplitService; import org.geomajas.plugin.editing.client.split.event.GeometrySplitStartEvent; import org.geomajas.plugin.editing.client.split.event.GeometrySplitStartHandler; import org.geomajas.plugin.editing.client.split.event.GeometrySplitStopEvent; import org.geomajas.plugin.editing.client.split.event.GeometrySplitStopHandler; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.toolbar.ToolStripButton; /** * Button that executes the split calculation and displays the result on the map. * * @author Pieter De Graef */ public class ExecuteSplitButton extends ToolStripButton implements GeometrySplitStartHandler, GeometrySplitStopHandler { private final List<GfxGeometry> splitResult; private final MapWidget mapWidget; public ExecuteSplitButton(final MapWidget mapWidget, final GeometrySplitService service) { this.mapWidget = mapWidget; this.splitResult = new ArrayList<GfxGeometry>(); setIcon("[ISOMORPHIC]/geomajas/osgeo/split.png"); setIconSize(24); setHeight(32); setDisabled(true); setHoverWrap(false); setTooltip("Split the selected country now."); addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { service.stop(new GeometryArrayFunction() { public void execute(Geometry[] geometries) { // Now display the result on the map: mapWidget.getMapModel().clearSelectedFeatures(); for (int i = 0; i < geometries.length; i++) { GfxGeometry gfx = new GfxGeometry("split-result-" + i, GeometryConverter .toGwt(geometries[i]), new ShapeStyle("#CC0000", .9f, "#660000", 1.0f, 3)); mapWidget.registerWorldPaintable(gfx); splitResult.add(gfx); } } }); } }); service.addGeometrySplitStartHandler(this); service.addGeometrySplitStopHandler(this); } // ------------------------------------------------------------------------ // GeometryEditWorkflowHandler implementation: // ------------------------------------------------------------------------ public void onGeometrySplitStart(GeometrySplitStartEvent event) { setDisabled(false); for (GfxGeometry gfx : splitResult) { mapWidget.unregisterWorldPaintable(gfx); } splitResult.clear(); } public void onGeometrySplitStop(GeometrySplitStopEvent event) { setDisabled(true); } }