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

Revision 459, 9.6 KB checked in by zach, 4 years ago (diff)

Fixing logo position and updated image path

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