Changeset 4
- Timestamp:
- 06/06/08 10:11:42 (18 months ago)
- Location:
- trunk/as3
- Files:
-
- 1 added
- 1 removed
- 9 modified
-
com/jeroenwijering/player/Player.as (modified) (4 diffs)
-
com/jeroenwijering/player/View.as (modified) (2 diffs)
-
com/jeroenwijering/utils/Draw.as (modified) (2 diffs)
-
com/jeroenwijering/utils/Stacker.as (added)
-
com/jeroenwijering/utils/Strings.as (modified) (1 diff)
-
com/jeroenwijering/views/ControlbarView.as (modified) (17 diffs)
-
com/jeroenwijering/views/DisplayView.as (modified) (1 diff)
-
com/jeroenwijering/views/PlaylistButton.as (deleted)
-
com/jeroenwijering/views/PlaylistView.as (modified) (12 diffs)
-
player.fla (modified) (previous)
-
player.swf (modified) (previous)
Legend:
- Unmodified
- Added
- Removed
-
trunk/as3/com/jeroenwijering/player/Player.as
r3 r4 21 21 description:undefined, 22 22 duration:0, 23 file:'http://www.jeroenwijering.com/upload/ mrss.xml',23 file:'http://www.jeroenwijering.com/upload/xspf.xml', 24 24 image:undefined, 25 25 link:undefined, … … 28 28 type:undefined, 29 29 30 controlbar:' bottom',30 controlbar:'over', 31 31 logo:undefined, 32 playlist:' none',32 playlist:'bottom', 33 33 playlistsize:180, 34 34 skin:undefined, … … 37 37 bufferlength:1, 38 38 caption:true, 39 digits:true, 39 40 displayclick:'play', 40 41 fullscreen:false, … … 50 51 aboutlink:"http://www.jeroenwijering.com/?page=about", 51 52 linktarget:'_self', 52 streamscript: 'lighttpd',53 streamscript:undefined, 53 54 tracecall:undefined, 54 55 -
trunk/as3/com/jeroenwijering/player/View.as
r3 r4 7 7 import flash.display.MovieClip; 8 8 import flash.events.EventDispatcher; 9 import flash.external.ExternalInterface;10 9 import flash.system.Capabilities; 11 10 import com.jeroenwijering.events.*; … … 44 43 views = new Array(); 45 44 views.push(new CaptionsView(this)); 45 views.push(new ControlbarView(this)); 46 46 views.push(new DisplayView(this)); 47 views.push(new ExternalView(this)); 47 48 views.push(new KeyboardView(this)); 48 49 views.push(new RightclickView(this)); 49 if(_skin['controlbar']) { 50 //views.push(new ControlbarView(this)); 51 } 52 if(_skin['playlist']) { 53 //views.push(new PlaylistView(this)); 54 } 55 if(ExternalInterface.available || Capabilities.playerType == 'External') { 56 views.push(new ExternalView(this)); 57 } 50 views.push(new PlaylistView(this)); 58 51 }; 59 52 -
trunk/as3/com/jeroenwijering/utils/Draw.as
r2 r4 5 5 6 6 7 import flash.display.DisplayObject; 8 import flash.display.Sprite; 7 import flash.display.*; 9 8 import flash.geom.Rectangle; 10 9 import flash.text.TextField; … … 36 35 * @return The clone; not yet added to the displaystack. 37 36 **/ 38 public static function clone(tgt: DisplayObject):DisplayObject{37 public static function clone(tgt:MovieClip):MovieClip { 39 38 var cls:Class = Object(tgt).constructor; 40 var dup: DisplayObject= new cls();39 var dup:MovieClip = new cls(); 41 40 dup.transform = tgt.transform; 42 dup.filters = tgt.filters;43 dup.cacheAsBitmap = tgt.cacheAsBitmap;44 dup.opaqueBackground = tgt.opaqueBackground;45 41 if(tgt.scale9Grid) { 46 42 var rct:Rectangle = tgt.scale9Grid; -
trunk/as3/com/jeroenwijering/utils/Strings.as
r1 r4 9 9 10 10 public class Strings { 11 12 13 /**14 * Fit string in a certain textbox, keeping full words.15 *16 * @param str The string to chop.17 * @param fld The textfield the string should fit into.18 **/19 public static function fit(str:String,fld:TextField):String {20 var wid = fld.width;21 var lns = Math.round(fld.height/18);22 var mxm = Math.round(wid*lns/6)-5;23 if(str.length < mxm || str.indexOf(" ",mxm) == -1) {24 return str;25 } else {26 return str.substr(0,str.indexOf(" ",mxm)) + ' ..';27 }28 };29 11 30 12 -
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 }; -
trunk/as3/com/jeroenwijering/views/DisplayView.as
r3 r4 163 163 setIcon('bufferIcon'); 164 164 } else { 165 if(view.config['playlist'] == 'over') { 166 setIcon(); 167 return; 168 } 165 169 switch(view.config.displayclick) { 166 170 case 'play': -
trunk/as3/com/jeroenwijering/views/PlaylistView.as
r3 r4 7 7 import com.jeroenwijering.events.*; 8 8 import com.jeroenwijering.player.View; 9 import com.jeroenwijering.utils.Draw; 9 import com.jeroenwijering.utils.*; 10 import flash.display.Loader; 10 11 import flash.display.MovieClip; 12 import flash.events.Event; 11 13 import flash.events.MouseEvent; 12 14 import flash.geom.Rectangle; 15 import flash.net.URLRequest; 13 16 import flash.utils.setInterval; 14 17 import flash.utils.clearInterval; … … 25 28 private var buttons:Array; 26 29 /** Height of a button (to calculate scrolling) **/ 27 private var buttonsize:Number; 30 private var buttonheight:Number; 31 /** Currently active button. **/ 32 private var active:Number; 28 33 /** Proportion between clip and mask. **/ 29 34 private var proportion:Number; … … 34 39 public function PlaylistView(vie:View) { 35 40 view = vie; 36 clip = view.skin['playlist'];37 clip.visible = false;38 41 view.addControllerListener(ControllerEvent.ITEM,itemHandler); 39 42 view.addControllerListener(ControllerEvent.PLAYLIST,playlistHandler); 40 43 view.addControllerListener(ControllerEvent.RESIZE,resizeHandler); 41 buttonsize = clip.scrollClip.getChildByName('button').height; 42 clip.list.mask = clip.scrollMask; 44 view.addModelListener(ModelEvent.STATE,stateHandler); 45 clip = view.skin['playlist']; 46 buttonheight = clip.list.button.height; 47 clip.list.button.visible = false; 48 clip.list.mask = clip.masker; 43 49 clip.slider.buttonMode = true; 44 50 clip.slider.mouseChildren = false; 51 clip.list.addEventListener(MouseEvent.CLICK,clickHandler); 52 clip.list.addEventListener(MouseEvent.MOUSE_OVER,overHandler); 53 clip.list.addEventListener(MouseEvent.MOUSE_OUT,outHandler); 54 clip.list.addEventListener(MouseEvent.MOUSE_UP,stopHandler); 45 55 clip.slider.addEventListener(MouseEvent.MOUSE_DOWN,startHandler); 46 view.skin.addEventListener(MouseEvent.MOUSE_UP,stopHandler); 56 clip.visible = false; 57 trace(clip); 47 58 }; 48 59 … … 52 63 var wid = clip.back.width; 53 64 var hei = clip.back.height; 54 proportion = view.playlist.length*button size/hei;65 proportion = view.playlist.length*buttonheight/hei; 55 66 if (proportion > 1) { 56 67 wid -=20; 57 buildS croller();68 buildSlider(); 58 69 } else { 59 clip.s crollBar.visible = false;60 } 61 clip. scrollMask.height = hei;62 clip. scrollMask.width = wid;70 clip.slider.visible = false; 71 } 72 clip.masker.height = hei; 73 clip.masker.width = wid; 63 74 if(clr) { 64 clip. scrollClip.y = 0;65 Draw.clear(clip. scrollClip);75 clip.list.y = 0; 76 Draw.clear(clip.list); 66 77 buttons = new Array(); 78 clip.visible= true; 79 } else { 80 if(proportion > 1) { scrollCheck(); } 67 81 } 68 82 for(var i=0; i<view.playlist.length; i++) { 69 if(clr) { 70 var btn = Draw.clone(clip.scrollClip.getChildByName('button')); 71 // new PlaylistButton(i,wid,view); 72 clip.scrollClip.addChild(btn); 73 buttons.push(btn); 74 } else { 75 buttons[i].resize(wid); 76 if(proportion > 1) { 77 scrollCheck(); 78 } 79 } 83 if(clr) { 84 var btn = Draw.clone(clip.list.button); 85 clip.list.addChild(btn); 86 var stc = new Stacker(btn); 87 btn.y = i*buttonheight; 88 btn.buttonMode = true; 89 btn.mouseChildren =false; 90 btn.name = i; 91 buttons.push({c:btn,s:stc}); 92 setContents(i); 93 } 94 buttons[i].s.rearrange(wid); 80 95 } 81 96 }; … … 83 98 84 99 /** Setup the scrollbar component **/ 85 private function buildS croller() {86 var scr = clip.s crollBar;100 private function buildSlider() { 101 var scr = clip.slider; 87 102 scr.visible = true; 88 scr.x = clip.back.width -scr.width;89 var dif = clip.back.height -scr.height;103 scr.x = clip.back.width-scr.width; 104 var dif = clip.back.height-scr.height; 90 105 scr.back.height += dif; 91 106 scr.rail.height += dif; … … 94 109 95 110 111 /** Handle a click on a button. **/ 112 private function clickHandler(evt:MouseEvent) { 113 view.sendEvent('item',Number(evt.target.name)); 114 }; 115 116 96 117 /** Switch the currently active item */ 97 118 private function itemHandler(evt:ControllerEvent) { 98 // code for highlighting a certain button. 119 var idx = evt.data.index; 120 if(!isNaN(active)) { 121 buttons[active].c.gotoAndStop('out'); 122 } 123 buttons[idx].c.gotoAndStop('active'); 124 active = idx; 125 }; 126 127 128 /** Loading of image completed; resume loading **/ 129 private function loaderHandler(evt:Event) { 130 var ldr = Loader(evt.target.loader); 131 Stretcher.stretch(ldr,ldr.mask.width,ldr.mask.height,Stretcher.FILL); 132 }; 133 134 135 /** Handle a button rollover. **/ 136 private function overHandler(evt:MouseEvent) { 137 var idx = Number(evt.target.name); 138 buttons[idx].c.gotoAndStop('over'); 139 }; 140 141 142 /** Handle a button rollover. **/ 143 private function outHandler(evt:MouseEvent) { 144 var idx = Number(evt.target.name); 145 if(idx == active) { 146 buttons[idx].c.gotoAndStop('active'); 147 } else { 148 buttons[idx].c.gotoAndStop('out'); 149 } 99 150 }; 100 151 … … 102 153 /** New playlist loaded: rebuild the playclip. **/ 103 154 private function playlistHandler(evt:ControllerEvent) { 104 buildList(true); 155 if(view.config['playlist'] != 'none') { 156 buildList(true); 157 } 105 158 }; 106 159 … … 109 162 private function resizeHandler(evt:ControllerEvent) { 110 163 if(view.config['playlist'] == 'right') { 111 clip.visible = true;112 164 clip.x = evt.data.width; 113 165 clip.y = 0; 114 166 clip.back.width = view.config['playlistsize']; 115 167 clip.back.height = evt.data.height; 116 } else if (view.config['playlist'] == 'below') { 117 clip.visible = true; 168 } else if (view.config['playlist'] == 'bottom') { 118 169 clip.x = 0; 119 170 clip.y = evt.data.height; 120 if (view.config['controlbar'] == 'b elow') {171 if (view.config['controlbar'] == 'bottom') { 121 172 clip.y += view.config['controlbarsize']; 122 173 } 123 174 clip.back.height = view.config['playlistsize']; 124 175 clip.back.width = evt.data.width; 125 } else if (view.config['playlist'] == 'above') { 126 clip.visible = true; 127 var wid = evt.data.width-2*view.config['controlbarsize']; 128 var hei = evt.data.height-2*view.config['controlbarsize']; 129 if(evt.data.width > 640) { wid = 600; } 130 if(view.config['controlbar'] == 'above') { hei -= 2*view.config['controlbarsize']; } 131 clip.x = Math.round(evt.data.width/2 - wid/2); 132 clip.y = view.config['controlbarsize']; 133 clip.back.height = hei; 134 clip.back.width = wid; 135 } else { 136 clip.visible = false; 176 } else if (view.config['playlist'] == 'over') { 177 clip.x = clip.y = 0; 178 clip.back.height = evt.data.height; 179 clip.back.width = evt.data.width; 137 180 } 138 181 buildList(false); … … 142 185 /** Make sure the playlist is not out of range. **/ 143 186 private function scrollCheck() { 144 var scr = clip.s crollBar;145 if(clip. scrollClip.y > 0) {146 clip. scrollClip.y = 0;187 var scr = clip.slider; 188 if(clip.list.y > 0) { 189 clip.list.y = 0; 147 190 scr.icon.y = scr.rail.y; 148 } else if (clip. scrollClip.y < clip.scrollMask.height-clip.scrollClip.height) {191 } else if (clip.list.y < clip.masker.height-clip.list.height) { 149 192 scr.icon.y = scr.rail.y+scr.rail.height-scr.icon.height; 150 clip. scrollClip.y = clip.scrollMask.height-clip.scrollClip.height;193 clip.list.y = clip.masker.height-clip.list.height; 151 194 } 152 195 }; … … 155 198 /** Scrolling handler. **/ 156 199 private function scrollHandler() { 157 var scr = clip.s crollBar;200 var scr = clip.slider; 158 201 var yps = scr.mouseY; 159 202 var ips = yps - scr.icon.height/2; 160 var cps = clip. scrollMask.y+clip.scrollMask.height/2-proportion*yps;203 var cps = clip.masker.y+clip.masker.height/2-proportion*yps; 161 204 scr.icon.y = Math.round(ips - (ips-scr.icon.y)/1.5); 162 clip. scrollClip.y = Math.round((cps - (cps-clip.scrollClip.y)/1.5));205 clip.list.y = Math.round((cps - (cps-clip.list.y)/1.5)); 163 206 scrollCheck(); 207 }; 208 209 210 /** Setup button elements **/ 211 private function setContents(idx:Number) { 212 for (var itm in view.playlist[idx]) { 213 if(!buttons[idx].c[itm]) { 214 continue; 215 } else if(itm == 'image') { 216 var ldr = new Loader(); 217 buttons[idx].c.addChild(ldr); 218 ldr.x = buttons[idx].c.image.x; 219 ldr.y = buttons[idx].c.image.y; 220 ldr.mask = buttons[idx].c.image; 221 ldr.contentLoaderInfo.addEventListener(Event.COMPLETE,loaderHandler); 222 ldr.load(new URLRequest(view.playlist[idx]['image'])); 223 } else if(itm == 'duration') { 224 if(view.playlist[idx][itm] > 0) { 225 buttons[idx].c[itm].field.text = Strings.digits(view.playlist[idx][itm]); 226 } 227 } else { 228 buttons[idx].c[itm].field.text = view.playlist[idx][itm]; 229 } 230 } 231 if(!view.playlist[idx]['image'] && buttons[idx].c['image']) { 232 buttons[idx].c['image'].visible = false; 233 } 164 234 }; 165 235 … … 172 242 }; 173 243 244 /** Process state changes **/ 245 private function stateHandler(evt:ModelEvent) { 246 if(view.config['playlist'] == 'over') { 247 if(evt.data.newstate == ModelStates.PLAYING || evt.data.newstate == ModelStates.BUFFERING) { 248 clip.visible = false; 249 } else { 250 clip.visible = true; 251 } 252 } 253 }; 254 174 255 175 256 /** Stop scrolling the playlist. **/ … … 179 260 180 261 181 182 183 262 }; 184 263
