Treeにドロップ

FlexのTreeコンポーネントは、標準でD&D実装されたり、
一見、よく出来たコンポーネントだなとは思うのですが、
やはり、Windowsエクスプローラに慣れてる人には、違和感ありまくりで。

一つは、Nodeに対してのDropがないのが目につきます。
Nodeに子があれば、openさせてdrop出来るんですけど、
Nodeに子が無い時が、シンドイです。
そんな時は、
Treeのプロパティを、
dragEnabled="true" dropEnabled="false" dragMoveEnabled="false"
にしておいて、

private function onADGDragEnter(event:DragEvent):void {
	DragManager.acceptDragDrop(UIComponent(event.target));
}

private function onADGDragOver(event:DragEvent):void {
	adg.selectedIndex = adg.calculateDropIndex(event);
}

でTreeを選択状態にしてあげます。コードは、AdvancedDataGridの場合。
そうすると、dragOverでdropする(するかもしれない)行が選択状態になります。
ただこれだと、selectedItemが更新される為、
dragsourceのitemがdragしたオブジェクトではなく、selectedItemになってしまいます。
だもんで、

private function onADGDragStart(event:DragEvent):void {
	// remember dragItem
	var seletedItem:XML = _view.dg.selectedItem as XML;
	_dragItem = seletedItem.copy();
}

的な事をして、dragしたitemを覚えておく必要がありそうです。
また、drop時、dataProviderをゴニョゴニョした場合は、

private function onADGDragDrop(event:DragEvent):void {
	var iv:IHierarchicalCollectionView = adg.dataProvider as IHierarchicalCollectionView;
	iv.refresh();
}

コレクションのrefreshが必要かな。
ただ、これはこれで、defaultの行moveが出来なくなるので、それは別途また実装する必要があります。
Treeの用途にもよるでしょうけど、フォルダやファイルのイメージでD&Dしたい場合は、
Nodeにdrop出来たほうが良い気がします。

js
jQ.Mobi
http://www.publickey1.jp/blog/12/iosandroidjavascriptjqmobijquery_mobile.html
JQuery Mobileより軽くて高速とな。
モバイル特化ってのは、なんかよさげです。