/* 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.provide("dojo.widget.TreeBasicController"); dojo.require("dojo.event.*"); dojo.require("dojo.json") dojo.require("dojo.io.*"); dojo.widget.tags.addParseTreeHandler("dojo:TreeBasicController"); dojo.widget.TreeBasicController = function() { dojo.widget.HtmlWidget.call(this); } dojo.inherits(dojo.widget.TreeBasicController, dojo.widget.HtmlWidget); dojo.lang.extend(dojo.widget.TreeBasicController, { widgetType: "TreeBasicController", DNDController: "", dieWithTree: false, initialize: function(args, frag){ /* no DND by default for compatibility */ if (this.DNDController == "create") { dojo.require("dojo.dnd.TreeDragAndDrop"); this.DNDController = new dojo.dnd.TreeDNDController(this); } }, /** * Binds controller to all tree events */ listenTree: function(tree) { //dojo.debug("Event "+tree.eventNames.treeClick); dojo.event.topic.subscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode"); dojo.event.topic.subscribe(tree.eventNames.treeClick, this, "onTreeClick"); dojo.event.topic.subscribe(tree.eventNames.treeCreate, this, "onTreeCreate"); dojo.event.topic.subscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy"); if (this.DNDController) { this.DNDController.listenTree(tree); } }, unlistenTree: function(tree) { dojo.event.topic.unsubscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode"); dojo.event.topic.unsubscribe(tree.eventNames.treeClick, this, "onTreeClick"); dojo.event.topic.unsubscribe(tree.eventNames.treeCreate, this, "onTreeCreate"); dojo.event.topic.unsubscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy"); }, onTreeDestroy: function(message) { var tree = message.source; this.unlistenTree(tree); if (this.dieWithTree) { //alert("Killing myself "+this.widgetId); this.destroy(); //dojo.debug("done"); } }, onCreateDOMNode: function(message) { var node = message.source; if (node.expandLevel > 0) { this.expandToLevel(node, node.expandLevel); } }, // perform actions-initializers for tree onTreeCreate: function(message) { var tree = message.source; var _this = this; if (tree.expandLevel) { dojo.lang.forEach(tree.children, function(child) { _this.expandToLevel(child, tree.expandLevel-1) } ); } }, expandToLevel: function(node, level) { if (level == 0) return; var children = node.children; var _this = this; var handler = function(node, expandLevel) { this.node = node; this.expandLevel = expandLevel; // recursively expand opened node this.process = function() { //dojo.debug("Process "+node+" level "+level); for(var i=0; i