source: trunk/fl5/src/com/longtailvideo/jwplayer/view/components/PlaylistComponent.as @ 801

Revision 801, 22.1 KB checked in by pablo, 3 years ago (diff)
Line 
1package com.longtailvideo.jwplayer.view.components {
2        import com.longtailvideo.jwplayer.events.PlayerStateEvent;
3        import com.longtailvideo.jwplayer.events.PlaylistEvent;
4        import com.longtailvideo.jwplayer.model.PlaylistItem;
5        import com.longtailvideo.jwplayer.player.IPlayer;
6        import com.longtailvideo.jwplayer.player.PlayerState;
7        import com.longtailvideo.jwplayer.utils.Draw;
8        import com.longtailvideo.jwplayer.utils.Logger;
9        import com.longtailvideo.jwplayer.utils.RootReference;
10        import com.longtailvideo.jwplayer.utils.Stacker;
11        import com.longtailvideo.jwplayer.utils.Stretcher;
12        import com.longtailvideo.jwplayer.utils.Strings;
13        import com.longtailvideo.jwplayer.view.PlayerLayoutManager;
14        import com.longtailvideo.jwplayer.view.interfaces.IPlaylistComponent;
15        import com.longtailvideo.jwplayer.view.interfaces.ISkin;
16        import com.longtailvideo.jwplayer.view.skins.DefaultSkin;
17        import com.longtailvideo.jwplayer.view.skins.SWFSkin;
18       
19        import flash.display.Bitmap;
20        import flash.display.DisplayObject;
21        import flash.display.DisplayObjectContainer;
22        import flash.display.Loader;
23        import flash.display.LoaderInfo;
24        import flash.display.MovieClip;
25        import flash.display.Sprite;
26        import flash.events.Event;
27        import flash.events.IOErrorEvent;
28        import flash.events.MouseEvent;
29        import flash.geom.ColorTransform;
30        import flash.geom.Rectangle;
31        import flash.net.URLRequest;
32        import flash.system.LoaderContext;
33        import flash.text.TextField;
34        import flash.text.TextFormat;
35        import flash.utils.Dictionary;
36        import flash.utils.clearInterval;
37        import flash.utils.setInterval;
38       
39       
40        public class PlaylistComponent extends CoreComponent implements IPlaylistComponent {
41                /** Array with all button instances **/
42                private var buttons:Array;
43                /** Height of a button (to calculate scrolling) **/
44                private var buttonheight:Number;
45                /** Currently active button. **/
46                private var active:Number;
47                /** Proportion between clip and mask. **/
48                private var proportion:Number;
49                /** Interval ID for scrolling **/
50                private var scrollInterval:Number;
51                /** Image dimensions. **/
52                private var image:Array;
53                /** Color object for backcolor. **/
54                private var back:ColorTransform;
55                /** Color object for frontcolor. **/
56                private var front:ColorTransform;
57                /** Color object for lightcolor. **/
58                private var light:ColorTransform;
59                /** Visual representation of a the playlist **/
60                private var list:Sprite;
61                /** Visual representation of a playlist item **/
62                private var button:Sprite;
63                /** The playlist mask **/
64                private var listmask:Sprite;
65                /** The playlist slider **/
66                private var slider:Sprite;
67                /** The playlist background **/
68                private var background:Sprite;
69                /** Internal reference to the skin **/
70                private var skin:ISkin;
71                private var skinLoaded:Boolean = false;
72                private var pendingResize:Rectangle;
73                private var pendingBuild:Boolean = false;
74                /** Map of images and loaders **/
75                private var imageLoaderMap:Dictionary = new Dictionary();
76               
77                public function PlaylistComponent(player:IPlayer) {
78                        super(player, "playlist");
79                        player.addEventListener(PlaylistEvent.JWPLAYER_PLAYLIST_ITEM, itemHandler);
80                        player.addEventListener(PlaylistEvent.JWPLAYER_PLAYLIST_LOADED, playlistHandler);
81                        player.addEventListener(PlaylistEvent.JWPLAYER_PLAYLIST_UPDATED, playlistHandler);
82                        player.addEventListener(PlayerStateEvent.JWPLAYER_PLAYER_STATE, stateHandler);
83                       
84                        if (_player.skin is SWFSkin && !_player.skin.hasComponent('playlist')) {
85                                var defaultSkin:DefaultSkin = new DefaultSkin();
86                                defaultSkin.addEventListener(Event.COMPLETE, continueSetup);
87                                skin = defaultSkin;
88                                defaultSkin.load();
89                        } else {
90                                skinLoaded = true;
91                                skin = _player.skin;
92                                continueSetup();
93                        }
94                }
95               
96                protected function continueSetup(evt:Event=null):void {
97                        skinLoaded = true;
98                       
99                        background = getSkinElement("background") as Sprite;
100                        if (!background) {
101                                background = new Sprite();
102                                background.name = "background";
103                                background.graphics.beginFill(0, 1);
104                                background.graphics.drawRect(0, 0, 1, 1);
105                                background.graphics.endFill();
106                        }
107                        addElement(background);
108                        slider = getSkinElement("slider") as Sprite;
109                        if (!slider) {
110                                slider = new Sprite();
111                               
112                                var sliderBack:Sprite = getSkinElement("sliderBackground") as Sprite;
113                                if (!sliderBack) {
114                                        sliderBack = new Sprite();
115                                        sliderBack.graphics.beginFill(0, 1);
116                                        sliderBack.graphics.drawRect(0, 0, 1, 1);
117                                        sliderBack.graphics.endFill();
118                                }
119                                sliderBack.name = "back";
120                                addElement(sliderBack,slider);
121                               
122                                var sliderRail:Sprite = getSkinElement("sliderRail") as Sprite;
123                                if (!sliderRail){
124                                        sliderRail = new Sprite();
125                                        sliderRail.graphics.beginFill(0, 1);
126                                        sliderRail.graphics.drawRect(0, 0, 7, 22);
127                                        sliderRail.graphics.endFill();
128                                }
129                                sliderRail.name = "rail";
130                                addElement(sliderRail,slider);
131                               
132                                var sliderThumb:Sprite = getSkinElement("sliderThumb") as Sprite;
133                                if (!sliderThumb) {
134                                        sliderThumb = new Sprite();
135                                        sliderThumb.graphics.beginFill(0, 1);
136                                        sliderThumb.graphics.drawRect(0, 0, 5, 54);
137                                        sliderThumb.graphics.endFill();
138                                }
139                                sliderThumb.name = "icon";
140                                addElement(sliderThumb,slider,(sliderRail.width - sliderThumb.width)/2);
141                        }
142                        addElement(slider);
143                        slider.buttonMode = true;
144                        slider.mouseChildren = false;
145                        slider.addEventListener(MouseEvent.MOUSE_DOWN, sdownHandler);
146                        slider.addEventListener(MouseEvent.MOUSE_OVER, soverHandler);
147                        slider.addEventListener(MouseEvent.MOUSE_OUT, soutHandler);
148                        slider.visible = false;
149                        listmask = getSkinElement("masker") as Sprite;
150                        if (!listmask) {
151                                listmask = new Sprite();
152                                listmask.graphics.beginFill(0xff0000, 1);
153                                listmask.graphics.drawRect(0, 0, 1, 1);
154                                listmask.graphics.endFill();
155                        }
156                        addElement(listmask);
157                        list = getSkinElement("list") as Sprite;
158                        if (!list) {
159                                list = new Sprite();
160                                button = buildButton() as Sprite;
161                                addElement(button, list);
162                        } else {
163                                button = list.getChildByName("button") as Sprite;
164                        }
165                        buttonheight = button.height;
166                        button.visible = false;
167                        list.mask = listmask;
168                        list.addEventListener(MouseEvent.CLICK, clickHandler);
169                        list.addEventListener(MouseEvent.MOUSE_OVER, overHandler);
170                        list.addEventListener(MouseEvent.MOUSE_OUT, outHandler);
171                        addElement(list);
172                        buttons = new Array();
173                        this.addEventListener(MouseEvent.MOUSE_WHEEL, wheelHandler);
174                        try {
175                                image = new Array(button.getChildByName("image").width, button.getChildByName("image").height);
176                        } catch (err:Error) {
177                        }
178                        if (button.getChildByName("back")) {
179                                setColors();
180                        }
181                        if (pendingBuild) {
182                                buildPlaylist(true);
183                        }
184                        if (pendingResize) {
185                                resize(pendingResize.width, pendingResize.height);
186                        }
187                }
188               
189               
190                private function buildButton():MovieClip {
191                        var btn:MovieClip = new MovieClip();
192                       
193                        var backOver:Sprite = getSkinElement("itemOver") as Sprite;
194                        if (!backOver) {
195                                backOver = new Sprite();
196                                backOver.graphics.beginFill(0, 1);
197                                backOver.graphics.drawRect(0, 0, 1, 1);
198                                backOver.graphics.endFill();
199                        }
200                        backOver.name = "backOver";
201                        addElement(backOver, btn, 0, 0);
202                       
203                        var back:Sprite = getSkinElement("item") as Sprite;
204                        if (!back) {
205                                back = new Sprite();
206                                back.graphics.beginFill(0, 1);
207                                back.graphics.drawRect(0, 0, 100, 100);
208                                back.graphics.endFill();
209                        }
210                        back.name = "back";
211                        addElement(back, btn, 0, 0);
212                       
213                        var img:Sprite = new Sprite();
214                        img.name = "image";
215                        img.graphics.beginFill(0, 1);
216                        img.graphics.drawRect(0, 0, 80, back.height);
217                        img.graphics.endFill();
218                        addElement(img, btn, 0, 0);
219                       
220                        var titleTextFormat:TextFormat = new TextFormat();
221                        titleTextFormat.size = 13;
222                        titleTextFormat.font = "_sans";
223                        titleTextFormat.bold = true;
224                        var title:TextField = new TextField();
225                        title.name = "title";
226                        //title.autoSize = TextFieldAutoSize.LEFT;
227                        title.defaultTextFormat = titleTextFormat;
228                        title.wordWrap = true;
229                        title.multiline = true;
230                        title.width = 250;
231                        title.height = 20;
232                        addElement(title, btn, 85, 2);
233                       
234                        var descriptionTextFormat:TextFormat = new TextFormat();
235                        descriptionTextFormat.size = 11;
236                        descriptionTextFormat.font = "_sans";
237                        var description:TextField = new TextField();
238                        description.name = "description";
239                        //description.autoSize = TextFieldAutoSize.LEFT;
240                        description.wordWrap = true;
241                        description.multiline = true;
242                        description.width= 290;
243                        description.height = back.height - 20;
244                        description.defaultTextFormat = descriptionTextFormat;
245                        addElement(description, btn, 86, 20);
246                       
247                        var duration:TextField = new TextField();
248                        duration.name = "duration";
249                        duration.width = 40;
250                        duration.height = 20;
251                        titleTextFormat.size = 11;
252                        duration.defaultTextFormat = titleTextFormat;
253                        addElement(duration, btn, 335, 4);
254                       
255
256                        backOver.width = btn.width;                     
257                        back.width = btn.width;
258                       
259                        return btn;
260                }
261               
262                private function addElement(doc:DisplayObject, parent:DisplayObjectContainer = null, x:Number = 0, y:Number = 0):void {
263                        if (!parent) {
264                                parent = this;
265                        }
266                        parent.addChild(doc);
267                        doc.x = x;
268                        doc.y = y;
269                }
270               
271               
272                /** Handle a button rollover. **/
273                private function overHandler(evt:MouseEvent):void {
274                        var idx:Number = Number(evt.target.name);
275                        if (front && back) {
276                                for (var itm:String in _player.playlist.getItemAt(idx)) {
277                                        if (getButton(idx).getChildByName(itm) && getButton(idx).getChildByName(itm) is TextField) {
278                                                (getButton(idx).getChildByName(itm) as TextField).textColor = back.color;
279                                        }
280                                }
281                                if (swfSkinned) {
282                                        getButton(idx).getChildByName("back").transform.colorTransform = light;
283                                } else {
284                                        getButton(idx).setChildIndex(getButton(idx).getChildByName("back"), 0);
285                                        getButton(idx).setChildIndex(getButton(idx).getChildByName("backOver"), 1);
286                                }
287                        }
288                }
289               
290               
291                /** Handle a button rollover. **/
292                private function outHandler(evt:MouseEvent):void {
293                        var idx:Number = Number(evt.target.name);
294                        if (front && back) {
295                                for (var itm:String in _player.playlist.getItemAt(idx)) {
296                                        if (getButton(idx).getChildByName(itm) && getButton(idx).getChildByName(itm) is TextField) {
297                                                if (idx == active) {
298                                                        (getButton(idx).getChildByName(itm) as TextField).textColor = light.color;
299                                                } else {
300                                                        (getButton(idx).getChildByName(itm) as TextField).textColor = front.color;
301                                                }
302                                        }
303                                }
304                                if (swfSkinned) {
305                                        getButton(idx).getChildByName("back").transform.colorTransform = back;
306                                } else {
307                                        getButton(idx).setChildIndex(getButton(idx).getChildByName("backOver"), 0);
308                                        getButton(idx).setChildIndex(getButton(idx).getChildByName("back"), 1);
309                                }
310                        }
311                }
312               
313               
314                /** Setup all buttons in the playlist **/
315                private function buildPlaylist(clr:Boolean):void {
316                        if (!_player.playlist || player.playlist.length < 1) {
317                                return;
318                        }
319                        if (!skinLoaded) {
320                                pendingBuild = true;
321                                return
322                        }
323
324                        var wid:Number = getConfigParam("width");
325                        var hei:Number = getConfigParam("height");
326                        listmask.height = hei;
327                        listmask.width = wid;
328                        proportion = _player.playlist.length * buttonheight / hei;
329                        if (proportion > 1.01) {
330                                wid -= slider.width;
331                                buildSlider();
332                        } else {
333                                slider.visible = false;
334                        }
335                        if (clr) {
336                                list.y = listmask.y;
337                                for (var j:Number = 0; j < buttons.length; j++) {
338                                        list.removeChild(getButton(j));
339                                }
340                                buttons = new Array();
341                        } else {
342                                if (proportion > 1) {
343                                        scrollEase();
344                                }
345                        }
346                        for (var i:Number = 0; i < _player.playlist.length; i++) {
347                                if (clr) {
348                                        var btn:MovieClip;
349                                        if (swfSkinned) {
350                                                btn = Draw.clone(button, true) as MovieClip;
351                                        } else {
352                                                btn = buildButton();
353                                                list.addChild(btn);
354                                        }
355                                        var stc:Stacker = new Stacker(btn);
356                                        btn.y = i * buttonheight;
357                                        btn.buttonMode = true;
358                                        btn.mouseChildren = false;
359                                        btn.name = i.toString();
360                                        buttons.push({c: btn, s: stc});
361                                        setContents(i);
362                                }
363                                if (buttons[i]) {
364                                        (buttons[i].s as Stacker).rearrange(wid);
365                                }
366                        }
367                }
368               
369               
370                /** Setup the scrollbar component **/
371                private function buildSlider():void {
372                        slider.visible = true;
373                        slider.x = getConfigParam("width") - slider.width;
374                        var dif:Number = getConfigParam("height") - slider.height - slider.y;
375                        slider.getChildByName("back").height += dif;
376                        slider.getChildByName("rail").height += dif;
377                        slider.getChildByName("icon").height = Math.round(slider.getChildByName("rail").height / proportion);
378                }
379               
380               
381                /** Make sure the playlist is not out of range. **/
382                private function scrollEase(ips:Number = -1, cps:Number = -1):void {
383                        if (ips != -1) {
384                                slider.getChildByName("icon").y = Math.round(ips - (ips - slider.getChildByName("icon").y) / 1.5);
385                                list.y = Math.round((cps - (cps - list.y) / 1.5));
386                        }
387                        if (list.y > 0 || slider.getChildByName("icon").y < slider.getChildByName("rail").y) {
388                                list.y = listmask.y;
389                                slider.getChildByName("icon").y = slider.getChildByName("rail").y;
390                        } else if (list.y < listmask.height - list.height || slider.getChildByName("icon").y > slider.getChildByName("rail").y + slider.getChildByName("rail").height - slider.getChildByName("icon").height) {
391                                slider.getChildByName("icon").y = slider.getChildByName("rail").y + slider.getChildByName("rail").height - slider.getChildByName("icon").height;
392                                list.y = listmask.y + listmask.height - list.height;
393                        }
394                }
395               
396               
397                /** Scrolling handler. **/
398                private function scrollHandler():void {
399                        var yps:Number = slider.mouseY - slider.getChildByName("rail").y;
400                        var ips:Number = yps - slider.getChildByName("icon").height / 2;
401                        var cps:Number = listmask.y + listmask.height / 2 - proportion * yps;
402                        scrollEase(ips, cps);
403                }
404               
405               
406                /** Init the colors. **/
407                private function setColors():void {
408                        if (_player.config.backcolor) {
409                                back = new ColorTransform();
410                                back.color = _player.config.backcolor.color;
411                                if (swfSkinned) {
412                                        background.transform.colorTransform = back;
413                                        slider.getChildByName("back").transform.colorTransform = back;
414                                }
415                        }
416                        if (_player.config.frontcolor) {
417                                front = new ColorTransform();
418                                front.color = _player.config.frontcolor.color;
419                                try {
420                                        if (swfSkinned) {
421                                                slider.getChildByName("icon").transform.colorTransform = front;
422                                                slider.getChildByName("rail").transform.colorTransform = front;
423                                        }
424                                } catch (err:Error) {
425                                }
426                                if (_player.config.lightcolor) {
427                                        light = new ColorTransform();
428                                        light.color = _player.config.lightcolor.color;
429                                } else {
430                                        light = front;
431                                }
432                        }
433                }
434               
435               
436                /** Setup button elements **/
437                private function setContents(idx:Number):void {
438                        var playlistItem:PlaylistItem = _player.playlist.getItemAt(idx);
439                        var title:TextField = getButton(idx).getChildByName("title") as TextField;
440                        var description:TextField = getButton(idx).getChildByName("description") as TextField;
441                        var duration:TextField = getButton(idx).getChildByName("duration") as TextField;
442                        var author:TextField = getButton(idx).getChildByName("author") as TextField;
443                        var tags:TextField = getButton(idx).getChildByName("tags") as TextField;
444                        if (playlistItem.image) {
445                                if (getConfigParam('thumbs') != false && _player.config.playlist != 'none' && playlistItem.image) {
446                                        var img:Sprite = getButton(idx).getChildByName("image") as Sprite;
447                                        if (img && playlistItem.image) {
448                                                img.alpha = 0;
449                                                var ldr:Loader = new Loader();
450                                                imageLoaderMap[ldr] = idx;
451                                                ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderHandler);
452                                                ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
453                                                ldr.load(new URLRequest(playlistItem.image), new LoaderContext(true));
454                                        }
455                                }
456                        }
457                        if (duration && playlistItem.duration) {
458                                if (playlistItem.duration > 0) {
459                                        duration.text = Strings.digits(playlistItem.duration);
460                                        if (front) {
461                                                duration.textColor = front.color;
462                                        }
463                                }
464                        }
465                        try {
466                                if (description) {
467                                        description.htmlText = playlistItem.description;
468                                }
469                                if (title) {
470                                        title.htmlText = "<b>" + playlistItem.title + "</b>";
471                                }
472                                if (author) {
473                                        author.htmlText = playlistItem.author;
474                                }
475                                if (tags) {
476                                        tags.htmlText = playlistItem.tags;
477                                }
478                                if (front) {
479                                        description.textColor = front.color;
480                                        title.textColor = front.color;
481                                }
482                        } catch (e:Error) {
483                        }
484                        if (getButton(idx).getChildByName("image") && (!playlistItem.image || getConfigParam('thumbs') == false)) {
485                                getButton(idx).getChildByName("image").visible = false;
486                        }
487                        if (back && swfSkinned) {
488                                getButton(idx).getChildByName("back").transform.colorTransform = back;
489                        }
490                }
491               
492               
493                /** Loading of image completed; resume loading **/
494                private function loaderHandler(evt:Event):void {
495                        try {
496                                var ldr:Loader = (evt.target as LoaderInfo).loader;
497                                var button:Sprite = getButton(imageLoaderMap[ldr]);
498                                var img:Sprite = button.getChildByName("image") as Sprite;
499                                img.alpha = 1;
500                                var msk:Sprite = Draw.rect(button, '0xFF0000', img.width, img.height, img.x, img.y);
501                                img.mask = msk;
502                                img.addChild(ldr);
503                                try {
504                                        Draw.smooth(ldr.content as Bitmap);
505                                } catch (e:Error) {
506                                        Logger.log('Could not smooth thumbnail image: ' + e.message);
507                                }
508                                Stretcher.stretch(ldr, image[0], image[1], Stretcher.FILL);
509                        } catch (err:Error) {
510                                Logger.log('Error loading playlist image: '+err.message);
511                        }
512                }
513               
514               
515                /** Loading of image failed; hide image **/
516                private function errorHandler(evt:Event):void {
517                        try {
518                                var ldr:Loader = (evt.target as LoaderInfo).loader;
519                                var button:Sprite = getButton(imageLoaderMap[ldr]);
520                                var img:Sprite = button.getChildByName("image") as Sprite;
521                                img.visible = false;
522                                (buttons[imageLoaderMap[ldr]].s as Stacker).rearrange(getConfigParam("width"));
523                        } catch (err:Error) {
524                                Logger.log('Error loading playlist image '+ ldr.loaderInfo.url+': '+err.message);
525                        }
526                }
527               
528               
529                private function wheelHandler(evt:MouseEvent):void {
530                        //scrollEase(evt.delta * -1, getConfigParam("height"));
531                }
532               
533               
534                /** Start scrolling the playlist on mousedown. **/
535                private function sdownHandler(evt:MouseEvent):void {
536                        clearInterval(scrollInterval);
537                        RootReference.stage.addEventListener(MouseEvent.MOUSE_UP, supHandler);
538                        scrollHandler();
539                        scrollInterval = setInterval(scrollHandler, 50);
540                }
541               
542               
543                /** Revert the highlight on mouseout. **/
544                private function soutHandler(evt:MouseEvent):void {
545                        if (front && swfSkinned) {
546                                slider.getChildByName("icon").transform.colorTransform = front;
547                        } else {
548                                //slider.getChildByName("icon").gotoAndStop('out');
549                        }
550                }
551               
552               
553                /** Highlight the icon on rollover. **/
554                private function soverHandler(evt:MouseEvent):void {
555                        if (front && swfSkinned) {
556                                slider.getChildByName("icon").transform.colorTransform = light;
557                        } else {
558                                //slider.getChildByName("icon").gotoAndStop('over');
559                        }
560                }
561               
562               
563                /** Stop scrolling the playlist on mouseout. **/
564                private function supHandler(evt:MouseEvent):void {
565                        clearInterval(scrollInterval);
566                        RootReference.stage.removeEventListener(MouseEvent.MOUSE_UP, supHandler);
567                }
568               
569               
570                /** Handle a click on a button. **/
571                private function clickHandler(evt:MouseEvent):void {
572                        _player.playlistItem(Number(evt.target.name));
573                }
574               
575               
576                /** Process resizing requests **/
577                public function resize(width:Number, height:Number):void {
578                        if (skinLoaded) {
579                                setConfigParam("width", width);
580                                setConfigParam("height", height);
581                                background.width = width;
582                                background.height = height;
583                                buildPlaylist(false);
584                                if (PlayerLayoutManager.testPosition(getConfigParam('position'))) {
585                                        visible = true;
586                                } else if (getConfigParam('position') == "over") {
587                                        stateHandler();
588                                } else {
589                                        visible = false;
590                                }
591                                if (visible && getConfigParam('visible') === false) {
592                                        visible = false;
593                                }
594                        } else {
595                                pendingResize = new Rectangle(0,0,width,height);
596                        }
597                }
598               
599               
600                /** Switch the currently active item */
601                protected function itemHandler(evt:PlaylistEvent = null):void {
602                        var idx:Number = _player.playlist.currentIndex;
603                        clearInterval(scrollInterval);
604                        if (proportion > 1.01) {
605                                scrollInterval = setInterval(scrollEase, 50, idx * buttonheight / proportion, -idx * buttonheight + listmask.y);
606                        }
607                        if (light) {
608                                for (var itm:String in _player.playlist.getItemAt(idx)) {
609                                        if (getButton(idx).getChildByName(itm)) {
610                                                try {
611                                                        (getButton(idx).getChildByName(itm) as TextField).textColor = light.color;
612                                                } catch (err:Error) {
613                                                }
614                                        }
615                                }
616                        }
617                        if (back && swfSkinned) {
618                                getButton(idx).getChildByName("back").transform.colorTransform = back;
619                        }
620                        if (!isNaN(active)) {
621                                if (front) {
622                                        for (var act:String in _player.playlist.getItemAt(active)) {
623                                                if (getButton(active).getChildByName(act)) {
624                                                        try {
625                                                                (getButton(active).getChildByName(act) as TextField).textColor = front.color;
626                                                        } catch (err:Error) {
627                                                        }
628                                                }
629                                        }
630                                }
631                        }
632                        active = idx;
633                }
634               
635               
636                /** New playlist loaded: rebuild the playclip. **/
637                protected function playlistHandler(evt:PlaylistEvent = null):void {
638                        clearInterval(scrollInterval);
639                        active = undefined;
640                        buildPlaylist(true);
641                        if (background) {
642                                resize(background.width, background.height);
643                        }
644                }
645               
646               
647                /** Process state changes **/
648                protected function stateHandler(evt:PlayerStateEvent = null):void {
649                        if (getConfigParam('position') == "over") {
650                                if (player.state == PlayerState.PLAYING || player.state == PlayerState.PAUSED || player.state == PlayerState.BUFFERING) {
651                                        visible = false;
652                                } else {
653                                        visible = true;
654                                }
655                        }
656                }
657               
658               
659                private function getButton(id:Number):Sprite {
660                        return buttons[id].c as Sprite;
661                }
662               
663                private function get swfSkinned():Boolean {
664                        if (skin is SWFSkin) {
665                                return (skin.hasComponent('playlist'));
666                        }
667                        return false;
668                }
669               
670                protected override function getSkinElement(element:String):DisplayObject {
671                        return skin.getSkinElement(_name,element);
672                }
673               
674        }
675}
676
Note: See TracBrowser for help on using the repository browser.