uifw/EikStd/coctlsrc/aknitemactionmenuregister.cpp
changeset 0 2f259fa3e83a
child 5 aabf2c525e0f
equal deleted inserted replaced
-1:000000000000 0:2f259fa3e83a
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: Item action menu register.
       
    15 *
       
    16 */
       
    17 #include <aknappui.h>
       
    18 #include <aknview.h>
       
    19 #include <aknViewAppUi.h>
       
    20 #include <aknitemactionmenu.h>
       
    21 #include <eikdialg.h>
       
    22 #include <eikmenub.h>
       
    23 
       
    24 #include "aknitemactionmenuregister.h"
       
    25 #include "aknitemactionmenuregisterarray.h"
       
    26 
       
    27 const TUid KAknItemActionMenuRegister = { 0x20028760 };
       
    28 const TInt KRegisterDestructionPriority( -1 );
       
    29 
       
    30 // ---------------------------------------------------------------------------
       
    31 // AknItemActionMenuRegister::SetConstructingMenuBarOwnerL
       
    32 // ---------------------------------------------------------------------------
       
    33 //
       
    34 EXPORT_C void AknItemActionMenuRegister::SetConstructingMenuBarOwnerL(
       
    35         MObjectProvider* aMenuBarOwner )
       
    36     {
       
    37     if ( AppUiSingleClickCompatible() )
       
    38         {
       
    39         AknItemActionMenuRegister* instance( Instance() );
       
    40         if ( instance )
       
    41             {
       
    42             instance->iMenuBarOwner = aMenuBarOwner;
       
    43             }
       
    44         }
       
    45     }
       
    46 
       
    47 
       
    48 // ---------------------------------------------------------------------------
       
    49 // AknItemActionMenuRegister::SetOverridingMenuBarOwnerL
       
    50 // ---------------------------------------------------------------------------
       
    51 //
       
    52 EXPORT_C void AknItemActionMenuRegister::SetOverridingMenuBarOwnerL(
       
    53         MObjectProvider* aMenuBarOwner, TUint /*aFlags*/ )
       
    54     {
       
    55     if ( AppUiSingleClickCompatible() )
       
    56         {
       
    57         AknItemActionMenuRegister* instance( Instance() );
       
    58         if ( instance )
       
    59             {
       
    60             instance->iOverridingMenuBarOwner = aMenuBarOwner;
       
    61             }
       
    62         }
       
    63     }
       
    64 
       
    65 
       
    66 // ---------------------------------------------------------------------------
       
    67 // AknItemActionMenuRegister::RegisterCollectionL
       
    68 // ---------------------------------------------------------------------------
       
    69 //
       
    70 CAknItemActionMenu* AknItemActionMenuRegister::RegisterCollectionL(
       
    71         MAknCollection& aCollectionState )
       
    72     {
       
    73     CAknItemActionMenu* menu( NULL );
       
    74     if ( AppUiSingleClickCompatible() )
       
    75         {
       
    76         AknItemActionMenuRegister* instance( Instance() );
       
    77         if ( instance )
       
    78             {
       
    79             menu = instance->DoRegisterCollectionL( aCollectionState );
       
    80             }
       
    81         }
       
    82     return menu;
       
    83     }
       
    84 
       
    85 
       
    86 // ---------------------------------------------------------------------------
       
    87 // AknItemActionMenuRegister::RegisterMenuBarL
       
    88 // ---------------------------------------------------------------------------
       
    89 //
       
    90 void AknItemActionMenuRegister::RegisterMenuBarL(
       
    91         CEikMenuBar& aMenuBar )
       
    92     {
       
    93     if ( AppUiSingleClickCompatible() )
       
    94         {
       
    95         AknItemActionMenuRegister* instance( Instance() );
       
    96         if ( instance )
       
    97             {
       
    98             instance->DoRegisterMenuBarL( aMenuBar );
       
    99             }
       
   100         }
       
   101     }
       
   102 
       
   103 
       
   104 // ---------------------------------------------------------------------------
       
   105 // AknItemActionMenuRegister::UnregisterMenuBar
       
   106 // ---------------------------------------------------------------------------
       
   107 //
       
   108 void AknItemActionMenuRegister::UnregisterMenuBar(
       
   109         CEikMenuBar& aMenuBar )
       
   110     {
       
   111     if ( AppUiSingleClickCompatible() )
       
   112         {
       
   113         AknItemActionMenuRegister* instance( Instance() );
       
   114         if ( instance )
       
   115             {
       
   116             instance->DoUnregisterMenuBar( aMenuBar );
       
   117             }
       
   118         }
       
   119     }
       
   120 
       
   121 
       
   122 // ---------------------------------------------------------------------------
       
   123 // AknItemActionMenuRegister::RegisterItemActionMenuL
       
   124 // ---------------------------------------------------------------------------
       
   125 //
       
   126 void AknItemActionMenuRegister::RegisterItemActionMenuL(
       
   127         CAknItemActionMenu& aItemActionMenu )
       
   128     {
       
   129     AknItemActionMenuRegister* instance( Instance() );
       
   130     if ( instance )
       
   131         {
       
   132         instance->DoRegisterItemActionMenuL( aItemActionMenu );
       
   133         }
       
   134     }
       
   135 
       
   136 
       
   137 // ---------------------------------------------------------------------------
       
   138 // AknItemActionMenuRegister::UnregisterItemActionMenu
       
   139 // ---------------------------------------------------------------------------
       
   140 //
       
   141 void AknItemActionMenuRegister::UnregisterItemActionMenu(
       
   142         CAknItemActionMenu& aItemActionMenu )
       
   143     {
       
   144     if ( AppUiSingleClickCompatible() )
       
   145         {
       
   146         AknItemActionMenuRegister* instance( Instance() );
       
   147         if ( instance )
       
   148             {
       
   149             instance->DoUnregisterItemActionMenu( aItemActionMenu );
       
   150             }
       
   151         }
       
   152     }
       
   153 
       
   154 
       
   155 // ---------------------------------------------------------------------------
       
   156 // AknItemActionMenuRegister::RegisterCollectionObserverL
       
   157 // ---------------------------------------------------------------------------
       
   158 //
       
   159 void AknItemActionMenuRegister::RegisterCollectionObserverL(
       
   160         MAknCollectionObserver& aObserver )
       
   161     {
       
   162     if ( AppUiSingleClickCompatible() )
       
   163         {
       
   164         AknItemActionMenuRegister* instance( Instance() );
       
   165         if ( instance )
       
   166             {
       
   167             instance->DoRegisterCollectionObserverL( aObserver );
       
   168             }
       
   169         }
       
   170     }
       
   171 
       
   172 
       
   173 // ---------------------------------------------------------------------------
       
   174 // AknItemActionMenuRegister::UnregisterCollectionObserver
       
   175 // ---------------------------------------------------------------------------
       
   176 //
       
   177 void AknItemActionMenuRegister::UnregisterCollectionObserver(
       
   178         MAknCollectionObserver& aObserver )
       
   179     {
       
   180     if ( AppUiSingleClickCompatible() )
       
   181         {
       
   182         AknItemActionMenuRegister* instance( Instance() );
       
   183         if ( instance )
       
   184             {
       
   185             instance->DoUnregisterCollectionObserver( aObserver );
       
   186             }
       
   187         }
       
   188     }
       
   189 
       
   190 
       
   191 // ---------------------------------------------------------------------------
       
   192 // AknItemActionMenuRegister::~AknItemActionMenuRegister
       
   193 // ---------------------------------------------------------------------------
       
   194 //
       
   195 AknItemActionMenuRegister::~AknItemActionMenuRegister()
       
   196     {
       
   197     for ( TInt i = 0; i < iUnregisteredMenus.Count(); i++ )
       
   198         {
       
   199         TAknUnregisteredMenuData& data( iUnregisteredMenus[ i ] );
       
   200         delete data.iMenu;
       
   201         data.iMenu = NULL;
       
   202         }
       
   203     iUnregisteredMenus.Close();
       
   204     iUnregisteredObservers.Close();
       
   205     delete iRegisterArray;
       
   206     }
       
   207 
       
   208 
       
   209 // ---------------------------------------------------------------------------
       
   210 // AknItemActionMenuRegister::AknItemActionMenuRegister
       
   211 // ---------------------------------------------------------------------------
       
   212 //
       
   213 AknItemActionMenuRegister::AknItemActionMenuRegister()
       
   214     : CCoeStatic( KAknItemActionMenuRegister, KRegisterDestructionPriority ),
       
   215     iMenuBarOwner( NULL )
       
   216     {
       
   217     }
       
   218 
       
   219 
       
   220 // ---------------------------------------------------------------------------
       
   221 // AknItemActionMenuRegister::ConstructL
       
   222 // ---------------------------------------------------------------------------
       
   223 //
       
   224 void AknItemActionMenuRegister::ConstructL()
       
   225     {
       
   226     iRegisterArray = CAknItemActionMenuRegisterArray::NewL();
       
   227     }
       
   228 
       
   229 
       
   230 // ---------------------------------------------------------------------------
       
   231 // AknItemActionMenuRegister::AppUiSingleClickCompatible
       
   232 // ---------------------------------------------------------------------------
       
   233 //
       
   234 TBool AknItemActionMenuRegister::AppUiSingleClickCompatible()
       
   235     {
       
   236     CAknAppUi* appUi =
       
   237         static_cast<CAknAppUi*>( CEikonEnv::Static()->AppUi() );
       
   238     return appUi->IsSingleClickCompatible();
       
   239     }
       
   240 
       
   241 // ---------------------------------------------------------------------------
       
   242 // AknItemActionMenuRegister::Instance
       
   243 // ---------------------------------------------------------------------------
       
   244 //
       
   245 AknItemActionMenuRegister* AknItemActionMenuRegister::Instance()
       
   246     {
       
   247     AknItemActionMenuRegister* instance =
       
   248         static_cast<AknItemActionMenuRegister*>(
       
   249                 CCoeEnv::Static( KAknItemActionMenuRegister ) );
       
   250     if ( !instance )
       
   251         {
       
   252         TRAP_IGNORE( instance = CreateInstanceL() ); 
       
   253         }
       
   254     return instance;
       
   255     }
       
   256 
       
   257 
       
   258 // ---------------------------------------------------------------------------
       
   259 // AknItemActionMenuRegister::DoRegisterCollectionL
       
   260 // ---------------------------------------------------------------------------
       
   261 //
       
   262 CAknItemActionMenu* AknItemActionMenuRegister::DoRegisterCollectionL(
       
   263         MAknCollection& aCollectionState )
       
   264     {
       
   265     CAknItemActionMenu* menu( NULL );
       
   266     CEikMenuBar* menuBar = FindCurrentMenuBarL();
       
   267     menu = RegisterStateToItemActionMenuL( menuBar, aCollectionState );
       
   268     return menu;
       
   269     }
       
   270 
       
   271 
       
   272 // ---------------------------------------------------------------------------
       
   273 // AknItemActionMenuRegister::DoRegisterMenuBarL
       
   274 // ---------------------------------------------------------------------------
       
   275 //
       
   276 void AknItemActionMenuRegister::DoRegisterMenuBarL( CEikMenuBar& aMenuBar )
       
   277     {
       
   278     CAknItemActionMenu* menu( NULL );
       
   279     for ( TInt i = 0; i < iUnregisteredMenus.Count(); i++ )
       
   280         {
       
   281         TAknUnregisteredMenuData& data( iUnregisteredMenus[ i ] );
       
   282         CEikMenuBar* ownerMenubar( NULL );
       
   283         data.iOwner->MopGetObjectNoChaining( ownerMenubar );
       
   284         if ( ownerMenubar == &aMenuBar )
       
   285             {
       
   286             menu = data.iMenu;
       
   287             if ( menu )
       
   288                 {
       
   289                 AddRegisterEntryL( aMenuBar, *menu );
       
   290                 }
       
   291             iUnregisteredMenus.Remove( i );
       
   292             break;
       
   293             }
       
   294         }
       
   295     }
       
   296 
       
   297 
       
   298 // ---------------------------------------------------------------------------
       
   299 // AknItemActionMenuRegister::DoUnregisterMenuBar
       
   300 // ---------------------------------------------------------------------------
       
   301 //
       
   302 void AknItemActionMenuRegister::DoUnregisterMenuBar( CEikMenuBar& aMenuBar )
       
   303     {
       
   304     iRegisterArray->UnregisterMenuBar( aMenuBar );
       
   305     }
       
   306 
       
   307 
       
   308 // ---------------------------------------------------------------------------
       
   309 // AknItemActionMenuRegister::DoRegisterItemActionMenuL
       
   310 // ---------------------------------------------------------------------------
       
   311 //
       
   312 void AknItemActionMenuRegister::DoRegisterItemActionMenuL(
       
   313         CAknItemActionMenu& aItemActionMenu )
       
   314     {
       
   315     CEikMenuBar* menuBar( NULL );
       
   316     for ( TInt i = 0; i < iUnregisteredMenus.Count(); i++ )
       
   317         {
       
   318         TAknUnregisteredMenuData& data( iUnregisteredMenus[ i ] );
       
   319         if ( data.iMenu == &aItemActionMenu )
       
   320             {
       
   321             data.iOwner->MopGetObjectNoChaining( menuBar );
       
   322             if ( menuBar )
       
   323                 {
       
   324                 AddRegisterEntryL( *menuBar, aItemActionMenu );
       
   325                 }
       
   326             iUnregisteredMenus.Remove( i );
       
   327             break;
       
   328             }
       
   329         }
       
   330     }
       
   331 
       
   332 
       
   333 // ---------------------------------------------------------------------------
       
   334 // AknItemActionMenuRegister::DoUnregisterItemActionMenu
       
   335 // ---------------------------------------------------------------------------
       
   336 //
       
   337 void AknItemActionMenuRegister::DoUnregisterItemActionMenu(
       
   338         CAknItemActionMenu& aItemActionMenu )
       
   339     {
       
   340     iRegisterArray->UnregisterItemActionMenu( aItemActionMenu );
       
   341 
       
   342     for ( TInt i = 0; i < iUnregisteredMenus.Count(); i++ )
       
   343         {
       
   344         TAknUnregisteredMenuData& data( iUnregisteredMenus[ i ] );
       
   345         if ( data.iMenu == &aItemActionMenu )
       
   346             {
       
   347             delete data.iMenu;
       
   348             iUnregisteredMenus.Remove( i ); 
       
   349             break; 
       
   350             }
       
   351         }
       
   352     }
       
   353 
       
   354 
       
   355 // ---------------------------------------------------------------------------
       
   356 // AknItemActionMenuRegister::DoRegisterCollectionObserverL
       
   357 // ---------------------------------------------------------------------------
       
   358 //
       
   359 void AknItemActionMenuRegister::DoRegisterCollectionObserverL(
       
   360         MAknCollectionObserver& aObserver )
       
   361     {
       
   362     CEikMenuBar* menuBar = FindCurrentMenuBarL();
       
   363     if ( !menuBar || !iRegisterArray->RegisterCollectionObserverL(
       
   364             *menuBar, aObserver ) )
       
   365         {
       
   366         TAknUnregisteredObserverData newData( menuBar, aObserver );
       
   367         iUnregisteredObservers.AppendL( newData );
       
   368         }
       
   369     }
       
   370 
       
   371 
       
   372 // ---------------------------------------------------------------------------
       
   373 // AknItemActionMenuRegister::DoUnregisterCollectionObserver
       
   374 // ---------------------------------------------------------------------------
       
   375 //
       
   376 void AknItemActionMenuRegister::DoUnregisterCollectionObserver(
       
   377         MAknCollectionObserver& aObserver )
       
   378     {
       
   379     iRegisterArray->UnregisterCollectionObserver( aObserver );
       
   380 
       
   381     for ( TInt i = 0; i < iUnregisteredObservers.Count(); i++ )
       
   382         {
       
   383         TAknUnregisteredObserverData& data( iUnregisteredObservers[ i ] );
       
   384         if ( &data.iObserver == &aObserver )
       
   385             {
       
   386             iUnregisteredObservers.Remove( i );
       
   387             return;
       
   388             }
       
   389         }
       
   390 
       
   391     for ( TInt i = 0; i < iUnregisteredMenus.Count(); i++ )
       
   392         {
       
   393         TAknUnregisteredMenuData& data( iUnregisteredMenus[ i ] );
       
   394         data.iMenu->RemoveCollectionObserver( aObserver ); 
       
   395         }
       
   396     }
       
   397 
       
   398 
       
   399 // ---------------------------------------------------------------------------
       
   400 // AknItemActionMenuRegister::DialogMenuBar
       
   401 // ---------------------------------------------------------------------------
       
   402 //
       
   403 CEikMenuBar* AknItemActionMenuRegister::DialogMenuBar( CAknAppUi* aAppUi )
       
   404     {
       
   405     CEikMenuBar* menuBar( NULL );
       
   406     // Check if there is an active dialog and fetch its menubar
       
   407     if ( aAppUi->IsDisplayingMenuOrDialog() )
       
   408         {
       
   409         CCoeControl* ctrl = aAppUi->TopFocusedControl();
       
   410         if ( ctrl )
       
   411             {
       
   412             CEikDialog* dialog = ctrl->MopGetObjectNoChaining( dialog );
       
   413             if ( dialog )
       
   414                 {
       
   415                 dialog->MopGetObject( menuBar );
       
   416                 }
       
   417             }
       
   418         }
       
   419     return menuBar;
       
   420     }
       
   421 
       
   422 
       
   423 // ---------------------------------------------------------------------------
       
   424 // AknItemActionMenuRegister::ViewMenuBar
       
   425 // ---------------------------------------------------------------------------
       
   426 //
       
   427 CEikMenuBar* AknItemActionMenuRegister::ViewMenuBar( CAknAppUi* aAppUi )
       
   428     {
       
   429     CEikMenuBar* menuBar( NULL );
       
   430     CAknViewAppUi* appUi( static_cast<CAknViewAppUi*>( aAppUi ) );
       
   431 
       
   432     // Check if there is an active view
       
   433     TVwsViewId uid;
       
   434     if ( appUi->GetActiveViewId( uid ) == KErrNone )
       
   435         {
       
   436         if ( uid.iAppUid != uid.iViewUid )
       
   437             {
       
   438             CAknView* view = appUi->View( uid.iViewUid );
       
   439             if ( view )
       
   440                 {
       
   441                 menuBar = view->MenuBar();
       
   442                 }
       
   443             }
       
   444         }
       
   445     return menuBar;
       
   446     }
       
   447 
       
   448 
       
   449 // ---------------------------------------------------------------------------
       
   450 // AknItemActionMenuRegister::ConstructingObjectMenuBar
       
   451 // ---------------------------------------------------------------------------
       
   452 //
       
   453 CEikMenuBar* AknItemActionMenuRegister::ConstructingObjectMenuBar()
       
   454     {
       
   455     CEikMenuBar* menuBar( NULL );
       
   456     if ( iMenuBarOwner )
       
   457         {
       
   458         iMenuBarOwner->MopGetObjectNoChaining( menuBar );
       
   459         }
       
   460     return menuBar;
       
   461     }
       
   462 
       
   463 
       
   464 // ---------------------------------------------------------------------------
       
   465 // AknItemActionMenuRegister::OverridingObjectMenuBar
       
   466 // ---------------------------------------------------------------------------
       
   467 //
       
   468 CEikMenuBar* AknItemActionMenuRegister::OverridingObjectMenuBar()
       
   469     {
       
   470     CEikMenuBar* menuBar( NULL );
       
   471     if ( iOverridingMenuBarOwner )
       
   472         {
       
   473         iOverridingMenuBarOwner->MopGetObjectNoChaining( menuBar );
       
   474         }
       
   475     return menuBar;
       
   476     }
       
   477 
       
   478 
       
   479 // ---------------------------------------------------------------------------
       
   480 // AknItemActionMenuRegister::RegisterStateToItemActionMenuL
       
   481 // ---------------------------------------------------------------------------
       
   482 //
       
   483 CAknItemActionMenu* AknItemActionMenuRegister::RegisterStateToItemActionMenuL(
       
   484         CEikMenuBar* aMenuBar,
       
   485         MAknCollection& aCollectionState )
       
   486     {
       
   487     CAknItemActionMenu* menu( NULL );
       
   488 
       
   489     // View / dialog / appUi menubar was found
       
   490     if ( aMenuBar )
       
   491         {
       
   492         menu = aMenuBar->ItemActionMenu();
       
   493         // menubar does not have item action menu -> create one
       
   494         if ( !menu )
       
   495             {
       
   496             menu = CAknItemActionMenu::NewLC( aCollectionState );
       
   497             AddRegisterEntryL( *aMenuBar, *menu );
       
   498             CleanupStack::Pop( menu );
       
   499             }
       
   500         // add new collection state to existing item action menu
       
   501         else
       
   502             {
       
   503             menu->AddCollectionStateL( aCollectionState );
       
   504             }
       
   505         }
       
   506     // View / dialog / appUi menubar was not found
       
   507     // Constructing menu bar owner is existing
       
   508     else if ( iMenuBarOwner )
       
   509         {
       
   510         // Go through unregistered menus
       
   511         TBool viewRegistered( EFalse );
       
   512         for ( TInt i = 0; i < iUnregisteredMenus.Count(); i++ )
       
   513             {
       
   514             TAknUnregisteredMenuData& data( iUnregisteredMenus[ i ] );
       
   515             // This view already has unregistered menu
       
   516             // Add collection state to it
       
   517             if ( data.iOwner == iMenuBarOwner )
       
   518                 {
       
   519                 viewRegistered = ETrue;
       
   520                 data.iMenu->AddCollectionStateL( aCollectionState );
       
   521                 menu = data.iMenu;
       
   522                 break;
       
   523                 }
       
   524             }
       
   525         // No unregistered menu found -> create one and add to list
       
   526         if ( !viewRegistered )
       
   527             {
       
   528             menu = CAknItemActionMenu::NewL( aCollectionState );
       
   529             TAknUnregisteredMenuData newData;
       
   530             newData.iOwner = iMenuBarOwner;
       
   531             newData.iMenu = menu;
       
   532             iUnregisteredMenus.AppendL( newData );
       
   533             }
       
   534         }
       
   535     if ( menu )
       
   536         {
       
   537         // Set observers with menubar to menu
       
   538         AddObserversToItemActionMenuL( aMenuBar, *menu );
       
   539         }
       
   540     return menu;
       
   541     }
       
   542 
       
   543 
       
   544 // ---------------------------------------------------------------------------
       
   545 // AknItemActionMenuRegister::FindCurrentMenuBarL
       
   546 // ---------------------------------------------------------------------------
       
   547 //
       
   548 CEikMenuBar* AknItemActionMenuRegister::FindCurrentMenuBarL()
       
   549     {
       
   550     CEikonEnv* eikonEnv( CEikonEnv::Static() );
       
   551     CAknAppUi* appUi( static_cast<CAknAppUi*>( eikonEnv->AppUi() ) );
       
   552     TBool isConstructingDialog( EFalse );
       
   553     CEikMenuBar* menuBar( NULL );
       
   554     
       
   555     // If overriding menubar owner is set then it's the one to obey. If the
       
   556     // overriding menubar owner doesn't supply a menubar object then there
       
   557     // isn't proper one available.
       
   558     if ( iOverridingMenuBarOwner )
       
   559         {
       
   560         return OverridingObjectMenuBar();
       
   561         }
       
   562     
       
   563     // Check if there is existing constructing dialog
       
   564     if ( iMenuBarOwner )
       
   565         {
       
   566         CEikDialog* dialog( NULL );
       
   567         iMenuBarOwner->MopGetObjectNoChaining( dialog );
       
   568         if ( dialog )
       
   569             {
       
   570             isConstructingDialog = ETrue;
       
   571             }
       
   572         }
       
   573     // No constructing dialog
       
   574     if ( !isConstructingDialog )
       
   575         {
       
   576         // Fetch pointer to dialog that is currently displayed
       
   577         menuBar = DialogMenuBar( appUi );
       
   578         // No dialog - pointer to active view menu bar
       
   579         if ( !menuBar )
       
   580             {
       
   581             menuBar = ViewMenuBar( appUi );
       
   582             }
       
   583         }
       
   584     
       
   585     // Fetch pointer to constructing object menu bar
       
   586     if ( !menuBar )
       
   587         {
       
   588         menuBar = ConstructingObjectMenuBar();
       
   589         }
       
   590 
       
   591     // Finally, if no luck with others, fetch pointer to appUi menu bar.
       
   592     if ( !menuBar )
       
   593         {
       
   594         menuBar = eikonEnv->AppUiFactory()->MenuBar();
       
   595         }
       
   596     return menuBar;
       
   597     }
       
   598 
       
   599 
       
   600 // ---------------------------------------------------------------------------
       
   601 // AknItemActionMenuRegister::AddRegisterEntryL
       
   602 // ---------------------------------------------------------------------------
       
   603 //
       
   604 void AknItemActionMenuRegister::AddRegisterEntryL(
       
   605         CEikMenuBar& aMenuBar, CAknItemActionMenu& aItemActionMenu )
       
   606     {
       
   607     aMenuBar.SetItemActionMenu( &aItemActionMenu );
       
   608     iRegisterArray->AddEntryL( aMenuBar, aItemActionMenu );
       
   609     AddObserversToItemActionMenuL( &aMenuBar, aItemActionMenu );
       
   610     }
       
   611 
       
   612 
       
   613 // ---------------------------------------------------------------------------
       
   614 // AknItemActionMenuRegister::AddObserversToItemActionMenuL
       
   615 // ---------------------------------------------------------------------------
       
   616 //
       
   617 void AknItemActionMenuRegister::AddObserversToItemActionMenuL(
       
   618         CEikMenuBar* aMenuBar, CAknItemActionMenu& aItemActionMenu )
       
   619     {
       
   620     for ( TInt i = 0; i < iUnregisteredObservers.Count(); i++ )
       
   621         {
       
   622         TAknUnregisteredObserverData& data( iUnregisteredObservers[ i ] );
       
   623         // Add if matching menubar or observer with no menubar
       
   624         if ( data.iMenuBar == aMenuBar || !data.iMenuBar )
       
   625             {
       
   626             aItemActionMenu.RegisterCollectionObserverL(
       
   627                     data.iObserver );
       
   628             }
       
   629         }
       
   630     iUnregisteredObservers.Reset();
       
   631     }
       
   632 
       
   633 // ---------------------------------------------------------------------------
       
   634 // AknItemActionMenuRegister::CreateInstanceL
       
   635 // ---------------------------------------------------------------------------
       
   636 //
       
   637 AknItemActionMenuRegister* AknItemActionMenuRegister::CreateInstanceL()
       
   638     {
       
   639     AknItemActionMenuRegister* instance = NULL; 
       
   640     instance = new ( ELeave ) AknItemActionMenuRegister();
       
   641     CleanupStack::PushL( instance );
       
   642     instance->ConstructL();
       
   643     CleanupStack::Pop( instance );
       
   644     return instance;
       
   645     }
       
   646 
       
   647 // ---------------------------------------------------------------------------
       
   648 // AknItemActionMenuRegister::TAknUnregisteredObserverData
       
   649 // ::TAknUnregisteredObserverData
       
   650 // ---------------------------------------------------------------------------
       
   651 //
       
   652 AknItemActionMenuRegister::TAknUnregisteredObserverData::\
       
   653     TAknUnregisteredObserverData(
       
   654         CEikMenuBar* aMenuBar, MAknCollectionObserver& aObserver )
       
   655     : iMenuBar( aMenuBar ),
       
   656     iObserver( aObserver )
       
   657     {
       
   658     }
       
   659 
       
   660 
       
   661 // End of File
       
   662