22 #include <AknUtils.h> |
22 #include <AknUtils.h> |
23 #include <aknstyluspopupmenu.h> |
23 #include <aknstyluspopupmenu.h> |
24 |
24 |
25 // User includes |
25 // User includes |
26 #include "xnappuiadapter.h" |
26 #include "xnappuiadapter.h" |
|
27 #include "xnviewmanager.h" |
|
28 #include "xnviewdata.h" |
|
29 #include "xnplugindata.h" |
27 #include "xnproperty.h" |
30 #include "xnproperty.h" |
28 #include "xncontroladapter.h" |
31 #include "xncontroladapter.h" |
|
32 #include "xndomnode.h" |
29 #include "xnnodepluginif.h" |
33 #include "xnnodepluginif.h" |
30 #include "xnnode.h" |
34 #include "xnnode.h" |
31 #include "xntype.h" |
35 #include "xntype.h" |
32 #include "xnuiengine.h" |
36 #include "xnuiengine.h" |
33 #include "xneditor.h" |
37 #include "xneditor.h" |
47 |
51 |
48 // ============================ LOCAL FUNCTIONS =============================== |
52 // ============================ LOCAL FUNCTIONS =============================== |
49 |
53 |
50 // ----------------------------------------------------------------------------- |
54 // ----------------------------------------------------------------------------- |
51 // FindWidgetMenuItemL |
55 // FindWidgetMenuItemL |
52 // ----------------------------------------------------------------------------- |
56 // |
53 // |
57 // ----------------------------------------------------------------------------- |
54 CXnNode* FindWidgetMenuItemL( const TDesC8& aSource, |
58 // |
55 CXnNode& aPlugin ) |
59 static CXnNode* FindWidgetMenuItemL( CXnPluginData& aPlugin, |
56 { |
60 const TDesC8& aSource ) |
57 if( aPlugin.Children().Count() == 0 ) |
61 { |
|
62 if ( !aPlugin.Occupied() ) |
58 { |
63 { |
59 return NULL; |
64 return NULL; |
60 } |
65 } |
61 |
66 |
62 // Get <widget> element from the <plugin> element |
67 CXnNode* widget( aPlugin.Node()->LayoutNode() ); |
63 RPointerArray< CXnNode >& children( aPlugin.Children()[0]->Children() ); |
68 |
|
69 RPointerArray< CXnNode >& children( widget->Children() ); |
64 |
70 |
65 for ( TInt i = children.Count() - 1; i >= 0; i-- ) |
71 for ( TInt i = children.Count() - 1; i >= 0; i-- ) |
66 { |
72 { |
67 if ( children[i]->Type()->Type() == KMenuExtension ) |
73 if ( children[i]->Type()->Type() == KMenuExtension ) |
68 { |
74 { |
188 // CXnPopupControlAdapter::TryDisplayingStylusPopupL |
194 // CXnPopupControlAdapter::TryDisplayingStylusPopupL |
189 // ----------------------------------------------------------------------------- |
195 // ----------------------------------------------------------------------------- |
190 // |
196 // |
191 void CXnPopupControlAdapter::TryDisplayingStylusPopupL( CXnNode& aPlugin ) |
197 void CXnPopupControlAdapter::TryDisplayingStylusPopupL( CXnNode& aPlugin ) |
192 { |
198 { |
|
199 CXnViewManager* manager( iUiEngine->ViewManager() ); |
|
200 |
|
201 CXnPluginData& plugin( manager->ActiveViewData().Plugin( &aPlugin ) ); |
|
202 |
193 HideMenuL(); |
203 HideMenuL(); |
194 |
204 |
195 TPointerEvent event( iUiEngine->HitTest().PointerEvent() ); |
205 TPointerEvent event( iUiEngine->HitTest().PointerEvent() ); |
196 |
206 |
197 delete iStylusPopupMenu; |
207 delete iStylusPopupMenu; |
202 |
212 |
203 RPointerArray< CXnNode >& children( iNode->Children() ); |
213 RPointerArray< CXnNode >& children( iNode->Children() ); |
204 |
214 |
205 for ( TInt i = 0; i < children.Count(); i++ ) |
215 for ( TInt i = 0; i < children.Count(); i++ ) |
206 { |
216 { |
207 PopulateMenuL( children[i], aPlugin ); |
217 PopulateMenuL( plugin, children[i] ); |
208 } |
218 } |
209 |
219 |
210 ShowMenuL( aPlugin, event.iParentPosition ); |
220 ShowMenuL( plugin, event.iParentPosition ); |
211 } |
221 } |
212 |
222 |
213 // ----------------------------------------------------------------------------- |
223 // ----------------------------------------------------------------------------- |
214 // CXnPopupControlAdapter::HandleScreenDeviceChangedL |
224 // CXnPopupControlAdapter::HandleScreenDeviceChangedL |
215 // ----------------------------------------------------------------------------- |
225 // ----------------------------------------------------------------------------- |
221 |
231 |
222 // ----------------------------------------------------------------------------- |
232 // ----------------------------------------------------------------------------- |
223 // CXnPopupControlAdapter::PopulateMenuL |
233 // CXnPopupControlAdapter::PopulateMenuL |
224 // ----------------------------------------------------------------------------- |
234 // ----------------------------------------------------------------------------- |
225 // |
235 // |
226 void CXnPopupControlAdapter::PopulateMenuL( CXnNode* aItem, CXnNode& aPlugin ) |
236 void CXnPopupControlAdapter::PopulateMenuL( CXnPluginData& aPlugin, |
|
237 CXnNode* aItem ) |
227 { |
238 { |
228 CXnNode* menuitem( NULL ); |
239 CXnNode* menuitem( NULL ); |
229 CXnProperty* prop( NULL ); |
240 CXnProperty* prop( NULL ); |
230 |
241 |
231 TBool mappedItem( EFalse ); |
242 TBool mappedItem( EFalse ); |
238 CXnProperty* source( aItem->GetPropertyL( KSource ) ); |
249 CXnProperty* source( aItem->GetPropertyL( KSource ) ); |
239 |
250 |
240 if ( source ) |
251 if ( source ) |
241 { |
252 { |
242 CXnNode* widgetItem( |
253 CXnNode* widgetItem( |
243 FindWidgetMenuItemL( source->StringValue(), aPlugin ) ); |
254 FindWidgetMenuItemL( aPlugin, source->StringValue() ) ); |
244 |
255 |
245 if ( widgetItem ) |
256 if ( widgetItem ) |
246 { |
257 { |
247 mappedItem = ETrue; |
258 mappedItem = ETrue; |
248 |
259 |
249 // Get label from the view item |
260 // Get label from the view item |
250 prop = aItem->LabelL(); |
261 prop = aItem->LabelL(); |
|
262 |
251 if ( !prop ) |
263 if ( !prop ) |
252 { |
264 { |
253 // no localization in view, check from widget |
265 // no localization in view, check from widget |
254 prop = widgetItem->LabelL(); |
266 prop = widgetItem->LabelL(); |
255 } |
267 } |
|
268 |
256 // Pretend the original item is this widget item |
269 // Pretend the original item is this widget item |
257 aItem = widgetItem; |
270 aItem = widgetItem; |
258 } |
271 } |
259 } |
272 } |
260 } |
273 } |
266 // By default plain menuitems are always shown |
279 // By default plain menuitems are always shown |
267 menuitem = aItem; |
280 menuitem = aItem; |
268 } |
281 } |
269 else if ( type == KDynMenuItem && iObserver ) |
282 else if ( type == KDynMenuItem && iObserver ) |
270 { |
283 { |
|
284 CXnNode* plugin( aPlugin.Owner()->LayoutNode() ); |
|
285 |
271 // Let observer decide whether dynmenuitem is visible or not |
286 // Let observer decide whether dynmenuitem is visible or not |
272 if ( iObserver->DynInitMenuItemL( aItem->AppIfL(), &aPlugin.AppIfL() ) ) |
287 if ( iObserver->DynInitMenuItemL( aItem->AppIfL(), &plugin->AppIfL() ) ) |
273 { |
288 { |
274 menuitem = aItem; |
289 menuitem = aItem; |
275 } |
290 } |
276 } |
291 } |
277 |
292 |
278 if ( menuitem ) |
293 if ( menuitem ) |
279 { |
294 { |
280 CXnProperty* display = menuitem->DisplayL(); |
295 CXnProperty* display( menuitem->DisplayL() ); |
281 if ( display && display->StringValue() == XnPropertyNames::style::common::display::KNone ) |
296 |
|
297 if ( display && display->StringValue() == |
|
298 XnPropertyNames::style::common::display::KNone ) |
282 { |
299 { |
283 return; |
300 return; |
284 } |
301 } |
285 |
302 |
286 if ( !mappedItem ) |
303 if ( !mappedItem ) |
303 |
320 |
304 // ----------------------------------------------------------------------------- |
321 // ----------------------------------------------------------------------------- |
305 // CXnPopupControlAdapter::ShowMenuL |
322 // CXnPopupControlAdapter::ShowMenuL |
306 // ----------------------------------------------------------------------------- |
323 // ----------------------------------------------------------------------------- |
307 // |
324 // |
308 void CXnPopupControlAdapter::ShowMenuL( CXnNode& aPlugin, TPoint aPosition ) |
325 void CXnPopupControlAdapter::ShowMenuL( CXnPluginData& aPlugin, |
|
326 TPoint aPosition ) |
309 { |
327 { |
310 if ( iMenuItems.Count() > 0 && !iMenuShown ) |
328 if ( iMenuItems.Count() > 0 && !iMenuShown ) |
311 { |
329 { |
312 iUiEngine->AppUiAdapter().HideFocus(); |
330 iUiEngine->AppUiAdapter().HideFocus(); |
313 |
331 |
314 iUiEngine->Editor()->SetTargetPlugin( &aPlugin ); |
332 CXnNode* plugin( aPlugin.Owner()->LayoutNode() ); |
|
333 |
|
334 iUiEngine->Editor()->SetTargetPlugin( plugin ); |
315 |
335 |
316 if ( AknLayoutUtils::LayoutMirrored() ) |
336 if ( AknLayoutUtils::LayoutMirrored() ) |
317 { |
337 { |
318 iStylusPopupMenu->SetPosition( aPosition, |
338 iStylusPopupMenu->SetPosition( aPosition, |
319 CAknStylusPopUpMenu::EPositionTypeRightBottom ); |
339 CAknStylusPopUpMenu::EPositionTypeRightBottom ); |
320 } |
340 } |
321 else |
341 else |
322 { |
342 { |
323 iStylusPopupMenu->SetPosition( aPosition, |
343 iStylusPopupMenu->SetPosition( aPosition, |
324 CAknStylusPopUpMenu::EPositionTypeLeftBottom ); |
344 CAknStylusPopUpMenu::EPositionTypeLeftBottom ); |
325 } |
345 } |
326 |
346 |
327 iStylusPopupMenu->ShowMenu(); |
347 iStylusPopupMenu->ShowMenu(); |
328 iMenuShown = ETrue; |
348 iMenuShown = ETrue; |
329 } |
349 } |