Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1318 alexandre_ 1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
4
 
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:
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
10
 
11
dojo.provide("dojo.widget.Toolbar");
12
dojo.require("dojo.widget.*");
13
dojo.require("dojo.html.style");
14
dojo.widget.defineWidget("dojo.widget.ToolbarContainer", dojo.widget.HtmlWidget, {isContainer:true, templateString:"<div class=\"toolbarContainer\" dojoAttachPoint=\"containerNode\"></div>", templateCssString:".toolbarContainer {\n\tborder-bottom : 0;\n\tbackground-color : #def;\n\tcolor : ButtonText;\n\tfont : Menu;\n\tbackground-image: url(images/toolbar-bg.gif);\n}\n\n.toolbar {\n\tpadding : 2px 4px;\n\tmin-height : 26px;\n\t_height : 26px;\n}\n\n.toolbarItem {\n\tfloat : left;\n\tpadding : 1px 2px;\n\tmargin : 0 2px 1px 0;\n\tcursor : pointer;\n}\n\n.toolbarItem.selected, .toolbarItem.down {\n\tmargin : 1px 1px 0 1px;\n\tpadding : 0px 1px;\n\tborder : 1px solid #bbf;\n\tbackground-color : #fafaff;\n}\n\n.toolbarButton img {\n\tvertical-align : bottom;\n}\n\n.toolbarButton span {\n\tline-height : 16px;\n\tvertical-align : middle;\n}\n\n.toolbarButton.hover {\n\tpadding : 0px 1px;\n\tborder : 1px solid #99c;\n}\n\n.toolbarItem.disabled {\n\topacity : 0.3;\n\tfilter : alpha(opacity=30);\n\tcursor : default;\n}\n\n.toolbarSeparator {\n\tcursor : default;\n}\n\n.toolbarFlexibleSpace {\n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/Toolbar.css"), getItem:function (name) {
15
	if (name instanceof dojo.widget.ToolbarItem) {
16
		return name;
17
	}
18
	for (var i = 0; i < this.children.length; i++) {
19
		var child = this.children[i];
20
		if (child instanceof dojo.widget.Toolbar) {
21
			var item = child.getItem(name);
22
			if (item) {
23
				return item;
24
			}
25
		}
26
	}
27
	return null;
28
}, getItems:function () {
29
	var items = [];
30
	for (var i = 0; i < this.children.length; i++) {
31
		var child = this.children[i];
32
		if (child instanceof dojo.widget.Toolbar) {
33
			items = items.concat(child.getItems());
34
		}
35
	}
36
	return items;
37
}, enable:function () {
38
	for (var i = 0; i < this.children.length; i++) {
39
		var child = this.children[i];
40
		if (child instanceof dojo.widget.Toolbar) {
41
			child.enable.apply(child, arguments);
42
		}
43
	}
44
}, disable:function () {
45
	for (var i = 0; i < this.children.length; i++) {
46
		var child = this.children[i];
47
		if (child instanceof dojo.widget.Toolbar) {
48
			child.disable.apply(child, arguments);
49
		}
50
	}
51
}, select:function (name) {
52
	for (var i = 0; i < this.children.length; i++) {
53
		var child = this.children[i];
54
		if (child instanceof dojo.widget.Toolbar) {
55
			child.select(arguments);
56
		}
57
	}
58
}, deselect:function (name) {
59
	for (var i = 0; i < this.children.length; i++) {
60
		var child = this.children[i];
61
		if (child instanceof dojo.widget.Toolbar) {
62
			child.deselect(arguments);
63
		}
64
	}
65
}, getItemsState:function () {
66
	var values = {};
67
	for (var i = 0; i < this.children.length; i++) {
68
		var child = this.children[i];
69
		if (child instanceof dojo.widget.Toolbar) {
70
			dojo.lang.mixin(values, child.getItemsState());
71
		}
72
	}
73
	return values;
74
}, getItemsActiveState:function () {
75
	var values = {};
76
	for (var i = 0; i < this.children.length; i++) {
77
		var child = this.children[i];
78
		if (child instanceof dojo.widget.Toolbar) {
79
			dojo.lang.mixin(values, child.getItemsActiveState());
80
		}
81
	}
82
	return values;
83
}, getItemsSelectedState:function () {
84
	var values = {};
85
	for (var i = 0; i < this.children.length; i++) {
86
		var child = this.children[i];
87
		if (child instanceof dojo.widget.Toolbar) {
88
			dojo.lang.mixin(values, child.getItemsSelectedState());
89
		}
90
	}
91
	return values;
92
}});
93
dojo.widget.defineWidget("dojo.widget.Toolbar", dojo.widget.HtmlWidget, {isContainer:true, templateString:"<div class=\"toolbar\" dojoAttachPoint=\"containerNode\" unselectable=\"on\" dojoOnMouseover=\"_onmouseover\" dojoOnMouseout=\"_onmouseout\" dojoOnClick=\"_onclick\" dojoOnMousedown=\"_onmousedown\" dojoOnMouseup=\"_onmouseup\"></div>", _getItem:function (node) {
94
	var start = new Date();
95
	var widget = null;
96
	while (node && node != this.domNode) {
97
		if (dojo.html.hasClass(node, "toolbarItem")) {
98
			var widgets = dojo.widget.manager.getWidgetsByFilter(function (w) {
99
				return w.domNode == node;
100
			});
101
			if (widgets.length == 1) {
102
				widget = widgets[0];
103
				break;
104
			} else {
105
				if (widgets.length > 1) {
106
					dojo.raise("Toolbar._getItem: More than one widget matches the node");
107
				}
108
			}
109
		}
110
		node = node.parentNode;
111
	}
112
	return widget;
113
}, _onmouseover:function (e) {
114
	var widget = this._getItem(e.target);
115
	if (widget && widget._onmouseover) {
116
		widget._onmouseover(e);
117
	}
118
}, _onmouseout:function (e) {
119
	var widget = this._getItem(e.target);
120
	if (widget && widget._onmouseout) {
121
		widget._onmouseout(e);
122
	}
123
}, _onclick:function (e) {
124
	var widget = this._getItem(e.target);
125
	if (widget && widget._onclick) {
126
		widget._onclick(e);
127
	}
128
}, _onmousedown:function (e) {
129
	var widget = this._getItem(e.target);
130
	if (widget && widget._onmousedown) {
131
		widget._onmousedown(e);
132
	}
133
}, _onmouseup:function (e) {
134
	var widget = this._getItem(e.target);
135
	if (widget && widget._onmouseup) {
136
		widget._onmouseup(e);
137
	}
138
}, addChild:function (item, pos, props) {
139
	var widget = dojo.widget.ToolbarItem.make(item, null, props);
140
	var ret = dojo.widget.Toolbar.superclass.addChild.call(this, widget, null, pos, null);
141
	return ret;
142
}, push:function () {
143
	for (var i = 0; i < arguments.length; i++) {
144
		this.addChild(arguments[i]);
145
	}
146
}, getItem:function (name) {
147
	if (name instanceof dojo.widget.ToolbarItem) {
148
		return name;
149
	}
150
	for (var i = 0; i < this.children.length; i++) {
151
		var child = this.children[i];
152
		if (child instanceof dojo.widget.ToolbarItem && child._name == name) {
153
			return child;
154
		}
155
	}
156
	return null;
157
}, getItems:function () {
158
	var items = [];
159
	for (var i = 0; i < this.children.length; i++) {
160
		var child = this.children[i];
161
		if (child instanceof dojo.widget.ToolbarItem) {
162
			items.push(child);
163
		}
164
	}
165
	return items;
166
}, getItemsState:function () {
167
	var values = {};
168
	for (var i = 0; i < this.children.length; i++) {
169
		var child = this.children[i];
170
		if (child instanceof dojo.widget.ToolbarItem) {
171
			values[child._name] = {selected:child._selected, enabled:!child.disabled};
172
		}
173
	}
174
	return values;
175
}, getItemsActiveState:function () {
176
	var values = this.getItemsState();
177
	for (var item in values) {
178
		values[item] = values[item].enabled;
179
	}
180
	return values;
181
}, getItemsSelectedState:function () {
182
	var values = this.getItemsState();
183
	for (var item in values) {
184
		values[item] = values[item].selected;
185
	}
186
	return values;
187
}, enable:function () {
188
	var items = arguments.length ? arguments : this.children;
189
	for (var i = 0; i < items.length; i++) {
190
		var child = this.getItem(items[i]);
191
		if (child instanceof dojo.widget.ToolbarItem) {
192
			child.enable(false, true);
193
		}
194
	}
195
}, disable:function () {
196
	var items = arguments.length ? arguments : this.children;
197
	for (var i = 0; i < items.length; i++) {
198
		var child = this.getItem(items[i]);
199
		if (child instanceof dojo.widget.ToolbarItem) {
200
			child.disable();
201
		}
202
	}
203
}, select:function () {
204
	for (var i = 0; i < arguments.length; i++) {
205
		var name = arguments[i];
206
		var item = this.getItem(name);
207
		if (item) {
208
			item.select();
209
		}
210
	}
211
}, deselect:function () {
212
	for (var i = 0; i < arguments.length; i++) {
213
		var name = arguments[i];
214
		var item = this.getItem(name);
215
		if (item) {
216
			item.disable();
217
		}
218
	}
219
}, setValue:function () {
220
	for (var i = 0; i < arguments.length; i += 2) {
221
		var name = arguments[i], value = arguments[i + 1];
222
		var item = this.getItem(name);
223
		if (item) {
224
			if (item instanceof dojo.widget.ToolbarItem) {
225
				item.setValue(value);
226
			}
227
		}
228
	}
229
}});
230
dojo.widget.defineWidget("dojo.widget.ToolbarItem", dojo.widget.HtmlWidget, {templateString:"<span unselectable=\"on\" class=\"toolbarItem\"></span>", _name:null, getName:function () {
231
	return this._name;
232
}, setName:function (value) {
233
	return (this._name = value);
234
}, getValue:function () {
235
	return this.getName();
236
}, setValue:function (value) {
237
	return this.setName(value);
238
}, _selected:false, isSelected:function () {
239
	return this._selected;
240
}, setSelected:function (is, force, preventEvent) {
241
	if (!this._toggleItem && !force) {
242
		return;
243
	}
244
	is = Boolean(is);
245
	if (force || !this.disabled && this._selected != is) {
246
		this._selected = is;
247
		this.update();
248
		if (!preventEvent) {
249
			this._fireEvent(is ? "onSelect" : "onDeselect");
250
			this._fireEvent("onChangeSelect");
251
		}
252
	}
253
}, select:function (force, preventEvent) {
254
	return this.setSelected(true, force, preventEvent);
255
}, deselect:function (force, preventEvent) {
256
	return this.setSelected(false, force, preventEvent);
257
}, _toggleItem:false, isToggleItem:function () {
258
	return this._toggleItem;
259
}, setToggleItem:function (value) {
260
	this._toggleItem = Boolean(value);
261
}, toggleSelected:function (force) {
262
	return this.setSelected(!this._selected, force);
263
}, isEnabled:function () {
264
	return !this.disabled;
265
}, setEnabled:function (is, force, preventEvent) {
266
	is = Boolean(is);
267
	if (force || this.disabled == is) {
268
		this.disabled = !is;
269
		this.update();
270
		if (!preventEvent) {
271
			this._fireEvent(this.disabled ? "onDisable" : "onEnable");
272
			this._fireEvent("onChangeEnabled");
273
		}
274
	}
275
	return !this.disabled;
276
}, enable:function (force, preventEvent) {
277
	return this.setEnabled(true, force, preventEvent);
278
}, disable:function (force, preventEvent) {
279
	return this.setEnabled(false, force, preventEvent);
280
}, toggleEnabled:function (force, preventEvent) {
281
	return this.setEnabled(this.disabled, force, preventEvent);
282
}, _icon:null, getIcon:function () {
283
	return this._icon;
284
}, setIcon:function (value) {
285
	var icon = dojo.widget.Icon.make(value);
286
	if (this._icon) {
287
		this._icon.setIcon(icon);
288
	} else {
289
		this._icon = icon;
290
	}
291
	var iconNode = this._icon.getNode();
292
	if (iconNode.parentNode != this.domNode) {
293
		if (this.domNode.hasChildNodes()) {
294
			this.domNode.insertBefore(iconNode, this.domNode.firstChild);
295
		} else {
296
			this.domNode.appendChild(iconNode);
297
		}
298
	}
299
	return this._icon;
300
}, _label:"", getLabel:function () {
301
	return this._label;
302
}, setLabel:function (value) {
303
	var ret = (this._label = value);
304
	if (!this.labelNode) {
305
		this.labelNode = document.createElement("span");
306
		this.domNode.appendChild(this.labelNode);
307
	}
308
	this.labelNode.innerHTML = "";
309
	this.labelNode.appendChild(document.createTextNode(this._label));
310
	this.update();
311
	return ret;
312
}, update:function () {
313
	if (this.disabled) {
314
		this._selected = false;
315
		dojo.html.addClass(this.domNode, "disabled");
316
		dojo.html.removeClass(this.domNode, "down");
317
		dojo.html.removeClass(this.domNode, "hover");
318
	} else {
319
		dojo.html.removeClass(this.domNode, "disabled");
320
		if (this._selected) {
321
			dojo.html.addClass(this.domNode, "selected");
322
		} else {
323
			dojo.html.removeClass(this.domNode, "selected");
324
		}
325
	}
326
	this._updateIcon();
327
}, _updateIcon:function () {
328
	if (this._icon) {
329
		if (this.disabled) {
330
			this._icon.disable();
331
		} else {
332
			if (this._cssHover) {
333
				this._icon.hover();
334
			} else {
335
				if (this._selected) {
336
					this._icon.select();
337
				} else {
338
					this._icon.enable();
339
				}
340
			}
341
		}
342
	}
343
}, _fireEvent:function (evt) {
344
	if (typeof this[evt] == "function") {
345
		var args = [this];
346
		for (var i = 1; i < arguments.length; i++) {
347
			args.push(arguments[i]);
348
		}
349
		this[evt].apply(this, args);
350
	}
351
}, _onmouseover:function (e) {
352
	if (this.disabled) {
353
		return;
354
	}
355
	dojo.html.addClass(this.domNode, "hover");
356
	this._fireEvent("onMouseOver");
357
}, _onmouseout:function (e) {
358
	dojo.html.removeClass(this.domNode, "hover");
359
	dojo.html.removeClass(this.domNode, "down");
360
	if (!this._selected) {
361
		dojo.html.removeClass(this.domNode, "selected");
362
	}
363
	this._fireEvent("onMouseOut");
364
}, _onclick:function (e) {
365
	if (!this.disabled && !this._toggleItem) {
366
		this._fireEvent("onClick");
367
	}
368
}, _onmousedown:function (e) {
369
	if (e.preventDefault) {
370
		e.preventDefault();
371
	}
372
	if (this.disabled) {
373
		return;
374
	}
375
	dojo.html.addClass(this.domNode, "down");
376
	if (this._toggleItem) {
377
		if (this.parent.preventDeselect && this._selected) {
378
			return;
379
		}
380
		this.toggleSelected();
381
	}
382
	this._fireEvent("onMouseDown");
383
}, _onmouseup:function (e) {
384
	dojo.html.removeClass(this.domNode, "down");
385
	this._fireEvent("onMouseUp");
386
}, onClick:function () {
387
}, onMouseOver:function () {
388
}, onMouseOut:function () {
389
}, onMouseDown:function () {
390
}, onMouseUp:function () {
391
}, fillInTemplate:function (args, frag) {
392
	if (args.name) {
393
		this._name = args.name;
394
	}
395
	if (args.selected) {
396
		this.select();
397
	}
398
	if (args.disabled) {
399
		this.disable();
400
	}
401
	if (args.label) {
402
		this.setLabel(args.label);
403
	}
404
	if (args.icon) {
405
		this.setIcon(args.icon);
406
	}
407
	if (args.toggleitem || args.toggleItem) {
408
		this.setToggleItem(true);
409
	}
410
}});
411
dojo.widget.ToolbarItem.make = function (wh, whIsType, props) {
412
	var item = null;
413
	if (wh instanceof Array) {
414
		item = dojo.widget.createWidget("ToolbarButtonGroup", props);
415
		item.setName(wh[0]);
416
		for (var i = 1; i < wh.length; i++) {
417
			item.addChild(wh[i]);
418
		}
419
	} else {
420
		if (wh instanceof dojo.widget.ToolbarItem) {
421
			item = wh;
422
		} else {
423
			if (wh instanceof dojo.uri.Uri) {
424
				item = dojo.widget.createWidget("ToolbarButton", dojo.lang.mixin(props || {}, {icon:new dojo.widget.Icon(wh.toString())}));
425
			} else {
426
				if (whIsType) {
427
					item = dojo.widget.createWidget(wh, props);
428
				} else {
429
					if (typeof wh == "string" || wh instanceof String) {
430
						switch (wh.charAt(0)) {
431
						  case "|":
432
						  case "-":
433
						  case "/":
434
							item = dojo.widget.createWidget("ToolbarSeparator", props);
435
							break;
436
						  case " ":
437
							if (wh.length == 1) {
438
								item = dojo.widget.createWidget("ToolbarSpace", props);
439
							} else {
440
								item = dojo.widget.createWidget("ToolbarFlexibleSpace", props);
441
							}
442
							break;
443
						  default:
444
							if (/\.(gif|jpg|jpeg|png)$/i.test(wh)) {
445
								item = dojo.widget.createWidget("ToolbarButton", dojo.lang.mixin(props || {}, {icon:new dojo.widget.Icon(wh.toString())}));
446
							} else {
447
								item = dojo.widget.createWidget("ToolbarButton", dojo.lang.mixin(props || {}, {label:wh.toString()}));
448
							}
449
						}
450
					} else {
451
						if (wh && wh.tagName && /^img$/i.test(wh.tagName)) {
452
							item = dojo.widget.createWidget("ToolbarButton", dojo.lang.mixin(props || {}, {icon:wh}));
453
						} else {
454
							item = dojo.widget.createWidget("ToolbarButton", dojo.lang.mixin(props || {}, {label:wh.toString()}));
455
						}
456
					}
457
				}
458
			}
459
		}
460
	}
461
	return item;
462
};
463
dojo.widget.defineWidget("dojo.widget.ToolbarButtonGroup", dojo.widget.ToolbarItem, {isContainer:true, templateString:"<span unselectable=\"on\" class=\"toolbarButtonGroup\" dojoAttachPoint=\"containerNode\"></span>", defaultButton:"", postCreate:function () {
464
	for (var i = 0; i < this.children.length; i++) {
465
		this._injectChild(this.children[i]);
466
	}
467
}, addChild:function (item, pos, props) {
468
	var widget = dojo.widget.ToolbarItem.make(item, null, dojo.lang.mixin(props || {}, {toggleItem:true}));
469
	var ret = dojo.widget.ToolbarButtonGroup.superclass.addChild.call(this, widget, null, pos, null);
470
	this._injectChild(widget);
471
	return ret;
472
}, _injectChild:function (widget) {
473
	dojo.event.connect(widget, "onSelect", this, "onChildSelected");
474
	dojo.event.connect(widget, "onDeselect", this, "onChildDeSelected");
475
	if (widget._name == this.defaultButton || (typeof this.defaultButton == "number" && this.children.length - 1 == this.defaultButton)) {
476
		widget.select(false, true);
477
	}
478
}, getItem:function (name) {
479
	if (name instanceof dojo.widget.ToolbarItem) {
480
		return name;
481
	}
482
	for (var i = 0; i < this.children.length; i++) {
483
		var child = this.children[i];
484
		if (child instanceof dojo.widget.ToolbarItem && child._name == name) {
485
			return child;
486
		}
487
	}
488
	return null;
489
}, getItems:function () {
490
	var items = [];
491
	for (var i = 0; i < this.children.length; i++) {
492
		var child = this.children[i];
493
		if (child instanceof dojo.widget.ToolbarItem) {
494
			items.push(child);
495
		}
496
	}
497
	return items;
498
}, onChildSelected:function (e) {
499
	this.select(e._name);
500
}, onChildDeSelected:function (e) {
501
	this._fireEvent("onChangeSelect", this._value);
502
}, enable:function (force, preventEvent) {
503
	for (var i = 0; i < this.children.length; i++) {
504
		var child = this.children[i];
505
		if (child instanceof dojo.widget.ToolbarItem) {
506
			child.enable(force, preventEvent);
507
			if (child._name == this._value) {
508
				child.select(force, preventEvent);
509
			}
510
		}
511
	}
512
}, disable:function (force, preventEvent) {
513
	for (var i = 0; i < this.children.length; i++) {
514
		var child = this.children[i];
515
		if (child instanceof dojo.widget.ToolbarItem) {
516
			child.disable(force, preventEvent);
517
		}
518
	}
519
}, _value:"", getValue:function () {
520
	return this._value;
521
}, select:function (name, force, preventEvent) {
522
	for (var i = 0; i < this.children.length; i++) {
523
		var child = this.children[i];
524
		if (child instanceof dojo.widget.ToolbarItem) {
525
			if (child._name == name) {
526
				child.select(force, preventEvent);
527
				this._value = name;
528
			} else {
529
				child.deselect(true, true);
530
			}
531
		}
532
	}
533
	if (!preventEvent) {
534
		this._fireEvent("onSelect", this._value);
535
		this._fireEvent("onChangeSelect", this._value);
536
	}
537
}, setValue:this.select, preventDeselect:false});
538
dojo.widget.defineWidget("dojo.widget.ToolbarButton", dojo.widget.ToolbarItem, {fillInTemplate:function (args, frag) {
539
	dojo.widget.ToolbarButton.superclass.fillInTemplate.call(this, args, frag);
540
	dojo.html.addClass(this.domNode, "toolbarButton");
541
	if (this._icon) {
542
		this.setIcon(this._icon);
543
	}
544
	if (this._label) {
545
		this.setLabel(this._label);
546
	}
547
	if (!this._name) {
548
		if (this._label) {
549
			this.setName(this._label);
550
		} else {
551
			if (this._icon) {
552
				var src = this._icon.getSrc("enabled").match(/[\/^]([^\.\/]+)\.(gif|jpg|jpeg|png)$/i);
553
				if (src) {
554
					this.setName(src[1]);
555
				}
556
			} else {
557
				this._name = this._widgetId;
558
			}
559
		}
560
	}
561
}});
562
dojo.widget.defineWidget("dojo.widget.ToolbarDialog", dojo.widget.ToolbarButton, {fillInTemplate:function (args, frag) {
563
	dojo.widget.ToolbarDialog.superclass.fillInTemplate.call(this, args, frag);
564
	dojo.event.connect(this, "onSelect", this, "showDialog");
565
	dojo.event.connect(this, "onDeselect", this, "hideDialog");
566
}, showDialog:function (e) {
567
	dojo.lang.setTimeout(dojo.event.connect, 1, document, "onmousedown", this, "deselect");
568
}, hideDialog:function (e) {
569
	dojo.event.disconnect(document, "onmousedown", this, "deselect");
570
}});
571
dojo.widget.defineWidget("dojo.widget.ToolbarMenu", dojo.widget.ToolbarDialog, {});
572
dojo.widget.ToolbarMenuItem = function () {
573
};
574
dojo.widget.defineWidget("dojo.widget.ToolbarSeparator", dojo.widget.ToolbarItem, {templateString:"<span unselectable=\"on\" class=\"toolbarItem toolbarSeparator\"></span>", defaultIconPath:new dojo.uri.moduleUri("dojo.widget", "templates/buttons/sep.gif"), fillInTemplate:function (args, frag, skip) {
575
	dojo.widget.ToolbarSeparator.superclass.fillInTemplate.call(this, args, frag);
576
	this._name = this.widgetId;
577
	if (!skip) {
578
		if (!this._icon) {
579
			this.setIcon(this.defaultIconPath);
580
		}
581
		this.domNode.appendChild(this._icon.getNode());
582
	}
583
}, _onmouseover:null, _onmouseout:null, _onclick:null, _onmousedown:null, _onmouseup:null});
584
dojo.widget.defineWidget("dojo.widget.ToolbarSpace", dojo.widget.ToolbarSeparator, {fillInTemplate:function (args, frag, skip) {
585
	dojo.widget.ToolbarSpace.superclass.fillInTemplate.call(this, args, frag, true);
586
	if (!skip) {
587
		dojo.html.addClass(this.domNode, "toolbarSpace");
588
	}
589
}});
590
dojo.widget.defineWidget("dojo.widget.ToolbarSelect", dojo.widget.ToolbarItem, {templateString:"<span class=\"toolbarItem toolbarSelect\" unselectable=\"on\"><select dojoAttachPoint=\"selectBox\" dojoOnChange=\"changed\"></select></span>", fillInTemplate:function (args, frag) {
591
	dojo.widget.ToolbarSelect.superclass.fillInTemplate.call(this, args, frag, true);
592
	var keys = args.values;
593
	var i = 0;
594
	for (var val in keys) {
595
		var opt = document.createElement("option");
596
		opt.setAttribute("value", keys[val]);
597
		opt.innerHTML = val;
598
		this.selectBox.appendChild(opt);
599
	}
600
}, changed:function (e) {
601
	this._fireEvent("onSetValue", this.selectBox.value);
602
}, setEnabled:function (is, force, preventEvent) {
603
	var ret = dojo.widget.ToolbarSelect.superclass.setEnabled.call(this, is, force, preventEvent);
604
	this.selectBox.disabled = this.disabled;
605
	return ret;
606
}, _onmouseover:null, _onmouseout:null, _onclick:null, _onmousedown:null, _onmouseup:null});
607
dojo.widget.Icon = function (enabled, disabled, hovered, selected) {
608
	if (!arguments.length) {
609
		throw new Error("Icon must have at least an enabled state");
610
	}
611
	var states = ["enabled", "disabled", "hovered", "selected"];
612
	var currentState = "enabled";
613
	var domNode = document.createElement("img");
614
	this.getState = function () {
615
		return currentState;
616
	};
617
	this.setState = function (value) {
618
		if (dojo.lang.inArray(states, value)) {
619
			if (this[value]) {
620
				currentState = value;
621
				var img = this[currentState];
622
				if ((dojo.render.html.ie55 || dojo.render.html.ie60) && img.src && img.src.match(/[.]png$/i)) {
623
					domNode.width = img.width || img.offsetWidth;
624
					domNode.height = img.height || img.offsetHeight;
625
					domNode.setAttribute("src", dojo.uri.moduleUri("dojo.widget", "templates/images/blank.gif").uri);
626
					domNode.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + img.src + "',sizingMethod='image')";
627
				} else {
628
					domNode.setAttribute("src", img.src);
629
				}
630
			}
631
		} else {
632
			throw new Error("Invalid state set on Icon (state: " + value + ")");
633
		}
634
	};
635
	this.setSrc = function (state, value) {
636
		if (/^img$/i.test(value.tagName)) {
637
			this[state] = value;
638
		} else {
639
			if (typeof value == "string" || value instanceof String || value instanceof dojo.uri.Uri) {
640
				this[state] = new Image();
641
				this[state].src = value.toString();
642
			}
643
		}
644
		return this[state];
645
	};
646
	this.setIcon = function (icon) {
647
		for (var i = 0; i < states.length; i++) {
648
			if (icon[states[i]]) {
649
				this.setSrc(states[i], icon[states[i]]);
650
			}
651
		}
652
		this.update();
653
	};
654
	this.enable = function () {
655
		this.setState("enabled");
656
	};
657
	this.disable = function () {
658
		this.setState("disabled");
659
	};
660
	this.hover = function () {
661
		this.setState("hovered");
662
	};
663
	this.select = function () {
664
		this.setState("selected");
665
	};
666
	this.getSize = function () {
667
		return {width:domNode.width || domNode.offsetWidth, height:domNode.height || domNode.offsetHeight};
668
	};
669
	this.setSize = function (w, h) {
670
		domNode.width = w;
671
		domNode.height = h;
672
		return {width:w, height:h};
673
	};
674
	this.getNode = function () {
675
		return domNode;
676
	};
677
	this.getSrc = function (state) {
678
		if (state) {
679
			return this[state].src;
680
		}
681
		return domNode.src || "";
682
	};
683
	this.update = function () {
684
		this.setState(currentState);
685
	};
686
	for (var i = 0; i < states.length; i++) {
687
		var arg = arguments[i];
688
		var state = states[i];
689
		this[state] = null;
690
		if (!arg) {
691
			continue;
692
		}
693
		this.setSrc(state, arg);
694
	}
695
	this.enable();
696
};
697
dojo.widget.Icon.make = function (a, b, c, d) {
698
	for (var i = 0; i < arguments.length; i++) {
699
		if (arguments[i] instanceof dojo.widget.Icon) {
700
			return arguments[i];
701
		}
702
	}
703
	return new dojo.widget.Icon(a, b, c, d);
704
};
705
dojo.widget.defineWidget("dojo.widget.ToolbarColorDialog", dojo.widget.ToolbarDialog, {palette:"7x10", fillInTemplate:function (args, frag) {
706
	dojo.widget.ToolbarColorDialog.superclass.fillInTemplate.call(this, args, frag);
707
	this.dialog = dojo.widget.createWidget("ColorPalette", {palette:this.palette});
708
	this.dialog.domNode.style.position = "absolute";
709
	dojo.event.connect(this.dialog, "onColorSelect", this, "_setValue");
710
}, _setValue:function (color) {
711
	this._value = color;
712
	this._fireEvent("onSetValue", color);
713
}, showDialog:function (e) {
714
	dojo.widget.ToolbarColorDialog.superclass.showDialog.call(this, e);
715
	var abs = dojo.html.getAbsolutePosition(this.domNode, true);
716
	var y = abs.y + dojo.html.getBorderBox(this.domNode).height;
717
	this.dialog.showAt(abs.x, y);
718
}, hideDialog:function (e) {
719
	dojo.widget.ToolbarColorDialog.superclass.hideDialog.call(this, e);
720
	this.dialog.hide();
721
}});
722