Flash Builder -> Tree -> Drag & Drop 個々に設定

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-29 (木) 1:25:50 | 最終更新:2010-07-31 (土) 2:14:35

Tree コンポーネントを触っていて
Windows エクスプローラ ライクに D&D をしたくなる。

Tree コンポーネントの場合、D&D だけなら簡単だ。

D&D の実装

[mxml][/mxml]
上記の如く、dragEnableddropEnabled プロパティを true に設定すればいい。

dragMoveEnabled プロパティに関しては、Tree コンポーネントの場合はデフォルトで true なので、
設定の必要はない。
 

個々に設定

ところが、1つの Tree コンポーネントの中で、
ドラッグ禁止やらドロップ禁止を個々に設けたい場合がある。

その際は、Tree コンポーネントのイベントを利用する。

Flash Builder -> Tree with Spring Loaded Folders
で、よいサンプルを見つけたものの、Flex 2 用で上手く動かなかったので
これを見つつ、以下を大いに参考にして、カーソル変更も付加した結果がこれだ。
FXUG:Re: Treeのアイテム移動の制御
[mxml][/mxml]

上記のように、目的別にイベントを設定し、
そのイベント内容を関数にすることで、目的の処理をする。

Actionscript 3.0 on Flex 4

  1. import mx.controls.listClasses.IListItemRenderer;
  2. import mx.events.DragEvent;
  3.  
  4. import net.lifebird.ui.cursor.*;
  5. import net.lifebird.ui.cursor.plugins.*;
  6.  
  7. // D&D 処理が完全に終了した時点
  8. private function myTree_dragCompleteHandler(event:DragEvent):void
  9. {
  10.     Cursors.cursor(CursorType.DEFAULT);
  11. }
  12.  
  13. // ドロップした時点
  14. private function myTree_dragDropHandler(event:DragEvent):void
  15. {
  16.     Cursors.cursor(CursorType.DEFAULT);
  17.  
  18.     if (!isDropEnabled(event))
  19.         event.preventDefault();
  20. }
  21.  
  22. // Tree コンポーネントより外へマウスが出た時点
  23. private function myTree_dragExitHandler(event:DragEvent):void
  24. {
  25.     Cursors.cursor(CursorType.REJECT);
  26. }
  27.  
  28. // Tree コンポーネント内でドラッグされている間
  29. private function myTree_dragOverHandler(event:DragEvent):void
  30. {
  31.     if (!isDropEnabled(event)) {
  32.         var tree:Tree = event.currentTarget as Tree;
  33.         tree.hideDropFeedback(event);
  34.         event.preventDefault();
  35.         Cursors.cursor(CursorType.REJECT);
  36.     }
  37.     else {
  38.         Cursors.cursor(CursorType.DEFAULT);
  39.     }
  40. }
  41.  
  42. // ドラッグ開始時点
  43. private function myTree_dragStartHandler(event:DragEvent):void
  44. {
  45.     if (!isDragEnabled(event))
  46.         event.preventDefault();
  47.    
  48.     Cursors.cursor(CursorType.DEFAULT);
  49. }
  50.  
  51. // マウスカーソルが乗ったアイテムのドラッグ可否関数
  52. private function isDragEnabled(event:DragEvent):Boolean
  53. {
  54.     var tree:Tree = event.currentTarget as Tree;
  55.     var n:int = tree.calculateDropIndex(event);
  56.     var renderer:IListItemRenderer = tree.indexToItemRenderer(n);
  57.     if (renderer)
  58.     {
  59.         var xml:XML = renderer.data as XML;
  60.         if (xml.@acceptDrag == "false")
  61.             return false;
  62.     }
  63.     return true;
  64. }
  65.  
  66. // マウスカーソルが乗ったアイテムのドロップ可否関数
  67. private function isDropEnabled(event:DragEvent):Boolean
  68. {
  69.     var tree:Tree = event.currentTarget as Tree;
  70.     var n:int = tree.calculateDropIndex(event);
  71.     var renderer:IListItemRenderer = tree.indexToItemRenderer(n);
  72.     if (renderer)
  73.     {
  74.         var xml:XML = renderer.data as XML;
  75.         if (xml.@acceptDrop == "false")
  76.             return false;
  77.     }
  78.     return true;
  79. }

This movie requires Flash Player 9.0.0

カーソルの変更については以下を参照。
Flash Builder 4 -> net.lifebird.ui.cursor

Posted by muchag | ActionScript 3.0,Flash Builder 4 |
初回投稿:2010-07-29 (木) 1:25:50 | 最終更新:2010-07-31 (土) 2:14:35

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment