Upgrade to ExtJS 3.2.0 - Released 03/30/2010
[extjs.git] / src / widgets / chart / FlashComponent.js
1 /*!
2  * Ext JS Library 3.2.0
3  * Copyright(c) 2006-2010 Ext JS, Inc.
4  * licensing@extjs.com
5  * http://www.extjs.com/license
6  */
7 /**
8  * @class Ext.FlashComponent
9  * @extends Ext.BoxComponent
10  * @constructor
11  * @xtype flash
12  */
13 Ext.FlashComponent = Ext.extend(Ext.BoxComponent, {
14     /**
15      * @cfg {String} flashVersion
16      * Indicates the version the flash content was published for. Defaults to <tt>'9.0.115'</tt>.
17      */
18     flashVersion : '9.0.115',
19
20     /**
21      * @cfg {String} backgroundColor
22      * The background color of the chart. Defaults to <tt>'#ffffff'</tt>.
23      */
24     backgroundColor: '#ffffff',
25
26     /**
27      * @cfg {String} wmode
28      * The wmode of the flash object. This can be used to control layering. Defaults to <tt>'opaque'</tt>.
29      */
30     wmode: 'opaque',
31
32     /**
33      * @cfg {Object} flashVars
34      * A set of key value pairs to be passed to the flash object as flash variables. Defaults to <tt>undefined</tt>.
35      */
36     flashVars: undefined,
37
38     /**
39      * @cfg {Object} flashParams
40      * A set of key value pairs to be passed to the flash object as parameters. Possible parameters can be found here:
41      * http://kb2.adobe.com/cps/127/tn_12701.html Defaults to <tt>undefined</tt>.
42      */
43     flashParams: undefined,
44
45     /**
46      * @cfg {String} url
47      * The URL of the chart to include. Defaults to <tt>undefined</tt>.
48      */
49     url: undefined,
50     swfId : undefined,
51     swfWidth: '100%',
52     swfHeight: '100%',
53
54     /**
55      * @cfg {Boolean} expressInstall
56      * True to prompt the user to install flash if not installed. Note that this uses
57      * Ext.FlashComponent.EXPRESS_INSTALL_URL, which should be set to the local resource. Defaults to <tt>false</tt>.
58      */
59     expressInstall: false,
60
61     initComponent : function(){
62         Ext.FlashComponent.superclass.initComponent.call(this);
63
64         this.addEvents(
65             /**
66              * @event initialize
67              *
68              * @param {Chart} this
69              */
70             'initialize'
71         );
72     },
73
74     onRender : function(){
75         Ext.FlashComponent.superclass.onRender.apply(this, arguments);
76
77         var params = Ext.apply({
78             allowScriptAccess: 'always',
79             bgcolor: this.backgroundColor,
80             wmode: this.wmode
81         }, this.flashParams), vars = Ext.apply({
82             allowedDomain: document.location.hostname,
83             YUISwfId: this.getId(),
84             YUIBridgeCallback: 'Ext.FlashEventProxy.onEvent'
85         }, this.flashVars);
86
87         new swfobject.embedSWF(this.url, this.id, this.swfWidth, this.swfHeight, this.flashVersion,
88             this.expressInstall ? Ext.FlashComponent.EXPRESS_INSTALL_URL : undefined, vars, params);
89
90         this.swf = Ext.getDom(this.id);
91         this.el = Ext.get(this.swf);
92     },
93
94     getSwfId : function(){
95         return this.swfId || (this.swfId = "extswf" + (++Ext.Component.AUTO_ID));
96     },
97
98     getId : function(){
99         return this.id || (this.id = "extflashcmp" + (++Ext.Component.AUTO_ID));
100     },
101
102     onFlashEvent : function(e){
103         switch(e.type){
104             case "swfReady":
105                 this.initSwf();
106                 return;
107             case "log":
108                 return;
109         }
110         e.component = this;
111         this.fireEvent(e.type.toLowerCase().replace(/event$/, ''), e);
112     },
113
114     initSwf : function(){
115         this.onSwfReady(!!this.isInitialized);
116         this.isInitialized = true;
117         this.fireEvent('initialize', this);
118     },
119
120     beforeDestroy: function(){
121         if(this.rendered){
122             swfobject.removeSWF(this.swf.id);
123         }
124         Ext.FlashComponent.superclass.beforeDestroy.call(this);
125     },
126
127     onSwfReady : Ext.emptyFn
128 });
129
130 /**
131  * Sets the url for installing flash if it doesn't exist. This should be set to a local resource.
132  * @static
133  * @type String
134  */
135 Ext.FlashComponent.EXPRESS_INSTALL_URL = 'http:/' + '/swfobject.googlecode.com/svn/trunk/swfobject/expressInstall.swf';
136
137 Ext.reg('flash', Ext.FlashComponent);