Subversion Repositories Applications.papyrus

Rev

Rev 1372 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1372 Rev 1422
1
/*
1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
3
	All Rights Reserved.
4
 
4
 
5
	Licensed under the Academic Free License version 2.1 or above OR the
5
	Licensed under the Academic Free License version 2.1 or above OR the
6
	modified BSD license. For more information on Dojo licensing, see:
6
	modified BSD license. For more information on Dojo licensing, see:
7
 
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
9
*/
-
 
10
 
-
 
11
 
10
 
12
 
11
dojo.provide("dojo.widget.TreeBasicControllerV3");
13
dojo.provide("dojo.widget.TreeBasicControllerV3");
12
dojo.require("dojo.event.*");
14
dojo.require("dojo.event.*");
13
dojo.require("dojo.json");
15
dojo.require("dojo.json");
14
dojo.require("dojo.io.*");
16
dojo.require("dojo.io.*");
15
dojo.require("dojo.widget.TreeCommon");
17
dojo.require("dojo.widget.TreeCommon");
16
dojo.require("dojo.widget.TreeNodeV3");
18
dojo.require("dojo.widget.TreeNodeV3");
17
dojo.require("dojo.widget.TreeV3");
19
dojo.require("dojo.widget.TreeV3");
18
dojo.widget.defineWidget("dojo.widget.TreeBasicControllerV3", [dojo.widget.HtmlWidget, dojo.widget.TreeCommon], function () {
20
dojo.widget.defineWidget("dojo.widget.TreeBasicControllerV3", [dojo.widget.HtmlWidget, dojo.widget.TreeCommon], function () {
19
	this.listenedTrees = {};
21
	this.listenedTrees = {};
20
}, {listenTreeEvents:["afterSetFolder", "afterTreeCreate", "beforeTreeDestroy"], listenNodeFilter:function (elem) {
22
}, {listenTreeEvents:["afterSetFolder", "afterTreeCreate", "beforeTreeDestroy"], listenNodeFilter:function (elem) {
21
	return elem instanceof dojo.widget.Widget;
23
	return elem instanceof dojo.widget.Widget;
22
}, editor:null, initialize:function (args) {
24
}, editor:null, initialize:function (args) {
23
	if (args.editor) {
25
	if (args.editor) {
24
		this.editor = dojo.widget.byId(args.editor);
26
		this.editor = dojo.widget.byId(args.editor);
25
		this.editor.controller = this;
27
		this.editor.controller = this;
26
	}
28
	}
27
}, getInfo:function (elem) {
29
}, getInfo:function (elem) {
28
	return elem.getInfo();
30
	return elem.getInfo();
29
}, onBeforeTreeDestroy:function (message) {
31
}, onBeforeTreeDestroy:function (message) {
30
	this.unlistenTree(message.source);
32
	this.unlistenTree(message.source);
31
}, onAfterSetFolder:function (message) {
33
}, onAfterSetFolder:function (message) {
32
	if (message.source.expandLevel > 0) {
34
	if (message.source.expandLevel > 0) {
33
		this.expandToLevel(message.source, message.source.expandLevel);
35
		this.expandToLevel(message.source, message.source.expandLevel);
34
	}
36
	}
35
	if (message.source.loadLevel > 0) {
37
	if (message.source.loadLevel > 0) {
36
		this.loadToLevel(message.source, message.source.loadLevel);
38
		this.loadToLevel(message.source, message.source.loadLevel);
37
	}
39
	}
38
}, _focusNextVisible:function (nodeWidget) {
40
}, _focusNextVisible:function (nodeWidget) {
39
	if (nodeWidget.isFolder && nodeWidget.isExpanded && nodeWidget.children.length > 0) {
41
	if (nodeWidget.isFolder && nodeWidget.isExpanded && nodeWidget.children.length > 0) {
40
		returnWidget = nodeWidget.children[0];
42
		returnWidget = nodeWidget.children[0];
41
	} else {
43
	} else {
42
		while (nodeWidget.isTreeNode && nodeWidget.isLastChild()) {
44
		while (nodeWidget.isTreeNode && nodeWidget.isLastChild()) {
43
			nodeWidget = nodeWidget.parent;
45
			nodeWidget = nodeWidget.parent;
44
		}
46
		}
45
		if (nodeWidget.isTreeNode) {
47
		if (nodeWidget.isTreeNode) {
46
			var returnWidget = nodeWidget.parent.children[nodeWidget.getParentIndex() + 1];
48
			var returnWidget = nodeWidget.parent.children[nodeWidget.getParentIndex() + 1];
47
		}
49
		}
48
	}
50
	}
49
	if (returnWidget && returnWidget.isTreeNode) {
51
	if (returnWidget && returnWidget.isTreeNode) {
50
		this._focusLabel(returnWidget);
52
		this._focusLabel(returnWidget);
51
		return returnWidget;
53
		return returnWidget;
52
	}
54
	}
53
}, _focusPreviousVisible:function (nodeWidget) {
55
}, _focusPreviousVisible:function (nodeWidget) {
54
	var returnWidget = nodeWidget;
56
	var returnWidget = nodeWidget;
55
	if (!nodeWidget.isFirstChild()) {
57
	if (!nodeWidget.isFirstChild()) {
56
		var previousSibling = nodeWidget.parent.children[nodeWidget.getParentIndex() - 1];
58
		var previousSibling = nodeWidget.parent.children[nodeWidget.getParentIndex() - 1];
57
		nodeWidget = previousSibling;
59
		nodeWidget = previousSibling;
58
		while (nodeWidget.isFolder && nodeWidget.isExpanded && nodeWidget.children.length > 0) {
60
		while (nodeWidget.isFolder && nodeWidget.isExpanded && nodeWidget.children.length > 0) {
59
			returnWidget = nodeWidget;
61
			returnWidget = nodeWidget;
60
			nodeWidget = nodeWidget.children[nodeWidget.children.length - 1];
62
			nodeWidget = nodeWidget.children[nodeWidget.children.length - 1];
61
		}
63
		}
62
	} else {
64
	} else {
63
		nodeWidget = nodeWidget.parent;
65
		nodeWidget = nodeWidget.parent;
64
	}
66
	}
65
	if (nodeWidget && nodeWidget.isTreeNode) {
67
	if (nodeWidget && nodeWidget.isTreeNode) {
66
		returnWidget = nodeWidget;
68
		returnWidget = nodeWidget;
67
	}
69
	}
68
	if (returnWidget && returnWidget.isTreeNode) {
70
	if (returnWidget && returnWidget.isTreeNode) {
69
		this._focusLabel(returnWidget);
71
		this._focusLabel(returnWidget);
70
		return returnWidget;
72
		return returnWidget;
71
	}
73
	}
72
}, _focusZoomIn:function (nodeWidget) {
74
}, _focusZoomIn:function (nodeWidget) {
73
	var returnWidget = nodeWidget;
75
	var returnWidget = nodeWidget;
74
	if (nodeWidget.isFolder && !nodeWidget.isExpanded) {
76
	if (nodeWidget.isFolder && !nodeWidget.isExpanded) {
75
		this.expand(nodeWidget);
77
		this.expand(nodeWidget);
76
	} else {
78
	} else {
77
		if (nodeWidget.children.length > 0) {
79
		if (nodeWidget.children.length > 0) {
78
			nodeWidget = nodeWidget.children[0];
80
			nodeWidget = nodeWidget.children[0];
79
		}
81
		}
80
	}
82
	}
81
	if (nodeWidget && nodeWidget.isTreeNode) {
83
	if (nodeWidget && nodeWidget.isTreeNode) {
82
		returnWidget = nodeWidget;
84
		returnWidget = nodeWidget;
83
	}
85
	}
84
	if (returnWidget && returnWidget.isTreeNode) {
86
	if (returnWidget && returnWidget.isTreeNode) {
85
		this._focusLabel(returnWidget);
87
		this._focusLabel(returnWidget);
86
		return returnWidget;
88
		return returnWidget;
87
	}
89
	}
88
}, _focusZoomOut:function (node) {
90
}, _focusZoomOut:function (node) {
89
	var returnWidget = node;
91
	var returnWidget = node;
90
	if (node.isFolder && node.isExpanded) {
92
	if (node.isFolder && node.isExpanded) {
91
		this.collapse(node);
93
		this.collapse(node);
92
	} else {
94
	} else {
93
		node = node.parent;
95
		node = node.parent;
94
	}
96
	}
95
	if (node && node.isTreeNode) {
97
	if (node && node.isTreeNode) {
96
		returnWidget = node;
98
		returnWidget = node;
97
	}
99
	}
98
	if (returnWidget && returnWidget.isTreeNode) {
100
	if (returnWidget && returnWidget.isTreeNode) {
99
		this._focusLabel(returnWidget);
101
		this._focusLabel(returnWidget);
100
		return returnWidget;
102
		return returnWidget;
101
	}
103
	}
102
}, onFocusNode:function (e) {
104
}, onFocusNode:function (e) {
103
	var node = this.domElement2TreeNode(e.target);
105
	var node = this.domElement2TreeNode(e.target);
104
	if (node) {
106
	if (node) {
105
		node.viewFocus();
107
		node.viewFocus();
106
		dojo.event.browser.stopEvent(e);
108
		dojo.event.browser.stopEvent(e);
107
	}
109
	}
108
}, onBlurNode:function (e) {
110
}, onBlurNode:function (e) {
109
	var node = this.domElement2TreeNode(e.target);
111
	var node = this.domElement2TreeNode(e.target);
110
	if (!node) {
112
	if (!node) {
111
		return;
113
		return;
112
	}
114
	}
113
	var labelNode = node.labelNode;
115
	var labelNode = node.labelNode;
114
	labelNode.setAttribute("tabIndex", "-1");
116
	labelNode.setAttribute("tabIndex", "-1");
115
	node.viewUnfocus();
117
	node.viewUnfocus();
116
	dojo.event.browser.stopEvent(e);
118
	dojo.event.browser.stopEvent(e);
117
	node.tree.domNode.setAttribute("tabIndex", "0");
119
	node.tree.domNode.setAttribute("tabIndex", "0");
118
}, _focusLabel:function (node) {
120
}, _focusLabel:function (node) {
119
	var lastFocused = node.tree.lastFocused;
121
	var lastFocused = node.tree.lastFocused;
120
	var labelNode;
122
	var labelNode;
121
	if (lastFocused && lastFocused.labelNode) {
123
	if (lastFocused && lastFocused.labelNode) {
122
		labelNode = lastFocused.labelNode;
124
		labelNode = lastFocused.labelNode;
123
		dojo.event.disconnect(labelNode, "onblur", this, "onBlurNode");
125
		dojo.event.disconnect(labelNode, "onblur", this, "onBlurNode");
124
		labelNode.setAttribute("tabIndex", "-1");
126
		labelNode.setAttribute("tabIndex", "-1");
125
		dojo.html.removeClass(labelNode, "TreeLabelFocused");
127
		dojo.html.removeClass(labelNode, "TreeLabelFocused");
126
	}
128
	}
127
	labelNode = node.labelNode;
129
	labelNode = node.labelNode;
128
	labelNode.setAttribute("tabIndex", "0");
130
	labelNode.setAttribute("tabIndex", "0");
129
	node.tree.lastFocused = node;
131
	node.tree.lastFocused = node;
130
	dojo.html.addClass(labelNode, "TreeLabelFocused");
132
	dojo.html.addClass(labelNode, "TreeLabelFocused");
131
	dojo.event.connectOnce(labelNode, "onblur", this, "onBlurNode");
133
	dojo.event.connectOnce(labelNode, "onblur", this, "onBlurNode");
132
	dojo.event.connectOnce(labelNode, "onfocus", this, "onFocusNode");
134
	dojo.event.connectOnce(labelNode, "onfocus", this, "onFocusNode");
133
	labelNode.focus();
135
	labelNode.focus();
134
}, onKey:function (e) {
136
}, onKey:function (e) {
135
	if (!e.key || e.ctrkKey || e.altKey) {
137
	if (!e.key || e.ctrkKey || e.altKey) {
136
		return;
138
		return;
137
	}
139
	}
138
	var nodeWidget = this.domElement2TreeNode(e.target);
140
	var nodeWidget = this.domElement2TreeNode(e.target);
139
	if (!nodeWidget) {
141
	if (!nodeWidget) {
140
		return;
142
		return;
141
	}
143
	}
142
	var treeWidget = nodeWidget.tree;
144
	var treeWidget = nodeWidget.tree;
143
	if (treeWidget.lastFocused && treeWidget.lastFocused.labelNode) {
145
	if (treeWidget.lastFocused && treeWidget.lastFocused.labelNode) {
144
		nodeWidget = treeWidget.lastFocused;
146
		nodeWidget = treeWidget.lastFocused;
145
	}
147
	}
146
	switch (e.key) {
148
	switch (e.key) {
147
	  case e.KEY_TAB:
149
	  case e.KEY_TAB:
148
		if (e.shiftKey) {
150
		if (e.shiftKey) {
149
			treeWidget.domNode.setAttribute("tabIndex", "-1");
151
			treeWidget.domNode.setAttribute("tabIndex", "-1");
150
		}
152
		}
151
		break;
153
		break;
152
	  case e.KEY_RIGHT_ARROW:
154
	  case e.KEY_RIGHT_ARROW:
153
		this._focusZoomIn(nodeWidget);
155
		this._focusZoomIn(nodeWidget);
154
		dojo.event.browser.stopEvent(e);
156
		dojo.event.browser.stopEvent(e);
155
		break;
157
		break;
156
	  case e.KEY_LEFT_ARROW:
158
	  case e.KEY_LEFT_ARROW:
157
		this._focusZoomOut(nodeWidget);
159
		this._focusZoomOut(nodeWidget);
158
		dojo.event.browser.stopEvent(e);
160
		dojo.event.browser.stopEvent(e);
159
		break;
161
		break;
160
	  case e.KEY_UP_ARROW:
162
	  case e.KEY_UP_ARROW:
161
		this._focusPreviousVisible(nodeWidget);
163
		this._focusPreviousVisible(nodeWidget);
162
		dojo.event.browser.stopEvent(e);
164
		dojo.event.browser.stopEvent(e);
163
		break;
165
		break;
164
	  case e.KEY_DOWN_ARROW:
166
	  case e.KEY_DOWN_ARROW:
165
		this._focusNextVisible(nodeWidget);
167
		this._focusNextVisible(nodeWidget);
166
		dojo.event.browser.stopEvent(e);
168
		dojo.event.browser.stopEvent(e);
167
		break;
169
		break;
168
	}
170
	}
169
}, onFocusTree:function (e) {
171
}, onFocusTree:function (e) {
170
	if (!e.currentTarget) {
172
	if (!e.currentTarget) {
171
		return;
173
		return;
172
	}
174
	}
173
	try {
175
	try {
174
		var treeWidget = this.getWidgetByNode(e.currentTarget);
176
		var treeWidget = this.getWidgetByNode(e.currentTarget);
175
		if (!treeWidget || !treeWidget.isTree) {
177
		if (!treeWidget || !treeWidget.isTree) {
176
			return;
178
			return;
177
		}
179
		}
178
		var nodeWidget = this.getWidgetByNode(treeWidget.domNode.firstChild);
180
		var nodeWidget = this.getWidgetByNode(treeWidget.domNode.firstChild);
179
		if (nodeWidget && nodeWidget.isTreeNode) {
181
		if (nodeWidget && nodeWidget.isTreeNode) {
180
			if (treeWidget.lastFocused && treeWidget.lastFocused.isTreeNode) {
182
			if (treeWidget.lastFocused && treeWidget.lastFocused.isTreeNode) {
181
				nodeWidget = treeWidget.lastFocused;
183
				nodeWidget = treeWidget.lastFocused;
182
			}
184
			}
183
			this._focusLabel(nodeWidget);
185
			this._focusLabel(nodeWidget);
184
		}
186
		}
185
	}
187
	}
186
	catch (e) {
188
	catch (e) {
187
	}
189
	}
188
}, onAfterTreeCreate:function (message) {
190
}, onAfterTreeCreate:function (message) {
189
	var tree = message.source;
191
	var tree = message.source;
190
	dojo.event.browser.addListener(tree.domNode, "onKey", dojo.lang.hitch(this, this.onKey));
192
	dojo.event.browser.addListener(tree.domNode, "onKey", dojo.lang.hitch(this, this.onKey));
191
	dojo.event.browser.addListener(tree.domNode, "onmousedown", dojo.lang.hitch(this, this.onTreeMouseDown));
193
	dojo.event.browser.addListener(tree.domNode, "onmousedown", dojo.lang.hitch(this, this.onTreeMouseDown));
192
	dojo.event.browser.addListener(tree.domNode, "onclick", dojo.lang.hitch(this, this.onTreeClick));
194
	dojo.event.browser.addListener(tree.domNode, "onclick", dojo.lang.hitch(this, this.onTreeClick));
193
	dojo.event.browser.addListener(tree.domNode, "onfocus", dojo.lang.hitch(this, this.onFocusTree));
195
	dojo.event.browser.addListener(tree.domNode, "onfocus", dojo.lang.hitch(this, this.onFocusTree));
194
	tree.domNode.setAttribute("tabIndex", "0");
196
	tree.domNode.setAttribute("tabIndex", "0");
195
	if (tree.expandLevel) {
197
	if (tree.expandLevel) {
196
		this.expandToLevel(tree, tree.expandLevel);
198
		this.expandToLevel(tree, tree.expandLevel);
197
	}
199
	}
198
	if (tree.loadLevel) {
200
	if (tree.loadLevel) {
199
		this.loadToLevel(tree, tree.loadLevel);
201
		this.loadToLevel(tree, tree.loadLevel);
200
	}
202
	}
201
}, onTreeMouseDown:function (e) {
203
}, onTreeMouseDown:function (e) {
202
}, onTreeClick:function (e) {
204
}, onTreeClick:function (e) {
203
	var domElement = e.target;
205
	var domElement = e.target;
204
	var node = this.domElement2TreeNode(domElement);
206
	var node = this.domElement2TreeNode(domElement);
205
	if (!node || !node.isTreeNode) {
207
	if (!node || !node.isTreeNode) {
206
		return;
208
		return;
207
	}
209
	}
208
	var checkExpandClick = function (el) {
210
	var checkExpandClick = function (el) {
209
		return el === node.expandNode;
211
		return el === node.expandNode;
210
	};
212
	};
211
	if (this.checkPathCondition(domElement, checkExpandClick)) {
213
	if (this.checkPathCondition(domElement, checkExpandClick)) {
212
		this.processExpandClick(node);
214
		this.processExpandClick(node);
213
	}
215
	}
214
	this._focusLabel(node);
216
	this._focusLabel(node);
215
}, processExpandClick:function (node) {
217
}, processExpandClick:function (node) {
216
	if (node.isExpanded) {
218
	if (node.isExpanded) {
217
		this.collapse(node);
219
		this.collapse(node);
218
	} else {
220
	} else {
219
		this.expand(node);
221
		this.expand(node);
220
	}
222
	}
221
}, batchExpandTimeout:20, expandAll:function (nodeOrTree) {
223
}, batchExpandTimeout:20, expandAll:function (nodeOrTree) {
222
	return this.expandToLevel(nodeOrTree, Number.POSITIVE_INFINITY);
224
	return this.expandToLevel(nodeOrTree, Number.POSITIVE_INFINITY);
223
}, collapseAll:function (nodeOrTree) {
225
}, collapseAll:function (nodeOrTree) {
224
	var _this = this;
226
	var _this = this;
225
	var filter = function (elem) {
227
	var filter = function (elem) {
226
		return (elem instanceof dojo.widget.Widget) && elem.isFolder && elem.isExpanded;
228
		return (elem instanceof dojo.widget.Widget) && elem.isFolder && elem.isExpanded;
227
	};
229
	};
228
	if (nodeOrTree.isTreeNode) {
230
	if (nodeOrTree.isTreeNode) {
229
		this.processDescendants(nodeOrTree, filter, this.collapse);
231
		this.processDescendants(nodeOrTree, filter, this.collapse);
230
	} else {
232
	} else {
231
		if (nodeOrTree.isTree) {
233
		if (nodeOrTree.isTree) {
232
			dojo.lang.forEach(nodeOrTree.children, function (c) {
234
			dojo.lang.forEach(nodeOrTree.children, function (c) {
233
				_this.processDescendants(c, filter, _this.collapse);
235
				_this.processDescendants(c, filter, _this.collapse);
234
			});
236
			});
235
		}
237
		}
236
	}
238
	}
237
}, expandToNode:function (node, withSelected) {
239
}, expandToNode:function (node, withSelected) {
238
	n = withSelected ? node : node.parent;
240
	n = withSelected ? node : node.parent;
239
	s = [];
241
	s = [];
240
	while (!n.isExpanded) {
242
	while (!n.isExpanded) {
241
		s.push(n);
243
		s.push(n);
242
		n = n.parent;
244
		n = n.parent;
243
	}
245
	}
244
	dojo.lang.forEach(s, function (n) {
246
	dojo.lang.forEach(s, function (n) {
245
		n.expand();
247
		n.expand();
246
	});
248
	});
247
}, expandToLevel:function (nodeOrTree, level) {
249
}, expandToLevel:function (nodeOrTree, level) {
248
	dojo.require("dojo.widget.TreeTimeoutIterator");
250
	dojo.require("dojo.widget.TreeTimeoutIterator");
249
	var _this = this;
251
	var _this = this;
250
	var filterFunc = function (elem) {
252
	var filterFunc = function (elem) {
251
		var res = elem.isFolder || elem.children && elem.children.length;
253
		var res = elem.isFolder || elem.children && elem.children.length;
252
		return res;
254
		return res;
253
	};
255
	};
254
	var callFunc = function (node, iterator) {
256
	var callFunc = function (node, iterator) {
255
		_this.expand(node, true);
257
		_this.expand(node, true);
256
		iterator.forward();
258
		iterator.forward();
257
	};
259
	};
258
	var iterator = new dojo.widget.TreeTimeoutIterator(nodeOrTree, callFunc, this);
260
	var iterator = new dojo.widget.TreeTimeoutIterator(nodeOrTree, callFunc, this);
259
	iterator.setFilter(filterFunc);
261
	iterator.setFilter(filterFunc);
260
	iterator.timeout = this.batchExpandTimeout;
262
	iterator.timeout = this.batchExpandTimeout;
261
	iterator.setMaxLevel(nodeOrTree.isTreeNode ? level - 1 : level);
263
	iterator.setMaxLevel(nodeOrTree.isTreeNode ? level - 1 : level);
262
	return iterator.start(nodeOrTree.isTreeNode);
264
	return iterator.start(nodeOrTree.isTreeNode);
263
}, getWidgetByNode:function (node) {
265
}, getWidgetByNode:function (node) {
264
	var widgetId;
266
	var widgetId;
265
	var newNode = node;
267
	var newNode = node;
266
	while (!(widgetId = newNode.widgetId)) {
268
	while (!(widgetId = newNode.widgetId)) {
267
		newNode = newNode.parentNode;
269
		newNode = newNode.parentNode;
268
		if (newNode == null) {
270
		if (newNode == null) {
269
			break;
271
			break;
270
		}
272
		}
271
	}
273
	}
272
	if (widgetId) {
274
	if (widgetId) {
273
		return dojo.widget.byId(widgetId);
275
		return dojo.widget.byId(widgetId);
274
	} else {
276
	} else {
275
		if (node == null) {
277
		if (node == null) {
276
			return null;
278
			return null;
277
		} else {
279
		} else {
278
			return dojo.widget.manager.byNode(node);
280
			return dojo.widget.manager.byNode(node);
279
		}
281
		}
280
	}
282
	}
281
}, expand:function (node) {
283
}, expand:function (node) {
282
	if (node.isFolder) {
284
	if (node.isFolder) {
283
		node.expand();
285
		node.expand();
284
	}
286
	}
285
}, collapse:function (node) {
287
}, collapse:function (node) {
286
	if (node.isFolder) {
288
	if (node.isFolder) {
287
		node.collapse();
289
		node.collapse();
288
	}
290
	}
289
}, canEditLabel:function (node) {
291
}, canEditLabel:function (node) {
290
	if (node.actionIsDisabledNow(node.actions.EDIT)) {
292
	if (node.actionIsDisabledNow(node.actions.EDIT)) {
291
		return false;
293
		return false;
292
	}
294
	}
293
	return true;
295
	return true;
294
}, editLabelStart:function (node) {
296
}, editLabelStart:function (node) {
295
	if (!this.canEditLabel(node)) {
297
	if (!this.canEditLabel(node)) {
296
		return false;
298
		return false;
297
	}
299
	}
298
	if (!this.editor.isClosed()) {
300
	if (!this.editor.isClosed()) {
299
		this.editLabelFinish(this.editor.saveOnBlur);
301
		this.editLabelFinish(this.editor.saveOnBlur);
300
	}
302
	}
301
	this.doEditLabelStart(node);
303
	this.doEditLabelStart(node);
302
}, editLabelFinish:function (save) {
304
}, editLabelFinish:function (save) {
303
	this.doEditLabelFinish(save);
305
	this.doEditLabelFinish(save);
304
}, doEditLabelStart:function (node) {
306
}, doEditLabelStart:function (node) {
305
	if (!this.editor) {
307
	if (!this.editor) {
306
		dojo.raise(this.widgetType + ": no editor specified");
308
		dojo.raise(this.widgetType + ": no editor specified");
307
	}
309
	}
308
	this.editor.open(node);
310
	this.editor.open(node);
309
}, doEditLabelFinish:function (save, server_data) {
311
}, doEditLabelFinish:function (save, server_data) {
310
	if (!this.editor) {
312
	if (!this.editor) {
311
		dojo.raise(this.widgetType + ": no editor specified");
313
		dojo.raise(this.widgetType + ": no editor specified");
312
	}
314
	}
313
	var node = this.editor.node;
315
	var node = this.editor.node;
314
	var editorTitle = this.editor.getContents();
316
	var editorTitle = this.editor.getContents();
315
	this.editor.close(save);
317
	this.editor.close(save);
316
	if (save) {
318
	if (save) {
317
		var data = {title:editorTitle};
319
		var data = {title:editorTitle};
318
		if (server_data) {
320
		if (server_data) {
319
			dojo.lang.mixin(data, server_data);
321
			dojo.lang.mixin(data, server_data);
320
		}
322
		}
321
		if (node.isPhantom) {
323
		if (node.isPhantom) {
322
			var parent = node.parent;
324
			var parent = node.parent;
323
			var index = node.getParentIndex();
325
			var index = node.getParentIndex();
324
			node.destroy();
326
			node.destroy();
325
			dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this, parent, index, data);
327
			dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this, parent, index, data);
326
		} else {
328
		} else {
327
			var title = server_data && server_data.title ? server_data.title : editorTitle;
329
			var title = server_data && server_data.title ? server_data.title : editorTitle;
328
			node.setTitle(title);
330
			node.setTitle(title);
329
		}
331
		}
330
	} else {
332
	} else {
331
		if (node.isPhantom) {
333
		if (node.isPhantom) {
332
			node.destroy();
334
			node.destroy();
333
		}
335
		}
334
	}
336
	}
335
}, makeDefaultNode:function (parent, index) {
337
}, makeDefaultNode:function (parent, index) {
336
	var data = {title:parent.tree.defaultChildTitle};
338
	var data = {title:parent.tree.defaultChildTitle};
337
	return dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this, parent, index, data);
339
	return dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this, parent, index, data);
338
}, runStages:function (check, prepare, make, finalize, expose, args) {
340
}, runStages:function (check, prepare, make, finalize, expose, args) {
339
	if (check && !check.apply(this, args)) {
341
	if (check && !check.apply(this, args)) {
340
		return false;
342
		return false;
341
	}
343
	}
342
	if (prepare && !prepare.apply(this, args)) {
344
	if (prepare && !prepare.apply(this, args)) {
343
		return false;
345
		return false;
344
	}
346
	}
345
	var result = make.apply(this, args);
347
	var result = make.apply(this, args);
346
	if (finalize) {
348
	if (finalize) {
347
		finalize.apply(this, args);
349
		finalize.apply(this, args);
348
	}
350
	}
349
	if (!result) {
351
	if (!result) {
350
		return result;
352
		return result;
351
	}
353
	}
352
	if (expose) {
354
	if (expose) {
353
		expose.apply(this, args);
355
		expose.apply(this, args);
354
	}
356
	}
355
	return result;
357
	return result;
356
}});
358
}});
357
dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {createAndEdit:function (parent, index) {
359
dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {createAndEdit:function (parent, index) {
358
	var data = {title:parent.tree.defaultChildTitle};
360
	var data = {title:parent.tree.defaultChildTitle};
359
	if (!this.canCreateChild(parent, index, data)) {
361
	if (!this.canCreateChild(parent, index, data)) {
360
		return false;
362
		return false;
361
	}
363
	}
362
	var child = this.doCreateChild(parent, index, data);
364
	var child = this.doCreateChild(parent, index, data);
363
	if (!child) {
365
	if (!child) {
364
		return false;
366
		return false;
365
	}
367
	}
366
	this.exposeCreateChild(parent, index, data);
368
	this.exposeCreateChild(parent, index, data);
367
	child.isPhantom = true;
369
	child.isPhantom = true;
368
	if (!this.editor.isClosed()) {
370
	if (!this.editor.isClosed()) {
369
		this.editLabelFinish(this.editor.saveOnBlur);
371
		this.editLabelFinish(this.editor.saveOnBlur);
370
	}
372
	}
371
	this.doEditLabelStart(child);
373
	this.doEditLabelStart(child);
372
}});
374
}});
373
dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canClone:function (child, newParent, index, deep) {
375
dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canClone:function (child, newParent, index, deep) {
374
	return true;
376
	return true;
375
}, clone:function (child, newParent, index, deep) {
377
}, clone:function (child, newParent, index, deep) {
376
	return this.runStages(this.canClone, this.prepareClone, this.doClone, this.finalizeClone, this.exposeClone, arguments);
378
	return this.runStages(this.canClone, this.prepareClone, this.doClone, this.finalizeClone, this.exposeClone, arguments);
377
}, exposeClone:function (child, newParent) {
379
}, exposeClone:function (child, newParent) {
378
	if (newParent.isTreeNode) {
380
	if (newParent.isTreeNode) {
379
		this.expand(newParent);
381
		this.expand(newParent);
380
	}
382
	}
381
}, doClone:function (child, newParent, index, deep) {
383
}, doClone:function (child, newParent, index, deep) {
382
	var cloned = child.clone(deep);
384
	var cloned = child.clone(deep);
383
	newParent.addChild(cloned, index);
385
	newParent.addChild(cloned, index);
384
	return cloned;
386
	return cloned;
385
}});
387
}});
386
dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canDetach:function (child) {
388
dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canDetach:function (child) {
387
	if (child.actionIsDisabledNow(child.actions.DETACH)) {
389
	if (child.actionIsDisabledNow(child.actions.DETACH)) {
388
		return false;
390
		return false;
389
	}
391
	}
390
	return true;
392
	return true;
391
}, detach:function (node) {
393
}, detach:function (node) {
392
	return this.runStages(this.canDetach, this.prepareDetach, this.doDetach, this.finalizeDetach, this.exposeDetach, arguments);
394
	return this.runStages(this.canDetach, this.prepareDetach, this.doDetach, this.finalizeDetach, this.exposeDetach, arguments);
393
}, doDetach:function (node, callObj, callFunc) {
395
}, doDetach:function (node, callObj, callFunc) {
394
	node.detach();
396
	node.detach();
395
}});
397
}});
396
dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canDestroyChild:function (child) {
398
dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canDestroyChild:function (child) {
397
	if (child.parent && !this.canDetach(child)) {
399
	if (child.parent && !this.canDetach(child)) {
398
		return false;
400
		return false;
399
	}
401
	}
400
	return true;
402
	return true;
401
}, destroyChild:function (node) {
403
}, destroyChild:function (node) {
402
	return this.runStages(this.canDestroyChild, this.prepareDestroyChild, this.doDestroyChild, this.finalizeDestroyChild, this.exposeDestroyChild, arguments);
404
	return this.runStages(this.canDestroyChild, this.prepareDestroyChild, this.doDestroyChild, this.finalizeDestroyChild, this.exposeDestroyChild, arguments);
403
}, doDestroyChild:function (node) {
405
}, doDestroyChild:function (node) {
404
	node.destroy();
406
	node.destroy();
405
}});
407
}});
406
dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canMoveNotANode:function (child, parent) {
408
dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canMoveNotANode:function (child, parent) {
407
	if (child.treeCanMove) {
409
	if (child.treeCanMove) {
408
		return child.treeCanMove(parent);
410
		return child.treeCanMove(parent);
409
	}
411
	}
410
	return true;
412
	return true;
411
}, canMove:function (child, newParent) {
413
}, canMove:function (child, newParent) {
412
	if (!child.isTreeNode) {
414
	if (!child.isTreeNode) {
413
		return this.canMoveNotANode(child, newParent);
415
		return this.canMoveNotANode(child, newParent);
414
	}
416
	}
415
	if (child.actionIsDisabledNow(child.actions.MOVE)) {
417
	if (child.actionIsDisabledNow(child.actions.MOVE)) {
416
		return false;
418
		return false;
417
	}
419
	}
418
	if (child.parent !== newParent && newParent.actionIsDisabledNow(newParent.actions.ADDCHILD)) {
420
	if (child.parent !== newParent && newParent.actionIsDisabledNow(newParent.actions.ADDCHILD)) {
419
		return false;
421
		return false;
420
	}
422
	}
421
	var node = newParent;
423
	var node = newParent;
422
	while (node.isTreeNode) {
424
	while (node.isTreeNode) {
423
		if (node === child) {
425
		if (node === child) {
424
			return false;
426
			return false;
425
		}
427
		}
426
		node = node.parent;
428
		node = node.parent;
427
	}
429
	}
428
	return true;
430
	return true;
429
}, move:function (child, newParent, index) {
431
}, move:function (child, newParent, index) {
430
	return this.runStages(this.canMove, this.prepareMove, this.doMove, this.finalizeMove, this.exposeMove, arguments);
432
	return this.runStages(this.canMove, this.prepareMove, this.doMove, this.finalizeMove, this.exposeMove, arguments);
431
}, doMove:function (child, newParent, index) {
433
}, doMove:function (child, newParent, index) {
432
	child.tree.move(child, newParent, index);
434
	child.tree.move(child, newParent, index);
433
	return true;
435
	return true;
434
}, exposeMove:function (child, newParent) {
436
}, exposeMove:function (child, newParent) {
435
	if (newParent.isTreeNode) {
437
	if (newParent.isTreeNode) {
436
		this.expand(newParent);
438
		this.expand(newParent);
437
	}
439
	}
438
}});
440
}});
439
dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canCreateChild:function (parent, index, data) {
441
dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canCreateChild:function (parent, index, data) {
440
	if (parent.actionIsDisabledNow(parent.actions.ADDCHILD)) {
442
	if (parent.actionIsDisabledNow(parent.actions.ADDCHILD)) {
441
		return false;
443
		return false;
442
	}
444
	}
443
	return true;
445
	return true;
444
}, createChild:function (parent, index, data) {
446
}, createChild:function (parent, index, data) {
445
	if (!data) {
447
	if (!data) {
446
		data = {title:parent.tree.defaultChildTitle};
448
		data = {title:parent.tree.defaultChildTitle};
447
	}
449
	}
448
	return this.runStages(this.canCreateChild, this.prepareCreateChild, this.doCreateChild, this.finalizeCreateChild, this.exposeCreateChild, [parent, index, data]);
450
	return this.runStages(this.canCreateChild, this.prepareCreateChild, this.doCreateChild, this.finalizeCreateChild, this.exposeCreateChild, [parent, index, data]);
449
}, prepareCreateChild:function () {
451
}, prepareCreateChild:function () {
450
	return true;
452
	return true;
451
}, finalizeCreateChild:function () {
453
}, finalizeCreateChild:function () {
452
}, doCreateChild:function (parent, index, data) {
454
}, doCreateChild:function (parent, index, data) {
453
	var newChild = parent.tree.createNode(data);
455
	var newChild = parent.tree.createNode(data);
454
	parent.addChild(newChild, index);
456
	parent.addChild(newChild, index);
455
	return newChild;
457
	return newChild;
456
}, exposeCreateChild:function (parent) {
458
}, exposeCreateChild:function (parent) {
457
	return this.expand(parent);
459
	return this.expand(parent);
458
}});
460
}});
459
 
461