root/trunk/as3/com/jeroenwijering/views/ExternalView.as @ 3

Revision 3, 4.7 kB (checked in by jeroen, 18 months ago)

added js initer BUT destroyed controlbar display

Line 
1/**
2* Interface for javascript interaction and IDE tracing.
3**/
4package com.jeroenwijering.views {
5
6
7import com.jeroenwijering.events.*;
8import com.jeroenwijering.player.View;
9import flash.external.ExternalInterface;
10import flash.system.Capabilities;
11import flash.system.Security;
12
13
14public class ExternalView {
15
16
17        /** Reference to the MVC view. **/
18        private var view:View;
19        /** List with all subscribers. **/
20        private var listeners:Array;
21
22
23        public function ExternalView(vie:View) {
24                view = vie;
25                view.addControllerListener(ControllerEvent.CAPTION,setController);
26                view.addControllerListener(ControllerEvent.ERROR,setController);
27                view.addControllerListener(ControllerEvent.ITEM,setController);
28                view.addControllerListener(ControllerEvent.MUTE,setController);
29                view.addControllerListener(ControllerEvent.PLAY,setController);
30                view.addControllerListener(ControllerEvent.PLAYLIST,setController);
31                view.addControllerListener(ControllerEvent.QUALITY,setController);
32                view.addControllerListener(ControllerEvent.RESIZE,setController);
33                view.addControllerListener(ControllerEvent.SEEK,setController);
34                view.addControllerListener(ControllerEvent.STOP,setController);
35                view.addControllerListener(ControllerEvent.VOLUME,setController);
36                view.addModelListener(ModelEvent.BUFFER,setModel);
37                view.addModelListener(ModelEvent.ERROR,setModel);
38                view.addModelListener(ModelEvent.LOADED,setModel);
39                view.addModelListener(ModelEvent.META,setModel);
40                view.addModelListener(ModelEvent.STATE,setModel);
41                view.addModelListener(ModelEvent.TIME,setModel);
42                view.addViewListener(ViewEvent.CAPTION,setView);
43                view.addViewListener(ViewEvent.ERROR,setView);
44                view.addViewListener(ViewEvent.FULLSCREEN,setView);
45                view.addViewListener(ViewEvent.ITEM,setView);
46                view.addViewListener(ViewEvent.LINK,setView);
47                view.addViewListener(ViewEvent.LOAD,setView);
48                view.addViewListener(ViewEvent.MUTE,setView);
49                view.addViewListener(ViewEvent.NEXT,setView);
50                view.addViewListener(ViewEvent.PLAY,setView);
51                view.addViewListener(ViewEvent.PREV,setView);
52                view.addViewListener(ViewEvent.QUALITY,setView);
53                view.addViewListener(ViewEvent.SEEK,setView);
54                view.addViewListener(ViewEvent.STOP,setView);
55                view.addViewListener(ViewEvent.VOLUME,setView);
56                if(ExternalInterface.available) {
57                        listeners = new Array();
58                        Security.allowDomain('*');
59                        ExternalInterface.addCallback("getConfig", getConfig);
60                        ExternalInterface.addCallback("getPlaylist", getPlaylist);
61                        ExternalInterface.addCallback("addControllerListener", addControllerListener);
62                        ExternalInterface.addCallback("addModelListener", addModelListener);
63                        ExternalInterface.addCallback("addViewListener", addViewListener);
64                        ExternalInterface.addCallback("sendEvent", view.sendEvent);
65                        playerReady();
66                }
67        };
68
69
70        /** Manage subscriptions of events. **/
71        public function addControllerListener(typ:String,fcn:String):Boolean {
72                listeners.push({target:'CONTROLLER',type:typ.toUpperCase(),callee:fcn});
73                return true;
74        };
75        public function addModelListener(typ:String,fcn:String):Boolean {
76                listeners.push({target:'MODEL',type:typ.toUpperCase(),callee:fcn});
77                return true;
78        };
79        public function addViewListener(typ:String,fcn:String):Boolean {
80                listeners.push({target:'VIEW',type:typ.toUpperCase(),callee:fcn});
81                return true;
82        };
83
84
85        /** Send event to listeners and tracers. **/
86        private function forward(tgt:String,typ:String,dat:Object) {
87                var prm = '';
88                for (var i in dat) { prm += i+':'+dat[i]+','; }
89                if(prm.length > 0) {
90                        prm = '('+prm.substr(0,prm.length-1)+')';
91                }
92                if(Capabilities.playerType == 'External') {
93                        trace(tgt+': '+typ+' '+prm);
94                } else if(view.config['tracecall']) {
95                        ExternalInterface.call(view.config['tracecall'],tgt+': '+typ+' '+prm);
96                }
97                if(!dat) { dat = new Object(); }
98                dat.id = ExternalInterface.objectID;
99                dat.client = view.config['client'];
100                dat.version = view.config['version'];
101                for each (var itm in listeners) {
102                        if(itm['target'] == tgt && itm['type'] == typ) {
103                                ExternalInterface.call(itm['callee'],dat);
104                        }
105                }
106        };
107
108
109        /** Return the config and playlist objects to javascript. **/
110        public function getConfig():Object {
111                return view.config;
112        };
113        public function getPlaylist():Array {
114                return view.playlist;
115        };
116
117
118        /** Send a call to javascript that the player is ready. **/
119        private function playerReady() {
120                var dat = {
121                        id:ExternalInterface.objectID,
122                        client:view.config['client'],
123                        version:view.config['version']
124                };
125                try {
126                        ExternalInterface.call("playerReady",dat);
127                } catch (err:Error) {}
128        };
129
130
131        /** Forward events to tracer and subscribers. **/
132        private function setController(evt:ControllerEvent) {
133                forward('CONTROLLER',evt.type,evt.data);
134        };
135        private function setModel(evt:ModelEvent) {
136                forward('MODEL',evt.type,evt.data);
137        };
138        private function setView(evt:ViewEvent) {
139                forward('VIEW',evt.type,evt.data);
140        };
141
142
143};
144
145
146}
Note: See TracBrowser for help on using the browser.