Source: BKGWebMap/Control/NavToolbar.js

/*
 * Copyright (c) 2013 Bundesamt für Kartographie und Geodäsie.
 * See license.txt in the BKG WebMap distribution or repository for the
 * full text of the license.
 *
 * Author: Dirk Thalheim
 */

/**
 * @requires OpenLayers/BaseTypes/Class.js
 * @requires OpenLayers/Control/Panel.js
 * @requires OpenLayers/Control/NavigationHistory.js
 * @requires BKGWebMap/Control.js
 * @requires BKGWebMap/Util.js
 */

/**
 * @classdesc Erweiterte Toolbar zur Anzeige der Navigation, Zoombox und Navigation-History Steuerelemente.
 *
 * @constructor BKGWebMap.Control.NavToolbar
 * @param {object} options - Optionen für das Controlelement
 */
BKGWebMap.Control.NavToolbar = OpenLayers.Class(OpenLayers.Control.Panel, {

    /**
     * Optionen für die Navigation
     * @memberOf BKGWebMap.Control.NavToolbar
     */
    navigationOptions: {title: 'Karte verschieben'},

    /**
     * Optionen für die Zoombox
     * @memberOf BKGWebMap.Control.NavToolbar
     */
    zoomBoxOptions: {title: 'Karte vergrößern'},

    /**
     * Optionen für die Navigationshistorie
     * @memberOf BKGWebMap.Control.NavToolbar
     */
    historyOptions: {
        previousOptions: { title: 'Letzte Ansicht' },
        nextOptions: { title: 'Letzte Ansicht' }
    },

    /**
     * Optionen für Kartenextendzoom
     * @memberOf BKGWebMap.Control.NavToolbar
     */
    zoomToExtendOptions: { title: 'Auf Kartenausdehnung zoomen' },

    initialize:function(options) {
        OpenLayers.Control.Panel.prototype.initialize.apply(this, [options]);

        this.history = new OpenLayers.Control.NavigationHistory(this.historyOptions);

        var navigation = new OpenLayers.Control.Navigation(this.navigationOptions);
        this.defaultControl = (this.defaultControl) ? this.defaultControl : navigation;

        var controls = [
            new OpenLayers.Control.ZoomToMaxExtent(this.zoomToExtendOptions),
            navigation,
            new OpenLayers.Control.ZoomBox(this.zoomBoxOptions),
            this.history.previous,
            this.history.next
        ];

        if(options && options.otherControls) {
            controls = controls.concat(options.otherControls);
        }

        this.addControls(controls);
    },

    setMap: function(map) {
        // Falls schon ein Navigation-Control vorhanden ist, muss dies entfernt werden,
        // sonst kommt es zum Überspringen von Zoomlevels!
        var navControls = map.getControlsByClass("OpenLayers.Control.Navigation");
        BKGWebMap.Util.each( navControls, function(index, control) {
            map.removeControl(control);
            control.destroy();
        });

        // Die Historie muss der Map hinzugefügt werden:
        map.addControl(this.history);
        OpenLayers.Control.NavToolbar.prototype.setMap.apply(this, arguments);
    },

    /**
     * Method: draw
     * calls the default draw, and then activates mouse defaults.
     * @memberOf BKGWebMap.Control.NavToolbar
     */
    draw: function() {
        var div = OpenLayers.Control.Panel.prototype.draw.apply(this, arguments);
        if (this.defaultControl === null) {
            this.defaultControl = this.navigation;
        }
        return div;
    },


    CLASS_NAME: "BKGWebMap.Control.NavToolbar"
});

/**
 * Fügt die StandardToolbar zum Navigieren als Steuerelement der Liste hinzu.
 * @param {Array<OpenLayers.Control>} controls - Liste der Steuerelemente, in die die neue erzeugten Steuerelemente
 *                                               eingefügt werden sollen.
 * @param {object} config - Konfiguration für Toolbar (s. Konstruktor OpenLayers.Control.NavToolbar).
 * @param {object} config.otherControls - Konfiguration für weitere Steuerelemente für die Toolbar.
 */
BKGWebMap.Control.FACTORIES['defaultToolPanel'] = function(controls, config) {
  if (!config) return;

  config = (typeof config === 'boolean') ? {} : config;

  if (config.controls) {
    config.otherControls = BKGWebMap.Control.create(config.controls);
    delete config.controls;
  }
  controls.push(new BKGWebMap.Control.NavToolbar(config));
};