Hi
I've encountered a situation in which I had to provide both click,
dbl-click and drag for the same graphical element.
I'm kinda of new to flex so I'm not sure the solution here is the best
- but it works
In principal the solution handles both mouseDown and mouseDown events on
the object. In a MD event just add a listener for mouseMove (for
drag). In a MU event thing are more complex:
1) keep the current event time
2) Remove the mouseMove event listener (it is not a drag...)
3) Check vs. last MU event time if this is a Dbl click or click
a. If it might be a click you will need to wait to setup a timer
that will wait for 1-2 seconds to fire the click.
b. If it is a dbl click Remove the timer and do the Dbl-click
actions.
Attached is the code with Alert.show for each situation.:
public var KeepLastMouseUp:Number =0;
public var ticker:Timer = new Timer(1000,1);
public function mouseDownHandler(e:MouseEvent):void {
KPIBox = e.currentTarget as Canvas;
KPIBox.parent.setChildIndex(KPIBox,KPIsData.length-1);
KPIBox.addEventListener
(MouseEvent.MOUSE_MOVE,mouseMoveHandler);
}
public function mouseUpHandler(e:MouseEvent):void {
KPIBox = e.currentTarget as Canvas;
KPIBox.parent.setChildIndex(KPIBox,KPIsData.length-1);
var dt:Date = new Date();
var tm:Number = dt.getTime();
KPIBox.removeEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);
if ((tm - 1000 )>KeepLastMouseUp) { //regular click.
KeepLastMouseUp = tm;
ticker.addEventListener(TimerEvent.TIMER, runClick);
ticker.start();
return
}
//dbl click identified
KeepLastMouseUp=0;
ticker.removeEventListener(TimerEvent.TIMER, ClickPressed);
Alert.show("Dbl Click");
}
public function ClickPressed (e:TimerEvent):void {
Alert.show("click");
}
public function mouseMoveHandler(e:MouseEvent):void{
KPIBox.removeEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);
Alert.show("start move");
}