I took the Red Pill.............
I saw your code and I wanted to offer mine based on your suggestion.
The business rule: Don't allow courses to be "orphaned". All courses
must be contained in a folder.
A message signifies where I should stop the drop from happening.
That's the next, easy, step. Thank you for your help.
Precia
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute">
<mx:Script>
<![CDATA[
import mx.core.DragSource;
import mx.managers.DragManager;
import mx.events.*;
import mx.containers.Canvas;
import mx.containers.HBox;
import mx.controls.Tree;
import mx.managers.DragManager;
import mx.core.DragSource;
import mx.core.ClassFactory;
import flash.display.DisplayObject;
import mx.controls.treeClasses.TreeItemRenderer;
import mx.events.DragEvent;
import mx.events.TreeEvent;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.events.Event;
import mx.events.ListEvent;
import flash.events.TimerEvent;
import mx.utils.ObjectUtil;
import mx.effects.Fade;
import mx.core.mx_internal;
import mx.collections.XMLListCollection;
import mx.events.EffectEvent;
import mx.controls.treeClasses.TreeItemRenderer;
import mx.collections.*;
[Bindable]
public var selectedNode:Object;
public function treeChanged(event:Event):void {
selectedNode=event.currentTarget.selectedItem;
}
private function dragIt(event:MouseEvent,
text:String, format:String):void{
if (selectedNode != null){
var dragInitiator:Tree=Tree
(event.currentTarget);
var ds:DragSource = new DragSource();
ds.addData(text, format);
var hboxProxy:HBox = new HBox();
hboxProxy.width = 85;
hboxProxy.height = 20;
hboxProxy.setStyle('backgroundColor',
dragInitiator.getStyle('backgroundColor'));
DragManager.doDrag(dragInitiator, ds,
event, hboxProxy);
}
}
private function dragger(event:DragEvent):void{
if(tree1.indexToItemRenderer
(tree1.calculateDropIndex(event)) != null)
{
var currTree:Tree = Tree
(event.currentTarget);
var currNodeOver:Object;
var rowindex:int =
currTree.calculateDropIndex(event);
var tattlerStr:String = new
String();
var hoverTarget:Object =
currTree.indexToItemRenderer(rowindex).data;
var halfRow:int =
currTree.rowHeight/2;
var certerRowY:int =
(rowindex*currTree.rowHeight)+halfRow;
var bottomRowY:int =
(rowindex+1)*currTree.rowHeight;
currNodeOver =
currTree.indexToItemRenderer(rowindex).data;
tattlerStr
= "Selected Item: " +
selectedNode.@level
+ "\n" + "Over
Target: " + hoverTarget.@level
+ "\n" + "Target
Parent: " + hoverTarget.parent().@level
+ "\n"
+ "calculateDropIndex " + rowindex
+ "\n" + "halfRow " +
halfRow.toString()
+ "\n"
+ "certerRowY " + certerRowY.toString()
+ "\n"
+ "bottomRowY " + bottomRowY.toString()
+ "\n" + "mouseY " +
currTree.mouseY.toString()
+ "\n"
+ "isItemOpen " + currTree.isItemOpen(currNodeOver).toString()
+ "\n" + "\n";
if
(hoverTarget.@level == 'Cert')
{
tattlerStr =
tattlerStr + "\n" + hoverTarget.parent().@label;
}
if
(selectedNode.@level == 'Course')
{
if
(hoverTarget.@level == 'Cert')
{
if
(certerRowY <= currTree.mouseY && currTree.mouseY <= bottomRowY)
{
//tattlerStr = tattlerStr + "\n" + "YOU ARE OUTSIDE THE
CERTIFICATE";
tattlerStr = "YOU ARE OUTSIDE THE CERTIFICATE";
}
}
}else{
tattlerStr =
tattlerStr + "\n" + "STOP DRAGGING THE CERTIFICATE";
}
/* if
(tree1.indexToItemRenderer(rowindex).data.@level == 'Course' ||
(tree1.indexToItemRenderer(rowindex).data.@level == 'Cert' &&
currTree.isItemOpen(currNodeOver) == true))
{
tattlerStr =
tattlerStr + "\n" + "WITHIN CERTIFICATE";
}else{
tattlerStr =
tattlerStr + "\n" + "DO NOT DROP!";
} */
tattler.text = tattlerStr;
}else{
tattler.text = "YOU ARE
OUTSIDE THE CERTIFICATE";
}
}
private function doDragEnter(event:DragEvent):void{
var dropTarget:Canvas = Canvas
(event.currentTarget);
DragManager.acceptDragDrop(dropTarget);
}
private function doDragDrop(event:DragEvent):void{
tattler.text = event.currentTarget.id + " x:"
+ event.currentTarget.valueOf().mouseX + " y:"
+event.currentTarget.valueOf().mouseY;
var data:Object =
event.dragSource.dataForFormat('color');
canvasDragTarget.setStyle("backgroundColor",
data);
}
private function doCurriculumTreeDragEnter
(event:DragEvent):void{
var dropTarget:Tree = Tree
(event.currentTarget);
DragManager.acceptDragDrop(dropTarget);
}
private function doCurriculumTreeDragDrop
(event:DragEvent):void{
tattler.text = tree1.dataProvider.toString();
}
private function showTreeData
(event:CollectionEvent):void{
switch(event.kind) {
case CollectionEventKind.ADD:
tattler.text =
tree1.dataProvider.toString();
break;
case CollectionEventKind.REMOVE:
tattler.text =
tree1.dataProvider.toString();
break;
case CollectionEventKind.REPLACE:
tattler.text =
tree1.dataProvider.toString();
break;
case CollectionEventKind.UPDATE:
tattler.text =
tree1.dataProvider.toString();
break;
}
}
]]>
</mx:Script>
<mx:XMLListCollection id="treeData"
collectionChange="showTreeData(event)">
<mx:XMLList>
<node label="Curriculum" level="Curr" >
<node label="cert1" level="Cert">
<node label="c1" level="Course"
type="prereq"/>
<node label="c2" level="Course"
type="prereq"/>
</node>
<node label="cert2" level="Cert">
<node label="c3" level="Course"
type="prereq"/>
<node label="c4" level="Course"
type="prereq"/>
<node label="c5" level="Course"
type="elective"/>
<node label="c6" level="Course"
type="elective"/>
</node>
<node label="cert3" level="Cert">
<node label="c7" level="Course"
type="prereq"/>
<node label="c8" level="Course"
type="prereq"/>
<node label="c9" level="Course"
type="elective"/>
</node>
</node>
</mx:XMLList>
</mx:XMLListCollection>
<mx:Canvas x="88" y="24" width="452" height="395"
backgroundColor="#f3d7ab" id="canvasDragTarget"
borderColor="#000000" borderStyle="outset"
dragEnter="doDragEnter(event)"
dragDrop="doDragDrop(event)">
<mx:Tree id="tree1" width="154" height="361"
backgroundAlpha="0.29"
dataProvider="{treeData}"
mouseDown="treeChanged(event)"
fontWeight="bold" color="#000000"
dragEnabled="true" dragOver="dragger(event)"
dragMoveEnabled="true"
dropEnabled="true"
labelField="@label" wordWrap="true"
fontSize="8" variableRowHeight="true"
dragEnter="doCurriculumTreeDragEnter(event)"
dragDrop="//doCurriculumTreeDragDrop(event)"
showRoot="false" x="41" y="20"/>
</mx:Canvas>
<mx:TextArea x="88" y="462" width="452" height="316"
id="tattler"/>
</mx:Application>