source: trunk/fl5/src/com/longtailvideo/jwplayer/view/View.as @ 411

Revision 411, 8.5 KB checked in by pablo, 4 years ago (diff)

Hooked up controller to view events

Line 
1package com.longtailvideo.jwplayer.view {
2        import com.longtailvideo.jwplayer.events.GlobalEventDispatcher;
3        import com.longtailvideo.jwplayer.events.MediaEvent;
4        import com.longtailvideo.jwplayer.events.PlayerEvent;
5        import com.longtailvideo.jwplayer.events.PlayerStateEvent;
6        import com.longtailvideo.jwplayer.events.PlaylistEvent;
7        import com.longtailvideo.jwplayer.model.Model;
8        import com.longtailvideo.jwplayer.player.Player;
9        import com.longtailvideo.jwplayer.player.PlayerState;
10        import com.longtailvideo.jwplayer.player.PlayerV4Emulation;
11        import com.longtailvideo.jwplayer.plugins.IPlugin;
12        import com.longtailvideo.jwplayer.plugins.PluginConfig;
13        import com.longtailvideo.jwplayer.utils.RootReference;
14        import com.longtailvideo.jwplayer.utils.Stretcher;
15        import com.longtailvideo.jwplayer.view.interfaces.IControlbarComponent;
16        import com.longtailvideo.jwplayer.view.interfaces.IDisplayComponent;
17        import com.longtailvideo.jwplayer.view.interfaces.IDockComponent;
18        import com.longtailvideo.jwplayer.view.interfaces.IPlayerComponent;
19        import com.longtailvideo.jwplayer.view.interfaces.IPlaylistComponent;
20        import com.longtailvideo.jwplayer.view.interfaces.ISkin;
21       
22        import flash.display.DisplayObject;
23        import flash.display.Loader;
24        import flash.display.MovieClip;
25        import flash.display.Stage;
26        import flash.display.StageAlign;
27        import flash.display.StageScaleMode;
28        import flash.events.ErrorEvent;
29        import flash.events.Event;
30        import flash.events.IOErrorEvent;
31        import flash.net.URLRequest;
32       
33       
34        public class View extends GlobalEventDispatcher {
35                private var _player:Player;
36                private var _model:Model;
37                private var _skin:ISkin;
38                private var _components:PlayerComponents;
39                private var _fullscreen:Boolean = false;
40                private var stage:Stage;
41
42                private var _backgroundLayer:MovieClip;
43                private var _mediaLayer:MovieClip;
44                private var _imageLayer:MovieClip;
45                private var _componentsLayer:MovieClip;
46                private var _pluginsLayer:MovieClip;           
47               
48                private var _image:Loader;
49               
50                public function View(player:Player, model:Model) {
51                        _player = player;
52                        _model = model;
53                       
54                        setupLayers();
55                        RootReference.stage.scaleMode = StageScaleMode.NO_SCALE;
56                        RootReference.stage.stage.align = StageAlign.TOP_LEFT;
57                        RootReference.stage.addEventListener(Event.FULLSCREEN, resizeHandler);
58                        RootReference.stage.addEventListener(Event.RESIZE, resizeHandler);
59                        _model.addEventListener(MediaEvent.JWPLAYER_MEDIA_LOADED, mediaLoaded);
60                        _model.playlist.addEventListener(PlaylistEvent.JWPLAYER_PLAYLIST_ITEM, itemHandler);
61                        _model.addEventListener(PlayerStateEvent.JWPLAYER_PLAYER_STATE, stateHandler);
62                }
63               
64               
65                private function setupLayers():void {
66                        _backgroundLayer = setupLayer("background", 0);
67                        var background:MovieClip = new MovieClip();
68                        background.name = "background";
69                        _backgroundLayer.addChildAt(background, 0);
70                        background.graphics.beginFill(_player.config.backcolor, 1);
71                        background.graphics.drawRect(0,0,1,1);
72                        background.graphics.endFill();
73
74                        _mediaLayer = setupLayer("media", 1);                   
75
76                        _imageLayer = setupLayer("image", 2);                   
77                        _image = new Loader();
78                        _image.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, imageError);
79                        _image.contentLoaderInfo.addEventListener(Event.COMPLETE, imageComplete);
80
81                        _componentsLayer = setupLayer("components", 3);
82                        _pluginsLayer = setupLayer("plugins", 4);
83                }
84               
85                private function setupLayer(name:String, index:Number):MovieClip {
86                        var layer:MovieClip = new MovieClip();
87                        RootReference.stage.addChildAt(layer, index);
88                        layer.name = name;
89                        layer.x = 0;
90                        layer.y = 0;
91                        return layer;
92                }
93
94
95                private function resizeHandler(event:Event):void{
96                        var width:Number = RootReference.stage.stageWidth;
97                        var height:Number = RootReference.stage.stageHeight;
98                        _backgroundLayer.getChildByName("background").width = width;
99                        _backgroundLayer.getChildByName("background").height = height;
100
101                        var layoutManager:PlayerLayoutManager = new PlayerLayoutManager(_player);
102                        layoutManager.resize(width, height);
103
104                        _components.resize(_player.config.width, _player.config.height);
105       
106                        if (_imageLayer.numChildren) {
107                                _imageLayer.x = _components.display.x;
108                                _imageLayer.y = _components.display.y;
109                                Stretcher.stretch(_image, _player.config.width, _player.config.height, _player.config.stretching);
110                        }
111
112                        if (_mediaLayer.numChildren) {
113                                _mediaLayer.x = _components.display.x;
114                                _mediaLayer.y = _components.display.y;
115                                _model.media.resize(_player.config.width, _player.config.height);
116                        }
117
118                }
119               
120                public function set skin(skn:ISkin):void {
121                        _skin = skn;
122                        if (!_components) {
123                                setupComponents();
124                        }
125                }
126               
127                //TODO: I think plugins and components have to go on the same level, otherwise the component layer will simply go over
128                private function setupComponents():void {
129                        _components = new PlayerComponents(_player);
130                       
131                        _components.controlbar.addGlobalListener(forward);
132                       
133                        _componentsLayer.addChildAt(_components.display as MovieClip, 0);
134                        _componentsLayer.addChildAt(_components.controlbar as MovieClip, 1);
135                       
136                       
137                       
138                        //addToLayer(_playerComponents.controlbar as MovieClip, _components);
139                        //addToStage(_playerComponents.dock, _player.config.width, _player.config.height);
140                        //addToStage(_playerComponents.playlist, _player.config.width, _player.config.height);
141                }
142               
143               
144                public function get skin():ISkin {
145                        return _skin;
146                }
147               
148               
149                public function fullscreen(mode:Boolean = true):void {
150                }
151               
152                /** Redraws the plugins **/
153                public function redraw():void {
154                        for (var i:Number=0; i < _pluginsLayer.numChildren; i++) {
155                                var plug:IPlugin = _pluginsLayer.getChildAt(i) as IPlugin;
156                                if (plug) {
157                                        var cfg:PluginConfig = _player.config.pluginConfig((plug as DisplayObject).name);
158                                        plug.resize(cfg.width, cfg.height);
159                                }
160                        }
161                        PlayerV4Emulation.getInstance().resize(_player.config.width, _player.config.height);
162                }
163               
164               
165                public function get components():PlayerComponents {
166                        return _components;
167                }
168               
169               
170                public function overrideComponent(newComponent:IPlayerComponent):void {
171                        if (newComponent is IControlbarComponent) {
172                                // Replace controlbar
173                        } else if (newComponent is IDisplayComponent) {
174                                // Replace display
175                        } else if (newComponent is IDockComponent) {
176                                // Replace dock
177                        } else if (newComponent is IPlaylistComponent) {
178                                // Replace playlist
179                        } else {
180                                throw(new Error("Component must implement a component interface"));
181                        }
182                }
183               
184               
185                public function addPlugin(name:String, plugin:IPlugin):void {
186                        try {
187                                var plugDO:DisplayObject = plugin as DisplayObject;
188                                if (_pluginsLayer.getChildByName(name) == null && plugDO != null) {
189                                        plugDO.name = name;
190                                        _pluginsLayer.addChild(plugDO);
191                                        _pluginsLayer[name] = plugDO;
192                                }
193                        } catch (e:Error) {
194                                dispatchEvent(new ErrorEvent(ErrorEvent.ERROR, false, false, e.message));
195                        }
196                }
197               
198               
199                public function loadedPlugins():Array {
200                        var list:Array = [];
201                        for each (var plugin:DisplayObject in _pluginsLayer) {
202                                if (plugin is IPlugin) {
203                                        list.push(plugin.name);
204                                }
205                        }
206                        return list;
207                }
208               
209               
210                public function getPlugin(name:String):IPlugin {
211                        return _pluginsLayer.getChildByName(name) as IPlugin;
212                }
213               
214                private function mediaLoaded(evt:MediaEvent):void {
215                        while (_mediaLayer.numChildren) {
216                                _mediaLayer.removeChildAt(0);
217                        }
218                        _model.media.resize(_player.config.width, _player.config.height);
219                       
220                        _mediaLayer.x = _components.display.x;
221                        _mediaLayer.y = _components.display.y;
222                        _mediaLayer.addChild(_model.media.display);
223                }
224               
225                private function itemHandler(evt:PlaylistEvent):void {
226                        if (_model.playlist.currentItem && _model.playlist.currentItem.image) {
227                                loadImage(_model.playlist.currentItem.image);
228                        }
229                }
230
231                private function loadImage(url:String):void {
232                        _image.load(new URLRequest(url));
233                }
234               
235                private function imageComplete(evt:Event):void {
236                        while (_imageLayer.numChildren) { _imageLayer.removeChildAt(0); }
237                        _imageLayer.addChild(_image);
238                        _imageLayer.x = _components.display.x;
239                        _imageLayer.y = _components.display.y;
240                        Stretcher.stretch(_image, _player.config.width, _player.config.height, _player.config.stretching);
241                }
242               
243                private function imageError(evt:IOErrorEvent):void {
244                        _image = null;
245                        dispatchEvent(new PlayerEvent(PlayerEvent.JWPLAYER_ERROR, evt.text));   
246                }
247
248                private function stateHandler(evt:PlayerStateEvent):void {
249                        switch (evt.newstate) {
250                                case PlayerState.IDLE:
251                                        _mediaLayer.visible = false;
252                                        _imageLayer.visible = true;
253                                        break;
254                                case PlayerState.PLAYING:
255                                        _mediaLayer.visible = true;
256                                        _imageLayer.visible = false;
257                                        break;
258                        }
259                }
260               
261                private function forward(evt:Event):void {
262                        dispatchEvent(evt);
263                }
264
265        }
266}
Note: See TracBrowser for help on using the repository browser.