/* * 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.gfx.paintable.mapaddon; import java.util.List; import org.geomajas.gwt.client.controller.ZoomSliderController; import org.geomajas.gwt.client.gfx.GraphicsContext; import org.geomajas.gwt.client.gfx.PainterVisitor; import org.geomajas.gwt.client.gfx.paintable.Image; import org.geomajas.gwt.client.gfx.style.ShapeStyle; import org.geomajas.gwt.client.spatial.Bbox; import org.geomajas.gwt.client.widget.MapWidget; import com.google.gwt.user.client.Event; import com.smartgwt.client.types.Cursor; /** * <p>Based on the number of usable scales, the dimensions of the slider area is defined. * On this rectangle the {@link ZoomSliderController} is set.</p> * * @author Emiel Ackermann */ public class SliderArea extends SingleMapAddon { private List<Bbox> partBounds; private static final String PART = "part"; private static final String MAP_AREA = "mapArea"; protected SliderArea(String id, int width, int height, Image sliderIcon, Image backgroundPart, List<Bbox> partBounds, MapWidget mapWidget, ZoomSliderController zoomSliderController) { super(id, sliderIcon, width, height, mapWidget, zoomSliderController); this.setBackground(backgroundPart); this.partBounds = partBounds; } @Override public void accept(PainterVisitor visitor, Object group, Bbox bounds, boolean recursive) { GraphicsContext vectorContext = mapWidget.getVectorContext(); this.group = group; // Manually set the map sizes and the internal margins before applying them on the background parts. setMapSize(mapWidget.getWidth(), mapWidget.getHeight()); for (int i = 0 ; i < partBounds.size() ; i++) { vectorContext.drawImage(group, PART + i, getBackground().getHref(), applyMargins(partBounds.get(i)), getBackground().getStyle()); } /* * Slider icon */ drawImage(applyMargins(getIcon().getBounds())); /* * Slider rectangle */ drawStartRectangle(((ZoomSlider) group).getSliderUnit().getBounds().getWidth()); vectorContext.setController(group, MAP_AREA, getController(), Event.MOUSEEVENTS); } /** * Provides a rectangle over the area over which the user can slide. * An onDown event redraws this rectangle into one that covers the map with {@link SliderArea#drawMapRectangle()}. */ public void drawStartRectangle(Double width) { GraphicsContext vectorContext = mapWidget.getVectorContext(); vectorContext.drawRectangle(group, MAP_AREA, applyMargins(new Bbox(0, 0, width, getHeight())), // IE9 does not draw an empty shapestyle (new ShapeStyle()), but it does draw one with opacity = 0... new ShapeStyle("#FF0000", 0, "#FF0000", 0, 1)); // new ShapeStyle("#FF0000", 0.1f, "#FF0000", 0.5f, 1)); vectorContext.setCursor(group, MAP_AREA, Cursor.POINTER.getValue()); } /** * Provides a rectangle over the map, on which the onDrag event of {@link ZoomSliderController} is listening. * An onUp event redraws this rectangle into the start rectangle with {@link SliderArea#drawStartRectangle()}. */ public void drawMapRectangle() { mapWidget.getVectorContext().drawRectangle(group, MAP_AREA, new Bbox(0, 0, mapWidget.getWidth(), mapWidget.getHeight()), // IE9 does not draw an empty shapestyle (new ShapeStyle()), but it does draw one with opacity = 0... new ShapeStyle("#00FF00", 0, "#00FF00", 0, 1)); // new ShapeStyle("#00FF00", 0.1f, "#00FF00", 0.5f, 1)); } }