source: trunk/fl5/src/com/longtailvideo/jwplayer/player/Player.as @ 634

Revision 634, 6.7 KB checked in by pablo, 4 years ago (diff)
  • Player doesn't allow adding / removing children
  • Player handles PLAYER_READY before default
  • V4 plugins can retrieve the plugin configs for v5 plugins
Line 
1package com.longtailvideo.jwplayer.player {
2        import com.longtailvideo.jwplayer.controller.Controller;
3        import com.longtailvideo.jwplayer.events.PlayerEvent;
4        import com.longtailvideo.jwplayer.model.IPlaylist;
5        import com.longtailvideo.jwplayer.model.Model;
6        import com.longtailvideo.jwplayer.model.PlayerConfig;
7        import com.longtailvideo.jwplayer.plugins.IPlugin;
8        import com.longtailvideo.jwplayer.utils.Logger;
9        import com.longtailvideo.jwplayer.utils.RootReference;
10        import com.longtailvideo.jwplayer.view.IPlayerComponents;
11        import com.longtailvideo.jwplayer.view.View;
12        import com.longtailvideo.jwplayer.view.interfaces.IPlayerComponent;
13        import com.longtailvideo.jwplayer.view.interfaces.ISkin;
14       
15        import flash.display.DisplayObject;
16        import flash.display.Sprite;
17        import flash.events.Event;
18       
19       
20        /**
21         * Sent when the player has been initialized and skins and plugins have been successfully loaded.
22         *
23         * @eventType com.longtailvideo.jwplayer.events.PlayerEvent.JWPLAYER_READY
24         */
25        [Event(name="jwplayerReady", type="com.longtailvideo.jwplayer.events.PlayerEvent")]
26        /**
27         * Main class for JW Flash Media Player
28         *
29         * @author Pablo Schklowsky
30         */
31        public class Player extends Sprite implements IPlayer {
32                protected static var _commercial:Boolean = Boolean(CONFIG::commercial);
33
34                private var model:Model;
35                private var view:View;
36                private var controller:Controller;
37               
38               
39                /** Player constructor **/
40                public function Player() {
41                        new RootReference(this);
42                        try {
43                                this.addEventListener(Event.ADDED_TO_STAGE, setupPlayer);
44                        } catch (err:Error) {
45                                setupPlayer();
46                        }
47                }
48               
49               
50                private function setupPlayer(event:Event = null):void {
51                        try {
52                                this.removeEventListener(Event.ADDED_TO_STAGE, setupPlayer);
53                        } catch (err:Error) {
54                        }
55                        model = new Model();
56                        view = new View(this, model);
57                        controller = new Controller(this, model, view);
58                        controller.addEventListener(PlayerEvent.JWPLAYER_READY, playerReady, false, -1);
59                        controller.setupPlayer();
60                }
61               
62               
63                protected function playerReady(evt:PlayerEvent):void {
64                        // Only handle JWPLAYER_READY once
65                        controller.removeEventListener(PlayerEvent.JWPLAYER_READY, playerReady);
66                        var jsAPI:JavascriptAPI = new JavascriptAPI(this);
67                        model.addGlobalListener(forward);
68                        view.addGlobalListener(forward);
69                        controller.addGlobalListener(forward);
70                        forward(evt);
71                }
72               
73               
74                /**
75                 * Forwards all MVC events to interested listeners.
76                 * @param evt
77                 */
78                protected function forward(evt:PlayerEvent):void {
79                        Logger.log(evt.toString(), evt.type);
80                        dispatchEvent(evt);
81                }
82               
83               
84                /**
85                 * @inheritDoc
86                 */
87                public function get config():PlayerConfig {
88                        return model.config;
89                }
90               
91               
92                /**
93                 * @inheritDoc
94                 */
95                public function get version():String {
96                        return PlayerVersion.version;
97                }
98               
99               
100                /**
101                 * @inheritDoc
102                 */
103                public function get commercial():Boolean {
104                        return _commercial;
105                }
106               
107               
108                /**
109                 * @inheritDoc
110                 */
111                public function get skin():ISkin {
112                        return view.skin;
113                }
114               
115               
116                /**
117                 * @inheritDoc
118                 */
119                public function get state():String {
120                        return model.state;
121                }
122               
123               
124                /**
125                 * @inheritDoc
126                 */
127                public function get playlist():IPlaylist {
128                        return model.playlist;
129                }
130               
131               
132                /**
133                 * @inheritDoc
134                 */
135                public function get locked():Boolean {
136                        return controller.locking;
137                }
138               
139               
140                /**
141                 * @inheritDoc
142                 */
143                public function lock(target:IPlugin, callback:Function):void {
144                        controller.lockPlayback(target, callback);
145                }
146               
147               
148                /**
149                 * @inheritDoc
150                 */
151                public function unlock(target:IPlugin):Boolean {
152                        return controller.unlockPlayback(target);
153                }
154               
155               
156                /**
157                 * @inheritDoc
158                 */
159                public function volume(volume:Number):Boolean {
160                        return controller.setVolume(volume);
161                }
162               
163               
164                /**
165                 * @inheritDoc
166                 */
167                public function get mute():Boolean {
168                        return model.mute;
169                }
170               
171               
172                /**
173                 * @inheritDoc
174                 */
175                public function set mute(state:Boolean):void {
176                        controller.mute(state);
177                }
178               
179               
180                /**
181                 * @inheritDoc
182                 */
183                public function play():Boolean {
184                        return controller.play();
185                }
186               
187               
188                /**
189                 * @inheritDoc
190                 */
191                public function pause():Boolean {
192                        return controller.pause();
193                }
194               
195               
196                /**
197                 * @inheritDoc
198                 */
199                public function stop():Boolean {
200                        return controller.stop();
201                }
202               
203               
204                /**
205                 * @inheritDoc
206                 */
207                public function seek(position:Number):Boolean {
208                        return controller.seek(position);
209                }
210               
211               
212                /**
213                 * @inheritDoc
214                 */
215                public function load(item:*):Boolean {
216                        return controller.load(item);
217                }
218               
219               
220                /**
221                 * @inheritDoc
222                 */
223                public function playlistItem(index:Number):Boolean {
224                        return controller.setPlaylistIndex(index);
225                }
226               
227               
228                /**
229                 * @inheritDoc
230                 */
231                public function playlistNext():Boolean {
232                        return controller.next();
233                }
234               
235               
236                /**
237                 * @inheritDoc
238                 */
239                public function playlistPrev():Boolean {
240                        return controller.previous();
241                }
242               
243               
244                /**
245                 * @inheritDoc
246                 */
247                public function redraw():Boolean {
248                        return controller.redraw();
249                }
250               
251               
252                /**
253                 * @inheritDoc
254                 */
255                public function get fullscreen():Boolean {
256                        return model.fullscreen;
257                }
258               
259               
260                /**
261                 * @inheritDoc
262                 */
263                public function set fullscreen(on:Boolean):void {
264                        controller.fullscreen(on);
265                }
266               
267               
268                /**
269                 * @inheritDoc
270                 */
271                public function link(index:Number = NaN):Boolean {
272                        return controller.link(index);
273                }
274               
275               
276                /**
277                 * @inheritDoc
278                 */
279                public function get controls():IPlayerComponents {
280                        return view.components;
281                }
282               
283               
284                /**
285                 * @inheritDoc
286                 */
287                public function overrideComponent(plugin:IPlayerComponent):void {
288                        view.overrideComponent(plugin);
289                }
290               
291                /**
292                 * @private
293                 *
294                 * This method is deprecated, and is used for backwards compatibility only.
295                 */
296                public function getPlugin(id:String):Object {
297                        return view.getPlugin(id);
298                }
299               
300                /** The player should not accept any calls referencing its display stack **/
301                public override function addChild(child:DisplayObject):DisplayObject {
302                        return null;
303                }
304
305                /** The player should not accept any calls referencing its display stack **/
306                public override function addChildAt(child:DisplayObject, index:int):DisplayObject {
307                        return null;
308                }
309
310                /** The player should not accept any calls referencing its display stack **/
311                public override function removeChild(child:DisplayObject):DisplayObject {
312                        return null;
313                }
314
315                /** The player should not accept any calls referencing its display stack **/
316                public override function removeChildAt(index:int):DisplayObject {
317                        return null;
318                }
319               
320        }
321}
Note: See TracBrowser for help on using the repository browser.