Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / av / widget / VolumeButton.js

History | View | Annotate | Download (3.59 KB)

1
/*
2
        Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
3
        Available via Academic Free License >= 2.1 OR the modified BSD license.
4
        see: http://dojotoolkit.org/license for details
5
*/
6

    
7

    
8
if(!dojo._hasResource["dojox.av.widget.VolumeButton"]){
9
dojo._hasResource["dojox.av.widget.VolumeButton"]=true;
10
dojo.provide("dojox.av.widget.VolumeButton");
11
dojo.require("dijit._Widget");
12
dojo.require("dijit._Templated");
13
dojo.require("dijit.form.Button");
14
dojo.declare("dojox.av.widget.VolumeButton",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.av.widget","resources/VolumeButton.html","<div class=\"Volume\" dojoAttachEvent=\"mousedown:onShowVolume\">\n\t<div class=\"VolumeSlider\" dojoAttachPoint=\"volumeSlider\">\n    \t<div class=\"VolumeSliderBack\" dojoAttachPoint=\"volumeSliderBack\"></div>\n    \t<div class=\"VolumeSliderHandle\" dojoAttachPoint=\"handle\" dojoAttachEvent=\"mousedown:startDrag, mouseup:endDrag, mouseover:handleOver, mouseout:handleOut\"></div>\t\n    </div>\n    <div class=\"icon\"></div>\n</div>\n"),postCreate:function(){
15
this.handleWidth=dojo.marginBox(this.handle).w;
16
this.width=dojo.marginBox(this.volumeSlider).w;
17
this.slotWidth=100;
18
dojo.setSelectable(this.handle,false);
19
this.volumeSlider=this.domNode.removeChild(this.volumeSlider);
20
},setMedia:function(_1){
21
this.media=_1;
22
this.updateIcon();
23
},updateIcon:function(_2){
24
_2=(_2===undefined)?this.media.volume():_2;
25
if(_2===0){
26
dojo.attr(this.domNode,"class","Volume mute");
27
}else{
28
if(_2<0.334){
29
dojo.attr(this.domNode,"class","Volume low");
30
}else{
31
if(_2<0.667){
32
dojo.attr(this.domNode,"class","Volume med");
33
}else{
34
dojo.attr(this.domNode,"class","Volume high");
35
}
36
}
37
}
38
},onShowVolume:function(_3){
39
if(this.showing==undefined){
40
dojo.body().appendChild(this.volumeSlider);
41
this.showing=false;
42
}
43
if(!this.showing){
44
var _4=2;
45
var _5=7;
46
var _6=this.media.volume();
47
var _7=this._getVolumeDim();
48
var _8=this._getHandleDim();
49
this.x=_7.x-this.width;
50
dojo.style(this.volumeSlider,"display","");
51
dojo.style(this.volumeSlider,"top",_7.y+"px");
52
dojo.style(this.volumeSlider,"left",(this.x)+"px");
53
var x=(this.slotWidth*_6);
54
dojo.style(this.handle,"top",(_4+(_8.w/2))+"px");
55
dojo.style(this.handle,"left",(x+_5+(_8.h/2))+"px");
56
this.showing=true;
57
this.clickOff=dojo.connect(dojo.doc,"onmousedown",this,"onDocClick");
58
}else{
59
this.onHideVolume();
60
}
61
},onDocClick:function(_9){
62
if(!dojo.isDescendant(_9.target,this.domNode)&&!dojo.isDescendant(_9.target,this.volumeSlider)){
63
this.onHideVolume();
64
}
65
},onHideVolume:function(){
66
this.endDrag();
67
dojo.style(this.volumeSlider,"display","none");
68
this.showing=false;
69
},onDrag:function(_a){
70
var _b=this.handleWidth/2;
71
var _c=_b+this.slotWidth;
72
var x=_a.clientX-this.x;
73
if(x<_b){
74
x=_b;
75
}
76
if(x>_c){
77
x=_c;
78
}
79
dojo.style(this.handle,"left",(x)+"px");
80
var p=(x-_b)/(_c-_b);
81
this.media.volume(p);
82
this.updateIcon(p);
83
},startDrag:function(){
84
this.isDragging=true;
85
this.cmove=dojo.connect(dojo.doc,"mousemove",this,"onDrag");
86
this.cup=dojo.connect(dojo.doc,"mouseup",this,"endDrag");
87
},endDrag:function(){
88
this.isDragging=false;
89
if(this.cmove){
90
dojo.disconnect(this.cmove);
91
}
92
if(this.cup){
93
dojo.disconnect(this.cup);
94
}
95
this.handleOut();
96
},handleOver:function(){
97
dojo.addClass(this.handle,"over");
98
},handleOut:function(){
99
if(!this.isDragging){
100
dojo.removeClass(this.handle,"over");
101
}
102
},_getVolumeDim:function(){
103
if(this._domCoords){
104
return this._domCoords;
105
}
106
this._domCoords=dojo.coords(this.domNode);
107
return this._domCoords;
108
},_getHandleDim:function(){
109
if(this._handleCoords){
110
return this._handleCoords;
111
}
112
this._handleCoords=dojo.marginBox(this.handle);
113
return this._handleCoords;
114
},onResize:function(_d){
115
this.onHideVolume();
116
this._domCoords=null;
117
}});
118
}