Hello, I'm writing some tools to automate clicking items in datagrids through mouse events. Right now that means scrolling to an index, and calling mouseDown, then mouseUp on datagrid.indexToItemRenderer(idx). The problem is if the physical mouse cursor happens to be below the datagrid when the mouseDown is called, the datagrid will nudge scroll before the mouseUp is called if there's any delay whatsoever.
I don't want to necessarily disable nudge scrolling for the grid; this is merely for automation purposes, so I was wondering if there was any way on the fly to either force the mouse to move into the datagrid so it won't nudge scroll, or to somehow disable nudge scrolling on the fly quickly, so I can run the automation. I've put together a simple (and poorly written, sorry!) app showing the behavior. If you click the button, it dispatches a mouseDown event to item 0 in the datagrid, then sets up a 10 ms timer. When that timer fires, it checks if the item is still visible before firing the mouseUp. <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import mx.controls.Text; import flash.sampler.NewObjectSample; import flash.utils.setInterval; function onButtonClick(event:MouseEvent):void { textArea.text = ""; var mouseDown:MouseEvent = new MouseEvent (MouseEvent.MOUSE_DOWN, true, false, 0, 0, null, false, false, false, true); datagrid.scrollToIndex(0); var obj:Object = datagrid.indexToItemRenderer(0); if(obj == null) { textArea.text += "Object was null!\n"; } else { textArea.text += "Object: " + obj.toString() + "\n"; obj.dispatchEvent(mouseDown); } var t:Timer = new Timer(10, 1); t.addEventListener(TimerEvent.TIMER, timerHandler); t.start(); } function timerHandler(evt:Object) { var mouseUp:MouseEvent = new MouseEvent (MouseEvent.MOUSE_UP, true, false, 0, 0, null, false, false, false, false); var obj2:Object = datagrid.indexToItemRenderer(0); if(obj2 == null) { textArea.text += "Object2 was null!\n"; } else { textArea.text += "Object2: " + obj2.toString() + "\n"; obj2.dispatchEvent(mouseUp); } } ]]> </mx:Script> <mx:DataGrid id="datagrid" y="10" width="501" horizontalCenter="-9"> <mx:dataProvider> <mx:Object col1="a" col2="a"/> <mx:Object col1="b" col2="b"/> <mx:Object col1="c" col2="b"/> <mx:Object col1="d" col2="b"/> <mx:Object col1="e" col2="b"/> <mx:Object col1="f" col2="b"/> <mx:Object col1="g" col2="b"/> <mx:Object col1="h" col2="h"/> <mx:Object col1="i" col2="i"/> <mx:Object col1="j" col2="j"/> </mx:dataProvider> <mx:columns> <mx:DataGridColumn headerText="Column 1" dataField="col1"/> <mx:DataGridColumn headerText="Column 2" dataField="col2"/> </mx:columns> </mx:DataGrid> <mx:Button id="button" y="479" label="Click Me!" click="onButtonClick(event)" horizontalCenter="0"/> <mx:TextArea id="textArea" y="216" width="501" height="255" horizontalCenter="-9"/> </mx:Application>