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

Revision 393, 4.7 KB checked in by zach, 4 years ago (diff)

Updating UI components

Line 
1package com.longtailvideo.jwplayer.view {
2        import com.longtailvideo.jwplayer.events.GlobalEventDispatcher;
3        import com.longtailvideo.jwplayer.player.Player;
4        import com.longtailvideo.jwplayer.plugins.IPlugin;
5        import com.longtailvideo.jwplayer.plugins.PluginConfig;
6        import com.longtailvideo.jwplayer.utils.RootReference;
7       
8        import flash.display.DisplayObject;
9        import flash.display.MovieClip;
10        import flash.display.Stage;
11        import flash.display.StageAlign;
12        import flash.display.StageScaleMode;
13        import flash.events.ErrorEvent;
14        import flash.events.Event;
15       
16       
17        public class View extends GlobalEventDispatcher {
18                private var _player:Player;
19                private var _skin:ISkin;
20                private var _components:PlayerComponents;
21                private var _fullscreen:Boolean = false;
22                private var stage:Stage;
23                private var _backgroundLayer:MovieClip;
24                private var _mediaLayer:MovieClip;
25                private var _componentsLayer:MovieClip;
26                private var _pluginsLayer:MovieClip;           
27               
28                public function View(player:Player) {
29                        _player = player;
30                        setupLayers();
31                        RootReference.stage.scaleMode = StageScaleMode.NO_SCALE;
32                        RootReference.stage.stage.align = StageAlign.TOP_LEFT;
33                        RootReference.stage.addEventListener(Event.FULLSCREEN, resizeHandler);
34                        RootReference.stage.addEventListener(Event.RESIZE, resizeHandler);
35                }
36               
37               
38                private function setupLayers():void {
39                        _backgroundLayer = setupLayer("background", 0);
40                        var background:MovieClip = new MovieClip();
41                        background.name = "background";
42                        _backgroundLayer.addChildAt(background, 0);
43                        background.graphics.beginFill(0,0.5);
44                        background.graphics.drawRect(0,0,1,1);
45                        background.graphics.endFill();
46
47                        _mediaLayer = setupLayer("media", 1);                   
48
49                        _componentsLayer = setupLayer("components", 2);
50                       
51                        _pluginsLayer = setupLayer("plugins", 3);
52                }
53               
54                private function setupLayer(name:String, index:Number):MovieClip {
55                        var layer:MovieClip = new MovieClip();
56                        RootReference.stage.addChildAt(layer, index);
57                        layer.name = name;
58                        layer.x = 0;
59                        layer.y = 0;
60                        return layer;
61                }
62
63
64                private function resizeHandler(event:Event):void{
65                        _backgroundLayer.getChildByName("background").width = RootReference.stage.stageWidth;
66                        _backgroundLayer.getChildByName("background").height = RootReference.stage.stageHeight;
67
68                        _components.resize(RootReference.stage.stageWidth,RootReference.stage.stageHeight);
69                }
70               
71               
72                public function set skin(skn:ISkin):void {
73                        _skin = skn;
74                        if (!_components) {
75                                setupComponents();
76                        }
77                }
78               
79                //TODO: I think plugins and components have to go on the same level, otherwise the component layer will simply go over
80                private function setupComponents():void {
81                        _components = new PlayerComponents(_player);
82                        _componentsLayer.addChildAt(_components.display as MovieClip, 0);
83                        _componentsLayer.addChildAt(_components.controlbar as MovieClip, 1);
84                        //addToLayer(_playerComponents.controlbar as MovieClip, _components);
85                        //addToStage(_playerComponents.dock, _player.config.width, _player.config.height);
86                        //addToStage(_playerComponents.playlist, _player.config.width, _player.config.height);
87                }
88               
89               
90                public function get skin():ISkin {
91                        return _skin;
92                }
93               
94               
95                public function fullscreen(mode:Boolean = true):void {
96                }
97               
98               
99                public function redraw():void {
100                        for (var i:Number=0; i < _pluginsLayer.numChildren; i++) {
101                                var plug:IPlugin = _pluginsLayer.getChildAt(i) as IPlugin;
102                                if (plug) {
103                                        var cfg:PluginConfig = _player.config.pluginConfig((plug as DisplayObject).name);
104                                        plug.resize(cfg.width, cfg.height);
105                                }
106                        }
107                }
108               
109               
110                public function get components():PlayerComponents {
111                        return _components;
112                }
113               
114               
115                public function overrideComponent(newComponent:*):void {
116                        if (newComponent is IControlbarComponent) {
117                                // Replace controlbar
118                        } else if (newComponent is IDisplayComponent) {
119                                // Replace display
120                        } else if (newComponent is IDockComponent) {
121                                // Replace dock
122                        } else if (newComponent is IPlaylistComponent) {
123                                // Replace playlist
124                        } else {
125                                throw(new Error("Component must implement a component interface"));
126                        }
127                }
128               
129               
130                public function addPlugin(name:String, plugin:IPlugin):void {
131                        try {
132                                var plugDO:DisplayObject = plugin as DisplayObject;
133                                if (_pluginsLayer.getChildByName(name) == null && plugDO != null) {
134                                        plugDO.name = name;
135                                        _pluginsLayer.addChild(plugDO);
136                                        _pluginsLayer[name] = plugDO;
137                                }
138                        } catch (e:Error) {
139                                dispatchEvent(new ErrorEvent(ErrorEvent.ERROR, false, false, e.message));
140                        }
141                }
142               
143               
144                public function loadedPlugins():Array {
145                        var list:Array = [];
146                        for each (var plugin:DisplayObject in _pluginsLayer) {
147                                if (plugin is IPlugin) {
148                                        list.push(plugin.name);
149                                }
150                        }
151                        return list;
152                }
153               
154               
155                public function getPlugin(name:String):IPlugin {
156                        return _pluginsLayer.getChildByName(name) as IPlugin;
157                }
158        }
159}
Note: See TracBrowser for help on using the repository browser.