/* * 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.gwt.client.action.menu; import org.geomajas.gwt.client.action.MenuAction; import org.geomajas.gwt.client.controller.editing.LineStringEditController; import org.geomajas.gwt.client.controller.editing.MultiLineStringEditController; import org.geomajas.gwt.client.controller.editing.MultiPolygonEditController; import org.geomajas.gwt.client.controller.editing.ParentEditController; import org.geomajas.gwt.client.controller.editing.PointEditController; import org.geomajas.gwt.client.controller.editing.PolygonEditController; import org.geomajas.gwt.client.controller.editing.EditController.EditMode; import org.geomajas.gwt.client.i18n.I18nProvider; import org.geomajas.gwt.client.map.layer.Layer; import org.geomajas.gwt.client.map.layer.VectorLayer; import org.geomajas.gwt.client.util.WidgetLayout; import org.geomajas.gwt.client.widget.MapWidget; import org.geomajas.layer.LayerType; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.menu.Menu; import com.smartgwt.client.widgets.menu.MenuItem; import com.smartgwt.client.widgets.menu.MenuItemIfFunction; import com.smartgwt.client.widgets.menu.events.MenuItemClickEvent; /** * Menu action that starts the creation of a new feature on the map. * * @author Pieter De Graef */ public class NewFeatureAction extends MenuAction implements MenuItemIfFunction { private MapWidget mapWidget; private ParentEditController controller; /** * Constructor for the menu action to create a new feature on the map. * * @param mapWidget * The <code>MapWidget</code> on which editing is in progress. * @param controller * The current parent editing controller active on the map. */ public NewFeatureAction(MapWidget mapWidget, ParentEditController controller) { super(I18nProvider.getMenu().newFeature(), WidgetLayout.iconVertexCreate); this.mapWidget = mapWidget; this.controller = controller; setEnableIfCondition(this); } /** * Activate editing, and set the correct child editing controller on the parent editing controller. */ public void onClick(MenuItemClickEvent event) { Layer<?> layer = mapWidget.getMapModel().getSelectedLayer(); if (layer != null && layer instanceof VectorLayer) { mapWidget.getMapModel().getFeatureEditor().startEditing(null, null); VectorLayer vLayer = (VectorLayer) layer; if (vLayer.getLayerInfo().getLayerType() == LayerType.POINT) { controller.setController(new PointEditController(mapWidget, controller)); } else if (vLayer.getLayerInfo().getLayerType() == LayerType.LINESTRING) { controller.setController(new LineStringEditController(mapWidget, controller)); } else if (vLayer.getLayerInfo().getLayerType() == LayerType.MULTILINESTRING) { controller.setController(new MultiLineStringEditController(mapWidget, controller)); } else if (vLayer.getLayerInfo().getLayerType() == LayerType.POLYGON) { controller.setController(new PolygonEditController(mapWidget, controller)); } else if (vLayer.getLayerInfo().getLayerType() == LayerType.MULTIPOLYGON) { controller.setController(new MultiPolygonEditController(mapWidget, controller)); } controller.setEditMode(EditMode.INSERT_MODE); } } /** * Implementation of the <code>MenuItemIfFunction</code> interface. This will determine if the menu action should be * enabled or not. In essence, this action will be enabled if a vector-layer is selected that allows the creation of * new features. */ public boolean execute(Canvas target, Menu menu, MenuItem item) { Layer<?> selected = mapWidget.getMapModel().getSelectedLayer(); if (selected != null && selected instanceof VectorLayer) { VectorLayer layer = (VectorLayer) selected; if (layer.getLayerInfo().isCreatable()) { return true; } } return false; } }