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]

上記のように、目的別にイベントを設定し、
そのイベント内容を関数にすることで、目的の処理をする。
[as3onfx4]import mx.controls.listClasses.IListItemRenderer;
import mx.events.DragEvent;

import net.lifebird.ui.cursor.*;
import net.lifebird.ui.cursor.plugins.*;

// D&D 処理が完全に終了した時点
private function myTree_dragCompleteHandler(event:DragEvent):void
{
Cursors.cursor(CursorType.DEFAULT);
}

// ドロップした時点
private function myTree_dragDropHandler(event:DragEvent):void
{
Cursors.cursor(CursorType.DEFAULT);

if (!isDropEnabled(event))
event.preventDefault();
}

// Tree コンポーネントより外へマウスが出た時点
private function myTree_dragExitHandler(event:DragEvent):void
{
Cursors.cursor(CursorType.REJECT);
}

// Tree コンポーネント内でドラッグされている間
private function myTree_dragOverHandler(event:DragEvent):void
{
if (!isDropEnabled(event)) {
var tree:Tree = event.currentTarget as Tree;
tree.hideDropFeedback(event);
event.preventDefault();
Cursors.cursor(CursorType.REJECT);
}
else {
Cursors.cursor(CursorType.DEFAULT);
}
}

// ドラッグ開始時点
private function myTree_dragStartHandler(event:DragEvent):void
{
if (!isDragEnabled(event))
event.preventDefault();

Cursors.cursor(CursorType.DEFAULT);
}

// マウスカーソルが乗ったアイテムのドラッグ可否関数
private function isDragEnabled(event:DragEvent):Boolean
{
var tree:Tree = event.currentTarget as Tree;
var n:int = tree.calculateDropIndex(event);
var renderer:IListItemRenderer = tree.indexToItemRenderer(n);
if (renderer)
{
var xml:XML = renderer.data as XML;
if (xml.@acceptDrag == “false”)
return false;
}
return true;
}

// マウスカーソルが乗ったアイテムのドロップ可否関数
private function isDropEnabled(event:DragEvent):Boolean
{
var tree:Tree = event.currentTarget as Tree;
var n:int = tree.calculateDropIndex(event);
var renderer:IListItemRenderer = tree.indexToItemRenderer(n);
if (renderer)
{
var xml:XML = renderer.data as XML;
if (xml.@acceptDrop == “false”)
return false;
}
return true;
}[/as3onfx4]

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