22 #include <eikamnt.h> |
22 #include <eikamnt.h> |
23 |
23 |
24 #include "MenuItem.h" |
24 #include "MenuItem.h" |
25 #include "MenuItemFuncs.h" |
25 #include "MenuItemFuncs.h" |
26 #include "MenuItemCallbacks.h" |
26 #include "MenuItemCallbacks.h" |
|
27 #include "WidgetJSObjectProtector.h" |
27 |
28 |
28 using namespace KJS; |
29 using namespace KJS; |
29 |
30 |
30 // ---------------------------------------------------------------------------- |
31 // ---------------------------------------------------------------------------- |
31 // JSMenuItemConstructor::JSMenuItemConstructor |
32 // JSMenuItemConstructor::JSMenuItemConstructor |
32 // Default constructor |
33 // Default constructor |
33 // |
34 // |
34 // |
35 // |
35 // ---------------------------------------------------------------------------- |
36 // ---------------------------------------------------------------------------- |
36 JSMenuItemConstructor::JSMenuItemConstructor(MJSMenuItemCallbacks* callbacks) |
37 JSMenuItemConstructor::JSMenuItemConstructor(MJSMenuItemCallbacks* callbacks, MJSObjectProtector* protector) |
37 : JSObject(), |
38 : JSObject(), |
38 m_callbacks(callbacks), |
39 d(new MenuItemConstructorPrivate(callbacks, protector, 0)) |
39 m_internalId(0) |
40 { |
40 { |
41 } |
41 } |
42 |
42 |
43 JSMenuItemConstructor::~JSMenuItemConstructor() |
|
44 { |
|
45 delete d; |
|
46 } |
43 |
47 |
44 // ---------------------------------------------------------------------------- |
48 // ---------------------------------------------------------------------------- |
45 // JSMenuItemConstructor::implementsConstruct |
49 // JSMenuItemConstructor::implementsConstruct |
46 // returns true if this object implements the construct() method, otherwise |
50 // returns true if this object implements the construct() method, otherwise |
47 // returns false |
51 // returns false |
81 int textlen = (text.size() > CEikAutoMenuTitle::ENominalTextLength) ? |
85 int textlen = (text.size() > CEikAutoMenuTitle::ENominalTextLength) ? |
82 CEikAutoMenuTitle::ENominalTextLength : text.size(); |
86 CEikAutoMenuTitle::ENominalTextLength : text.size(); |
83 |
87 |
84 TPtrC tptrc((const unsigned short*)(text.data()), textlen); |
88 TPtrC tptrc((const unsigned short*)(text.data()), textlen); |
85 |
89 |
86 JSMenuItem* mi = new JSMenuItem(exec, m_callbacks, tptrc, cmdId, m_internalId ); |
90 JSMenuItem* mi = new JSMenuItem(exec, d->m_callbacks, d->m_protector, tptrc, cmdId, d->m_internalId, 0); |
87 KJS::Collector::protect(mi); |
91 |
88 m_callbacks->createOptionsMenuItem( tptrc, cmdId, m_internalId++, (void*) mi ); |
92 d->m_callbacks->createOptionsMenuItem( tptrc, cmdId, d->m_internalId++, (void*) mi ); |
89 |
93 |
90 return static_cast<KJS::JSObject*>(mi); |
94 return static_cast<KJS::JSObject*>(mi); |
91 } |
95 } |
92 } |
96 } |
93 |
97 |
117 // |
121 // |
118 // ---------------------------------------------------------------------------- |
122 // ---------------------------------------------------------------------------- |
119 JSMenuItem::JSMenuItem( |
123 JSMenuItem::JSMenuItem( |
120 ExecState* exec, |
124 ExecState* exec, |
121 MJSMenuItemCallbacks* callbacks, |
125 MJSMenuItemCallbacks* callbacks, |
|
126 MJSObjectProtector* protector, |
122 TDesC& text, |
127 TDesC& text, |
123 int cmdId, |
128 int cmdId, |
124 int internalId, |
129 int internalId, |
125 WidgetEventHandler* onSelectCallback ) |
130 WidgetEventHandler* onSelectCallback ) |
126 : JSObject(exec->lexicalInterpreter()->builtinObjectPrototype()), |
131 : JSObject(exec->lexicalInterpreter()->builtinObjectPrototype()), |
127 d(new MenuItemPrivate(callbacks,cmdId,internalId,onSelectCallback)) |
132 d(new MenuItemPrivate(callbacks, protector, cmdId, internalId, onSelectCallback)) |
128 { |
133 { |
|
134 d->m_protector->Protect(this); |
129 } |
135 } |
130 |
136 |
131 // ---------------------------------------------------------------------------- |
137 // ---------------------------------------------------------------------------- |
132 // JSMenuItem::~JSMenuItem |
138 // JSMenuItem::~JSMenuItem |
133 // Destructor |
139 // Destructor |
197 // |
203 // |
198 // |
204 // |
199 // ---------------------------------------------------------------------------- |
205 // ---------------------------------------------------------------------------- |
200 void JSMenuItem::DeleteMenuItem() |
206 void JSMenuItem::DeleteMenuItem() |
201 { |
207 { |
202 d->m_callbacks->deleteMenuItem( d->m_internalId ); |
208 d->m_callbacks->deleteMenuItem( d->m_internalId ); |
|
209 d->m_protector->Unprotect(this); |
203 } |
210 } |
204 |
211 |
205 // ---------------------------------------------------------------------------- |
212 // ---------------------------------------------------------------------------- |
206 // JSMenuItem::toString |
213 // JSMenuItem::toString |
207 // Returns string representation of the object |
214 // Returns string representation of the object |
240 // changes the properties of the Menu element |
247 // changes the properties of the Menu element |
241 switch ( entry->value ) { |
248 switch ( entry->value ) { |
242 case OnSelect: { |
249 case OnSelect: { |
243 delete d->m_onSelectCallback; |
250 delete d->m_onSelectCallback; |
244 d->m_onSelectCallback = NULL; |
251 d->m_onSelectCallback = NULL; |
245 d->m_onSelectCallback = new WidgetEventHandler ( value, exec->lexicalInterpreter()->globalExec() ); |
252 d->m_onSelectCallback = new WidgetEventHandler(value, exec->lexicalInterpreter()->globalExec(), d->m_protector); |
246 d->m_callbacks->setMenuItemObserver( d->m_internalId, d->m_onSelectCallback ); |
253 d->m_callbacks->setMenuItemObserver( d->m_internalId, d->m_onSelectCallback ); |
247 break; |
254 break; |
248 } |
255 } |
249 default: |
256 default: |
250 break; |
257 break; |