/* * 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.gwt2.plugin.corewidget.example.client.sample.feature; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.DockLayoutPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ResizeLayoutPanel; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import org.geomajas.geometry.Coordinate; import org.geomajas.gwt2.client.GeomajasImpl; import org.geomajas.gwt2.client.GeomajasServerExtension; import org.geomajas.gwt2.plugin.corewidget.example.client.sample.feature.controller.FeatureClickedHandler; import org.geomajas.gwt2.plugin.corewidget.example.client.sample.feature.controller.FeatureClickedListener; import org.geomajas.gwt2.plugin.corewidget.example.client.sample.feature.controller.FeatureClickedEvent; import org.geomajas.gwt2.client.map.MapPresenter; import org.geomajas.gwt2.client.map.feature.Feature; import org.geomajas.gwt2.client.widget.MapLayoutPanel; import org.geomajas.gwt2.example.base.client.sample.SamplePanel; import org.geomajas.gwt2.plugin.corewidget.example.client.sample.feature.tooltip.ToolTip; import java.util.ArrayList; import java.util.List; /** * FeatureClicked showcase example. * * @author David Debuck */ public class FeatureClickedExample implements SamplePanel { protected DockLayoutPanel rootElement; private final MapLayoutPanel layout; private MapPresenter mapPresenter; private ToolTip toolTip; @UiField protected ResizeLayoutPanel mapPanel; @UiField protected VerticalPanel layerEventLayout; @UiField protected ScrollPanel scrollPanel; @Override public Widget asWidget() { return rootElement; } /** * UI binder interface. * * @author David Debuck */ interface FeatureSelectedExampleUiBinder extends UiBinder<DockLayoutPanel, FeatureClickedExample> { } private static final FeatureSelectedExampleUiBinder UIBINDER = GWT.create(FeatureSelectedExampleUiBinder.class); /** * Default constructor. */ public FeatureClickedExample() { rootElement = UIBINDER.createAndBindUi(this); // Create the MapPresenter mapPresenter = GeomajasImpl.getInstance().createMapPresenter(); // add FeatureClickedHandler where we handle FeaturesClickedEvent mapPresenter.getEventBus().addHandler(FeatureClickedHandler.TYPE, new MyFeatureClickedHandler()); // Define the layout: ResizeLayoutPanel resizeLayoutPanel = new ResizeLayoutPanel(); layout = new MapLayoutPanel(); resizeLayoutPanel.setWidget(layout); resizeLayoutPanel.setSize("100%", "100%"); layout.setPresenter(mapPresenter); mapPanel.add(resizeLayoutPanel); // Initialize the map GeomajasServerExtension.getInstance().initializeMap(mapPresenter, "appCoreWidget", "mapCoreWidget"); // add feature clicked listener. FeatureClickedListener mapListener = new FeatureClickedListener(); mapPresenter.addMapListener(mapListener); // Create the tooltip. toolTip = new ToolTip(); } /** * Handler that handles FeatureClickedEvent. */ private class MyFeatureClickedHandler implements FeatureClickedHandler { @Override public void onFeatureClicked(FeatureClickedEvent event) { List<Feature> features = event.getFeatures(); /////////////////////////////////////////////////////////////////////////////////////////// // Show the tooltip when there are features found. /////////////////////////////////////////////////////////////////////////////////////////// if (!features.isEmpty()) { toolTip.clearContent(); List<Label> content = new ArrayList<Label>(); for (Feature feature : features) { final Label label = new Label(feature.getLabel()); label.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { layerEventLayout.add(new Label("# Feature => " + label.getText() + " selected!")); layerEventLayout.add(new Label("-------------------------------------------------")); scrollPanel.scrollToBottom(); } }); content.add(label); } // Calculate a position for where to show the tooltip. int left = RootPanel.get().getAbsoluteLeft() + layout.getAbsoluteLeft(); int top = RootPanel.get().getAbsoluteTop() + layout.getAbsoluteTop(); toolTip.addContentAndShow( content, left + (int) event.getCoordinate().getX(), top + (int) event.getCoordinate().getY(), true ); } else { toolTip.hide(); } /////////////////////////////////////////////////////////////////////////////////////////// // Log all FeatureClicked events in our showcase example, even when there are non found. /////////////////////////////////////////////////////////////////////////////////////////// layerEventLayout.add(new Label("On FeatureClickedEvent: ( " + features.size() + " feature(s) found. )")); for (Feature feature : features) { Coordinate coordinate = feature.getGeometry().getCoordinates()[0]; layerEventLayout.add(new Label("# Feature => " + feature.getLabel())); layerEventLayout.add(new Label("- Coordinate x => " + coordinate.getX())); layerEventLayout.add(new Label("- Coordinate y => " + coordinate.getY())); layerEventLayout.add(new Label("- layer title => " + feature.getLayer().getTitle())); } layerEventLayout.add(new Label("-------------------------------------------------")); scrollPanel.scrollToBottom(); } } }