[Commits] r1492 - core/trunk/geoext/lib/GeoExt/widgets/tree
commits at geoext.org
commits at geoext.org
Wed Nov 25 20:36:08 CET 2009
Author: ahocevar
Date: 2009-11-25 20:36:08 +0100 (Wed, 25 Nov 2009)
New Revision: 1492
Modified:
core/trunk/geoext/lib/GeoExt/widgets/tree/LayerNode.js
Log:
Fixed an issue that manifested itself by the checkchange event being fired twice, along with some weirdness of having to set the checkbox state manually. All of this is now resolved. r=tschaub (closes #180)
Modified: core/trunk/geoext/lib/GeoExt/widgets/tree/LayerNode.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/widgets/tree/LayerNode.js 2009-11-25 19:26:24 UTC (rev 1491)
+++ core/trunk/geoext/lib/GeoExt/widgets/tree/LayerNode.js 2009-11-25 19:36:08 UTC (rev 1492)
@@ -63,7 +63,7 @@
this.radio.defaultChecked = this.radio.checked;
this.fireEvent("radiochange", this.node);
} else if(e.getTarget('.x-tree-node-cb', 1)) {
- this.onCheckChange();
+ this.toggleCheck(this.isChecked());
} else {
GeoExt.tree.LayerNodeUI.superclass.onClick.apply(this, arguments);
}
@@ -73,26 +73,15 @@
* :param value: ``Boolean``
*/
toggleCheck: function(value) {
- if(!this._visibilityChanging) {
- this._visibilityChanging = true;
-
- // make sure we do not hide the checked layer from a checkedGroup
- value = (value === undefined ? !this.isChecked() : value) ||
- (this.isChecked() && !!this.node.attributes.checkedGroup);
- GeoExt.tree.LayerNodeUI.superclass.toggleCheck.call(this, value);
-
- this.enforceOneVisible();
-
- delete this._visibilityChanging;
- }
+ value = (value === undefined ? !this.isChecked() : value);
+ GeoExt.tree.LayerNodeUI.superclass.toggleCheck.call(this, value);
+
+ this.enforceOneVisible();
},
/** private: method[enforceOneVisible]
*
* Makes sure that only one layer is visible if checkedGroup is set.
- * This can only work when ``layer.setVisibility()`` does not trigger
- * ``this.toggleCheck()``. If it does, ``this._visibilityChanging`` has
- * to be set to true before calling this method.
*/
enforceOneVisible: function() {
var attributes = this.node.attributes;
@@ -108,13 +97,6 @@
if(!n.hidden && n.attributes.checkedGroup === group) {
checkedCount++;
if(l != layer && attributes.checked) {
- // toggleCheck won't be called (_visibilityChanging
- // set to true when we are called from toggleCheck(),
- // and layer visibility handler is not yet set when we
- // are called from render()), so we synchronize the
- // button state manually
- ui.checkbox.defaultChecked = false;
- ui.checkbox.checked = false;
l.setVisibility(false);
}
}
@@ -122,12 +104,6 @@
// enforce "at least one visible"
if(checkedCount === 0 && attributes.checked == false) {
var ui = this.node.getUI();
- // toggleCheck won't be called (_visibilityChanging set to
- // true when we are called from toggleCheck(), and layer
- // visibility handler is not yet set when we are called from
- // render()), so we synchronize the button state manually
- ui.checkbox.defaultChecked = true;
- ui.checkbox.checked = true;
layer.setVisibility(true);
}
}
@@ -328,7 +304,9 @@
* handler for visibilitychanged events on the layer
*/
onLayerVisibilityChanged: function() {
- this.getUI().toggleCheck(this.layer.getVisibility());
+ if(!this._visibilityChanging) {
+ this.getUI().toggleCheck(this.layer.getVisibility());
+ }
},
/** private: method[onCheckChange]
@@ -339,12 +317,14 @@
*/
onCheckChange: function(node, checked) {
if(checked != this.layer.getVisibility()) {
+ this._visibilityChanging = true;
var layer = this.layer;
if(checked && layer.isBaseLayer && layer.map) {
layer.map.setBaseLayer(layer);
} else {
layer.setVisibility(checked);
}
+ delete this._visibilityChanging;
}
},
@@ -406,7 +386,7 @@
* Listener for the store's update event.
*/
onStoreUpdate: function(store, record, operation) {
- var layer = record.get("layer");
+ var layer = record.get("layer");
if(!this.fixedText && (this.layer == layer && this.text !== layer.name)) {
this.setText(layer.name);
}
More information about the Commits
mailing list