ThinkGeo.com    |     Documentation    |     Premium Support

Route mousedown event back to the map

Hi,


There is a requirement in my project to use ctrl-shift-mousedown to capture the beginning of a line drawing.  So, when mousedown happens, I'd like to identify whether ctrl-shift keys are pressed.  If not, I'd like my map to pan as normal.   I came up with the following algorithm but I can't propagate the mouse event to the map.



        function OnMapCreated(map) {
            
            // deactivate panning so that mousedown can be captured        
            var navigation = map.getControlsByClass("OpenLayers.Control.Navigation")[0];
            navigation.dragPan.deactivate();
            
            map.events.register('mousedown', map, function(evt){
                
                if(evt && evnt.button == 2) {
                    // allow panning to continue
                    var navigation = map.getControlsByClass("OpenLayers.Control.Navigation")[0];
                    navigation.dragPan.activate();
                    // fireEvent - How to fire event to the map???
                    document.body.fireEvent('onmousedown', event);
                }
                
            });
        }

 


Thanks,


Tracy



Tracy, 
  
 My idea is raising the Key Down event in the body tag to activate the draw line mode and deactivate it after tracking finished. 
  
 e.g 
 In key down event, check whether ctrl-shift is pressed; if true; use “Map1.SetDrawMode (‘Line’)” to set the draw mode of the map. 
 In OnClientDrawnEnd event, use “Map1.SetDrawMode (‘Normal’)” to disable the drawing function. 
  
 Please let me know if you have any queries. 
  
 Thanks, 
 Howard

Thanks for the idea, Howard. 
  
 I run into another issue.  The requirement actually requires a continuation of keydown for ctrl-shift keys to indicate a straight line drawing.  I notice that while line draw mode, shift key will allow user to draw a non-straight line.  Is there a way to disable it? 


Tracy,



This is a feature named freehand in OpenLayers and it can be disabled by the following code after setting the draw mode of the map.

var parser = Map1.GetMapParser();
parser.paintControls.Line.handler.freehandToggle = "skey";



Hope it helps; please let me know if you have more queries.



Thanks,

Howard