/* * 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.client.controller; import java.util.logging.Logger; import org.geomajas.gwt.client.controller.AbstractController; import org.geomajas.gwt.client.controller.AbstractGraphicsController; import org.geomajas.gwt.client.controller.PanController; import org.geomajas.gwt.client.widget.MapWidget; import org.geomajas.plugin.editing.client.controller.GeometryIndexDragController; import org.geomajas.plugin.editing.client.controller.GeometryIndexInsertController; import org.geomajas.plugin.editing.client.service.GeometryEditService; import org.geomajas.plugin.editing.client.service.GeometryEditState; import org.geomajas.plugin.editing.client.snap.SnapService; import com.google.gwt.event.dom.client.DoubleClickEvent; import com.google.gwt.event.dom.client.HumanInputEvent; import com.google.gwt.event.dom.client.MouseMoveEvent; import com.google.gwt.event.dom.client.MouseOutEvent; import com.google.gwt.event.dom.client.MouseOverEvent; /** * ... * * @author Pieter De Graef */ public class EditGeometryBaseController extends AbstractGraphicsController { private static Logger logger = Logger.getLogger(EditGeometryBaseController.class.getName()); private AbstractController idleController; private GeometryIndexDragController dragController; private GeometryIndexInsertController insertController; private GeometryEditService service; // ------------------------------------------------------------------------ // Constructors: // ------------------------------------------------------------------------ public EditGeometryBaseController(MapWidget mapWidget, GeometryEditService service, SnapService snappingService) { super(mapWidget); this.service = service; idleController = new PanController(mapWidget); dragController = new GeometryIndexDragController(service, snappingService, this); insertController = new GeometryIndexInsertController(service, snappingService, this); } // ------------------------------------------------------------------------ // GraphicsController implementation: // ------------------------------------------------------------------------ public void onDown(HumanInputEvent<?> event) { if (service.getEditingState() == GeometryEditState.IDLE) { // No shift key down, because we don't want to pan when deselecting vertices. // TODO remove the shift check somehow... (now replaced with a event.stopPropagation in selection handler) idleController.onDown(event); } else if (service.getEditingState() == GeometryEditState.DRAGGING) { dragController.onDown(event); } else if (service.getEditingState() == GeometryEditState.INSERTING) { insertController.onDown(event); } } public void onDrag(HumanInputEvent<?> event) { if (service.getEditingState() == GeometryEditState.IDLE) { idleController.onDrag(event); } else if (service.getEditingState() == GeometryEditState.DRAGGING) { dragController.onDrag(event); } else if (service.getEditingState() == GeometryEditState.INSERTING) { insertController.onDrag(event); } } public void onMouseMove(MouseMoveEvent event) { super.onMouseMove(event); if (service.getEditingState() == GeometryEditState.IDLE) { idleController.onMouseMove(event); } else if (service.getEditingState() == GeometryEditState.DRAGGING) { dragController.onMouseMove(event); } else if (service.getEditingState() == GeometryEditState.INSERTING) { insertController.onMouseMove(event); } } public void onMouseOut(MouseOutEvent event) { if (service.getEditingState() == GeometryEditState.IDLE) { idleController.onMouseOut(event); } else if (service.getEditingState() == GeometryEditState.DRAGGING) { dragController.onMouseOut(event); } else if (service.getEditingState() == GeometryEditState.INSERTING) { insertController.onMouseOut(event); } } public void onMouseOver(MouseOverEvent event) { if (service.getEditingState() == GeometryEditState.IDLE) { idleController.onMouseOver(event); } else if (service.getEditingState() == GeometryEditState.DRAGGING) { dragController.onMouseOver(event); } else if (service.getEditingState() == GeometryEditState.INSERTING) { insertController.onMouseOver(event); } } public void onUp(HumanInputEvent<?> event) { if (service.getEditingState() == GeometryEditState.IDLE) { idleController.onUp(event); } else if (service.getEditingState() == GeometryEditState.DRAGGING) { dragController.onUp(event); } else if (service.getEditingState() == GeometryEditState.INSERTING) { insertController.onUp(event); } } public void onDoubleClick(DoubleClickEvent event) { if (service.getEditingState() == GeometryEditState.IDLE) { idleController.onDoubleClick(event); } else if (service.getEditingState() == GeometryEditState.DRAGGING) { dragController.onDoubleClick(event); } else if (service.getEditingState() == GeometryEditState.INSERTING) { insertController.onDoubleClick(event); } } // ------------------------------------------------------------------------ // Getters and setters: // ------------------------------------------------------------------------ public AbstractController getIdleController() { return idleController; } public void setIdleController(AbstractController idleController) { this.idleController = idleController; } public GeometryIndexDragController getDragController() { return dragController; } public void setDragController(GeometryIndexDragController dragController) { this.dragController = dragController; } public GeometryIndexInsertController getInsertController() { return insertController; } public void setInsertController(GeometryIndexInsertController insertController) { this.insertController = insertController; } }