Conseguido.
Lo posteo por si alguien lo necesita.
El evento dragComplete lo lanza el control que inició el drag and drop (como en este caso es el mismo tree nos da lo mismo) después de que todo haya terminado.
La primera dificultad es que aquí no teníamos información del índice donde ha caído el bicho. Para solucionarlo lo he obtenido en el manejador del dragDrop y lo he guardado en una variable global.
Otra dificultad. Cuando en el dragComplete vas a mirar qué hay en ese índice hay veces que no es el elemento que esperabas. Esto sucede porque al mover un elemento a una posición inferior a la que tenía, ese mismo elemento deja un espacio libre, con lo cual la posición que ocupa al final es una menos de lo que esperábamos. Por si fuera poco, si el elemento es una carpeta con hijos y está abierta, las posiciones que se restan son más. En todo caso el índice final será siempre igual o menor que el esperado.
Usando un campo numérico que identifica a mis nodos he hecho lo siguiente en la rutina de dragComplete:
Código :
private function dragCompleteHandler(event:DragEvent):void
{
miArbol.selectedIndex=indiceEstimado;
while(miArbol.selectedItem.numero!=numeroMovido)
{
indiceEstimado--;
miArbol.selectedIndex=indiceEstimado;
}
//aquí ya hago lo que quiera con el item seleccionado
}Para ello antes he tenido que almacenar el índice estimado inicial y el número identificativo del elemento movido en la rutina de dragDrop:
Código :
var indiceEstimado:Number=0;
var numeroMovido:Number=0;
private function dragDropHandler(event:DragEvent):void
{
var Arrastrados:Object=event.dragSource.dataForFormat("treeItems");
numeroMovido=Arrastrados[0].numero;
indiceEstimado=miArbol.calculateDropIndex(event);
}