Changeset 4 for trunk/as3/com/jeroenwijering/views/ControlbarView.as
- Timestamp:
- 06/06/08 13:11:42 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/as3/com/jeroenwijering/views/ControlbarView.as
r3 r4 7 7 import com.jeroenwijering.events.*; 8 8 import com.jeroenwijering.player.View; 9 import com.jeroenwijering.utils.Stacker; 9 10 import com.jeroenwijering.utils.Strings; 10 11 import flash.display.MovieClip; … … 22 23 /** Reference to the view. **/ 23 24 private var view:View; 24 /** A list with all controls docked to the left. **/ 25 private var left:Array; 26 /** A list with all controls docked to the right. **/ 27 private var right:Array; 25 /** A list with all controls. **/ 26 private var stacker:Stacker; 28 27 /** Reference to the controlbar **/ 29 28 private var bar:MovieClip; 30 /** Save whether sl ading is enabled. **/29 /** Save whether sliding is enabled. **/ 31 30 private var sliding:Boolean; 32 31 /** Timeout for hiding the bar. **/ … … 37 36 public function ControlbarView(vie:View) { 38 37 view = vie; 39 view.addControllerListener(ControllerEvent.CAPTION,captionHandler);40 38 view.addControllerListener(ControllerEvent.ITEM,itemHandler); 41 39 view.addControllerListener(ControllerEvent.MUTE,muteHandler); … … 46 44 view.addModelListener(ModelEvent.TIME,timeHandler); 47 45 bar = view.skin['controlbar']; 46 stacker = new Stacker(bar); 48 47 bar.addEventListener(MouseEvent.CLICK, clickHandler); 49 48 bar.timeSlider.addEventListener(MouseEvent.MOUSE_DOWN,timeslideHandler); … … 51 50 bar.volumeSlider.addEventListener(MouseEvent.MOUSE_DOWN,volumeslideHandler); 52 51 bar.volumeSlider.addEventListener(MouseEvent.MOUSE_OUT,outHandler); 53 checkButtons();54 52 loadedHandler(new ModelEvent(ModelEvent.LOADED,{loaded:0,total:0})); 55 captionHandler(new ControllerEvent(ControllerEvent.CAPTION,{percentage:view.config['caption']}));56 53 muteHandler(new ControllerEvent(ControllerEvent.MUTE,{state:view.config['mute']})); 57 54 stateHandler(new ModelEvent(ModelEvent.STATE,{newstate:ModelStates.IDLE})); 58 55 timeHandler(new ModelEvent(ModelEvent.TIME,{position:0,duration:0})); 59 56 volumeHandler(new ControllerEvent(ControllerEvent.VOLUME,{percentage:view.config['volume']})); 60 };61 62 63 /** Handle a change in the current item **/64 private function captionHandler(evt:ControllerEvent) {65 if(evt.data.state == true) {66 try {67 bar.captionButton.icn.visible = true;68 bar.captionButton.alt.visible = false;69 } catch (err:Error) {}70 } else {71 try {72 bar.captionButton.icn.visible = false;73 bar.captionButton.alt.visible = true;74 } catch (err:Error) {}75 }76 };77 78 79 /** Check which buttons are available and save their positions. **/80 private function checkButtons() {81 var mid = bar.width/2;82 left = new Array();83 right = new Array();84 for(var i=0; i<bar.numChildren; i++) {85 var clp = bar.getChildAt(i);86 clp.buttonMode = true;87 clp.mouseChildren = false;88 if(clp.x < mid) {89 left.push({c:clp,x:clp.x,n:clp.name,w:clp.width});90 } else {91 right.push({c:clp,x:clp.x,n:clp.name,w:clp.width});92 }93 }94 left.sortOn(['x','n'],[Array.NUMERIC,Array.CASEINSENSITIVE]);95 right.sortOn('x',Array.DESCENDING | Array.NUMERIC);96 57 }; 97 58 … … 111 72 112 73 113 /** Returns whether the control should be hidden. **/114 private function hideButton(nam:String):Boolean {115 var obj = view.playlist[view.config['item']];116 switch(nam) {117 case 'prevButton':118 case 'nextButton':119 if(view.playlist.length < 2) {120 return true;121 }122 break;123 case 'elapsedText':124 case 'remainingText':125 case 'totalText':126 if(bar.back.width < 200) {127 return true;128 }129 break;130 case 'linkButton':131 if(!obj || !obj['link']) {132 return true;133 }134 break;135 case 'fullscreenButton':136 if(view.config['fullscreen'] == false || bar.stage.displayState == null) {137 return true;138 }139 break;140 case 'captionButton':141 if(!obj || !obj['captions']) {142 return true;143 }144 break;145 }146 return false;147 };148 149 150 74 /** Handle a change in the current item **/ 151 75 private function itemHandler(evt:ControllerEvent) { 152 setButtons(); 76 if(view.playlist.length > 1) { 77 bar.prevButton.visible = bar.nextButton.visible = true; 78 } else { 79 bar.prevButton.visible = bar.nextButton.visible = false; 80 } 81 if(view.playlist[view.config['item']]['link']) { 82 bar.linkButton.visible = true; 83 } else { 84 bar.linkButton.visible = false; 85 } 86 if(view.config['digits'] == false) { 87 bar.elapsedText.visible = bar.totalText.visible = false; 88 } else { 89 bar.elapsedText.visible = bar.totalText.visible = true; 90 } 153 91 }; 154 92 … … 165 103 } 166 104 try { 167 var wid = bar.timeSlider. bck.width;168 bar.timeSlider. bar.x = Math.round(pc2*wid);169 bar.timeSlider. bar.width = Math.round(pc1*wid);105 var wid = bar.timeSlider.rail.width; 106 bar.timeSlider.mark.x = Math.round(pc2*wid); 107 bar.timeSlider.mark.width = Math.round(pc1*wid); 170 108 } catch (err:Error) {} 171 109 }; … … 191 129 private function muteHandler(evt:ControllerEvent) { 192 130 if(evt.data.state == true) { 193 bar.muteButton. icn.visible = false;194 bar. muteButton.alt.visible = true;195 bar.volumeSlider. bar.visible = false;196 } else { 197 bar.muteButton. icn.visible = true;198 bar. muteButton.alt.visible = false;199 bar.volumeSlider. bar.visible = true;131 bar.muteButton.visible = false; 132 bar.unmuteButton.visible = true; 133 bar.volumeSlider.mark.visible = false; 134 } else { 135 bar.muteButton.visible = true; 136 bar.unmuteButton.visible = false; 137 bar.volumeSlider.mark.visible = true; 200 138 } 201 139 }; … … 210 148 /** Process resizing requests **/ 211 149 private function resizeHandler(evt:ControllerEvent) { 212 if(view.config['controlbar'] == 'above' || evt.data.fullscreen == true) { 150 var wid = stacker.width; 151 if(view.config['controlbar'] == 'over' || evt.data.fullscreen == true) { 213 152 bar.y = evt.data.height - view.config['controlbarsize']*2; 214 153 if(evt.data.width > 640) { 215 bar.x = Math.round(evt.data.width/2 -300);216 try { bar.back.width = 600; } catch (err:Error) {}154 bar.x = Math.round(evt.data.width/2-300); 155 wid = 600; 217 156 } else { 218 157 bar.x = view.config['controlbarsize']; 219 try { bar.back.width = evt.data.width - view.config['controlbarsize']*2; } catch (err:Error) {}158 wid = evt.data.width - view.config['controlbarsize']*2; 220 159 } 221 160 } else { 222 161 bar.x = 0; 223 try { bar.back.width = evt.data.width; } catch (err:Error) {}162 wid = evt.data.width; 224 163 bar.y = evt.data.height; 225 if(view.config['playlist'] == 'right') { 226 try { bar.back.width += view.config['playlistsize']; } catch (err:Error) {}164 if(view.config['playlist'] == 'right') { 165 wid += view.config['playlistsize']; 227 166 } 228 167 } 229 try { 230 if(evt.data.fullscreen == true) { 231 bar.fullscreenButton.icn.visible = false; 232 bar.fullscreenButton.alt.visible = true; 233 } else { 234 bar.fullscreenButton.icn.visible = true; 235 bar.fullscreenButton.alt.visible = false; 236 } 237 } catch (err:Error) {} 238 setButtons(); 168 if(view.config['fullscreen'] == false || bar.stage.displayState == null) { 169 bar.fullscreenButton.visible = false; 170 bar.normalscreenButton.visible = false; 171 } else if(evt.data.fullscreen == true) { 172 bar.fullscreenButton.visible = false; 173 bar.normalscreenButton.visible = true; 174 } else { 175 bar.fullscreenButton.visible = false; 176 bar.normalscreenButton.visible = true; 177 } 178 stacker.rearrange(wid); 179 bar.timeSlider.icon.scaleX = 1/bar.timeSlider.scaleX; 239 180 }; 240 181 … … 242 183 /** Send the new scrub position to the controller **/ 243 184 private function sendScrub(evt:MouseEvent) { 244 bar.timeSlider.ic n.stopDrag();245 var xps = bar.timeSlider.ic n.x - bar.timeSlider.bck.x;185 bar.timeSlider.icon.stopDrag(); 186 var xps = bar.timeSlider.icon.x - bar.timeSlider.rail.x; 246 187 var dur = view.playlist[view.config['item']]['duration']; 247 var pct = Math.round(xps*dur*10/bar.timeSlider. bck.width)/10;188 var pct = Math.round(xps*dur*10/bar.timeSlider.rail.width)/10; 248 189 view.sendEvent(ViewEvent.SEEK,pct); 249 190 } … … 252 193 /** Send the new volume to the controlbar **/ 253 194 private function sendVolume(evt:MouseEvent) { 254 bar.volumeSlider.ic n.stopDrag();255 var xps = bar.volumeSlider.ic n.x - bar.volumeSlider.sld.x;256 var pct = Math.round(xps*100/bar.volumeSlider. sld.width);195 bar.volumeSlider.icon.stopDrag(); 196 var xps = bar.volumeSlider.icon.x - bar.volumeSlider.rail.x; 197 var pct = Math.round(xps*100/bar.volumeSlider.mark.width); 257 198 view.sendEvent(ViewEvent.VOLUME,pct); 258 };259 260 261 /** Set all buttons to their correct positions. **/262 private function setButtons() {263 var rdf = bar.back.width-left[0].w;264 var ldf = 0;265 for(var i=0; i<right.length; i++) {266 if(hideButton(right[i].n)) {267 right[i].c.visible = false;268 rdf += right[i-1].x - right[i].x;269 } else {270 right[i].c.visible = true;271 right[i].c.x = right[i].x + rdf;272 }273 }274 for(var j=0; j<left.length; j++) {275 if(hideButton(left[j].n)) {276 left[j].c.visible = false;277 ldf += left[j+1].x - left[j].x;278 } else {279 left[j].c.visible = true;280 left[j].c.x = left[j].x - ldf;281 }282 if(left[j].n == 'timeSlider') {283 var old = bar.timeSlider.bck.width;284 var wid = left[j].w+rdf+ldf;285 bar.timeSlider.bck.width = wid;286 bar.timeSlider.bar.width *= wid/old;287 bar.timeSlider.bar.x *= wid/old;288 bar.timeSlider.icn.x = Math.round(bar.timeSlider.icn.x*wid/old);289 }290 }291 199 }; 292 200 … … 301 209 } 302 210 case ModelStates.BUFFERING: 303 bar.playButton. icn.visible = false;304 bar.p layButton.alt.visible = true;211 bar.playButton.visible = false; 212 bar.pauseButton.visible = true; 305 213 break; 306 214 default: … … 310 218 view.skin.removeEventListener(MouseEvent.MOUSE_MOVE, moveHandler); 311 219 } 312 bar.playButton. icn.visible = true;313 bar.p layButton.alt.visible = false;220 bar.playButton.visible = true; 221 bar.pauseButton.visible = false; 314 222 break; 315 223 } … … 320 228 private function timeHandler(evt:ModelEvent) { 321 229 var dur = evt.data.duration; 322 try { 323 bar.elapsedText.txt.text = Strings.digits(evt.data.position); 324 bar.totalText.txt.text = Strings.digits(evt.data.duration); 325 } catch(err:Error) {} 230 bar.elapsedText.field.text = Strings.digits(evt.data.position); 231 bar.totalText.field.text = Strings.digits(evt.data.duration) 326 232 var pct = evt.data.position/evt.data.duration; 327 try { 328 var xps = Math.floor(pct*bar.timeSlider.bck.width); 329 if (dur <= 0) { 330 bar.timeSlider.icn.visible = false; 331 } else { 332 bar.timeSlider.icn.visible = true; 333 bar.timeSlider.icn.x = xps; 334 } 335 } catch(err:Error) {} 233 var xps = Math.floor(pct*bar.timeSlider.rail.width); 234 if (dur <= 0) { 235 bar.timeSlider.icon.visible = false; 236 } else { 237 bar.timeSlider.icon.visible = true; 238 bar.timeSlider.icon.x = xps; 239 } 336 240 }; 337 241 … … 339 243 /** Handle a move over the timeslider **/ 340 244 private function timeslideHandler(evt:MouseEvent) { 341 var rct = new Rectangle(bar.timeSlider. bck.x,bar.timeSlider.icn.y,bar.timeSlider.bck.width,0);342 bar.timeSlider.ic n.startDrag(true,rct);245 var rct = new Rectangle(bar.timeSlider.rail.x,bar.timeSlider.icon.y,bar.timeSlider.rail.width,0); 246 bar.timeSlider.icon.startDrag(true,rct); 343 247 sliding = true; 344 248 }; … … 347 251 /** Reflect the new volume in the controlbar **/ 348 252 private function volumeHandler(evt:ControllerEvent) { 349 bar.volumeSlider. bar.scaleX = evt.data.percentage/100;253 bar.volumeSlider.mark.scaleX = evt.data.percentage/100; 350 254 }; 351 255 … … 353 257 /** Handle a move over the volume bar **/ 354 258 private function volumeslideHandler(evt:MouseEvent) { 355 var rct = new Rectangle(bar.volumeSlider. sld.x,bar.volumeSlider.icn.y,bar.volumeSlider.sld.width,0);356 bar.volumeSlider.ic n.startDrag(true,rct);259 var rct = new Rectangle(bar.volumeSlider.rail.x,bar.volumeSlider.icon.y,bar.volumeSlider.rail.width,0); 260 bar.volumeSlider.icon.startDrag(true,rct); 357 261 sliding = true; 358 262 };
Note: See TracChangeset
for help on using the changeset viewer.
