/*
* 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;
import org.geomajas.gwt.client.map.event.MapModelChangedEvent;
import org.geomajas.gwt.client.map.event.MapModelChangedHandler;
import org.geomajas.gwt.client.widget.MapWidget;
import org.geomajas.gwt.example.base.SamplePanel;
import org.geomajas.gwt.example.base.SamplePanelFactory;
import org.geomajas.plugin.editing.client.snap.SnapSourceProvider;
import org.geomajas.plugin.editing.client.snap.SnappingRule;
import org.geomajas.plugin.editing.client.snap.algorithm.NearestEdgeSnapAlgorithm;
import org.geomajas.plugin.editing.client.snap.algorithm.NearestVertexSnapAlgorithm;
import org.geomajas.plugin.editing.gwt.client.GeometryEditor;
import org.geomajas.plugin.editing.gwt.client.GeometryEditorImpl;
import org.geomajas.plugin.editing.gwt.client.contextmenu.GeometryContextMenuDefaultAction;
import org.geomajas.plugin.editing.gwt.client.contextmenu.GeometryContextMenuRegistry;
import org.geomajas.plugin.editing.gwt.client.contextmenu.GeometryContextMenuDefaultAction.ActionType;
import org.geomajas.plugin.editing.gwt.client.gfx.PointSymbolizerShapeAndSize;
import org.geomajas.plugin.editing.gwt.client.snap.VectorLayerSourceProvider;
import org.geomajas.plugin.editing.gwt.example.client.i18n.EditingMessages;
import org.geomajas.plugin.editing.gwt.example.client.widget.MenuBar;
import com.google.gwt.core.client.GWT;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.layout.VLayout;
/**
* Entry point and main class for GWT application. This class defines the layout and functionality of this application.
*
* @author Pieter De Graef
* @author Jan Venstermans
*/
public class EditingPanel extends SamplePanel implements MapModelChangedHandler {
public static final String TITLE = "gepEditing";
public static final EditingMessages MESSAGES = GWT.create(EditingMessages.class);
public static final SamplePanelFactory FACTORY = new SamplePanelFactory() {
public SamplePanel createPanel() {
return new EditingPanel();
}
};
private GeometryEditor editor;
private MapWidget map;
@Override
public Canvas getViewPanel() {
map = new MapWidget("mapGepEditing", "appEditing");
editor = new GeometryEditorImpl(map);
// set shape and size of point symbolizer
editor.getStyleService().getPointSymbolizerShapeAndSize().setShape(PointSymbolizerShapeAndSize.Shape.CIRCLE);
editor.getStyleService().getPointSymbolizerShapeAndSize().setSize(6);
// register operations for vertex contect menu
GeometryContextMenuRegistry controller = new GeometryContextMenuRegistry(map, editor);
controller.addVertexAction(new GeometryContextMenuDefaultAction(ActionType.DESELECT));
controller.addVertexAction(new GeometryContextMenuDefaultAction(ActionType.REMOVE));
controller.addVertexAction(new GeometryContextMenuDefaultAction(ActionType.ZOOM_IN));
controller.addVertexAction(new GeometryContextMenuDefaultAction(ActionType.ZOOM_OUT));
controller.addVertexAction(new GeometryContextMenuDefaultAction(ActionType.ZOOM_TO_BOUNDS));
VLayout layout = new VLayout();
MenuBar editingToolStrip = new MenuBar(editor);
layout.addMember(editingToolStrip);
layout.addMember(map);
layout.setHeight("100%");
map.getMapModel().addMapModelChangedHandler(this);
return layout;
}
@Override
public String getDescription() {
return MESSAGES.editingDescription();
}
@Override
public String[] getConfigurationFiles() {
return new String[] {"classpath:org/geomajas/plugin/editing/gwt/example/context/appEditing.xml",
"classpath:org/geomajas/plugin/editing/gwt/example/context/clientLayerCountries.xml",
"classpath:org/geomajas/plugin/editing/gwt/example/context/clientLayerOsm.xml",
"classpath:org/geomajas/plugin/editing/gwt/example/context/mapEditing.xml",
"classpath:org/geomajas/gwt/example/base/layerOsm.xml",
"classpath:org/geomajas/gwt/example/base/layerCountries.xml"};
}
@Override
public String ensureUserLoggedIn() {
return "luc";
}
@Override
public void onMapModelChanged(MapModelChangedEvent event) {
editor.getSnappingService().clearSnappingRules();
SnapSourceProvider snapSourceProvider = new VectorLayerSourceProvider(editor.getMapWidget().getMapModel()
.getVectorLayer("clientLayerGepCountries"));
editor.getSnappingService().addSnappingRule(new SnappingRule(new NearestVertexSnapAlgorithm(),
snapSourceProvider, 200000));
editor.getSnappingService().addSnappingRule(new SnappingRule(new NearestEdgeSnapAlgorithm(),
snapSourceProvider, 100000));
}
}