00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 @import "CPFlashMovie.j"
00024 @import "CPView.j"
00025
00026 #include "Platform/Platform.h"
00027
00028 var IEFlashCLSID = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
00029
00033 @implementation CPFlashView : CPView
00034 {
00035 CPFlashMovie _flashMovie;
00036
00037 CPDictionary _params;
00038 CPDictionary _paramElements;
00039 #if PLATFORM(DOM)
00040 DOMElement _DOMParamElement;
00041 DOMElement _DOMObjectElement;
00042 DOMElement _DOMInnerObjectElement;
00043 #endif
00044 }
00045
00046 - (id)initWithFrame:(CGRect)aFrame
00047 {
00048 self = [super initWithFrame:aFrame];
00049
00050 if (self)
00051 {
00052 #if PLATFORM(DOM)
00053 if (!CPBrowserIsEngine(CPInternetExplorerBrowserEngine))
00054 {
00055 _DOMObjectElement = document.createElement(@"object");
00056 _DOMObjectElement.width = @"100%";
00057 _DOMObjectElement.height = @"100%";
00058 _DOMObjectElement.style.top = @"0px";
00059 _DOMObjectElement.style.left = @"0px";
00060 _DOMObjectElement.type = @"application/x-shockwave-flash";
00061 _DOMObjectElement.setAttribute(@"classid", IEFlashCLSID);
00062
00063 _DOMParamElement = document.createElement(@"param");
00064 _DOMParamElement.name = @"movie";
00065
00066 _DOMInnerObjectElement = document.createElement(@"object");
00067 _DOMInnerObjectElement.width = @"100%";
00068 _DOMInnerObjectElement.height = @"100%";
00069
00070 _DOMObjectElement.appendChild(_DOMParamElement);
00071 _DOMObjectElement.appendChild(_DOMInnerObjectElement);
00072
00073 _DOMElement.appendChild(_DOMObjectElement);
00074 }
00075 else
00076 [self _rebuildIEObjects];
00077 #endif
00078 }
00079
00080 return self;
00081 }
00082
00083 - (void)setFlashMovie:(CPFlashMovie)aFlashMovie
00084 {
00085 if (_flashMovie == aFlashMovie)
00086 return;
00087
00088 _flashMovie = aFlashMovie;
00089 #if PLATFORM(DOM)
00090 if (!CPBrowserIsEngine(CPInternetExplorerBrowserEngine))
00091 {
00092 _DOMParamElement.value = [aFlashMovie filename];
00093 _DOMInnerObjectElement.data = [aFlashMovie filename];
00094 }
00095 else
00096 [self _rebuildIEObjects];
00097 #endif
00098 }
00099
00100 - (CPFlashMovie)flashMovie
00101 {
00102 return _flashMovie;
00103 }
00104
00105 - (void)setFlashVars:(CPDictionary)aDictionary
00106 {
00107 var varString = @"",
00108 enumerator = [aDictionary keyEnumerator];
00109
00110 var key;
00111 while (key = [enumerator nextObject])
00112 varString = [varString stringByAppendingFormat:@"&%@=%@", key, [aDictionary objectForKey:key]];
00113
00114 if (!_params)
00115 _params = [CPDictionary dictionary];
00116
00117 [_params setObject:varString forKey:@"flashvars"];
00118 [self setParameters:_params];
00119 }
00120
00121 - (CPDictionary)flashVars
00122 {
00123 return [_params objectForKey:@"flashvars"];
00124 }
00125
00126 - (void)setParameters:(CPDictionary)aDictionary
00127 {
00128 #if PLATFORM(DOM)
00129 if (_paramElements && !CPBrowserIsEngine(CPInternetExplorerBrowserEngine))
00130 {
00131 var elements = [_paramElements allValues],
00132 count = [elements count];
00133
00134 for (var i = 0; i < count; i++)
00135 _DOMObjectElement.removeChild([elements objectAtIndex:i]);
00136 }
00137 #endif
00138 _params = aDictionary;
00139 #if PLATFORM(DOM)
00140 if (!CPBrowserIsEngine(CPInternetExplorerBrowserEngine))
00141 {
00142 _paramElements = [CPDictionary dictionary];
00143
00144 var enumerator = [_params keyEnumerator],
00145 key;
00146
00147 while (key = [enumerator nextObject] && _DOMObjectElement)
00148 {
00149 var param = document.createElement(@"param");
00150 param.name = key;
00151 param.value = [_params objectForKey:key];
00152
00153 _DOMObjectElement.appendChild(param);
00154
00155 [_paramElements setObject:param forKey:key];
00156 }
00157 }
00158 else
00159 [self _rebuildIEObjects];
00160 #endif
00161 }
00162
00163 - (CPDictionary)parameters
00164 {
00165 return _params;
00166 }
00167
00168 #if PLATFORM(DOM)
00169 - (void)_rebuildIEObjects
00170 {
00171 _DOMElement.innerHTML = @"";
00172 if (![_flashMovie filename])
00173 return;
00174
00175 var paramString = [CPString stringWithFormat:@"<param name='movie' value='%@' />", [_flashMovie filename]],
00176 paramEnumerator = [_params keyEnumerator],
00177 key;
00178
00179 while (key = [paramEnumerator nextObject])
00180 paramString = [paramString stringByAppendingFormat:@"<param name='%@' value='%@' />", key, [_params objectForKey:key]];
00181
00182 _DOMObjectElement = document.createElement(@"object");
00183 _DOMElement.appendChild(_DOMObjectElement);
00184
00185 _DOMObjectElement.outerHTML = [CPString stringWithFormat:@"<object classid=%@ width=%@ height=%@>%@</object>", IEFlashCLSID, CGRectGetWidth([self bounds]), CGRectGetHeight([self bounds]), paramString];
00186 }
00187 #endif
00188
00189 - (void)mouseDragged:(CPEvent)anEvent
00190 {
00191 [[[self window] platformWindow] _propagateCurrentDOMEvent:YES];
00192 }
00193
00194 - (void)mouseDown:(CPEvent)anEvent
00195 {
00196 [[[self window] platformWindow] _propagateCurrentDOMEvent:YES];
00197 }
00198
00199 - (void)mouseUp:(CPEvent)anEvent
00200 {
00201 [[[self window] platformWindow] _propagateCurrentDOMEvent:YES];
00202 }
00203
00204 @end