root/trunk/as2/com/jeroenwijering/players/PlaylistView.as @ 1

Revision 1, 7.1 kB (checked in by jeroen, 18 months ago)

initial commit of old repository into public one

  • Property svn:executable set to *
Line 
1/**
2* Playlist view management of the players MCV pattern.
3*
4* @author       Jeroen Wijering
5* @version      1.9
6**/
7
8
9import com.jeroenwijering.players.*;
10import com.jeroenwijering.utils.*;
11import com.jeroenwijering.feeds.FeedListener;
12
13
14class com.jeroenwijering.players.PlaylistView extends AbstractView
15        implements FeedListener {
16
17
18        /** ImageLoader **/
19        private var thumbLoader:ImageLoader;
20        /** Scroller instance **/
21        private var listScroller:Scroller;
22        /** Position of the playlist **/
23        private var listRight:Boolean;
24        /** Position of the playlist **/
25        private var listWidth:Number;
26        /** number of items in the playlist **/
27        private var listLength:Number;
28        /** Currently highlighted playlist item **/
29        private var currentItem:Number;
30        /** Save the current time **/
31        private var currentTime:Number = -10;
32       
33
34
35        /** Constructor **/
36        function PlaylistView(ctr:AbstractController,cfg:Object,fed:Object) {
37                super(ctr,cfg,fed);
38                if(config["displaywidth"] < config["width"]) {
39                        listRight = true;
40                        listWidth = config["width"]-config["displaywidth"]-1;
41                } else {
42                        listRight = false;
43                        listWidth = config["width"];
44                }
45                setButtons();
46                Stage.addListener(this);
47                feeder.addListener(this);
48        };
49
50
51        /** OnLoad event handler; sets up the playlist sizes and colors. **/
52        private function setButtons() {
53                var ref = this;
54                var tgt = config["clip"].playlist;
55                tgt.btn._visible = false;
56                // iterate playlist and setup each button
57                listLength = feeder.feed.length;
58                var num = 0;
59                for(var i=0; i<feeder.feed.length; i++) {
60                        if(feeder.feed[i]['category'] != 'commercial' &&
61                                feeder.feed[i]['category'] != 'preroll' &&
62                                feeder.feed[i]['category'] != 'postroll') {
63                        // set text and background
64                        tgt.btn.duplicateMovieClip("btn"+i,i);
65                        tgt["btn"+i].txt._width = listWidth - 20;
66                        tgt["btn"+i].col = new Color(tgt["btn"+i].bck);
67                        tgt["btn"+i].col.setRGB(config["frontcolor"]);
68                        tgt["btn"+i].col2 = new Color(tgt["btn"+i].icn);
69                        tgt["btn"+i].col2.setRGB(config["frontcolor"]);
70                        tgt["btn"+i].bck._width = listWidth;
71                        tgt["btn"+i].bck.onRollOver = function() {
72                                this._parent.txt.textColor = ref.config["backcolor"];
73                                this._parent.col.setRGB(ref.config["lightcolor"]);
74                                this._parent.col2.setRGB(ref.config["backcolor"]);
75                                if(ref.currentItem != this._parent.getDepth()) {
76                                        this._alpha = 90;
77                                }
78                        };
79                        tgt["btn"+i].bck.onRollOut = function() {
80                                this._parent.col.setRGB(ref.config["frontcolor"]);
81                                if(ref.currentItem != this._parent.getDepth()) {
82                                        this._parent.txt.textColor=ref.config["frontcolor"];
83                                        this._parent.col2.setRGB(ref.config["frontcolor"]);
84                                        this._alpha = 10;
85                                }
86                        };
87                        tgt["btn"+i].bck.onRelease = function() {
88                                ref.sendEvent("playitem",this._parent.getDepth());
89                        };
90                        // set thumbnails
91                        if(config["thumbsinplaylist"] == "true") {
92                                tgt["btn"+i].bck._height = 40;
93                                tgt["btn"+i].icn._y += 9;
94                                tgt["btn"+i]._y = num*41;
95                                tgt["btn"+i].txt._height += 20;
96                                if(feeder.feed[i]["author"]  == undefined) {
97                                        tgt["btn"+i].txt.htmlText = "<b>"+(i+1)+"</b>:<br />"+
98                                                feeder.feed[i]["title"];
99                                } else {
100                                        tgt["btn"+i].txt.htmlText = "<b>" +
101                                                feeder.feed[i]["author"] + "</b>:<br />" +
102                                                feeder.feed[i]["title"];
103                                }
104                                if(feeder.feed[i]["image"] != undefined) {
105                                        tgt["btn"+i].txt._x += 60;
106                                        tgt["btn"+i].txt._width -= 60;
107                                        thumbLoader =
108                                                new ImageLoader(tgt["btn"+i].img,"true",60,40);
109                                        thumbLoader.loadImage(feeder.feed[i]["image"]);
110                                        tgt["btn"+i].img.setMask(tgt["btn"+i].msk);
111                                } else {
112                                        tgt["btn"+i].msk._height = 10;
113                                        tgt["btn"+i].img._visible = false;
114                                        tgt["btn"+i].msk._visible = false;
115                                }
116                        } else {
117                                tgt["btn"+i]._y = num*23;
118                                if(feeder.feed[i]["author"]  == undefined) {
119                                        tgt["btn"+i].txt.htmlText = feeder.feed[i]["title"];
120                                } else {
121                                        tgt["btn"+i].txt.htmlText = feeder.feed[i]["author"] +
122                                                " - " + feeder.feed[i]["title"];
123                                }
124                                tgt["btn"+i].msk._height = 10;
125                                tgt["btn"+i].img._visible =
126                                        tgt["btn"+i].msk._visible = false;
127                        }
128                        tgt["btn"+i].txt.textColor = config["frontcolor"];
129                        // set link icon
130                        if(feeder.feed[i]["link"] != undefined) {
131                                tgt["btn"+i].txt._width -= 20;
132                                tgt["btn"+i].icn._x = listWidth - 24;
133                                tgt["btn"+i].icn.onRollOver = function() {
134                                        this._parent.col2.setRGB(ref.config["lightcolor"]);
135                                };
136                                tgt["btn"+i].icn.onRollOut = function() {
137                                        if(ref.currentItem == this._parent.getDepth()) {
138                                        this._parent.col2.setRGB(ref.config["backcolor"]);
139                                        } else {
140                                        this._parent.col2.setRGB(ref.config["frontcolor"]);
141                                        }
142                                };
143                                tgt["btn"+i].icn.onRelease = function() {
144                                        ref.sendEvent("getlink",this._parent.getDepth());
145                                };
146                        } else {
147                                tgt["btn"+i].icn._visible = false;
148                        }
149                        num++;
150                }
151                }
152                // setup mask and scrollbar if needed
153                var msk = config["clip"].playlistmask;
154                if(listRight == true) {
155                        msk._x = tgt._x = Number(config["displaywidth"]) + 1;
156                        msk._y = tgt._y = 0;
157                        msk._height =  config["displayheight"];
158                } else {
159                        msk._y = tgt._y = config["displayheight"] +
160                                config["controlbar"] + config["searchbar"];
161                        msk._height = config["height"] - msk._y;
162                }
163                msk._width = listWidth;
164                tgt.setMask(msk);
165                if(tgt._height > msk._height + 2 && feeder.feed.length > 1) {
166                        if(config["autoscroll"] == "false") {
167                                msk._width -= 10;
168                                for(var i=0; i<feeder.feed.length; i++) {
169                                        tgt["btn"+i].bck._width -= 10;
170                                        tgt["btn"+i].icn._x -= 10;
171                                }
172                                listScroller = new Scroller(tgt,msk,false,
173                                        config["frontcolor"],config["lightcolor"]);
174                        } else {       
175                                listScroller = new Scroller(tgt,msk,true,
176                                        config["frontcolor"],config["lightcolor"]);
177                        }
178                }
179        };
180
181
182        /** Set a new item as the current playing one **/
183        private function setItem(itm:Number):Void {
184                var tgt = config["clip"].playlist;
185                tgt["btn"+currentItem].col.setRGB(config["frontcolor"]);
186                tgt["btn"+currentItem].bck._alpha = 10;
187                tgt["btn"+currentItem].col2.setRGB(config["frontcolor"]);
188                tgt["btn"+currentItem].txt.textColor = config["frontcolor"];
189                currentItem = itm;
190                tgt["btn"+currentItem].txt.textColor = config["backcolor"];
191                tgt["btn"+currentItem].col2.setRGB(config["backcolor"]);
192                tgt["btn"+currentItem].bck._alpha = 90;
193                if(config["autoscroll"] == "false") {
194                        listScroller.scrollTo(tgt["btn"+currentItem]._y);
195                }
196        };
197
198
199        /** Set a different chapter if the feed is a chapterindex **/
200        private function setTime(elp:Number,rem:Number) {
201                if(feeder.ischapters == true && Math.abs(elp-currentTime) > 5) {
202                        currentTime = elp;
203                        for (var i=0; i<feeder.feed.length; i++) {
204                                if(feeder.feed[i]["start"] > currentTime) {
205                                        if(i != currentItem+1) { setItem(i-1); }
206                                        break;
207                                }
208                        }
209                }
210        };
211
212
213        /** Hide the scrollbar on fullscreen **/
214        public function onFullScreen(fs:Boolean) {
215                if(listScroller == undefined) {
216                        break;
217                } else if(fs == true) {
218                        config["clip"].scrollbar._visible = false;
219                } else {
220                        config["clip"].scrollbar._visible = true;
221                }
222        };
223
224
225        /** Render a new playlist when the feed updates **/
226        public function onFeedUpdate(typ:String) {
227                listScroller.purgeScrollbar();
228                delete listScroller;
229                var tgt = config["clip"].playlist;
230                for(var i=0; i<999; i++) {
231                        tgt["btn"+i].removeMovieClip();
232                }
233                setButtons();
234                setItem(currentItem);
235        };
236
237
238}
Note: See TracBrowser for help on using the browser.