/* * Copyright 2012 Rui Afonso * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ package com.googlecode.gwt.charts.client.map; import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.Element; import com.googlecode.gwt.charts.client.ChartObject; import com.googlecode.gwt.charts.client.ChartWidget; import com.googlecode.gwt.charts.client.Selection; import com.googlecode.gwt.charts.client.event.ErrorHandler; import com.googlecode.gwt.charts.client.event.HandlerRef; import com.googlecode.gwt.charts.client.event.SelectHandler; import com.googlecode.gwt.charts.client.geochart.GeoChart; import com.googlecode.gwt.charts.client.util.ArrayHelper; /** * The Google Map Chart displays a map using the Google Maps API. Data values are displayed as markers on the map. Data * values can be coordinates (lat-long pairs) or addresses. The map will be scaled so that it includes all the * identified points.<br> * * If you want your maps to be line drawings rather than satellite imagery, use a {@link GeoChart} instead. */ public class Map extends ChartWidget<MapOptions> { private JsArray<Selection> selection; /** * Creates a new chart widget. */ public Map() { super(); } /** * Adds an handler that listens for error events. * * @param handler the class to call when the event is fired * @return the handler reference */ public HandlerRef addErrorHandler(ErrorHandler handler) { return addHandler(handler); } /** * Adds an handler that listens for select events. * * @param handler the class to call when the event is fired * @return the handler reference */ public HandlerRef addSelectHandler(SelectHandler handler) { return addHandler(handler); } /** * Returns an array of selected objects, each one describing a data element in the underlying table used to create * the * visualization (a DataView or a DataTable). Each object has properties row and/or column, with the index of the * row and/or column of the selected item in the underlying DataTable. If the row property is null, then the * selection is a column; if the column property is null, then the selection is a row; if both are non-null, then it * is a specific data item. You can call the DataTable.getValue() method to get the value of the selected item. The * retrieved array can be passed into setSelection(). * * @return an array of selected objects */ public JsArray<Selection> getSelection() { return chartObject.getSelection(); } /** * Selects a data entry in the visualization—for example, a point in an area chart, or a bar in a bar chart. When * this method is called, the visualization should visually indicate what the new selection is. The implementation * of setSelection() should not fire a "select" event. Visualizations may ignore part of the selection. For example, * a table that can show only selected rows may ignore cell or column elements in its setSelection() implementation, * or it can select the entire row. * * Every time this method is called, all selected items are deselected, and the new selection list passed in should * be applied. There is no explicit way to deselect individual items; to deselect individual items, call * setSelection() with the items to remain selected; to deselect all elements, call setSelection(), * setSelection(null), or setSelection([]). * * @param selection */ public void setSelection(Selection... selection) { this.selection = ArrayHelper.createArray(selection); chartObject.setSelection(this.selection); } @Override protected native ChartObject createChartObject(Element container) /*-{ return new $wnd.google.visualization.Map(container); }-*/; @Override protected void redrawNow() { super.redrawNow(); if (selection != null) { chartObject.setSelection(selection); } } }