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

Revision 1, 4.4 kB (checked in by jeroen, 18 months ago)

initial commit of old repository into public one

Line 
1/**
2* Interface for javascript interaction.
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                }
66        };
67
68
69        /** Manage subscriptions of events. **/
70        public function addControllerListener(typ:String,fcn:String):Boolean {
71                listeners.push({target:'CONTROLLER',type:typ.toUpperCase(),callee:fcn});
72                return true;
73        };
74        public function addModelListener(typ:String,fcn:String):Boolean {
75                listeners.push({target:'MODEL',type:typ.toUpperCase(),callee:fcn});
76                return true;
77        };
78        public function addViewListener(typ:String,fcn:String):Boolean {
79                listeners.push({target:'VIEW',type:typ.toUpperCase(),callee:fcn});
80                return true;
81        };
82
83
84        /** Send event to listeners and tracers. **/
85        private function forward(tgt:String,typ:String,dat:Object) {
86                var prm = '';
87                for (var i in dat) { prm += i+':'+dat[i]+','; }
88                if(prm.length > 0) {
89                        prm = '('+prm.substr(0,prm.length-1)+')';
90                }
91                if(Capabilities.playerType == 'External') {
92                        trace(tgt+': '+typ+' '+prm);
93                } else if(view.config['tracecall']) {
94                        ExternalInterface.call(view.config['tracecall'],tgt+': '+typ+' '+prm);
95                }
96                if(!dat) { dat = new Object(); }
97                dat.id = ExternalInterface.objectID;
98                dat.version = view.config['version'];
99                for each (var itm in listeners) {
100                        if(itm['target'] == tgt && itm['type'] == typ) {
101                                ExternalInterface.call(itm['callee'],dat);
102                        }
103                }
104        };
105
106
107        /** Return the config and javascript objects to callers. **/
108        public function getConfig():Object { return view.config; };
109        public function getPlaylist():Array { return view.playlist; };
110
111
112        /** Forward events to tracer and subscribers. **/
113        private function setController(evt:ControllerEvent) { forward('CONTROLLER',evt.type,evt.data); };
114        private function setModel(evt:ModelEvent) { forward('MODEL',evt.type,evt.data); };
115        private function setView(evt:ViewEvent) { forward('VIEW',evt.type,evt.data); };
116
117
118};
119
120
121}
Note: See TracBrowser for help on using the browser.