root/flash_player/trunk/src/org/korsakow/player/ExternalBindings.as @ 1255

Revision 1255, 3.8 kB (checked in by dreisch, 6 months ago)

-fixed #1094

Line 
1package org.korsakow.player
2{
3        import flash.events.Event;
4        import flash.external.ExternalInterface;
5        import flash.geom.Point;
6       
7        import org.korsakow.debug.Debug;
8        import org.korsakow.domain.exception.DomainObjectCreationException;
9        import org.korsakow.domain.interf.ISnu;
10        import org.korsakow.player.engine.IEnvironment;
11        import org.korsakow.player.engine.event.EnvironmentEvent;
12        import org.korsakow.player.widget.IWidgetComponent;
13
14        /**
15         * Defines the external interface.
16         */
17        public class ExternalBindings
18        {
19                private var _env:IEnvironment;
20                private var _app:ApplicationBase;
21                private var _onError:String;
22                public function ExternalBindings(app:ApplicationBase, env:IEnvironment)
23                {
24                        _app = app;
25                        _env = env;
26                       
27                        _env.addEventListener(EnvironmentEvent.SNU_BEGIN_PLAYING, onSnuBegin);
28                }
29                public function bind():void
30                {
31                        ExternalInterface.addCallback("addEventListener", errWrap(addEventExternalListener));
32                        ExternalInterface.addCallback("pauseEngine", errWrap(pauseEngine));
33                        ExternalInterface.addCallback("resumeEngine", errWrap(resumeEngine));
34                        ExternalInterface.addCallback("getCurrentSnuId", errWrap(getCurrentSnuId));
35                        ExternalInterface.addCallback("getCurrentMainMedia", errWrap(getCurrentMainMedia));
36                        ExternalInterface.addCallback("executeSnu", errWrap(executeSnu));
37                        ExternalInterface.addCallback("toString", errWrap(toString));
38                        if (_app.config.has('onError')) {
39                                _onError = _app.config.getString('onError');
40                        }
41                        if (_app.config.has("onReady")) {
42                                ExternalInterface.call(_app.config.getString('onReady'), ExternalInterface.objectID);
43                        }
44                }
45                private function handleError(e:Error):void
46                {
47                        handleErrorMessage(e.message + "\n" + e.getStackTrace());
48                }
49                private function handleErrorMessage(e:String):void
50                {
51                        e = ""+e;
52                        Debug.log("Error in external binding", e);
53                        if (_onError)
54                                ExternalInterface.call(_onError, e);
55                }
56                private function errWrap(func:Function):Function
57                {
58                        return function():* {
59                                try {
60                                        return func.apply(null, arguments);
61                                } catch (e:Error) {
62                                        handleError(e);
63                                }
64                        };
65                }
66                private function onSnuBegin(event:Event):void
67                {
68                        if (!_env.currentMainMedia)
69                                return;
70//                      _env.currentMainMedia.addEventListener(MouseEvent.
71                }
72                public function pauseEngine():void
73                {
74                        return _env.pauseEngine();
75                }
76                public function resumeEngine():void
77                {
78                        return _env.resumeEngine();
79                }
80                public function addEventExternalListener(type:String, listener:String):void
81                {
82                        function wrap(e:Event):void {
83                                ExternalInterface.call(listener, new ExternalEvent(e.type));
84                        };
85                        _env.addEventListener(type, wrap);
86                }
87                public function getCurrentSnuId():Number
88                {
89                        return _env.currentSnu?_env.currentSnu.id:-1;
90                }
91                public function executeSnu(id:uint):Boolean
92                {
93                        var snu:ISnu;
94                        try {
95                                snu = _env.findSnuById(id);
96                        } catch (e:DomainObjectCreationException) {
97                                return false;
98                        }
99                        if (snu)
100                                _env.executeSnu(snu);
101                        return true;
102                }
103                public function getCurrentMainMedia():ExternalWidget
104                {
105                        if (!_env.currentMainMedia)
106                                return null;
107                        var widget:IWidgetComponent = _env.currentMainMedia;
108                        var pos:Point = widget.localToGlobal(new Point());
109                        return new ExternalWidget(pos.x, pos.y, widget.width, widget.height);
110                }
111               
112                public function toString():String
113                {
114                        return "[Korsakow Player Environment]";
115                }
116        }
117}
118
119internal class ExternalWidget
120{
121        public var x:Number;
122        public var y:Number;
123        public var globalX:Number;
124        public var globalY:Number;
125        public var width:Number;
126        public var height:Number;
127       
128        public function ExternalWidget(x:Number, y:Number, width:Number, height:Number)
129        {
130                this.x = x;
131                this.y = y;
132                this.width = width;
133                this.height = height;
134        }
135}
136
137internal class ExternalEvent
138{
139        public var type:String;
140       
141        public function ExternalEvent(type:String)
142        {
143                this.type = type;
144        }
145        public function toString():String
146        {
147                return "[Event; " + type + "]";
148        }
149}
Note: See TracBrowser for help on using the browser.