API  0.9.6
 All Classes Files Functions Variables Macros Groups Pages
CPFlashView.j
Go to the documentation of this file.
1 /*
2  * CPFlashView.j
3  * AppKit
4  *
5  * Created by Francisco Tolmasky.
6  * Copyright 2008, 280 North, Inc.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 
24 
25 var IEFlashCLSID = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
26 
30 @implementation CPFlashView : CPView
31 {
32  CPFlashMovie _flashMovie;
33 
34  CPDictionary _params;
35  CPDictionary _paramElements;
36 #if PLATFORM(DOM)
37  DOMElement _DOMParamElement;
38  DOMElement _DOMObjectElement;
39  DOMElement _DOMInnerObjectElement;
40 #endif
41 }
42 
43 - (id)initWithFrame:(CGRect)aFrame
44 {
45  self = [super initWithFrame:aFrame];
46 
47  if (self)
48  {
49 #if PLATFORM(DOM)
51  {
52  _DOMObjectElement = document.createElement(@"object");
53  _DOMObjectElement.width = @"100%";
54  _DOMObjectElement.height = @"100%";
55  _DOMObjectElement.style.top = @"0px";
56  _DOMObjectElement.style.left = @"0px";
57  _DOMObjectElement.type = @"application/x-shockwave-flash";
58  _DOMObjectElement.setAttribute(@"classid", IEFlashCLSID);
59 
60  _DOMParamElement = document.createElement(@"param");
61  _DOMParamElement.name = @"movie";
62 
63  _DOMInnerObjectElement = document.createElement(@"object");
64  _DOMInnerObjectElement.width = @"100%";
65  _DOMInnerObjectElement.height = @"100%";
66 
67  _DOMObjectElement.appendChild(_DOMParamElement);
68  _DOMObjectElement.appendChild(_DOMInnerObjectElement);
69 
70  _DOMElement.appendChild(_DOMObjectElement);
71  }
72  else
73  [self _rebuildIEObjects];
74 #endif
75  }
76 
77  return self;
78 }
79 
80 - (void)setFlashMovie:(CPFlashMovie)aFlashMovie
81 {
82  if (_flashMovie == aFlashMovie)
83  return;
84 
85  _flashMovie = aFlashMovie;
86 #if PLATFORM(DOM)
88  {
89  _DOMParamElement.value = [aFlashMovie filename];
90  _DOMInnerObjectElement.data = [aFlashMovie filename];
91  }
92  else
93  [self _rebuildIEObjects];
94 #endif
95 }
96 
97 - (CPFlashMovie)flashMovie
98 {
99  return _flashMovie;
100 }
101 
102 - (void)setFlashVars:(CPDictionary)aDictionary
103 {
104  var varString = @"",
105  enumerator = [aDictionary keyEnumerator],
106  key;
107 
108  while ((key = [enumerator nextObject]) !== nil)
109  varString = [varString stringByAppendingFormat:@"&%@=%@", key, [aDictionary objectForKey:key]];
110 
111  if (!_params)
112  _params = [CPDictionary dictionary];
113 
114  [_params setObject:varString forKey:@"flashvars"];
115  [self setParameters:_params];
116 }
117 
118 - (CPDictionary)flashVars
119 {
120  return [_params objectForKey:@"flashvars"];
121 }
122 
123 - (void)setParameters:(CPDictionary)aDictionary
124 {
125 #if PLATFORM(DOM)
126  if (_paramElements && !CPBrowserIsEngine(CPInternetExplorerBrowserEngine))
127  {
128  var elements = [_paramElements allValues],
129  count = [elements count];
130 
131  for (var i = 0; i < count; i++)
132  _DOMObjectElement.removeChild([elements objectAtIndex:i]);
133  }
134 #endif
135  if (!_params)
136  _params = aDictionary;
137  else
138  [_params addEntriesFromDictionary:aDictionary];
139 #if PLATFORM(DOM)
141  {
142  _paramElements = [CPDictionary dictionary];
143 
144  var enumerator = [_params keyEnumerator],
145  key;
146 
147  while (_DOMObjectElement && (key = [enumerator nextObject]) !== nil)
148  {
149  var param = document.createElement(@"param");
150  param.name = key;
151  param.value = [_params objectForKey:key];
152 
153  _DOMObjectElement.appendChild(param);
154 
155  [_paramElements setObject:param forKey:key];
156  }
157  }
158  else
159  [self _rebuildIEObjects];
160 #endif
161 }
162 
163 - (CPDictionary)parameters
164 {
165  return _params;
166 }
167 
168 #if PLATFORM(DOM)
169 - (void)_rebuildIEObjects
170 {
171  _DOMElement.innerHTML = @"";
172  if (![_flashMovie filename])
173  return;
174 
175  var paramString = [CPString stringWithFormat:@"<param name='movie' value='%@' />", [_flashMovie filename]],
176  paramEnumerator = [_params keyEnumerator],
177  key;
178 
179  while ((key = [paramEnumerator nextObject]) !== nil)
180  paramString = [paramString stringByAppendingFormat:@"<param name='%@' value='%@' />", key, [_params objectForKey:key]];
181 
182  _DOMObjectElement = document.createElement(@"object");
183  _DOMElement.appendChild(_DOMObjectElement);
184 
185  _DOMObjectElement.outerHTML = [CPString stringWithFormat:@"<object classid=%@ width=%@ height=%@>%@</object>", IEFlashCLSID, CGRectGetWidth([self bounds]), CGRectGetHeight([self bounds]), paramString];
186 }
187 #endif
188 
189 - (void)mouseDragged:(CPEvent)anEvent
190 {
191  [[[self window] platformWindow] _propagateCurrentDOMEvent:YES];
192 }
193 
194 - (void)mouseDown:(CPEvent)anEvent
195 {
196  [[[self window] platformWindow] _propagateCurrentDOMEvent:YES];
197 }
198 
199 - (void)mouseUp:(CPEvent)anEvent
200 {
201  [[[self window] platformWindow] _propagateCurrentDOMEvent:YES];
202 }
203 
204 @end