[OpenLayers-Commits] r7314 - in sandbox/topp/almanac: . examples lib/OpenLayers/Control
commits at openlayers.org
commits at openlayers.org
Thu Jun 5 21:19:12 EDT 2008
Author: sbenthall
Date: 2008-06-05 21:19:12 -0400 (Thu, 05 Jun 2008)
New Revision: 7314
Modified:
sandbox/topp/almanac/StoryEditGeometry.js
sandbox/topp/almanac/examples/edit-feature.html
sandbox/topp/almanac/lib/OpenLayers/Control/Radio.js
Log:
improving Radio control, StoryEditGeometry control (still not in the right place) and the example
Modified: sandbox/topp/almanac/StoryEditGeometry.js
===================================================================
--- sandbox/topp/almanac/StoryEditGeometry.js 2008-06-05 23:58:02 UTC (rev 7313)
+++ sandbox/topp/almanac/StoryEditGeometry.js 2008-06-06 01:19:12 UTC (rev 7314)
@@ -11,38 +11,38 @@
*/
layer: null,
- drawControls: null,
+ tools: null,
- modifyControl: null,
-
selectControl: null,
/**
* Constructor: Almanac.Control.StoryModify
* Create a new control to modify stories.
*/
- initialize: function(layer) {
+ initialize: function(layer, options) {
+ OpenLayers.Control.prototype.initialize.apply(this, [options]);
+
this.layer = layer;
- this.drawControls = {
+ this.tools = {
point: new OpenLayers.Control.DrawFeature(layer,
OpenLayers.Handler.Point),
line: new OpenLayers.Control.DrawFeature(layer,
OpenLayers.Handler.Path),
polygon: new OpenLayers.Control.DrawFeature(layer,
- OpenLayers.Handler.Polygon)
+ OpenLayers.Handler.Polygon),
+ modify: new OpenLayers.Control.ModifyFeature(layer)
};
- this.modifyControl = new OpenLayers.Control.ModifyFeature(layer);
-
- this.selectControl = this.modifyControl.selectControl;
+ this.selectControl = this.tools['modify'].selectControl;
+
this.layer.events.on({
"featureadded": this.onFeatureAdded,
scope: this
});
- this.modifyControl.events.on({
+ this.tools['modify'].events.on({
"activate": this.selectFeature,
scope: this
})
@@ -50,8 +50,8 @@
},
activate: function(){
- OpenLayers.Console.log("SEG activated")
- this.toggleMode();
+ OpenLayers.Control.prototype.activate.apply(this, arguments);
+ this.toggleMode('modify');
},
destroy: function(){
@@ -66,34 +66,28 @@
})
this.layer = null;
- this.drawControls = null;
- this.modifyControl = null;
+ this.tools = null;
this.selectControl = null;
OpenLayers.Control.prototype.destroy.apply(this, arguments);
},
- toggleMode: function(geom) {
- OpenLayers.Console.log("toggleMode called")
-
- if(!geom){
- this.modifyControl.activate();
- } else {
- this.modifyControl.deactivate();
+ toggleMode: function(name) {
+ if(!this.active){
+ return;
}
- for(key in this.drawControls) {
- var control = this.drawControls[key];
- if(geom == key) {
- control.activate();
+ for(var key in this.tools) {
+ var tool = this.tools[key];
+ if(name == key) {
+ tool.activate();
} else {
- control.deactivate();
+ tool.deactivate();
}
}
},
selectFeature: function(){
- OpenLayers.Console.log(this);
//this control maintains a maximum of one feature on its layer
var feature = this.layer.features[0];
@@ -103,8 +97,6 @@
},
onFeatureAdded: function(ev){
- OpenLayers.Console.log(ev);
-
feature = ev.feature;
for(var i = 0; i < this.layer.features.length ; i++){
@@ -113,7 +105,7 @@
}
}
- this.toggleMode();
+ this.toggleMode('modify');
},
/**
@@ -124,15 +116,21 @@
* map - {<OpenLayers.Map>} The control's map.
*/
setMap: function(map) {
- for(key in this.drawControls){
- this.drawControls[key].setMap(map);
+ for(var key in this.tools){
+ this.tools[key].setMap(map);
}
+
+ //this.selectControl.setMap(map);
- this.modifyControl.setMap(map);
- this.selectControl.setMap(map);
-
OpenLayers.Control.prototype.setMap.apply(this, arguments);
},
+ onToolActivateBehavior: function(tool, scope, behavior){
+ this.tools[tool].events.on({
+ "activate" : behavior,
+ scope : scope
+ })
+ },
+
CLASS_NAME: "Almanac.Control.StoryEditGeometry"
});
Modified: sandbox/topp/almanac/examples/edit-feature.html
===================================================================
--- sandbox/topp/almanac/examples/edit-feature.html 2008-06-05 23:58:02 UTC (rev 7313)
+++ sandbox/topp/almanac/examples/edit-feature.html 2008-06-06 01:19:12 UTC (rev 7314)
@@ -19,7 +19,7 @@
<script src="../lib/OpenLayers.js"></script>
<script src="../StoryEditGeometry.js"></script>
<script type="text/javascript">
- var map, vectors, controls;
+ var map, vectors, controls, panel;
function init(){
map = new OpenLayers.Map('map');
var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
@@ -33,7 +33,7 @@
var storyEditGeometryControl = new Almanac.Control.StoryEditGeometry(vectors);
map.addControl(storyEditGeometryControl);
- var panel = new OpenLayers.Control.Radio(
+ panel = new OpenLayers.Control.Radio(
[
{
id: "modifyFeatureTool",
@@ -51,49 +51,43 @@
id: "drawPolygonTool",
value: 'polygon'
}
- ], {
- defaultBehavior: function(){
- storyEditGeometryControl.toggleMode();
- }
- }
+ ]
)
var point = new OpenLayers.Geometry.Point(0, 0);
var pointFeature = new OpenLayers.Feature.Vector(point,null);
vectors.addFeatures([pointFeature]);
- OpenLayers.Console.log(vectors);
-
- storyEditGeometryControl.activate();
map.addControl(panel);
- panel.activate();
- panel.setOnclickBehavior('modify', function(){
- storyEditGeometryControl.toggleMode()
- }, storyEditGeometryControl);
- panel.setOnclickBehavior('point', function(){
- storyEditGeometryControl.toggleMode('point')
- }, storyEditGeometryControl);
- panel.setOnclickBehavior('line', function(){
+
+ //oh, behave!
+ panel.setOnclickBehavior('modify', storyEditGeometryControl,
+ function(){
+ storyEditGeometryControl.toggleMode('modify');
+ });
+ panel.setOnclickBehavior('point', storyEditGeometryControl,
+ function(){
+ storyEditGeometryControl.toggleMode('point');
+ });
+ panel.setOnclickBehavior('line', storyEditGeometryControl,
+ function(){
storyEditGeometryControl.toggleMode('line')
- }, storyEditGeometryControl);
- panel.setOnclickBehavior('polygon', function(){
+ });
+ panel.setOnclickBehavior('polygon', storyEditGeometryControl,
+ function(){
storyEditGeometryControl.toggleMode('polygon')
- }, storyEditGeometryControl);
+ });
+ storyEditGeometryControl.onToolActivateBehavior('modify', panel, function(){
+ this.select('modify');
+ })
+ panel.activate();
+ storyEditGeometryControl.activate();
+
+
map.setCenter(new OpenLayers.LonLat(0, 0), 3);
}
-
- function toggleControl(element) {
- for(key in controls) {
- var control = controls[key];
- if(element.value == key && element.checked) {
- control.activate();
- } else {
- control.deactivate();
- }
- }
- }
</script>
Modified: sandbox/topp/almanac/lib/OpenLayers/Control/Radio.js
===================================================================
--- sandbox/topp/almanac/lib/OpenLayers/Control/Radio.js 2008-06-05 23:58:02 UTC (rev 7313)
+++ sandbox/topp/almanac/lib/OpenLayers/Control/Radio.js 2008-06-06 01:19:12 UTC (rev 7314)
@@ -10,6 +10,8 @@
*/
radios: null,
+ selected: null,
+
/**
*
* Parameters:
@@ -28,6 +30,7 @@
destroy: function() {
OpenLayers.Control.prototype.destroy.apply(this, arguments);
this.radio = null;
+ this.selected = null;
},
/**
@@ -58,18 +61,19 @@
var panel = this;
return function(){
- panel.events.triggerEvent("clicked",{value : radio.value})
- panel.redraw(radio);
+ panel.selected = radio;
+ panel.events.triggerEvent("clicked",{value : radio.value});
+ panel.redraw();
}
},
- redraw: function(radio){
+ redraw: function(){
for(var i = 0; i < this.radios.length; i++){
- var thisRadio = this.radios[i];
+ var radio = this.radios[i];
- var domElt = document.getElementById(thisRadio.id);
+ var domElt = document.getElementById(radio.id);
- if(radio == thisRadio){
+ if(radio == this.selected){
OpenLayers.Element.addClassName(domElt, this.selectedCSSClassName);
//toggle.behavior();
} else {
@@ -78,24 +82,24 @@
}
},
- defaultBehavior: function(){
-
- },
-
- setOnclickBehavior: function(value, behavior, scope){
- var obj = {
+ setOnclickBehavior: function(value, scope, behavior){
+ this.events.on({
"clicked" : function(evt){
if(evt.value == value){
behavior(evt); //maybe the argument here should just be the value?
- }
+ }
},
+ scope: scope
+ });
+ },
+
+ select: function(radio){
+ for(var i = 0; i < this.radios.length; i++){
+ if(this.radios[i] == radio || this.radios[i].value == radio){
+ this.selected = this.radios[i];
+ this.redraw();
+ }
}
-
- if(scope){
- obj.scope = scope;
- }
-
- this.events.on(obj);
},
CLASS_NAME: "OpenLayers.Control.Radio"
More information about the Commits
mailing list