<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
creationComplete="init();"
width="100%"
height="100%"
xmlns:tw="http://www.servasoftware.com/2009/twaver/flex">
<mx:Script>
<![CDATA[
import mx.controls.Tree;
import mx.controls.treeClasses.TreeItemRenderer;
import mx.events.DragEvent;
import mx.managers.DragManager;
import twaver.*;
import twaver.Node;
import twaver.controls.TreeData;
private var box:ElementBox=new ElementBox();
private function init():void
{
tree.dataBox=box;
for (var i:int=0; i < 5; i++)
{
var n:Node=new Node();
n.name="p" + i;
for (var j:int=1; j < 5; j++)
{
var s:Node=new Node();
s.name="s" + j;
s.parent=n;
box.add(s);
}
box.add(n);
}
tree.addEventListener(DragEvent.DRAG_ENTER, function(evt:DragEvent):void
{
if (evt.dragSource.hasFormat("twaverformat"))
{
evt.preventDefault();
DragManager.acceptDragDrop(tree);
}
});
tree.addEventListener(DragEvent.DRAG_OVER, function(evt:DragEvent):void
{
if (evt.dragSource.hasFormat("twaverformat"))
{
evt.preventDefault();
DragManager.acceptDragDrop(tree);
}
});
tree.addEventListener(DragEvent.DRAG_DROP, function(evt:DragEvent):void
{
var data:Object=evt.dragSource.dataForFormat("data");
var dragImage:DisplayObject;
var element:IElement;
if (data)
{
element=createNodeByButtonInfo(data);
dragImage=data.dragImage;
}
else
{
return;
}
var index:int=tree.calculateDropIndex(evt);
var treeData:TreeData=tree.getTreeDataByIndex(index);
if (element is Node && treeData != null && treeData.data is Group)
{
Node(element).centerLocation=Group(treeData.data).centerLocation;
}
tree.dataBox.add(element);
// set parent
if (treeData != null && treeData.data != null)
{
element.parent=treeData.data;
}
});
}
public static function createNodeByButtonInfo(data:*):IElement
{
if (data.elementClass is Class)
{
var node:IElement=new data.elementClass();
node.name=data.label;
return node;
}
return null;
}
private function dragOverHandler(event:DragEvent):void
{
var currNodeOver:TreeItemRenderer=TreeItemRenderer(event.currentTarget.indexToItemRenderer(event.currentTarget.calculateDropIndex(event)));
if (currNodeOver != null)
{
if (mx.controls.Tree(event.currentTarget).dataDescriptor.isBranch(currNodeOver.data) == true)
{
if (mx.controls.Tree(event.currentTarget).isItemOpen(currNodeOver.data) == false)
mx.controls.Tree(event.currentTarget).expandItem(currNodeOver.data, true, true);
}
}
}
]]>
</mx:Script>
<mx:VBox width="100%"
height="100%">
<tw:Tree id="tree"
dragEnabled="true"
dropEnabled="true"
dragOver="dragOverHandler(event)"
width="100%"
height="100%">
</tw:Tree>
</mx:VBox>
</mx:Application>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
creationComplete="init();"
width="100%"
height="100%"
xmlns:tw="http://www.servasoftware.com/2009/twaver/flex">
<mx:Script>
<![CDATA[
import mx.controls.Tree;
import mx.controls.treeClasses.TreeItemRenderer;
import mx.events.DragEvent;
import mx.managers.DragManager;
import twaver.*;
import twaver.Node;
import twaver.controls.TreeData;
private var box:ElementBox=new ElementBox();
private function init():void
{
tree.dataBox=box;
for (var i:int=0; i < 5; i++)
{
var n:Node=new Node();
n.name="p" + i;
for (var j:int=1; j < 5; j++)
{
var s:Node=new Node();
s.name="s" + j;
s.parent=n;
box.add(s);
}
box.add(n);
}
tree.addEventListener(DragEvent.DRAG_ENTER, function(evt:DragEvent):void
{
if (evt.dragSource.hasFormat("twaverformat"))
{
evt.preventDefault();
DragManager.acceptDragDrop(tree);
}
});
tree.addEventListener(DragEvent.DRAG_OVER, function(evt:DragEvent):void
{
if (evt.dragSource.hasFormat("twaverformat"))
{
evt.preventDefault();
DragManager.acceptDragDrop(tree);
}
});
tree.addEventListener(DragEvent.DRAG_DROP, function(evt:DragEvent):void
{
var data:Object=evt.dragSource.dataForFormat("data");
var dragImage:DisplayObject;
var element:IElement;
if (data)
{
element=createNodeByButtonInfo(data);
dragImage=data.dragImage;
}
else
{
return;
}
var index:int=tree.calculateDropIndex(evt);
var treeData:TreeData=tree.getTreeDataByIndex(index);
if (element is Node && treeData != null && treeData.data is Group)
{
Node(element).centerLocation=Group(treeData.data).centerLocation;
}
tree.dataBox.add(element);
// set parent
if (treeData != null && treeData.data != null)
{
element.parent=treeData.data;
}
});
}
public static function createNodeByButtonInfo(data:*):IElement
{
if (data.elementClass is Class)
{
var node:IElement=new data.elementClass();
node.name=data.label;
return node;
}
return null;
}
private function dragOverHandler(event:DragEvent):void
{
var currNodeOver:TreeItemRenderer=TreeItemRenderer(event.currentTarget.indexToItemRenderer(event.currentTarget.calculateDropIndex(event)));
if (currNodeOver != null)
{
if (mx.controls.Tree(event.currentTarget).dataDescriptor.isBranch(currNodeOver.data) == true)
{
if (mx.controls.Tree(event.currentTarget).isItemOpen(currNodeOver.data) == false)
mx.controls.Tree(event.currentTarget).expandItem(currNodeOver.data, true, true);
}
}
}
]]>
</mx:Script>
<mx:VBox width="100%"
height="100%">
<tw:Tree id="tree"
dragEnabled="true"
dropEnabled="true"
dragOver="dragOverHandler(event)"
width="100%"
height="100%">
</tw:Tree>
</mx:VBox>
</mx:Application>