R – How to prevent tree items from being dragged into themselves

apache-flexdrag and droptree

I have a flex tree with dragMoveEnabled = true. I want to find out, when an item is dragged into itself or it's children. I'd like to use DragManager.showFeedback(DragManager.NONE) in the tree's onDragOver handler, but can't find out how get this to work. I'm using an ArrayCollection of nested objects as dataSource for the tree.

Best Answer

    private function onDragOver(event:DragEvent):void {
        event.preventDefault();
        event.currentTarget.hideDropFeedback(event);                

        var index:int = tree.calculateDropIndex(event);
        tree.selectedIndex = index;
        var subCategory:CategoryVO = CategoryVO(tree.selectedItem);

        var currentCategory:CategoryVO = subCategory;

        while(currentCategory.parent != 0) {
        if (currentCategory.parent == _draggedItem.id) {
            DragManager.showFeedback(DragManager.NONE);
            return;
        }
        currentCategory = tree.getParentItem(currentCategory);

        if (currentCategory == null) {
            break;
        }

        DragManager.showFeedback(DragManager.MOVE);
        tree.showDropFeedback(event);
   }

That's how I solved it.

_draggedItem holds the currently dragged item, set in the tree's onDragEnter handler. CategoryVO is the value object I use.