OpenLayers OpenLayers

Changeset 7313

Show
Ignore:
Timestamp:
06/05/08 18:58:02 (6 months ago)
Author:
sbenthall
Message:

switched Panel2 to radio and made it rock harder with fly events

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • sandbox/topp/almanac/StoryEditGeometry.js

    r7310 r7313  
    4242            scope: this 
    4343        }); 
     44         
     45        this.modifyControl.events.on({ 
     46            "activate": this.selectFeature, 
     47            scope: this 
     48        }) 
    4449 
    4550    }, 
    4651     
    4752    activate: function(){ 
    48         this.modify(); 
     53        OpenLayers.Console.log("SEG activated") 
     54        this.toggleMode(); 
    4955    }, 
    5056     
     
    5258        this.layer.events.un({ 
    5359            "featureadded": this.onFeatureAdded, 
     60            scope: this 
     61        }) 
     62         
     63        this.modifyControl.events.un({ 
     64            "activate": this.selectFeature, 
    5465            scope: this 
    5566        }) 
     
    6475     
    6576    toggleMode: function(geom) { 
     77        OpenLayers.Console.log("toggleMode called") 
     78         
    6679        if(!geom){ 
    67             this.modify(); 
     80            this.modifyControl.activate(); 
    6881        } else { 
    6982            this.modifyControl.deactivate(); 
     
    8093    }, 
    8194     
    82    /** 
    83     * Method: modify 
    84     *  
    85     * Activate the modify control and select the feature on the layer 
    86     * (eliminating the need for an extra click) 
    87     */ 
    88     modify: function(){ 
    89         this.modifyControl.activate(); 
    90          
     95    selectFeature: function(){ 
     96        OpenLayers.Console.log(this); 
    9197        //this control maintains a maximum of one feature on its layer 
    9298        var feature = this.layer.features[0]; 
     
    98104     
    99105    onFeatureAdded: function(ev){ 
     106        OpenLayers.Console.log(ev); 
     107         
    100108        feature = ev.feature; 
    101109                                             
  • sandbox/topp/almanac/examples/edit-feature.html

    r7310 r7313  
    3434            map.addControl(storyEditGeometryControl); 
    3535             
    36             var panel = new OpenLayers.Control.Panel2
     36            var panel = new OpenLayers.Control.Radio
    3737                [ 
    3838                    { 
    39                         id: "drawPointToggle", 
    40                         behavior: function(){ 
    41                             storyEditGeometryControl.toggleMode('point') 
    42                         } 
     39                        id: "modifyFeatureTool", 
     40                        value: 'modify' 
    4341                    }, 
    4442                    { 
    45                         id: "drawLineToggle", 
    46                         behavior: function(){ 
    47                             storyEditGeometryControl.toggleMode('line') 
    48                         } 
     43                        id: "drawPointTool", 
     44                        value: 'point' 
    4945                    }, 
    5046                    { 
    51                         id: "drawPolygonToggle", 
    52                         behavior: function(){ 
    53                             storyEditGeometryControl.toggleMode('polygon') 
    54                         } 
     47                        id: "drawLineTool", 
     48                        value: 'line' 
     49                    }, 
     50                    { 
     51                        id: "drawPolygonTool", 
     52                        value: 'polygon' 
    5553                    } 
    5654                ], { 
     
    6159            ) 
    6260             
    63             map.addControl(panel); 
    64              
    65             panel.activate(); 
    66              
    6761            var point = new OpenLayers.Geometry.Point(0, 0); 
    6862            var pointFeature = new OpenLayers.Feature.Vector(point,null); 
    6963             
    7064            vectors.addFeatures([pointFeature]); 
     65            OpenLayers.Console.log(vectors); 
    7166             
    72             storyEditGeometryControl.modify(); 
     67            storyEditGeometryControl.activate(); 
     68               
     69            map.addControl(panel); 
     70            panel.activate(); 
     71            panel.setOnclickBehavior('modify', function(){ 
     72                           storyEditGeometryControl.toggleMode() 
     73                        }, storyEditGeometryControl); 
     74            panel.setOnclickBehavior('point', function(){ 
     75                            storyEditGeometryControl.toggleMode('point') 
     76                        }, storyEditGeometryControl); 
     77            panel.setOnclickBehavior('line', function(){ 
     78                            storyEditGeometryControl.toggleMode('line') 
     79                        }, storyEditGeometryControl); 
     80            panel.setOnclickBehavior('polygon', function(){ 
     81                            storyEditGeometryControl.toggleMode('polygon') 
     82                        }, storyEditGeometryControl); 
    7383             
    7484            map.setCenter(new OpenLayers.LonLat(0, 0), 3); 
    75           
    76              
    7785        } 
    7886 
     
    96104        <ul id="controlToggle"> 
    97105            <li> 
    98                 <div id="drawPointToggle">draw point</div> 
     106                <div id="modifyFeatureTool">modify feature</div> 
    99107            </li> 
    100108            <li> 
    101                 <div id ="drawLineToggle">draw line</div> 
     109                <div id="drawPointTool">draw point</div> 
    102110            </li> 
    103111            <li> 
    104                 <div id="drawPolygonToggle">draw polygon</div> 
     112                <div id ="drawLineTool">draw line</div> 
     113            </li> 
     114            <li> 
     115                <div id="drawPolygonTool">draw polygon</div> 
    105116            </li> 
    106117        </ul> 
  • sandbox/topp/almanac/lib/OpenLayers.js

    r7310 r7313  
    162162            "OpenLayers/Control/ModifyFeature.js", 
    163163            "OpenLayers/Control/Panel.js", 
    164             "OpenLayers/Control/Panel2.js", 
     164            "OpenLayers/Control/Radio.js", 
    165165            "OpenLayers/Control/SelectFeature.js", 
    166166            "OpenLayers/Control/NavigationHistory.js", 
  • sandbox/topp/almanac/lib/OpenLayers/Control/Radio.js

    r7310 r7313  
    1 OpenLayers.Control.Panel2 = OpenLayers.Class(OpenLayers.Control, { 
     1OpenLayers.Control.Radio = OpenLayers.Class(OpenLayers.Control, { 
    22     
    3     unselectedCSSClass : "unselected", 
    4     selectedCSSClass : "selected", 
     3    EVENT_TYPES: ["activate", "deactivate", "clicked"], 
     4     
     5    selectedCSSClassName : "selected", 
    56     
    67    /** 
    7      * Property: button
     8     * Property: radio
    89     * {Array(~~~~~~~~} 
    910     */ 
    10     toggles: null,      
     11    radios: null, 
    1112 
    1213    /** 
     
    1718     *     to extend the control. 
    1819     */ 
    19     initialize: function(toggles, options) {        
     20    initialize: function(radios, options) {        
    2021        OpenLayers.Control.prototype.initialize.apply(this, [options]); 
    21         this.toggles = toggles; 
    22          
    23         this.defaultBehavior(); 
     22        this.radios = radios; 
    2423    }, 
    2524 
     
    2928    destroy: function() { 
    3029        OpenLayers.Control.prototype.destroy.apply(this, arguments); 
    31         this.buttons = null; 
     30        this.radio = null; 
    3231    }, 
    3332 
     
    3837        OpenLayers.Control.prototype.activate.apply(this, arguments); 
    3938         
    40         for(var i = 0; i < this.toggles.length; i++){ 
    41             var toggle = this.toggles[i]; 
     39        for(var i = 0; i < this.radios.length; i++){ 
     40            var radio = this.radios[i]; 
    4241             
    43             var domElt = document.getElementById(toggle.id); 
     42            var domElt = document.getElementById(radio.id); 
    4443             
    4544            if(domElt){ 
    46                 domElt.onclick = this.makeOnclick(toggle); 
     45                domElt.onclick = this.makeOnclick(radio); 
    4746            } 
    4847        } 
     
    5655    }, 
    5756     
    58     makeOnclick: function(toggle){ 
     57    makeOnclick: function(radio){ 
    5958        var panel = this; 
    6059         
    6160        return function(){ 
    62             panel.toggleOnclick(toggle); 
     61            panel.events.triggerEvent("clicked",{value : radio.value}) 
     62            panel.redraw(radio); 
    6363        } 
    6464    }, 
    6565     
    66     toggleOnclick: function(toggle){         
    67         for(var i = 0; i < this.toggles.length; i++){ 
    68             var thisToggle = this.toggles[i]; 
     66    redraw: function(radio){         
     67        for(var i = 0; i < this.radios.length; i++){ 
     68            var thisRadio = this.radios[i]; 
    6969             
    70             var domElt = document.getElementById(thisToggle.id); 
     70            var domElt = document.getElementById(thisRadio.id); 
    7171             
    72             if(toggle == thisToggle){ 
    73                 if(domElt.className == this.unselectedCSSClass){ 
    74                     domElt.className = this.selectedCSSClass; 
    75                     toggle.behavior();     
    76                 } else { 
    77                     domElt.className = this.unselectedCSSClass; 
    78                     this.defaultBehavior(); 
    79                 } 
     72            if(radio == thisRadio){ 
     73                OpenLayers.Element.addClassName(domElt, this.selectedCSSClassName); 
     74                //toggle.behavior(); 
    8075            } else { 
    81                 domElt.className = this.unselectedCSSClass
     76                OpenLayers.Element.removeClassName(domElt, this.selectedCSSClassName)
    8277            } 
    8378        } 
     
    8883    }, 
    8984     
    90     CLASS_NAME: "OpenLayers.Control.Panel2" 
     85    setOnclickBehavior: function(value, behavior, scope){ 
     86        var obj = { 
     87            "clicked" : function(evt){ 
     88                if(evt.value == value){ 
     89                    behavior(evt); //maybe the argument here should just be the value? 
     90                } 
     91            }, 
     92        } 
     93         
     94        if(scope){ 
     95            obj.scope = scope; 
     96        } 
     97         
     98        this.events.on(obj); 
     99    }, 
     100     
     101    CLASS_NAME: "OpenLayers.Control.Radio" 
    91102});