Changeset 5
- Timestamp:
- 06/07/08 07:17:23 (18 months ago)
- Location:
- trunk/as3
- Files:
-
- 1 added
- 12 modified
-
com/jeroenwijering/models/HTTPModel.as (modified) (1 diff)
-
com/jeroenwijering/parsers/ObjectParser.as (modified) (1 diff)
-
com/jeroenwijering/player/Model.as (modified) (7 diffs)
-
com/jeroenwijering/player/Player.as (modified) (5 diffs)
-
com/jeroenwijering/player/View.as (modified) (1 diff)
-
com/jeroenwijering/utils/Animations.as (added)
-
com/jeroenwijering/utils/Configger.as (modified) (1 diff)
-
com/jeroenwijering/views/ControlbarView.as (modified) (13 diffs)
-
com/jeroenwijering/views/DisplayView.as (modified) (3 diffs)
-
com/jeroenwijering/views/KeyboardView.as (modified) (1 diff)
-
com/jeroenwijering/views/PlaylistView.as (modified) (6 diffs)
-
player.fla (modified) (previous)
-
player.swf (modified) (previous)
Legend:
- Unmodified
- Added
- Removed
-
trunk/as3/com/jeroenwijering/models/HTTPModel.as
r3 r5 108 108 } 109 109 } else { 110 url = model.config["streamscript"]+"?file="+url+'&start='+offset; 110 if(model.config["streamscript"].indexOf('?') > -1) { 111 url = model.config["streamscript"]+"&file="+url+'&start='+offset; 112 } else { 113 url = model.config["streamscript"]+"?file="+url+'&start='+offset; 114 } 111 115 } 112 116 url += '&width='+model.config['width']; 113 117 url += '&client='+encodeURI(model.config['client']); 114 trace(url);118 url += '&version='+encodeURI(model.config['version']); 115 119 stream.play(url); 116 120 clearInterval(loadinterval); -
trunk/as3/com/jeroenwijering/parsers/ObjectParser.as
r1 r5 94 94 /** Detect the mediatype of a playlistitem and save to its type var. **/ 95 95 public static function detect(itm:Object):Object { 96 if(ObjectParser.TYPES[itm['type']] != undefined) { 96 if(itm['file'] == undefined) { 97 return itm; 98 } else if(ObjectParser.TYPES[itm['type']] != undefined) { 97 99 // assume the developer knows what he does... 98 100 } else if(itm['file'].substr(0,4) == 'rtmp') { -
trunk/as3/com/jeroenwijering/player/Model.as
r3 r5 53 53 /** Item change: switch the curently active model if there's a new URL **/ 54 54 private function itemHandler(evt:ControllerEvent) { 55 //skin.display.media.visible = false;55 skin.display.media.visible = false; 56 56 if(current) { current.stop(); } 57 57 sendEvent(ModelEvent.STATE,{newstate:ModelStates.IDLE}); … … 81 81 } 82 82 if(playlist[evt.data.index]['image']) { 83 //skin.display.thumb.visible = true;83 skin.display.thumb.visible = true; 84 84 loader.load(new URLRequest(playlist[evt.data.index]['image'])); 85 85 } else { 86 //skin.display.thumb.visible = false;86 skin.display.thumb.visible = false; 87 87 } 88 88 }; … … 91 91 /** Place a loaded thumb on stage. **/ 92 92 private function thumbHandler(evt:Event) { 93 /*94 93 var obj = skin.display.thumb; 95 94 Draw.clear(obj); … … 97 96 Bitmap(loader.content).smoothing = config['quality']; 98 97 Stretcher.stretch(obj,config['width'],config['height'],config['stretching']); 99 */100 98 }; 101 99 … … 103 101 /** Place a loaded mediafile on stage **/ 104 102 public function mediaHandler(chd:DisplayObject) { 105 /*106 103 var obj = skin.display.media; 107 104 Draw.clear(obj); … … 110 107 skin.display.thumb.visible = false; 111 108 skin.display.media.visible = true; 112 */113 109 }; 114 110 … … 148 144 /** Resize the media and thumb. **/ 149 145 private function resizeHandler(evt:ControllerEvent) { 150 /*151 146 Stretcher.stretch(skin.display.thumb,evt.data.width,evt.data.height,config['stretching']); 152 147 Stretcher.stretch(skin.display.media,evt.data.width,evt.data.height,config['stretching']); 153 */154 148 }; 155 149 -
trunk/as3/com/jeroenwijering/player/Player.as
r4 r5 21 21 description:undefined, 22 22 duration:0, 23 file: 'http://www.jeroenwijering.com/upload/xspf.xml',23 file:undefined, 24 24 image:undefined, 25 25 link:undefined, … … 28 28 type:undefined, 29 29 30 controlbar:' over',30 controlbar:'bottom', 31 31 logo:undefined, 32 playlist:' bottom',32 playlist:'none', 33 33 playlistsize:180, 34 34 skin:undefined, … … 37 37 bufferlength:1, 38 38 caption:true, 39 digits:true,40 39 displayclick:'play', 41 40 fullscreen:false, … … 45 44 repeat:false, 46 45 shuffle:false, 47 stretching:' uniform',46 stretching:'fill', 48 47 volume:80, 49 48 … … 57 56 controlbarheight:20, 58 57 height:300, 58 state:'IDLE', 59 59 version:'4.0 r3', 60 60 width:400 -
trunk/as3/com/jeroenwijering/player/View.as
r4 r5 43 43 views = new Array(); 44 44 views.push(new CaptionsView(this)); 45 views.push(new ControlbarView(this));46 45 views.push(new DisplayView(this)); 47 46 views.push(new ExternalView(this)); 48 47 views.push(new KeyboardView(this)); 49 48 views.push(new RightclickView(this)); 50 views.push(new PlaylistView(this)); 49 if(_skin.controlbar && config['controlbar'] != 'none') { 50 views.push(new ControlbarView(this)); 51 } else { 52 _skin.controlbar.visible = false; 53 } 54 if(_skin.playlist && config['playlist'] != 'none') { 55 views.push(new PlaylistView(this)); 56 } else { 57 _skin.playlist.visible = false; 58 } 51 59 }; 52 60 -
trunk/as3/com/jeroenwijering/utils/Configger.as
r3 r5 2 2 * Loads application configuration data (from xml, cookies and flashvars). 3 3 **/ 4 5 6 4 package com.jeroenwijering.utils { 7 5 -
trunk/as3/com/jeroenwijering/views/ControlbarView.as
r4 r5 7 7 import com.jeroenwijering.events.*; 8 8 import com.jeroenwijering.player.View; 9 import com.jeroenwijering.utils.Stacker; 10 import com.jeroenwijering.utils.Strings; 9 import com.jeroenwijering.utils.*; 11 10 import flash.display.MovieClip; 12 11 import flash.events.MouseEvent; … … 14 13 import flash.utils.setTimeout; 15 14 import flash.utils.clearTimeout; 16 import fl.transitions.*;17 import fl.transitions.easing.*;18 15 19 16 … … 23 20 /** Reference to the view. **/ 24 21 private var view:View; 22 /** Reference to the controlbar **/ 23 private var bar:MovieClip; 25 24 /** A list with all controls. **/ 26 25 private var stacker:Stacker; 27 /** Reference to the controlbar **/28 private var bar:MovieClip;29 /** Save whether sliding is enabled. **/30 private var sliding:Boolean;31 26 /** Timeout for hiding the bar. **/ 32 27 private var hiding:Number; 28 /** The actions for all controlbar buttons. **/ 29 private var BUTTONS = { 30 playButton:'PLAY', 31 pauseButton:'PLAY', 32 stopButton:'STOP', 33 prevButton:'PREV', 34 nextButton:'NEXT', 35 linkButton:'LINK', 36 fullscreenButton:'FULLSCREEN', 37 normalscreenButton:'FULLSCREEN', 38 muteButton:'MUTE', 39 unmuteButton:'MUTE' 40 }; 33 41 34 42 … … 45 53 bar = view.skin['controlbar']; 46 54 stacker = new Stacker(bar); 47 bar.addEventListener(MouseEvent.CLICK, clickHandler); 48 bar.timeSlider.addEventListener(MouseEvent.MOUSE_DOWN,timeslideHandler); 49 bar.timeSlider.addEventListener(MouseEvent.MOUSE_OUT,outHandler); 50 bar.volumeSlider.addEventListener(MouseEvent.MOUSE_DOWN,volumeslideHandler); 51 bar.volumeSlider.addEventListener(MouseEvent.MOUSE_OUT,outHandler); 55 setButtons(); 52 56 loadedHandler(new ModelEvent(ModelEvent.LOADED,{loaded:0,total:0})); 53 57 muteHandler(new ControllerEvent(ControllerEvent.MUTE,{state:view.config['mute']})); … … 60 64 /** Handle clicks from all buttons **/ 61 65 private function clickHandler(evt:MouseEvent) { 62 if(evt.target.name.indexOf('Button') > 0) { 63 var str = evt.target.name.substr(0,-6).toUpperCase(); 64 view.sendEvent(str); 65 } else if (evt.target.name == 'timeSlider') { 66 sendScrub(evt); 67 } else if (evt.target.name == 'volumeSlider') { 68 sendVolume(evt); 69 } 70 sliding = false; 66 view.sendEvent(BUTTONS[evt.target.name]); 71 67 }; 72 68 … … 83 79 } else { 84 80 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 81 } 91 82 }; … … 112 103 /** Show above controlbar on mousemove. **/ 113 104 private function moveHandler(evt:MouseEvent) { 114 bar.visible = true;105 Animations.fade(bar,1); 115 106 clearTimeout(hiding); 116 107 hiding = setTimeout(moveTimeout,1000); … … 121 112 private function moveTimeout() { 122 113 if(bar.mouseY < -10) { 123 bar.visible = false;114 Animations.fade(bar,0); 124 115 } 125 116 }; … … 142 133 /** Handle mouseouts from all buttons **/ 143 134 private function outHandler(evt:MouseEvent) { 144 if(sliding) { clickHandler(evt); } 135 bar[evt.target.name].gotoAndPlay('out'); 136 }; 137 138 139 /** Handle clicks from all buttons **/ 140 private function overHandler(evt:MouseEvent) { 141 bar[evt.target.name].gotoAndPlay('over'); 145 142 }; 146 143 … … 177 174 } 178 175 stacker.rearrange(wid); 179 bar.timeSlider.icon.scaleX = 1/bar.timeSlider.scaleX; 180 }; 181 182 183 /** Send the new scrub position to the controller **/ 184 private function sendScrub(evt:MouseEvent) { 185 bar.timeSlider.icon.stopDrag(); 186 var xps = bar.timeSlider.icon.x - bar.timeSlider.rail.x; 187 var dur = view.playlist[view.config['item']]['duration']; 188 var pct = Math.round(xps*dur*10/bar.timeSlider.rail.width)/10; 189 view.sendEvent(ViewEvent.SEEK,pct); 190 } 191 192 193 /** Send the new volume to the controlbar **/ 194 private function sendVolume(evt:MouseEvent) { 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); 198 view.sendEvent(ViewEvent.VOLUME,pct); 176 }; 177 178 179 /** Clickhandler for all buttons. **/ 180 private function setButtons() { 181 for(var itm in BUTTONS) { 182 if(bar[itm]) { 183 bar[itm].mouseChildren = false; 184 bar[itm].buttonMode = true; 185 bar[itm].addEventListener(MouseEvent.CLICK, clickHandler); 186 bar[itm].addEventListener(MouseEvent.MOUSE_OVER, overHandler); 187 bar[itm].addEventListener(MouseEvent.MOUSE_OUT, outHandler); 188 } 189 } 190 bar.timeSlider.mouseChildren = false; 191 bar.timeSlider.buttonMode = true; 192 bar.timeSlider.addEventListener(MouseEvent.MOUSE_DOWN,timedownHandler); 193 bar.timeSlider.addEventListener(MouseEvent.MOUSE_OUT,timeoutHandler); 194 bar.timeSlider.addEventListener(MouseEvent.MOUSE_OVER,timeoverHandler); 195 bar.volumeSlider.mouseChildren = false; 196 bar.volumeSlider.buttonMode = true; 197 bar.volumeSlider.addEventListener(MouseEvent.MOUSE_DOWN,volumedownHandler); 198 bar.volumeSlider.addEventListener(MouseEvent.MOUSE_OUT,volumeoutHandler); 199 bar.volumeSlider.addEventListener(MouseEvent.MOUSE_OVER,volumeoverHandler); 199 200 }; 200 201 … … 215 216 if(view.config['controlbar'] == 'over') { 216 217 clearTimeout(hiding); 217 bar.visible = true;218 Animations.fade(bar,1); 218 219 view.skin.removeEventListener(MouseEvent.MOUSE_MOVE, moveHandler); 219 220 } … … 241 242 242 243 243 /** Handle a move overthe timeslider **/244 private function time slideHandler(evt:MouseEvent) {244 /** Handle a press on the timeslider **/ 245 private function timedownHandler(evt:MouseEvent) { 245 246 var rct = new Rectangle(bar.timeSlider.rail.x,bar.timeSlider.icon.y,bar.timeSlider.rail.width,0); 246 247 bar.timeSlider.icon.startDrag(true,rct); 247 sliding = true; 248 bar.stage.addEventListener(MouseEvent.MOUSE_UP,timeupHandler); 249 }; 250 251 /** Handle a move out the timeslider **/ 252 private function timeoutHandler(evt:MouseEvent) { 253 bar.timeSlider.icon.gotoAndPlay('out'); 254 }; 255 256 257 /** Handle a press release on the timeslider **/ 258 private function timeupHandler(evt:MouseEvent) { 259 bar.timeSlider.icon.stopDrag(); 260 bar.stage.removeEventListener(MouseEvent.MOUSE_UP,timeupHandler); 261 var xps = bar.timeSlider.icon.x - bar.timeSlider.rail.x; 262 var dur = view.playlist[view.config['item']]['duration']; 263 var pct = Math.round(xps*dur*10/bar.timeSlider.rail.width)/10; 264 view.sendEvent(ViewEvent.SEEK,pct); 265 }; 266 267 268 /** Handle a move over the timeslider **/ 269 private function timeoverHandler(evt:MouseEvent) { 270 bar.timeSlider.icon.gotoAndPlay('over'); 248 271 }; 249 272 … … 255 278 256 279 257 /** Handle a move over the volume bar **/258 private function volume slideHandler(evt:MouseEvent) {280 /** Handle a move over the volumebar **/ 281 private function volumedownHandler(evt:MouseEvent) { 259 282 var rct = new Rectangle(bar.volumeSlider.rail.x,bar.volumeSlider.icon.y,bar.volumeSlider.rail.width,0); 260 283 bar.volumeSlider.icon.startDrag(true,rct); 261 sliding = true; 284 bar.stage.addEventListener(MouseEvent.MOUSE_UP,volumeupHandler); 285 }; 286 287 288 /** Handle a move out the volumebar. **/ 289 private function volumeoutHandler(evt:MouseEvent) { 290 bar.volumeSlider.icon.gotoAndPlay('out'); 291 }; 292 293 294 /** Handle a move over the volumebar. **/ 295 private function volumeoverHandler(evt:MouseEvent) { 296 bar.volumeSlider.icon.gotoAndPlay('over'); 297 }; 298 299 300 /** Handle a press release on the volumebar. **/ 301 private function volumeupHandler(evt:MouseEvent) { 302 bar.volumeSlider.icon.stopDrag(); 303 bar.stage.removeEventListener(MouseEvent.MOUSE_UP,volumeupHandler); 304 var xps = bar.volumeSlider.icon.x - bar.volumeSlider.rail.x; 305 var pct = Math.round(xps*100/bar.volumeSlider.rail.width); 306 view.sendEvent(ViewEvent.VOLUME,pct); 262 307 }; 263 308 -
trunk/as3/com/jeroenwijering/views/DisplayView.as
r4 r5 76 76 /** Receive and print errors. **/ 77 77 private function errorHandler(evt) { 78 display.errorIcon.msg.text = evt.data.message;79 78 setIcon('errorIcon'); 80 79 }; … … 112 111 var wid = evt.data.width; 113 112 var hei = evt.data.height; 113 if(hei > 0) { 114 display.visible = true; 115 } else { 116 display.visible = false; 117 } 114 118 display.back.width = display.masker.width = wid; 115 119 display.back.height = display.masker.height = hei; … … 163 167 setIcon('bufferIcon'); 164 168 } else { 165 if(view.config['playlist'] == 'over') {166 setIcon();167 return;168 }169 169 switch(view.config.displayclick) { 170 170 case 'play': -
trunk/as3/com/jeroenwijering/views/KeyboardView.as
r3 r5 26 26 /** Process keyboard events. **/ 27 27 private function keyHandler(evt:KeyboardEvent) { 28 trace(evt.keyCode);29 28 switch(evt.keyCode) { 30 29 case 37: -
trunk/as3/com/jeroenwijering/views/PlaylistView.as
r4 r5 47 47 clip.list.button.visible = false; 48 48 clip.list.mask = clip.masker; 49 clip.slider.buttonMode = true;50 clip.slider.mouseChildren = false;51 49 clip.list.addEventListener(MouseEvent.CLICK,clickHandler); 52 50 clip.list.addEventListener(MouseEvent.MOUSE_OVER,overHandler); 53 51 clip.list.addEventListener(MouseEvent.MOUSE_OUT,outHandler); 54 clip.list.addEventListener(MouseEvent.MOUSE_UP,stopHandler); 55 clip.slider.addEventListener(MouseEvent.MOUSE_DOWN,startHandler); 52 clip.slider.buttonMode = true; 53 clip.slider.mouseChildren = false; 54 clip.slider.addEventListener(MouseEvent.MOUSE_DOWN,sdownHandler); 55 clip.slider.addEventListener(MouseEvent.MOUSE_OVER,soverHandler); 56 clip.slider.addEventListener(MouseEvent.MOUSE_OUT,soutHandler); 56 57 clip.visible = false; 57 trace(clip);58 58 }; 59 59 … … 119 119 var idx = evt.data.index; 120 120 if(!isNaN(active)) { 121 buttons[active].c.gotoAnd Stop('out');122 } 123 buttons[idx].c.gotoAnd Stop('active');121 buttons[active].c.gotoAndPlay('out'); 122 } 123 buttons[idx].c.gotoAndPlay('active'); 124 124 active = idx; 125 125 }; … … 136 136 private function overHandler(evt:MouseEvent) { 137 137 var idx = Number(evt.target.name); 138 buttons[idx].c.gotoAnd Stop('over');138 buttons[idx].c.gotoAndPlay('over'); 139 139 }; 140 140 … … 144 144 var idx = Number(evt.target.name); 145 145 if(idx == active) { 146 buttons[idx].c.gotoAnd Stop('active');146 buttons[idx].c.gotoAndPlay('active'); 147 147 } else { 148 buttons[idx].c.gotoAnd Stop('out');148 buttons[idx].c.gotoAndPlay('out'); 149 149 } 150 150 }; … … 176 176 } else if (view.config['playlist'] == 'over') { 177 177 clip.x = clip.y = 0; 178 clip.back.height = evt.data.height;179 178 clip.back.width = evt.data.width; 179 if(proportion > 1) { 180 clip.back.height = evt.data.height; 181 } else if(buttons) { 182 clip.back.height = buttons.length*buttonheight; 183 } 180 184 } 181 185 buildList(false); … … 235 239 236 240 237 /** Start scrolling the playlist . **/238 private function s tartHandler(evt:MouseEvent) {241 /** Start scrolling the playlist on mousedown. **/ 242 private function sdownHandler(evt:MouseEvent) { 239 243 clearInterval(scrollInterval); 244 clip.stage.addEventListener(MouseEvent.MOUSE_UP,supHandler); 240 245 scrollHandler(); 241 246 scrollInterval = setInterval(scrollHandler,50); 242 247 }; 248 249 250 /** Revert the highlight on mouseout. **/ 251 private function soutHandler(evt:MouseEvent) { 252 clip.slider.icon.gotoAndPlay('out'); 253 }; 254 255 256 /** Highlight the icon on rollover. **/ 257 private function soverHandler(evt:MouseEvent) { 258 clip.slider.icon.gotoAndPlay('over'); 259 }; 260 261 262 /** Stop scrolling the playlist on mouseout. **/ 263 private function supHandler(evt:MouseEvent) { 264 clearInterval(scrollInterval); 265 clip.stage.removeEventListener(MouseEvent.MOUSE_UP,supHandler); 266 }; 267 243 268 244 269 /** Process state changes **/ 245 270 private function stateHandler(evt:ModelEvent) { 246 271 if(view.config['playlist'] == 'over') { 247 if(evt.data.newstate == ModelStates.PLAYING || evt.data.newstate == ModelStates.BUFFERING) { 248 clip.visible = false; 272 if(evt.data.newstate == ModelStates.PLAYING || 273 evt.data.newstate == ModelStates.BUFFERING) { 274 Animations.fade(clip,0); 249 275 } else { 250 clip.visible = true; 251 } 252 } 253 }; 254 255 256 /** Stop scrolling the playlist. **/ 257 private function stopHandler(evt:MouseEvent) { 258 clearInterval(scrollInterval); 276 Animations.fade(clip,1); 277 } 278 } 259 279 }; 260 280
