[Commits] r863 - in core/trunk/geoext: examples lib/GeoExt/data lib/GeoExt/widgets tests/lib/GeoExt/data tests/lib/GeoExt/widgets
commits at geoext.org
commits at geoext.org
Mon May 25 00:40:21 CEST 2009
Author: tschaub
Date: 2009-05-25 00:40:21 +0200 (Mon, 25 May 2009)
New Revision: 863
Modified:
core/trunk/geoext/examples/popup.js
core/trunk/geoext/lib/GeoExt/data/LayerStore.js
core/trunk/geoext/lib/GeoExt/widgets/MapPanel.js
core/trunk/geoext/lib/GeoExt/widgets/Popup.js
core/trunk/geoext/tests/lib/GeoExt/data/LayerStore.html
core/trunk/geoext/tests/lib/GeoExt/widgets/Popup.html
Log:
The LayerStore now triggers update when layer properties change. r=ahocevar (closes #66)
Modified: core/trunk/geoext/examples/popup.js
===================================================================
--- core/trunk/geoext/examples/popup.js 2009-05-23 06:21:00 UTC (rev 862)
+++ core/trunk/geoext/examples/popup.js 2009-05-24 22:40:21 UTC (rev 863)
@@ -36,7 +36,7 @@
}
}
});
- popup.addToMapPanel(mapPanel);
+ mapPanel.add(popup);
}
// create popup on "featureselected"
Modified: core/trunk/geoext/lib/GeoExt/data/LayerStore.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/data/LayerStore.js 2009-05-23 06:21:00 UTC (rev 862)
+++ core/trunk/geoext/lib/GeoExt/data/LayerStore.js 2009-05-24 22:40:21 UTC (rev 863)
@@ -190,15 +190,15 @@
*/
onChangeLayer: function(evt) {
var layer = evt.layer;
- if(evt.property === "order") {
- if(!this._adding && !this._removing) {
- var layerIndex = this.map.getLayerIndex(layer);
- var recordIndex = this.findBy(function(rec, id) {
- return rec.get("layer") === layer;
- });
- if(recordIndex > -1) {
+ var recordIndex = this.findBy(function(rec, id) {
+ return rec.get("layer") === layer;
+ });
+ if(recordIndex > -1) {
+ var record = this.getAt(recordIndex);
+ if(evt.property === "order") {
+ if(!this._adding && !this._removing) {
+ var layerIndex = this.map.getLayerIndex(layer);
if(layerIndex !== recordIndex) {
- var record = this.getAt(recordIndex);
this._removing = true;
this.remove(record);
delete this._removing;
@@ -207,6 +207,8 @@
delete this._adding;
}
}
+ } else {
+ this.fireEvent("update", this, record, Ext.data.Record.EDIT);
}
}
},
Modified: core/trunk/geoext/lib/GeoExt/widgets/MapPanel.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/widgets/MapPanel.js 2009-05-23 06:21:00 UTC (rev 862)
+++ core/trunk/geoext/lib/GeoExt/widgets/MapPanel.js 2009-05-24 22:40:21 UTC (rev 863)
@@ -170,6 +170,26 @@
this.updateMapSize();
},
+ /** private: method[onBeforeAdd]
+ * Private method called before a component is added to the panel.
+ */
+ onBeforeAdd: function(item) {
+ if(typeof item.addToMapPanel === "function") {
+ item.addToMapPanel(this);
+ }
+ GeoExt.MapPanel.superclass.onBeforeAdd.apply(this, arguments);
+ },
+
+ /** private: method[remove]
+ * Private method called when a component is removed from the panel.
+ */
+ remove: function(item, autoDestroy) {
+ if(typeof item.removeFromMapPanel === "function") {
+ item.removeFromMapPanel(this);
+ }
+ GeoExt.MapPanel.superclass.remove.apply(this, arguments);
+ },
+
/** private: method[beforeDestroy]
* Private method called during the destroy sequence.
*/
Modified: core/trunk/geoext/lib/GeoExt/widgets/Popup.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/widgets/Popup.js 2009-05-23 06:21:00 UTC (rev 862)
+++ core/trunk/geoext/lib/GeoExt/widgets/Popup.js 2009-05-24 22:40:21 UTC (rev 863)
@@ -146,34 +146,36 @@
GeoExt.Popup.superclass.initTools.call(this);
},
- /** api: method[addToMapPanel]
+ /** private: method[addToMapPanel]
* :param mapPanel: :class:`MapPanel` The panel to which this popup should
* be added.
*
* Adds this popup to a :class:`MapPanel`. Assumes that the
* MapPanel's map is already initialized and that the
- * Popup's feature is on the map.
+ * Popup's feature is on the map. This method is called by the MapPanel's
+ * add method.
*/
addToMapPanel: function(mapPanel) {
this.mapPanel = mapPanel;
this.map = this.mapPanel.map;
-
- mapPanel.add(this);
- mapPanel.doLayout();
-
- this.position();
-
- /* Anchoring */
- if(this.anchored) {
- this.anchorPopup();
- }
-
- this.show();
-
- /* Panning */
- if(this.panIn) {
- this.panIntoView();
- }
+
+ mapPanel.on({
+ "add": {
+ fn: function() {
+ mapPanel.doLayout();
+ this.position();
+ if(this.anchored) {
+ this.anchorPopup();
+ }
+ this.show();
+ if(this.panIn) {
+ this.panIntoView();
+ }
+ },
+ single: true,
+ scope: this
+ }
+ });
},
/** api: method[setSize]
@@ -249,7 +251,6 @@
* MapPanel and adds it to the page body.
*/
unanchorPopup: function() {
- this.unbindFromMapPanel();
//make the window draggable
this.draggable = true;
@@ -284,10 +285,11 @@
}
},
- /** private: method[unbindFromMapPanel]
+ /** private: method[removeFromMapPanel]
* Utility method for unbinding events that call for popup repositioning.
+ * Called from the panel during panel.remove(popup).
*/
- unbindFromMapPanel: function() {
+ removeFromMapPanel: function() {
if(this.map && this.map.events) {
//stop position with feature
this.map.events.un({
@@ -296,9 +298,12 @@
});
}
- this.un("resize", this.position);
- this.un("collapse", this.position);
- this.un("expand", this.position);
+ this.un("resize", this.position, this);
+ this.un("collapse", this.position, this);
+ this.un("expand", this.position, this);
+
+ delete this.mapPanel;
+ delete this.map;
},
/** private: method[panIntoView]
@@ -354,7 +359,7 @@
* Cleanup events before destroying the popup.
*/
beforeDestroy: function() {
- this.unbindFromMapPanel();
+ this.removeFromMapPanel();
GeoExt.Popup.superclass.beforeDestroy.call(this);
}
});
Modified: core/trunk/geoext/tests/lib/GeoExt/data/LayerStore.html
===================================================================
--- core/trunk/geoext/tests/lib/GeoExt/data/LayerStore.html 2009-05-23 06:21:00 UTC (rev 862)
+++ core/trunk/geoext/tests/lib/GeoExt/data/LayerStore.html 2009-05-24 22:40:21 UTC (rev 863)
@@ -285,7 +285,92 @@
}
+ function test_events(t) {
+ t.plan(21);
+
+ var map = new OpenLayers.Map({div: "mappanel", allOverlays: true});
+ var a = new OpenLayers.Layer("a");
+ var b = new OpenLayers.Layer("b");
+ var c = new OpenLayers.Layer("c");
+ var d = new OpenLayers.Layer("d");
+ var store = new GeoExt.data.LayerStore({
+ map: map
+ });
+
+ store.add(store.reader.readRecords([a, b, c]).records);
+
+ var events = [];
+ function logEvent(type, args) {
+ events.push({type: type, args: args});
+ }
+ store.on({
+ add: function() {logEvent("add", arguments)},
+ remove: function() {logEvent("remove", arguments)},
+ update: function() {logEvent("update", arguments)}
+ });
+
+ var batch, event, record;
+
+ // confirm that we get an "add" on map.addLayer
+ batch = "map.addLayer";
+ map.addLayer(d);
+ t.eq(events.length, 1, "[" + batch + "] one event");
+ event = events[0];
+ t.eq(event.type, "add", "[" + batch + "] 'add' event");
+ t.eq(event.args[1].length, 1, "[" + batch + "] correct number of records");
+ record = event.args[1][0];
+ t.ok(record.get("layer") === d, "[" + batch + "] correct layer on record");
+
+ // confirm that we get a "remove" on map.removeLayer
+ events = [];
+ batch = "map.removeLayer";
+ map.removeLayer(d);
+ t.eq(events.length, 1, "[" + batch + "] one event");
+ event = events[0];
+ t.eq(event.type, "remove", "[" + batch + "] 'remove' event");
+ t.ok(event.args[1].get("layer") === d, "[" + batch + "] correct layer on record");
+
+ // confirm that we get an "add" and "remove" on map.setLayerIndex
+ events = [];
+ batch = "map.setLayerIndex";
+ map.setLayerIndex(b, 0);
+ t.eq(events.length, 2, "[" + batch + "] two events");
+ event = events[0];
+ t.eq(event.type, "remove", "[" + batch + "] 'remove' event first");
+ t.ok(event.args[1].get("layer") === b, "[" + batch + "] correct layer on record");
+ event = events[1];
+ t.eq(event.type, "add", "[" + batch + "] 'add' event second");
+ t.eq(event.args[1].length, 1, "[" + batch + "] correct number of records");
+ record = event.args[1][0];
+ t.ok(record.get("layer") === b, "[" + batch + "] correct layer on record");
+
+ // confirm that we get an "update" on layer.setName
+ events = [];
+ batch = "layer.setName";
+ c.setName("c layer");
+ t.eq(events.length, 1, "[" + batch + "] one event");
+ event = events[0];
+ t.eq(event.type, "update", "[" + batch + "] 'update' event");
+ t.ok(event.args[1].get("layer") === c, "[" + batch + "] correct layer on record");
+ t.eq(event.args[2], Ext.data.Record.EDIT, "[" + batch + "] correct operation");
+
+ // confirm that we get an "update" on layer.setVisibility
+ events = [];
+ batch = "layer.setVisibility";
+ a.setVisibility(false);
+ t.eq(events.length, 1, "[" + batch + "] one event");
+ event = events[0];
+ t.eq(event.type, "update", "[" + batch + "] 'update' event");
+ t.ok(event.args[1].get("layer") === a, "[" + batch + "] correct layer on record");
+ t.eq(event.args[2], Ext.data.Record.EDIT, "[" + batch + "] correct operation");
+
+
+ map.destroy();
+
+ }
+
+
</script>
</head>
<body>
Modified: core/trunk/geoext/tests/lib/GeoExt/widgets/Popup.html
===================================================================
--- core/trunk/geoext/tests/lib/GeoExt/widgets/Popup.html 2009-05-23 06:21:00 UTC (rev 862)
+++ core/trunk/geoext/tests/lib/GeoExt/widgets/Popup.html 2009-05-24 22:40:21 UTC (rev 863)
@@ -63,7 +63,7 @@
var pop = popup(context.feature);
- pop.addToMapPanel(context.mapPanel);
+ context.mapPanel.add(pop);
t.ok(context.mapPanel.el.child("div." + pop.popupCls),"Map panel contains popup");
@@ -77,7 +77,7 @@
var pop = popup(context.feature);
- pop.addToMapPanel(context.mapPanel);
+ context.mapPanel.add(pop);
pop.on({
'move' : function(c,x,y){
@@ -108,7 +108,7 @@
var pop = popup(context.feature, context.mapPanel);
- pop.addToMapPanel(context.mapPanel);
+ context.mapPanel.add(pop);
pop.collapse();
@@ -145,31 +145,25 @@
}
- function test_Popup_beforeDestroy(t){
+ function test_Popup_destroy(t){
- t.plan(0);
+ t.plan(1);
var context = setupContext();
var pop = popup(context.feature);
- pop.addToMapPanel(context.mapPanel);
-
+ context.mapPanel.add(pop);
+
+ var called = false;
pop.on({
- 'move' : function(c,x,y){
- t.ok(false,"Move event fired improperly on " + action); //should happen twice, on call to position()
- },
- scope : this
+ move: function() {
+ called = true;
+ }
});
+ pop.destroy();
- pop.beforeDestroy();
-
- var action = "map move";
context.map.events.triggerEvent("move");
-
- action = "popup expand"
- pop.expand();
- action = "popup collapse";
- pop.collapse();
+ t.ok(!called, "pop is not moved after it is destroyed");
tearDown(context);
}
More information about the Commits
mailing list