Committing patch for #614 to add panel_div element to control panel

subcontrols. This will allow users to modify properties of the div -- for
example, adding a title element to the div. Access this property via
panel_div on the added control after addControls is called on the panel.


git-svn-id: http://svn.openlayers.org/trunk/openlayers@2973 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
crschmidt
2007-04-02 14:10:38 +00:00
parent cefccb4a89
commit d68caa00a5

View File

@@ -33,6 +33,14 @@ OpenLayers.Control.Panel.prototype =
this.controls = [];
},
destroy: function() {
OpenLayers.Control.prototype.destroy.apply(this, arguments);
for(var i = this.controls.length - 1 ; i >= 0; i--) {
OpenLayers.Event.stopObservingElement(this.controls[i].panel_div);
this.controls[i].panel_div = null;
}
},
activate: function() {
if (OpenLayers.Control.prototype.activate.apply(this, arguments)) {
for(var i = 0; i < this.controls.length; i++) {
@@ -46,6 +54,7 @@ OpenLayers.Control.Panel.prototype =
return false;
}
},
deactivate: function() {
if (OpenLayers.Control.prototype.deactivate.apply(this, arguments)) {
for(var i = 0; i < this.controls.length; i++) {
@@ -78,24 +87,12 @@ OpenLayers.Control.Panel.prototype =
this.div.innerHTML = "";
if (this.active) {
for (var i = 0; i < this.controls.length; i++) {
var element = document.createElement("div");
var textNode = document.createTextNode(" ");
var element = this.controls[i].panel_div;
if (this.controls[i].active) {
element.className = this.controls[i].displayClass + "ItemActive";
} else {
element.className = this.controls[i].displayClass + "ItemInactive";
}
var onClick = function (ctrl, evt) {
OpenLayers.Event.stop(evt ? evt : window.event);
this.activateControl(ctrl);
};
var control = this.controls[i];
OpenLayers.Event.observe(element, "click",
onClick.bind(this, control));
OpenLayers.Event.observe(element, "mousedown",
OpenLayers.Event.stop.bindAsEventListener());
OpenLayers.Event.observe(element, "mouseup",
OpenLayers.Event.stop.bindAsEventListener());
this.div.appendChild(element);
}
}
@@ -128,6 +125,22 @@ OpenLayers.Control.Panel.prototype =
controls = [controls];
}
this.controls = this.controls.concat(controls);
// Give each control a panel_div which will be used later.
// Access to this div is via the panel_div attribute of the
// control added to the panel.
for (var i = 0; i < controls.length; i++) {
var element = document.createElement("div");
var textNode = document.createTextNode(" ");
controls[i].panel_div = element;
OpenLayers.Event.observe(controls[i].panel_div, "click",
this.onClick.bind(this, controls[i]));
OpenLayers.Event.observe(controls[i].panel_div, "mousedown",
OpenLayers.Event.stop.bindAsEventListener());
OpenLayers.Event.observe(controls[i].panel_div, "mouseup",
OpenLayers.Event.stop.bindAsEventListener());
}
if (this.map) { // map.addControl() has already been called on the panel
for (var i = 0; i < controls.length; i++) {
this.map.addControl(controls[i]);
@@ -137,6 +150,11 @@ OpenLayers.Control.Panel.prototype =
}
},
onClick: function (ctrl, evt) {
OpenLayers.Event.stop(evt ? evt : window.event);
this.activateControl(ctrl);
},
/** @final @type String */
CLASS_NAME: "OpenLayers.Control.Panel"
});