idlehomescreen/xmluirendering/uiengine/src/xnpopupcontroladapter.cpp
branchRCL_3
changeset 9 f966699dea19
parent 0 f72a12da539e
child 15 ff572dfe6d86
equal deleted inserted replaced
5:c743ef5928ba 9:f966699dea19
    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         }