Subversion Repositories Applications.papyrus

Rev

Rev 1987 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
        Copyright (c) 2004-2006, The Dojo Foundation
        All Rights Reserved.

        Licensed under the Academic Free License version 2.1 or above OR the
        modified BSD license. For more information on Dojo licensing, see:

                http://dojotoolkit.org/community/licensing.shtml
*/



dojo.require("dojo.lang.declare");
dojo.provide("dojo.widget.TreeWithNode");
dojo.declare("dojo.widget.TreeWithNode", null, function () {
}, {loadStates:{UNCHECKED:"UNCHECKED", LOADING:"LOADING", LOADED:"LOADED"}, state:"UNCHECKED", objectId:"", isContainer:true, lockLevel:0, lock:function () {
        this.lockLevel++;
}, unlock:function () {
        if (!this.lockLevel) {
                dojo.raise(this.widgetType + " unlock: not locked");
        }
        this.lockLevel--;
}, expandLevel:0, loadLevel:0, hasLock:function () {
        return this.lockLevel > 0;
}, isLocked:function () {
        var node = this;
        while (true) {
                if (node.lockLevel) {
                        return true;
                }
                if (!node.parent || node.isTree) {
                        break;
                }
                node = node.parent;
        }
        return false;
}, flushLock:function () {
        this.lockLevel = 0;
}, actionIsDisabled:function (action) {
        var disabled = false;
        if (dojo.lang.inArray(this.actionsDisabled, action)) {
                disabled = true;
        }
        if (this.isTreeNode) {
                if (!this.tree.allowAddChildToLeaf && action == this.actions.ADDCHILD && !this.isFolder) {
                        disabled = true;
                }
        }
        return disabled;
}, actionIsDisabledNow:function (action) {
        return this.actionIsDisabled(action) || this.isLocked();
}, setChildren:function (childrenArray) {
        if (this.isTreeNode && !this.isFolder) {
                this.setFolder();
        } else {
                if (this.isTreeNode) {
                        this.state = this.loadStates.LOADED;
                }
        }
        var hadChildren = this.children.length > 0;
        if (hadChildren && childrenArray) {
                this.destroyChildren();
        }
        if (childrenArray) {
                this.children = childrenArray;
        }
        var hasChildren = this.children.length > 0;
        if (this.isTreeNode && hasChildren != hadChildren) {
                this.viewSetHasChildren();
        }
        for (var i = 0; i < this.children.length; i++) {
                var child = this.children[i];
                if (!(child instanceof dojo.widget.Widget)) {
                        child = this.children[i] = this.tree.createNode(child);
                        var childWidgetCreated = true;
                } else {
                        var childWidgetCreated = false;
                }
                if (!child.parent) {
                        child.parent = this;
                        if (this.tree !== child.tree) {
                                child.updateTree(this.tree);
                        }
                        child.viewAddLayout();
                        this.containerNode.appendChild(child.domNode);
                        var message = {child:child, index:i, parent:this, childWidgetCreated:childWidgetCreated};
                        delete dojo.widget.manager.topWidgets[child.widgetId];
                        dojo.event.topic.publish(this.tree.eventNames.afterAddChild, message);
                }
                if (this.tree.eagerWidgetInstantiation) {
                        dojo.lang.forEach(this.children, function (child) {
                                child.setChildren();
                        });
                }
        }
}, doAddChild:function (child, index) {
        return this.addChild(child, index, true);
}, addChild:function (child, index, dontPublishEvent) {
        if (dojo.lang.isUndefined(index)) {
                index = this.children.length;
        }
        if (!child.isTreeNode) {
                dojo.raise("You can only add TreeNode widgets to a " + this.widgetType + " widget!");
                return;
        }
        this.children.splice(index, 0, child);
        child.parent = this;
        child.addedTo(this, index, dontPublishEvent);
        delete dojo.widget.manager.topWidgets[child.widgetId];
}, onShow:function () {
        this.animationInProgress = false;
}, onHide:function () {
        this.animationInProgress = false;
}});