001 package com.google.gwt.maps.client; 002 003 import com.google.gwt.ajaxloader.client.ArrayHelper; 004 import com.google.gwt.core.client.JavaScriptObject; 005 import com.google.gwt.core.client.JsArray; 006 import com.google.gwt.maps.client.base.LatLng; 007 import com.google.gwt.maps.client.controls.MapTypeControlOptions; 008 import com.google.gwt.maps.client.controls.MapTypeStyle; 009 import com.google.gwt.maps.client.controls.OverviewMapControlOptions; 010 import com.google.gwt.maps.client.controls.PanControlOptions; 011 import com.google.gwt.maps.client.controls.RotateControlOptions; 012 import com.google.gwt.maps.client.controls.ScaleControlOptions; 013 import com.google.gwt.maps.client.controls.StreetViewControlOptions; 014 import com.google.gwt.maps.client.controls.ZoomControlOptions; 015 016 /** 017 * Map rendering options<br> 018 * <b>Note:</b> Defaults to LatLng(26.4,-9) <br> 019 * <br> 020 * See <a href= 021 * "https://developers.google.com/maps/documentation/javascript/reference#MapOptions" 022 * >MapOptions API Doc</a> 023 */ 024 public class MapOptions extends JavaScriptObject { 025 026 /** 027 * This will tell the map how to render and with with what features<br> 028 * Use newInstance(); 029 */ 030 protected MapOptions() { 031 } 032 033 private static final double DEFAULT_LATLNG_LAT = 26.4d; 034 private static final double DEFAULT_LATLNG_LNG = -9d; 035 036 /** 037 * Create a new Instance of the MapOptions This will also create a defaults 038 * center, mapTypeId and Zoom 039 * 040 * @return MapOptions 041 */ 042 public final static MapOptions newInstance() { 043 MapOptions options = newInstanceDefault(); 044 getDefaults(options); 045 return options; 046 } 047 048 /** 049 * Create a new Instance of the MapOptions 050 * 051 * @param withdefaults 052 * - [true]= setup required defaults, center, mapTypeId and Zoom. 053 * [false]= will not use defaults 054 * @return MapOptions 055 */ 056 public final static MapOptions newInstance(boolean withdefaults) { 057 MapOptions options = newInstanceDefault(); 058 if (withdefaults == true) { 059 getDefaults(options); 060 } 061 return options; 062 } 063 064 /** 065 * get the Required defaults, this should help prevent setup errors 066 * 067 * @param options 068 */ 069 private static void getDefaults(MapOptions options) { 070 options.setCenter(LatLng.newInstance(DEFAULT_LATLNG_LAT, 071 DEFAULT_LATLNG_LNG)); 072 options.setMapTypeId(MapTypeId.ROADMAP); 073 options.setZoom(0); 074 } 075 076 /** 077 * setup a javascript object to store the values in 078 * 079 * @return MapOptions 080 */ 081 private final static MapOptions newInstanceDefault() { 082 JavaScriptObject jso = JavaScriptObject.createObject(); 083 // WorkAroundUtils.removeGwtObjectId(jso); TODO Still needed? 084 return jso.cast(); 085 } 086 087 /** 088 * set Color used for the background of the Map div. This color will be 089 * visible when tiles have not yet loaded as the user pans. This option can 090 * only be set when the map is initialized. 091 * 092 * @param backgroundColor 093 */ 094 public final native void setBackgroundColor(String backgroundColor) /*-{ 095 this.backgroundColor = backgroundColor; 096 }-*/; 097 098 /** 099 * get Color used for the background of the Map div. 100 */ 101 public final native String getBackgroundColor() /*-{ 102 return this.backgroundColor; 103 }-*/; 104 105 /** 106 * set The initial Map center. Required. 107 * 108 * @param center 109 * {@link LatLng} 110 */ 111 public final native void setCenter(LatLng center) /*-{ 112 this.center = center; 113 }-*/; 114 115 /** 116 * get {@link LatLng} 117 * 118 * @return {@link LatLng} 119 */ 120 public final native LatLng getCenter() /*-{ 121 return this.center; 122 }-*/; 123 124 /** 125 * set Enables/disables all default UI. May be overridden individually. 126 * 127 * @param disableDefaultUI 128 */ 129 public final native void setDisableDefaultUi(boolean disableDefaultUI) /*-{ 130 this.disableDefaultUI = disableDefaultUI; 131 }-*/; 132 133 /** 134 * get Enables/disables all default UI. May be overridden individually. 135 * 136 * @return boolean 137 */ 138 public final native boolean getDisableDefaultUi() /*-{ 139 return this.disableDefaultUI; 140 }-*/; 141 142 /** 143 * set Enables/disables zoom and center on double click. Enabled by default. 144 * 145 * @param disableDoubleClickZoom 146 */ 147 public final native void setDisableDoubleClickZoom( 148 boolean disableDoubleClickZoom) /*-{ 149 this.disableDoubleClickZoom = disableDoubleClickZoom; 150 }-*/; 151 152 /** 153 * get enables/disables zoom and center on double click. Enabled by default. 154 * 155 * @return boolean 156 */ 157 public final native boolean getDisableDoubleClickZoom() /*-{ 158 return this.disableDoubleClickZoom; 159 }-*/; 160 161 /** 162 * set If false, prevents the map from being dragged. Dragging is enabled by 163 * default. 164 * 165 * @param draggable 166 */ 167 public final native void setDraggable(boolean draggable) /*-{ 168 this.draggable = draggable; 169 }-*/; 170 171 /** 172 * get If false, prevents the map from being dragged. Dragging is enabled by 173 * default. 174 * 175 * @return boolean 176 */ 177 public final native boolean getDraggable() /*-{ 178 return this.draggable; 179 }-*/; 180 181 /** 182 * set The name or url of the cursor to display on a draggable object. 183 * 184 * @param draggableCursor 185 */ 186 public final native void setDraggableCursor(boolean draggableCursor) /*-{ 187 this.draggableCursor = draggableCursor; 188 }-*/; 189 190 /** 191 * get The name or url of the cursor to display on a draggable object. 192 */ 193 public final native boolean getDraggableCursor() /*-{ 194 return this.draggableCursor; 195 }-*/; 196 197 /** 198 * set The name or url of the cursor to display when an object is dragging. 199 * 200 * @param draggingCursor 201 */ 202 public final native void setDraggingCursor(boolean draggingCursor) /*-{ 203 this.draggingCursor = draggingCursor; 204 }-*/; 205 206 /** 207 * get The name or url of the cursor to display when an object is dragging. 208 */ 209 public final native boolean getDraggingCursor() /*-{ 210 return this.draggingCursor; 211 }-*/; 212 213 /** 214 * set The heading for aerial imagery in degrees measured clockwise from 215 * cardinal direction North. Headings are snapped to the nearest available 216 * angle for which imagery is available. 217 * 218 * @param heading 219 */ 220 public final native void setHeading(int heading) /*-{ 221 this.heading = heading; 222 }-*/; 223 224 /** 225 * get The heading for aerial imagery in degrees measured clockwise from 226 * cardinal direction North. Headings are snapped to the nearest available 227 * angle for which imagery is available. 228 * 229 * @return int 230 */ 231 public final native int getHeading() /*-{ 232 return this.heading; 233 }-*/; 234 235 /** 236 * set If false, prevents the map from being controlled by the keyboard. 237 * Keyboard shortcuts are enabled by default. 238 * 239 * @param keyboardShortcuts 240 */ 241 public final native void setKeyboardShortcuts(boolean keyboardShortcuts) /*-{ 242 this.keyboardShortcuts = keyboardShortcuts; 243 }-*/; 244 245 /** 246 * get If false, prevents the map from being controlled by the keyboard. 247 * Keyboard shortcuts are enabled by default. 248 * 249 * @return boolean 250 */ 251 public final native boolean getKeyboardShortcuts() /*-{ 252 return this.keyboardShortcuts; 253 }-*/; 254 255 /** 256 * set The initial enabled/disabled state of the Map type control. 257 * 258 * @param mapTypeControl 259 */ 260 public final native void setMapTypeControl(boolean mapTypeControl) /*-{ 261 this.mapTypeControl = mapTypeControl; 262 }-*/; 263 264 /** 265 * get The initial enabled/disabled state of the Map type control. 266 */ 267 public final native boolean getMapTypeControl() /*-{ 268 return this.mapTypeControl; 269 }-*/; 270 271 /** 272 * set The initial display options for the Map type control. 273 * 274 * @param mapTypeControlOptions 275 */ 276 public final native void setMapTypeControlOptions( 277 MapTypeControlOptions mapTypeControlOptions) /*-{ 278 this.mapTypeControlOptions = mapTypeControlOptions; 279 }-*/; 280 281 /** 282 * get The initial display options for the Map type control. 283 * 284 * @return {@link MapTypeControlOptions} 285 */ 286 public final native MapTypeControlOptions getMapTypeControlOptions() /*-{ 287 return this.mapTypeControlOptions; 288 }-*/; 289 290 /** 291 * The initial Map {@link MapTypeId}. Required. 292 * 293 * @param mapTypeId 294 * {@link MapTypeId} 295 */ 296 public final void setMapTypeId(MapTypeId mapTypeId) { 297 setMapTypeIdJs(mapTypeId.value()); 298 } 299 300 /** 301 * The initial Map {@link MapTypeId}. Required. 302 * 303 * @param mapTypeId 304 * String 305 */ 306 public final void setMapTypeId(String mapTypeId) { 307 setMapTypeIdStringJs(mapTypeId); 308 } 309 310 /** 311 * Native Use. Use setMapTypeId(MapTypeId mapTypeId). The initial Map 312 * {@link MapTypeId}. Required. 313 */ 314 private final native void setMapTypeIdJs(String type) /*-{ 315 this.mapTypeId = $wnd.google.maps.MapTypeId[type]; 316 }-*/; 317 318 /** 319 * Native Use. Apply a given user defined map type string. Required. 320 */ 321 private final native void setMapTypeIdStringJs(String type) /*-{ 322 this.mapTypeId = type; 323 }-*/; 324 325 /** 326 * Get {@link MapTypeId} 327 */ 328 public final MapTypeId getMapTypeId() { 329 String type = getMapTypeIdJs(); 330 return MapTypeId.fromValue(type); 331 } 332 333 /** 334 * Get mapTypeId string 335 */ 336 public final String getMapTypeIdString() { 337 return getMapTypeIdJs(); 338 } 339 340 /** 341 * native use. get {@link MapTypeId} 342 * 343 * @return String 344 */ 345 private final native String getMapTypeIdJs() /*-{ 346 return this.mapTypeId; 347 }-*/; 348 349 /** 350 * set The maximum zoom level which will be displayed on the map. If 351 * omitted, or set to null, the maximum zoom from the current map type is 352 * used instead. 353 * 354 * @param maxZoom 355 */ 356 public final native void setMaxZoom(int maxZoom) /*-{ 357 this.maxZoom = maxZoom; 358 }-*/; 359 360 /** 361 * get maxZoom 362 * 363 * @return int 364 */ 365 public final native int getMaxZoom() /*-{ 366 return this.maxZoom; 367 }-*/; 368 369 /** 370 * set The minimum zoom level which will be displayed on the map. If 371 * omitted, or set to null, the minimum zoom from the current map type is 372 * used instead. 373 * 374 * @param minZoom 375 */ 376 public final native void setMinZoom(int minZoom) /*-{ 377 this.minZoom = minZoom; 378 }-*/; 379 380 /** 381 * get The minimum zoom level which will be displayed on the map. If 382 * omitted, or set to null, the minimum zoom from the current map type is 383 * used instead. 384 */ 385 public final native int getMinZoom() /*-{ 386 return this.minZoom; 387 }-*/; 388 389 /** 390 * set If true, do not clear the contents of the Map div. 391 * 392 * @param noClear 393 */ 394 public final native void setNoClear(boolean noClear) /*-{ 395 this.noClear = noClear; 396 }-*/; 397 398 /** 399 * get If true, do not clear the contents of the Map div. 400 */ 401 public final native boolean getNoClear() /*-{ 402 return this.noClear; 403 }-*/; 404 405 /** 406 * set The enabled/disabled state of the Overview Map control. 407 * 408 * @param overviewMapControl 409 */ 410 public final native void setOverviewMapControl(boolean overviewMapControl) /*-{ 411 this.overviewMapControl = overviewMapControl; 412 }-*/; 413 414 /** 415 * get The enabled/disabled state of the Overview Map control. 416 */ 417 public final native boolean getOverviewMapControl() /*-{ 418 return this.overviewMapControl; 419 }-*/; 420 421 /** 422 * set The display options for the Overview Map control. 423 * {@link OverviewMapControlOptions} 424 * 425 * @param overviewMapControlOptions 426 */ 427 public final native void setOverviewMapControlOptions( 428 OverviewMapControlOptions overviewMapControlOptions) /*-{ 429 this.overviewMapControlOptions = overviewMapControlOptions; 430 }-*/; 431 432 /** 433 * get The display options for the Overview Map control. 434 * 435 * @return {@link OverviewMapControlOptions} 436 */ 437 public final native OverviewMapControlOptions getOverviewMapControlOptions() /*-{ 438 return this.overviewMapControlOptions; 439 }-*/; 440 441 /** 442 * The enabled/disabled state of the Pan control. 443 * 444 * @param panControl 445 */ 446 public final native void setPanControl(boolean panControl) /*-{ 447 this.panControl = panControl; 448 }-*/; 449 450 /** 451 * get The enabled/disabled state of the Pan control. 452 * 453 * @return boolean 454 */ 455 public final native boolean getPanControl() /*-{ 456 return this.panControl; 457 }-*/; 458 459 /** 460 * sets The display options for the Pan control. 461 * 462 * @param panControlOptions 463 * {@link PanControlOptions} 464 */ 465 public final native void setPanControlOptions( 466 PanControlOptions panControlOptions) /*-{ 467 this.panControlOptions = panControlOptions; 468 }-*/; 469 470 /** 471 * gets The display options for the Pan control. 472 * 473 * @return {@link PanControlOptions} 474 */ 475 public final native PanControlOptions getPanControlOptions() /*-{ 476 return this.panControlOptions; 477 }-*/; 478 479 /** 480 * set The enabled/disabled state of the Rotate control. 481 * 482 * @param rotateControl 483 */ 484 public final native void setRotateControl(boolean rotateControl) /*-{ 485 this.rotateControl = rotateControl; 486 }-*/; 487 488 /** 489 * get The enabled/disabled state of the Rotate control. 490 */ 491 public final native boolean getRotateControl() /*-{ 492 return this.rotateControl; 493 }-*/; 494 495 /** 496 * set The display options for the Rotate control. 497 * 498 * @param rotateControlOptions 499 * {@link RotateControlOptions} 500 */ 501 public final native void setRotateControlOptions( 502 RotateControlOptions rotateControlOptions) /*-{ 503 this.rotateControlOptions = rotateControlOptions; 504 }-*/; 505 506 /** 507 * get set The display options for the Rotate control. 508 * 509 * @return {@link RotateControlOptions} 510 */ 511 public final native RotateControlOptions getRotateControlOptions() /*-{ 512 return this.rotateControlOptions; 513 }-*/; 514 515 /** 516 * set The initial enabled/disabled state of the Scale control. 517 * 518 * @param scaleControl 519 */ 520 public final native void setScaleControl(boolean scaleControl) /*-{ 521 this.scaleControl = scaleControl; 522 }-*/; 523 524 /** 525 * get The initial enabled/disabled state of the Scale control. 526 * 527 * @return boolean 528 */ 529 public final native boolean getScaleControl() /*-{ 530 return this.scaleControl; 531 }-*/; 532 533 /** 534 * set The initial display options for the Scale control. 535 * 536 * @param scaleControlOptions 537 * {@link ScaleControlOptions} 538 */ 539 public final native void setScaleControlOptions( 540 ScaleControlOptions scaleControlOptions) /*-{ 541 this.scaleControlOptions = scaleControlOptions; 542 }-*/; 543 544 /** 545 * get The initial display options for the Scale control. 546 * 547 * @return {@link ScaleControlOptions} 548 */ 549 public final native ScaleControlOptions getScaleControlOptions() /*-{ 550 return this.scaleOptions; 551 }-*/; 552 553 /** 554 * set If false, disables scrollwheel zooming on the map. The scrollwheel is 555 * enabled by default. 556 * 557 * @param scrollWheel 558 */ 559 public final native void setScrollWheel(boolean scrollWheel) /*-{ 560 this.scrollWheel = scrollWheel; 561 }-*/; 562 563 /** 564 * get If false, disables scrollwheel zooming on the map. The scrollwheel is 565 * enabled by default. 566 */ 567 public final native boolean getScrollWheel() /*-{ 568 return this.scrollWheel; 569 }-*/; 570 571 /** 572 * set A StreetViewPanorama to display when the Street View Pegman is 573 * dropped on the map. If no panorama is specified, a default 574 * StreetViewPanorama will be displayed in the map's div when the pegman is 575 * dropped. 576 * 577 * @param streetViewControl 578 */ 579 public final native void setStreetViewControl(boolean streetViewControl) /*-{ 580 this.streetViewControl = streetViewControl; 581 }-*/; 582 583 /** 584 * get set A StreetViewPanorama to display when the Street View pegman is 585 * dropped on the map. If no panorama is specified, a default 586 * StreetViewPanorama will be displayed in the map's div when the pegman is 587 * dropped. 588 */ 589 public final native boolean getStreetViewControl() /*-{ 590 return this.streetViewControl; 591 }-*/; 592 593 /** 594 * The initial enabled/disabled state of the Street View Pegman control. 595 * This control is part of the default UI, and should be set to false when 596 * displaying a map type on which the Street View road overlay should not 597 * appear (e.g. a non-Earth map type). 598 * 599 * @param streetViewControlOptions 600 * {@link StreetViewControlOptions} 601 */ 602 public final native void setStreetViewControlOptions( 603 StreetViewControlOptions streetViewControlOptions) /*-{ 604 this.streetViewControlOptions = streetViewControlOptions; 605 }-*/; 606 607 /** 608 * get The initial enabled/disabled state of the Street View Pegman control. 609 * This control is part of the default UI, and should be set to false when 610 * displaying a map type on which the Street View road overlay should not 611 * appear (e.g. a non-Earth map type). 612 * 613 * @return {@link StreetViewControlOptions} 614 */ 615 public final native StreetViewControlOptions getStreetViewControlOptions() /*-{ 616 return this.streetViewcontrolOptions; 617 }-*/; 618 619 public final void setMapTypeStyles(MapTypeStyle[] styles) { 620 JsArray<MapTypeStyle> arr = ArrayHelper.toJsArray(styles); 621 setMapTypeStyles(arr); 622 } 623 624 /** 625 * set Styles to apply to each of the default map types. Note that styles 626 * will apply only to the labels and geometry in Satellite/Hybrid and 627 * Terrain modes. 628 */ 629 private final native void setMapTypeStyles(JsArray<MapTypeStyle> styles) /*-{ 630 this.styles = styles; 631 }-*/; 632 633 /** 634 * get set Styles to apply to each of the default map types. Note that 635 * styles will apply only to the labels and geometry in Satellite/Hybrid and 636 * Terrain modes. 637 */ 638 public final MapTypeStyle[] getMapTypeStyles() { 639 JsArray<MapTypeStyle> arr = getMapTypeStylesJs(); 640 MapTypeStyle[] r = new MapTypeStyle[arr.length()]; 641 for (int i = 0; i < arr.length(); i++) { 642 r[i] = arr.get(i); 643 } 644 return r; 645 } 646 647 /** 648 * get set Styles to apply to each of the default map types. Note that 649 * styles will apply only to the labels and geometry in Satellite/Hybrid and 650 * Terrain modes. 651 */ 652 private final native JsArray<MapTypeStyle> getMapTypeStylesJs() /*-{ 653 return this.styles; 654 }-*/; 655 656 /** 657 * sets The angle of incidence of the map as measured in degrees from the 658 * viewport plane to the map plane. The only currently supported values are 659 * 0, indicating no angle of incidence (no tilt), and 45, indicating a tilt 660 * of 45°. 45° imagery is only available for SATELLITE and HYBRID 661 * map types, within some locations, and at some zoom levels. 662 */ 663 public final native void setTilt(int tilt) /*-{ 664 this.tilt = tilt; 665 }-*/; 666 667 /** 668 * gets The angle of incidence of the map as measured in degrees from the 669 * viewport plane to the map plane. The only currently supported values are 670 * 0, indicating no angle of incidence (no tilt), and 45, indicating a tilt 671 * of 45°. 45° imagery is only available for SATELLITE and HYBRID 672 * map types, within some locations, and at some zoom levels. 673 */ 674 public final native int getTilt() /*-{ 675 return this.tilt; 676 }-*/; 677 678 /** 679 * The initial Map zoom level. Required. 680 * 681 * @param zoom 682 */ 683 public final native void setZoom(int zoom) /*-{ 684 this.zoom = zoom; 685 }-*/; 686 687 /** 688 * get Map zoom level 689 * 690 * @return int 691 */ 692 public final native int getZoom() /*-{ 693 return this.zoom; 694 }-*/; 695 696 /** 697 * sets The enabled/disabled state of the Zoom control. 698 * 699 * @param zoomControl 700 */ 701 public final native void setZoomControl(boolean zoomControl) /*-{ 702 this.zoomControl = zoomControl; 703 }-*/; 704 705 /** 706 * gets The enabled/disabled state of the Zoom control. 707 */ 708 public final native boolean getZoomControl() /*-{ 709 return this.zoomControl; 710 }-*/; 711 712 /** 713 * sets The display options for the Zoom control. 714 * 715 * @param zoomControlOptions 716 */ 717 public final native void setZoomControlOptions( 718 ZoomControlOptions zoomControlOptions) /*-{ 719 this.zoomControlOptions = zoomControlOptions; 720 }-*/; 721 722 /** 723 * gets The display options for the Zoom control. 724 */ 725 public final native ZoomControlOptions getZoomControlOptions() /*-{ 726 return this.zoomControlOptions; 727 }-*/; 728 729 730 public final String toString2() { 731 return "Type:"+getMapTypeIdJs()+ 732 ", Styles:"+getMapTypeStyles(); 733 } 734 }