/* * 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.example.client.sample.mapwidget; import java.util.ArrayList; import java.util.List; import org.geomajas.geometry.Coordinate; import org.geomajas.gwt.client.Geomajas; import org.geomajas.gwt.client.controller.PanArrowController; import org.geomajas.gwt.client.controller.PanController; import org.geomajas.gwt.client.controller.ZoomInAndOutController; import org.geomajas.gwt.client.gfx.paintable.Image; import org.geomajas.gwt.client.gfx.paintable.mapaddon.MapAddon; import org.geomajas.gwt.client.gfx.paintable.mapaddon.MapAddonGroup; import org.geomajas.gwt.client.gfx.paintable.mapaddon.SingleMapAddon; import org.geomajas.gwt.client.gfx.paintable.mapaddon.ZoomSlider; import org.geomajas.gwt.client.util.ImageUtil; import org.geomajas.gwt.client.util.MapAddonConstants; import org.geomajas.gwt.client.widget.MapWidget; import org.geomajas.gwt.example.base.SamplePanel; import org.geomajas.gwt.example.base.SamplePanelFactory; import org.geomajas.gwt.example.client.sample.i18n.SampleMessages; import com.google.gwt.core.client.GWT; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.layout.HLayout; /** * <p> * Sample that shows a custom pan controller and zoom slider. * </p> * * @author Emiel Ackermann */ public class PanAndZoomSliderSample extends SamplePanel { /** * To keep it readable... */ private static final Integer PAN_DIA = MapAddonConstants.PAN_DIA; private static final Integer PAN_MARGIN = MapAddonConstants.PAN_MARGIN; private static final Integer ARROW_DIA = MapAddonConstants.PAN_ARROW_DIA; private static final Integer BUTTON_DIA = MapAddonConstants.buttonDia; private static final Integer MARGIN = MapAddonConstants.ADDON_MARGIN; private static final Integer HORIZONTAL_MIDDLE = MARGIN + BUTTON_DIA + MARGIN / 2 + 1; private static final Integer SLIDER_WIDTH = 16; private static final Integer SLIDER_PART_HEIGHT = 10; private static final Integer SLIDER_UNIT_WIDTH = 20; private static final Integer SLIDER_UNIT_HEIGHT = 10; private static final String PAN_ID = "panCollection"; private static final String NORTH = "north"; private static final String EAST = "east"; private static final String SOUTH = "south"; private static final String WEST = "west"; private static final String ZOOM_IN = "zoomIn"; private static final String ZOOM_OUT = "zoomOut"; private static final String ICON = "Icon"; private static final String EXAMPLE_IMAGE_FOLDER = "geomajas/example/image/mapaddon/"; private static final SampleMessages MESSAGES = GWT .create(SampleMessages.class); public static final String TITLE = "PanAndZoomSlider"; public static final SamplePanelFactory FACTORY = new SamplePanelFactory() { public SamplePanel createPanel() { return new PanAndZoomSliderSample(); } }; @Override public Canvas getViewPanel() { HLayout mapLayout = new HLayout(); mapLayout.setShowEdges(true); mapLayout.setWidth100(); mapLayout.setHeight100(); // Map with ID mapNoNav is defined in the XML configuration. // (mapNoNav.xml) final MapWidget mapWidget = new MapWidget("mapNoNav", "gwtExample"); // Set a panning controller on the map: mapWidget.setController(new PanController(mapWidget)); mapLayout.addMember(mapWidget); mapWidget.getMapModel().runWhenInitialized(new Runnable() { public void run() { /* * Images of pan controller with internal margins */ Image panBg = ImageUtil.createSquareImage("panBg", Geomajas.getIsomorphicDir() + "geomajas/mapaddon/panbg.png", 0, 0, PAN_DIA); Image northImage = ImageUtil.createSquareImage(NORTH + ICON, Geomajas.getIsomorphicDir() + EXAMPLE_IMAGE_FOLDER + "pan_up.png", PAN_MARGIN, 0, ARROW_DIA); Image eastImage = ImageUtil.createSquareImage(EAST + ICON, Geomajas.getIsomorphicDir() + EXAMPLE_IMAGE_FOLDER + "pan_right.png", PAN_MARGIN * 2, PAN_MARGIN, ARROW_DIA); Image southImage = ImageUtil .createSquareImage(SOUTH + ICON, Geomajas.getIsomorphicDir() + EXAMPLE_IMAGE_FOLDER + "pan_down.png", PAN_MARGIN, PAN_MARGIN * 2, ARROW_DIA); Image westImage = ImageUtil.createSquareImage(WEST + ICON, Geomajas.getIsomorphicDir() + EXAMPLE_IMAGE_FOLDER + "pan_left.png", 0, PAN_MARGIN, ARROW_DIA); /* * SingleMapAddons or arrows of pan controller */ SingleMapAddon north = new SingleMapAddon(NORTH, northImage, mapWidget, new PanArrowController(mapWidget, new Coordinate(0, 1))); SingleMapAddon east = new SingleMapAddon(EAST, eastImage, mapWidget, new PanArrowController(mapWidget, new Coordinate(1, 0))); SingleMapAddon south = new SingleMapAddon(SOUTH, southImage, mapWidget, new PanArrowController(mapWidget, new Coordinate(0, -1))); SingleMapAddon west = new SingleMapAddon(WEST, westImage, mapWidget, new PanArrowController(mapWidget, new Coordinate(-1, 0))); /* * Pan group itself */ List<MapAddon> panArrows = new ArrayList<MapAddon>(); panArrows.add(north); panArrows.add(east); panArrows.add(south); panArrows.add(west); MapAddonGroup pan = new MapAddonGroup(PAN_ID, panArrows, panBg, mapWidget); pan.setHorizontalMargin(MARGIN * 2); pan.setVerticalMargin(MARGIN * 2); mapWidget.registerMapAddon(pan); // START ZOOMSLIDER // @extract-start ZoomSliderMapAddon, ZoomSlider map add-on // Slider handler icon Image sliderUnit = ImageUtil.createRectangleImage( ZoomSlider.SLIDER_UNIT + "icon", Geomajas.getIsomorphicDir() + EXAMPLE_IMAGE_FOLDER + "sliderUnit.png", 0, 0, SLIDER_UNIT_WIDTH, SLIDER_UNIT_HEIGHT); // Part of the background on which the zoom slider handler can move. // One zoom level is represented by one image. Image backgroundPart = ImageUtil.createRectangleImage(ZoomSlider.SLIDER + "Bg", Geomajas.getIsomorphicDir() + EXAMPLE_IMAGE_FOLDER + "sliderbg.png", 0, 0, SLIDER_WIDTH, SLIDER_PART_HEIGHT); // Zoom in; the top of ZoomSlider Image in = ImageUtil.createSquareImage(ZOOM_IN + ICON, Geomajas.getIsomorphicDir() + "geomajas/mapaddon/zoomPlus.png", 0, 0, SLIDER_WIDTH); Image sliderTop = ImageUtil.createSquareImage( ZoomSlider.SLIDER + "Top", Geomajas.getIsomorphicDir() + EXAMPLE_IMAGE_FOLDER + "sliderbgtop.png", 0, 0, SLIDER_WIDTH); SingleMapAddon zoomIn = new SingleMapAddon(ZOOM_IN, in, sliderTop, mapWidget, new ZoomInAndOutController(mapWidget, 1.01)); // Zoom out; the bottom of ZoomSlider Image out = ImageUtil.createRectangleImage(ZOOM_OUT + ICON, Geomajas.getIsomorphicDir() + "geomajas/mapaddon/zoomMinus.png", 0, 0, SLIDER_WIDTH, SLIDER_PART_HEIGHT); Image sliderBottom = ImageUtil.createRectangleImage(ZoomSlider.SLIDER + "Bottom", Geomajas.getIsomorphicDir() + EXAMPLE_IMAGE_FOLDER + "sliderbgbottom.png", 0, 0, SLIDER_WIDTH, SLIDER_PART_HEIGHT); SingleMapAddon zoomOut = new SingleMapAddon(ZOOM_OUT, out, sliderBottom, mapWidget, new ZoomInAndOutController(mapWidget, 0.99)); // Zoom slider itself ZoomSlider slider = new ZoomSlider(ZoomSlider.SLIDER, mapWidget); slider.setZoomIn(zoomIn); slider.setBackgroundPart(backgroundPart); slider.setSliderUnit(sliderUnit); slider.setZoomOut(zoomOut); slider.setHorizontalMargin(HORIZONTAL_MIDDLE - SLIDER_WIDTH / 2); slider.setVerticalMargin(pan.getVerticalMargin() + PAN_DIA + 2 * MARGIN); mapWidget.registerMapAddon(slider); mapWidget.getMapModel().getMapView().addMapViewChangedHandler(slider); // @extract-end } }); return mapLayout; } @Override public String getDescription() { return MESSAGES.panAndSliderDescription(); } @Override public String[] getConfigurationFiles() { return new String[] { "classpath:org/geomajas/gwt/example/context/mapNoNav.xml" }; } @Override public String ensureUserLoggedIn() { return "luc"; } }