Changeset 5

Show
Ignore:
Timestamp:
06/07/08 07:17:23 (18 months ago)
Author:
jeroen
Message:

fixed media display, rollovers and sliders

Location:
trunk/as3
Files:
1 added
12 modified

Legend:

Unmodified
Added
Removed
  • trunk/as3/com/jeroenwijering/models/HTTPModel.as

    r3 r5  
    108108                        } 
    109109                } 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                        } 
    111115                } 
    112116                url += '&width='+model.config['width']; 
    113117                url += '&client='+encodeURI(model.config['client']); 
    114                 trace(url); 
     118                url += '&version='+encodeURI(model.config['version']); 
    115119                stream.play(url); 
    116120                clearInterval(loadinterval); 
  • trunk/as3/com/jeroenwijering/parsers/ObjectParser.as

    r1 r5  
    9494        /** Detect the mediatype of a playlistitem and save to its type var. **/ 
    9595        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) { 
    9799                        // assume the developer knows what he does... 
    98100                } else if(itm['file'].substr(0,4) == 'rtmp') { 
  • trunk/as3/com/jeroenwijering/player/Model.as

    r3 r5  
    5353        /** Item change: switch the curently active model if there's a new URL **/ 
    5454        private function itemHandler(evt:ControllerEvent) { 
    55                 // skin.display.media.visible = false; 
     55                skin.display.media.visible = false; 
    5656                if(current) { current.stop(); } 
    5757                sendEvent(ModelEvent.STATE,{newstate:ModelStates.IDLE}); 
     
    8181                } 
    8282                if(playlist[evt.data.index]['image']) { 
    83                         // skin.display.thumb.visible = true; 
     83                        skin.display.thumb.visible = true; 
    8484                        loader.load(new URLRequest(playlist[evt.data.index]['image'])); 
    8585                } else { 
    86                         // skin.display.thumb.visible = false; 
     86                        skin.display.thumb.visible = false; 
    8787                } 
    8888        }; 
     
    9191        /** Place a loaded thumb on stage. **/ 
    9292        private function thumbHandler(evt:Event) { 
    93                 /* 
    9493                var obj = skin.display.thumb; 
    9594                Draw.clear(obj); 
     
    9796                Bitmap(loader.content).smoothing = config['quality']; 
    9897                Stretcher.stretch(obj,config['width'],config['height'],config['stretching']); 
    99                 */ 
    10098        }; 
    10199 
     
    103101        /** Place a loaded mediafile on stage **/ 
    104102        public function mediaHandler(chd:DisplayObject) { 
    105                 /* 
    106103                var obj = skin.display.media; 
    107104                Draw.clear(obj); 
     
    110107                skin.display.thumb.visible = false; 
    111108                skin.display.media.visible = true; 
    112                 */ 
    113109        }; 
    114110 
     
    148144        /** Resize the media and thumb. **/ 
    149145        private function resizeHandler(evt:ControllerEvent) { 
    150                 /* 
    151146                Stretcher.stretch(skin.display.thumb,evt.data.width,evt.data.height,config['stretching']); 
    152147                Stretcher.stretch(skin.display.media,evt.data.width,evt.data.height,config['stretching']); 
    153                 */ 
    154148        }; 
    155149 
  • trunk/as3/com/jeroenwijering/player/Player.as

    r4 r5  
    2121                description:undefined, 
    2222                duration:0, 
    23                 file:'http://www.jeroenwijering.com/upload/xspf.xml', 
     23                file:undefined, 
    2424                image:undefined, 
    2525                link:undefined, 
     
    2828                type:undefined, 
    2929 
    30                 controlbar:'over', 
     30                controlbar:'bottom', 
    3131                logo:undefined, 
    32                 playlist:'bottom', 
     32                playlist:'none', 
    3333                playlistsize:180, 
    3434                skin:undefined, 
     
    3737                bufferlength:1, 
    3838                caption:true, 
    39                 digits:true, 
    4039                displayclick:'play', 
    4140                fullscreen:false, 
     
    4544                repeat:false, 
    4645                shuffle:false, 
    47                 stretching:'uniform', 
     46                stretching:'fill', 
    4847                volume:80, 
    4948 
     
    5756                controlbarheight:20, 
    5857                height:300, 
     58                state:'IDLE', 
    5959                version:'4.0 r3', 
    6060                width:400 
  • trunk/as3/com/jeroenwijering/player/View.as

    r4 r5  
    4343                views = new Array(); 
    4444                views.push(new CaptionsView(this)); 
    45                 views.push(new ControlbarView(this)); 
    4645                views.push(new DisplayView(this)); 
    4746                views.push(new ExternalView(this)); 
    4847                views.push(new KeyboardView(this)); 
    4948                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                } 
    5159        }; 
    5260 
  • trunk/as3/com/jeroenwijering/utils/Configger.as

    r3 r5  
    22* Loads application configuration data (from xml, cookies and flashvars). 
    33**/ 
    4  
    5  
    64package com.jeroenwijering.utils { 
    75 
  • trunk/as3/com/jeroenwijering/views/ControlbarView.as

    r4 r5  
    77import com.jeroenwijering.events.*; 
    88import com.jeroenwijering.player.View; 
    9 import com.jeroenwijering.utils.Stacker; 
    10 import com.jeroenwijering.utils.Strings; 
     9import com.jeroenwijering.utils.*; 
    1110import flash.display.MovieClip; 
    1211import flash.events.MouseEvent; 
     
    1413import flash.utils.setTimeout; 
    1514import flash.utils.clearTimeout; 
    16 import fl.transitions.*; 
    17 import fl.transitions.easing.*; 
    1815 
    1916 
     
    2320        /** Reference to the view. **/ 
    2421        private var view:View; 
     22        /** Reference to the controlbar **/ 
     23        private var bar:MovieClip; 
    2524        /** A list with all controls. **/ 
    2625        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; 
    3126        /** Timeout for hiding the bar. **/ 
    3227        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        }; 
    3341 
    3442 
     
    4553                bar = view.skin['controlbar']; 
    4654                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(); 
    5256                loadedHandler(new ModelEvent(ModelEvent.LOADED,{loaded:0,total:0})); 
    5357                muteHandler(new ControllerEvent(ControllerEvent.MUTE,{state:view.config['mute']})); 
     
    6064        /** Handle clicks from all buttons **/ 
    6165        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]); 
    7167        }; 
    7268 
     
    8379                } else {  
    8480                        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; 
    9081                } 
    9182        }; 
     
    112103        /** Show above controlbar on mousemove. **/ 
    113104        private function moveHandler(evt:MouseEvent) { 
    114                 bar.visible = true; 
     105                Animations.fade(bar,1); 
    115106                clearTimeout(hiding); 
    116107                hiding = setTimeout(moveTimeout,1000); 
     
    121112        private function moveTimeout() { 
    122113                if(bar.mouseY < -10) { 
    123                         bar.visible = false; 
     114                        Animations.fade(bar,0); 
    124115                } 
    125116        }; 
     
    142133        /** Handle mouseouts from all buttons **/ 
    143134        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'); 
    145142        }; 
    146143 
     
    177174                } 
    178175                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); 
    199200        }; 
    200201 
     
    215216                                if(view.config['controlbar'] == 'over') { 
    216217                                        clearTimeout(hiding); 
    217                                         bar.visible = true; 
     218                                        Animations.fade(bar,1); 
    218219                                        view.skin.removeEventListener(MouseEvent.MOUSE_MOVE, moveHandler); 
    219220                                } 
     
    241242 
    242243 
    243         /** Handle a move over the timeslider **/ 
    244         private function timeslideHandler(evt:MouseEvent) { 
     244        /** Handle a press on the timeslider **/ 
     245        private function timedownHandler(evt:MouseEvent) { 
    245246                var rct = new Rectangle(bar.timeSlider.rail.x,bar.timeSlider.icon.y,bar.timeSlider.rail.width,0); 
    246247                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'); 
    248271        }; 
    249272 
     
    255278 
    256279 
    257         /** Handle a move over the volume bar **/ 
    258         private function volumeslideHandler(evt:MouseEvent) { 
     280        /** Handle a move over the volumebar **/ 
     281        private function volumedownHandler(evt:MouseEvent) { 
    259282                var rct = new Rectangle(bar.volumeSlider.rail.x,bar.volumeSlider.icon.y,bar.volumeSlider.rail.width,0); 
    260283                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); 
    262307        }; 
    263308 
  • trunk/as3/com/jeroenwijering/views/DisplayView.as

    r4 r5  
    7676        /** Receive and print errors. **/ 
    7777        private function errorHandler(evt) { 
    78                 display.errorIcon.msg.text = evt.data.message; 
    7978                setIcon('errorIcon'); 
    8079        }; 
     
    112111                var wid = evt.data.width; 
    113112                var hei = evt.data.height; 
     113                if(hei > 0) {  
     114                        display.visible = true; 
     115                } else {  
     116                        display.visible = false; 
     117                } 
    114118                display.back.width = display.masker.width = wid; 
    115119                display.back.height = display.masker.height =  hei; 
     
    163167                        setIcon('bufferIcon'); 
    164168                } else { 
    165                         if(view.config['playlist'] == 'over') {  
    166                                 setIcon(); 
    167                                 return; 
    168                         } 
    169169                        switch(view.config.displayclick) { 
    170170                                case 'play': 
  • trunk/as3/com/jeroenwijering/views/KeyboardView.as

    r3 r5  
    2626        /** Process keyboard events. **/ 
    2727        private function keyHandler(evt:KeyboardEvent) { 
    28                 trace(evt.keyCode); 
    2928                switch(evt.keyCode) { 
    3029                        case 37: 
  • trunk/as3/com/jeroenwijering/views/PlaylistView.as

    r4 r5  
    4747                clip.list.button.visible = false; 
    4848                clip.list.mask = clip.masker; 
    49                 clip.slider.buttonMode = true; 
    50                 clip.slider.mouseChildren = false; 
    5149                clip.list.addEventListener(MouseEvent.CLICK,clickHandler); 
    5250                clip.list.addEventListener(MouseEvent.MOUSE_OVER,overHandler); 
    5351                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); 
    5657                clip.visible = false; 
    57                 trace(clip); 
    5858        }; 
    5959 
     
    119119                var idx = evt.data.index; 
    120120                if(!isNaN(active)) { 
    121                         buttons[active].c.gotoAndStop('out'); 
    122                 } 
    123                 buttons[idx].c.gotoAndStop('active'); 
     121                        buttons[active].c.gotoAndPlay('out'); 
     122                } 
     123                buttons[idx].c.gotoAndPlay('active'); 
    124124                active = idx; 
    125125        }; 
     
    136136        private function overHandler(evt:MouseEvent) { 
    137137                var idx = Number(evt.target.name); 
    138                 buttons[idx].c.gotoAndStop('over'); 
     138                buttons[idx].c.gotoAndPlay('over'); 
    139139        }; 
    140140 
     
    144144                var idx = Number(evt.target.name); 
    145145                if(idx == active) { 
    146                         buttons[idx].c.gotoAndStop('active'); 
     146                        buttons[idx].c.gotoAndPlay('active'); 
    147147                } else {  
    148                         buttons[idx].c.gotoAndStop('out'); 
     148                        buttons[idx].c.gotoAndPlay('out'); 
    149149                } 
    150150        }; 
     
    176176                } else if (view.config['playlist'] == 'over') { 
    177177                        clip.x = clip.y = 0; 
    178                         clip.back.height = evt.data.height; 
    179178                        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                        } 
    180184                } 
    181185                buildList(false); 
     
    235239 
    236240 
    237         /** Start scrolling the playlist. **/ 
    238         private function startHandler(evt:MouseEvent) { 
     241        /** Start scrolling the playlist on mousedown. **/ 
     242        private function sdownHandler(evt:MouseEvent) { 
    239243                clearInterval(scrollInterval); 
     244        clip.stage.addEventListener(MouseEvent.MOUSE_UP,supHandler); 
    240245                scrollHandler(); 
    241246                scrollInterval = setInterval(scrollHandler,50); 
    242247        }; 
     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 
    243268 
    244269        /** Process state changes **/ 
    245270        private function stateHandler(evt:ModelEvent) { 
    246271                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); 
    249275                        } 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                } 
    259279        }; 
    260280