Add support for ClusterMarker and MarkerManager (without the G) marker managers.
[project/gmap.git] / gmap_settings_ui.inc
index 49852ee..4828bb6 100644 (file)
@@ -273,30 +273,56 @@ function gmap_admin_settings(&$form_state) {
   if (!isset($opts['gmarkermanager']) || !is_array($opts['gmarkermanager'])) {
     $opts['gmarkermanager'] = array();
   }
+  if (!isset($opts['markermanager']) || !is_array($opts['markermanager'])) {
+    $opts['markermanager'] = array();
+  }
   if (!isset($opts['clusterer']) || !is_array($opts['clusterer'])) {
     $opts['clusterer'] = array();
   }
+  if (!isset($opts['clustermarker']) || !is_array($opts['clustermarker'])) {
+    $opts['clustermarker'] = array();
+  }
 
   $opts['gmap'] = array_merge(array(
     // None.
   ), $opts['gmap']);
 
   $opts['gmarkermanager'] = array_merge(array(
-    'borderPadding' => 0,
+    'borderPadding' => 256,
     'maxZoom' => 4,
     'trackMarkers' => FALSE,
     'markerMinZoom' => 4,
     'markerMaxZoom' => 0,
   ), $opts['gmarkermanager']);
 
+  $opts['markermanager'] = array_merge(array(
+    'filename' => 'markermanager_packed.js',
+    'borderPadding' => 256,
+    'maxZoom' => 4,
+    'trackMarkers' => FALSE,
+    'markerMinZoom' => 4,
+    'markerMaxZoom' => 0,
+  ), $opts['markermanager']);
+
   $opts['clusterer'] = array_merge(array(
-    'clusterer_file' => 'Clusterer2.js',
+    'filename' => 'Clusterer2.js',
     'marker' => 'cluster',
     'max_nocluster' => 150,
     'cluster_min' => 5,
     'max_lines' => 10,
+    'popup_mode' => 'orig',
   ), $opts['clusterer']);
 
+  $opts['clustermarker'] = array_merge(array(
+    'filename' => 'ClusterMarker.js',
+    'borderPadding' => 256,
+    'clusteringEnabled' => TRUE,
+    'clusterMarkerIcon' => '',
+    'clusterMarkerTitle' => '',
+    'fitMapMaxZoom' => 0,
+    'intersectPadding' => 0,
+  ), $opts['clustermarker']);
+
   $form['gmap_markermanager'] = array(
     '#type' => 'fieldset',
     '#title' => t('Marker manager'),
@@ -309,30 +335,37 @@ function gmap_admin_settings(&$form_state) {
     '#options' => array(
       'gmap' => t('No manager (use GMap API directly)'),
       'gmarkermanager' => t("Google's GMarkerManager"),
+      'markermanager' => t('Gmaps Utility Library MarkerManager'),
       'clusterer' => t("Jef Poskanzer's Clusterer"),
+      'clustermarker' => t("Martin Pearman's ClusterMarker"),
     ),
     '#default_value' => variable_get('gmap_mm_type', 'gmap'),
     '#description' => t('If you are planning on using many markers on a single map, you may want to consider using a marker manager to speed up map rendering.'),
   );
 
+  // No Manager
   $form['gmap_markermanager']['gmap'] = array(
     '#type' => 'fieldset',
     '#title' => t('Unmanaged marker settings'),
     '#description' => t('There are no settings for unmanaged markers.'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
   );
 
+  // Google Maps API GMarkerManager
   $form['gmap_markermanager']['gmarkermanager'] = array(
     '#type' => 'fieldset',
     '#title' => t('GMarkerManager settings'),
     '#description' => t('GMarkerManager is a new part of the official Google Maps API that provides a marker manager.'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
   );
-
   $form['gmap_markermanager']['gmarkermanager']['borderPadding'] = array(
     '#type' => 'textfield',
     '#title' => t('Border padding'),
     '#description' => t('Markers located less than this number of pixels from the viewport will be added to the map by the manager (even if they would be fully invisible.)'),
-    '#size' => 3,
-    '#maxlength' => 3,
+    '#size' => 4,
+    '#maxlength' => 4,
     '#default_value' => $opts['gmarkermanager']['borderPadding'],
   );
   $form['gmap_markermanager']['gmarkermanager']['maxZoom'] = array(
@@ -361,7 +394,6 @@ function gmap_admin_settings(&$form_state) {
     '#default_value' => $opts['gmarkermanager']['markerMinZoom'],
     '#parents' => array('gmap_markermanager', 'gmarkermanager', 'markerMinZoom'),
   );
-
   $form['gmap_markermanager']['gmarkermanager']['defaults']['markerMaxZoom'] = array(
     '#type' => 'select',
     '#title' => t('Maximum zoom'),
@@ -371,16 +403,77 @@ function gmap_admin_settings(&$form_state) {
     '#parents' => array('gmap_markermanager', 'gmarkermanager', 'markerMaxZoom'),
   );
 
+  // Gmaps Utility Library -- MarkerManager
+  $form['gmap_markermanager']['markermanager'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('MarkerManager settings'),
+    '#description' => t('MarkerManager is the improved open source version of GMarkerManager. To use, you must download it from <a href="@url">here</a> and place it in the <em>thirdparty</em> folder.', array('@url' => 'http://gmaps-utility-library.googlecode.com/svn/trunk/markermanager/release/src/')),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+  );
+  $form['gmap_markermanager']['markermanager']['filename'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Filename'),
+    '#description' => t('Name of downloaded file in the thirdparty folder. Default: %default', array('%default' => 'markermanager_packed.js')),
+    '#default_value' => $opts['markermanager']['filename'],
+  );
+  $form['gmap_markermanager']['markermanager']['borderPadding'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Border padding'),
+    '#description' => t('Markers located less than this number of pixels from the viewport will be added to the map by the manager (even if they would be fully invisible.)'),
+    '#size' => 4,
+    '#maxlength' => 4,
+    '#default_value' => $opts['markermanager']['borderPadding'],
+  );
+  $form['gmap_markermanager']['markermanager']['maxZoom'] = array(
+    '#type' => 'select',
+    '#title' => t('Maximum zoom'),
+    '#options' => drupal_map_assoc(range(0, 17)),
+    '#description' => t('At the specified zoom level and above, the marker manager will disable itself for additional speed.'),
+    '#default_value' => $opts['markermanager']['maxZoom'],
+  );
+  $form['gmap_markermanager']['markermanager']['trackMarkers'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Track markers'),
+    '#description' => t('If enabled, the marker manager will track marker movements. Leave off unless you need to move markers around with setPoint.'),
+    '#default_value' => $opts['markermanager']['trackMarkers'],
+  );
+  $form['gmap_markermanager']['markermanager']['defaults'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Marker defaults'),
+    '#description' => t('Default marker-specific settings for MarkerManager. Markers will appear when the current zoom level is between minZoom and maxZoom.'),
+  );
+  $form['gmap_markermanager']['markermanager']['defaults']['markerMinZoom'] = array(
+    '#type' => 'select',
+    '#title' => t('Minimum zoom'),
+    '#options' => drupal_map_assoc(range(0, 17)),
+    '#description' => t('At the specified zoom level and above (i.e. zooming in,) the marker will be shown. Choose 0 to show markers at all zoom levels by default.'),
+    '#default_value' => $opts['markermanager']['markerMinZoom'],
+    '#parents' => array('gmap_markermanager', 'markermanager', 'markerMinZoom'),
+  );
+
+  $form['gmap_markermanager']['markermanager']['defaults']['markerMaxZoom'] = array(
+    '#type' => 'select',
+    '#title' => t('Maximum zoom'),
+    '#options' => drupal_map_assoc(range(0, 17)),
+    '#description' => t('At the specified zoom level and above (i.e. zooming in,) the marker will be hidden. Choose 0 to disable by default.'),
+    '#default_value' => $opts['markermanager']['markerMaxZoom'],
+    '#parents' => array('gmap_markermanager', 'markermanager', 'markerMaxZoom'),
+  );
+
+  // Jef Poskanzer's Clusterer
   $form['gmap_markermanager']['clusterer'] = array(
     '#type' => 'fieldset',
     '#title' => t('Clusterer settings'),
     '#description' => t("Clusterer is a marker manager written by Jef Poskanzer of acme.com. To use, you must place Clusterer2.js (available ".'<a href="@url">here</a>) into the "thirdparty" folder.', array('@url' => 'http://acme.com/javascript/Clusterer2.js')),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
   );
-  $form['gmap_markermanager']['clusterer']['clusterer_file'] = array(
+  $form['gmap_markermanager']['clusterer']['filename'] = array(
     '#type' => 'textfield',
-    '#title' => t('Clusterer filename'),
-    '#description' => t('Set the name of the Clusterer file in the thirdparty folder.'),
-    '#default_value' => $opts['clusterer']['clusterer_file'],
+    '#title' => t('Filename'),
+    '#description' => t('Name of downloaded file in the thirdparty folder. Default: %default', array('%default' => 'Clusterer2.js')),
+    '#default_value' => $opts['clusterer']['filename'],
   );
   $form['gmap_markermanager']['clusterer']['marker'] = array(
     '#type' => 'gmap_markerchooser',
@@ -393,8 +486,8 @@ function gmap_admin_settings(&$form_state) {
     '#title' => t('Activate on'),
     '#field_suffix' => t('or more markers'),
     '#description' => t("Clustering is enabled when more than the specified number of markers are visible at the same time."),
-    '#size' => 3,
-    '#maxlength' => 3,
+    '#size' => 4,
+    '#maxlength' => 4,
     '#default_value' => $opts['clusterer']['max_nocluster'],
   );
   $form['gmap_markermanager']['clusterer']['cluster_min'] = array(
@@ -402,8 +495,8 @@ function gmap_admin_settings(&$form_state) {
     '#title' => t('Cluster on'),
     '#field_suffix' => t('or more markers'),
     '#description' => t("Minimal number of markers per cluster"),
-    '#size' => 2,
-    '#maxlength' => 2,
+    '#size' => 3,
+    '#maxlength' => 3,
     '#default_value' => $opts['clusterer']['cluster_min'],
   );
   $form['gmap_markermanager']['clusterer']['max_lines'] = array(
@@ -412,10 +505,72 @@ function gmap_admin_settings(&$form_state) {
     '#field_prefix' => t('at most'),
     '#field_suffix' => t('lines'),
     '#description' => t("Maximum number of lines per info box"),
-    '#size' => 2,
-    '#maxlength' => 2,
+    '#size' => 3,
+    '#maxlength' => 3,
     '#default_value' => $opts['clusterer']['max_lines'],
   );
+  $form['gmap_markermanager']['clusterer']['popup_mode'] = array(
+    '#type' => 'radios',
+    '#title' => t('Popup mode'),
+    '#options' => array('orig' => t('Original'), 'zoom' => t('Zoom to Cluster')),
+    '#default_value' => $opts['clusterer']['popup_mode'],
+  );
+
+  // Martin Pearman's ClusterMarker
+  $form['gmap_markermanager']['clustermarker'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('ClusterMarker settings'),
+    '#description' => t('ClusterMarker is a marker manager written by Martin Pearman. To use, you must download it from <a href="@url">here</a> and extract the appropriate file to the <em>thirdparty</em> folder.', array('@url' => 'http://googlemapsapi.martinpearman.co.uk/downloads.php?cat_id=1')),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+  );
+  $form['gmap_markermanager']['clustermarker']['filename'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Filename'),
+    '#description' => t('Name of downloaded file in the thirdparty folder. Default: %default', array('%default' => 'ClusterMarker.js')),
+    '#default_value' => $opts['clustermarker']['filename'],
+  );
+  $form['gmap_markermanager']['clustermarker']['borderPadding'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Border padding'),
+    '#description' => t('Markers located less than this number of pixels from the viewport will be added to the map by the manager (even if they would be fully invisible.)'),
+    '#size' => 4,
+    '#maxlength' => 4,
+    '#default_value' => $opts['clustermarker']['borderPadding'],
+  );
+  $form['gmap_markermanager']['clustermarker']['clusteringEnabled'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Clustering enabled'),
+    '#description' => t('Whether to use clustering or not.'),
+    '#default_value' => $opts['clustermarker']['clusteringEnabled'],
+  );
+  $form['gmap_markermanager']['clustermarker']['clusterMarkerIcon'] = array(
+    '#type' => 'gmap_markerchooser',
+    '#title' => t('Marker for clusters'),
+    '#description' => t('The marker to use when creating a cluster.'),
+    '#default_value' => $opts['clustermarker']['clusterMarkerIcon'],
+  );
+  $form['gmap_markermanager']['clustermarker']['clusterMarkerTitle'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Title for clusters'),
+    '#description' => t("The title to use for clusters. %count will be replaced with the number of markers in the cluster."),
+    '#default_value' => $opts['clustermarker']['clusterMarkerTitle'],
+  );
+  $form['gmap_markermanager']['clustermarker']['fitMapMaxZoom'] = array(
+    '#type' => 'select',
+    '#title' => t('Maximum zoom for zooming to cluster'),
+    '#options' => drupal_map_assoc(range(0, 17)),
+    '#description' => t('When clicking on a cluster, the map will not zoom in farther than this.'),
+    '#default_value' => $opts['clustermarker']['fitMapMaxZoom'],
+  );
+  $form['gmap_markermanager']['clustermarker']['intersectPadding'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Intersect Padding'),
+    '#description' => t('Number of pixels to pad marker icons by when determining whether they intersect.'),
+    '#default_value' => $opts['clustermarker']['intersectPadding'],
+    '#size' => 4,
+    '#maxlength' => 4,
+  );
 
   // @@@ Convert to element level validation.
   $form['#validate'][] = 'gmap_admin_settings_validate';