uifw/EikStd/coctlsrc/aknitemactionmenuregisterarray.cpp
changeset 0 2f259fa3e83a
child 10 9f56a4e1b8ab
child 14 3320e4e6e8bb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/EikStd/coctlsrc/aknitemactionmenuregisterarray.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,310 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Item action menu register array.
+*
+*/
+#include <akncollection.h>
+#include <aknitemactionmenu.h>
+#include <eikmenub.h>
+
+#include "aknitemactionmenuregisterarray.h"
+
+// ---------------------------------------------------------------------------
+// CCAknItemActionMenuRegisterArray::NewL
+// ---------------------------------------------------------------------------
+//
+CAknItemActionMenuRegisterArray* CAknItemActionMenuRegisterArray::NewL()
+    {
+    CAknItemActionMenuRegisterArray* self =
+        CAknItemActionMenuRegisterArray::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCAknItemActionMenuRegisterArray::NewLC
+// ---------------------------------------------------------------------------
+//
+CAknItemActionMenuRegisterArray* CAknItemActionMenuRegisterArray::NewLC()
+    {
+    CAknItemActionMenuRegisterArray* self =
+        new ( ELeave ) CAknItemActionMenuRegisterArray();
+    CleanupStack::PushL( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::~CAknItemActionMenuRegisterArray
+// ---------------------------------------------------------------------------
+//
+CAknItemActionMenuRegisterArray::~CAknItemActionMenuRegisterArray()
+    {
+    iRegisterArray.ResetAndDestroy();
+    iRegisterArray.Close();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::AddEntryL
+// ---------------------------------------------------------------------------
+//
+void CAknItemActionMenuRegisterArray::AddEntryL(
+        CEikMenuBar& aMenuBar, CAknItemActionMenu& aItemActionMenu )
+    {
+    CRegisterEntry* newEntry = CRegisterEntry::NewLC(
+            aMenuBar, aItemActionMenu );
+    iRegisterArray.AppendL( newEntry );
+    CleanupStack::Pop( newEntry );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::UnregisterMenuBar
+// ---------------------------------------------------------------------------
+//
+void CAknItemActionMenuRegisterArray::UnregisterMenuBar(
+        CEikMenuBar& aMenuBar )
+    {
+    CRegisterEntry* entry( NULL );
+    for ( TInt i = 0; i < iRegisterArray.Count(); i++ )
+        {
+        entry = iRegisterArray[ i ];
+        if ( entry->MenuBar() == &aMenuBar )
+            {
+            entry->RemoveMenuBar();
+            // Remove entry if there are no more collections
+            if ( entry->ItemActionMenu()->CollectionCount() )
+                {
+                entry->ItemActionMenu()->SetMenuBar( NULL, NULL );
+                }
+            else
+                {
+                RemoveEntry( i );
+                }
+            break;
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::UnregisterItemActionMenu
+// ---------------------------------------------------------------------------
+//
+void CAknItemActionMenuRegisterArray::UnregisterItemActionMenu(
+        CAknItemActionMenu& aItemActionMenu )
+    {
+    CRegisterEntry* entry( NULL );
+
+    for ( TInt i = 0; i < iRegisterArray.Count(); i++ )
+        {
+        entry = iRegisterArray[ i ];
+        if ( entry->ItemActionMenu() == &aItemActionMenu )
+            {
+            // Remove entry only if menu bar is already removed
+            if ( !entry->MenuBar() )
+                {
+                RemoveEntry( i );
+                }
+            break;
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::RegisterCollectionObserverL
+// ---------------------------------------------------------------------------
+//
+TBool CAknItemActionMenuRegisterArray::RegisterCollectionObserverL(
+        CEikMenuBar& aMenuBar, MAknCollectionObserver& aObserver )
+    {
+    TBool menuBarFound( EFalse );
+    CRegisterEntry* entry( NULL );
+    for ( TInt i = 0; i < iRegisterArray.Count(); i++ )
+        {
+        entry = iRegisterArray[ i ];
+        if ( entry->MenuBar() == &aMenuBar )
+            {
+            if ( entry->ItemActionMenu() )
+                {
+                entry->ItemActionMenu()->RegisterCollectionObserverL(
+                        aObserver );
+                }
+            menuBarFound = ETrue;
+            break;
+            }
+        }
+    return menuBarFound;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::UnregisterCollectionObserver
+// ---------------------------------------------------------------------------
+//
+void CAknItemActionMenuRegisterArray::UnregisterCollectionObserver(
+        MAknCollectionObserver& aObserver )
+    {
+    CRegisterEntry* entry( NULL );
+
+    for ( TInt i = 0; i < iRegisterArray.Count(); i++ )
+        {
+        entry = iRegisterArray[ i ];
+        if ( entry->ItemActionMenu() )
+            {
+            entry->ItemActionMenu()->RemoveCollectionObserver( aObserver );
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::CAknItemActionMenuRegisterArray
+// ---------------------------------------------------------------------------
+//
+CAknItemActionMenuRegisterArray::CAknItemActionMenuRegisterArray()
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CAknItemActionMenuRegisterArray::ConstructL()
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::RemoveEntry
+// ---------------------------------------------------------------------------
+//
+void CAknItemActionMenuRegisterArray::RemoveEntry( TInt aIndex )
+    {
+    if ( aIndex >= 0 && aIndex < iRegisterArray.Count() )
+        {
+        CRegisterEntry* entry = iRegisterArray[ aIndex ];
+        delete entry;
+        entry = NULL;
+        iRegisterArray.Remove( aIndex );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCAknItemActionMenuRegisterArray::CRegisterEntry::NewL
+// ---------------------------------------------------------------------------
+//
+CAknItemActionMenuRegisterArray::CRegisterEntry*
+    CAknItemActionMenuRegisterArray::CRegisterEntry::NewL(
+            CEikMenuBar& aMenuBar, CAknItemActionMenu& aItemActionMenu )
+    {
+    CRegisterEntry* self = CRegisterEntry::NewLC( aMenuBar, aItemActionMenu );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCAknItemActionMenuRegisterArray::CRegisterEntry::NewLC
+// ---------------------------------------------------------------------------
+//
+CAknItemActionMenuRegisterArray::CRegisterEntry*
+    CAknItemActionMenuRegisterArray::CRegisterEntry::NewLC(
+            CEikMenuBar& aMenuBar, CAknItemActionMenu& aItemActionMenu )
+    {
+    CRegisterEntry* self =
+        new ( ELeave ) CRegisterEntry( aMenuBar, aItemActionMenu );
+    CleanupStack::PushL( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::CRegisterEntry::~CRegisterEntry
+// ---------------------------------------------------------------------------
+//
+CAknItemActionMenuRegisterArray::CRegisterEntry::~CRegisterEntry()
+    {
+    delete iActionMenu;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::CRegisterEntry::RemoveMenuBar
+// ---------------------------------------------------------------------------
+//
+void CAknItemActionMenuRegisterArray::CRegisterEntry::RemoveMenuBar()
+    {
+    iMenuBar = NULL;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::CRegisterEntry::MenuBar
+// ---------------------------------------------------------------------------
+//
+CEikMenuBar* CAknItemActionMenuRegisterArray::CRegisterEntry::MenuBar()
+    {
+    return iMenuBar;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::CRegisterEntry::RemoveItemActionMenu
+// ---------------------------------------------------------------------------
+//
+void CAknItemActionMenuRegisterArray::CRegisterEntry::RemoveItemActionMenu()
+    {
+    delete iActionMenu;
+    iActionMenu = NULL;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::CRegisterEntry::ItemActionMenu
+// ---------------------------------------------------------------------------
+//
+CAknItemActionMenu*
+    CAknItemActionMenuRegisterArray::CRegisterEntry::ItemActionMenu()
+    {
+    return iActionMenu;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::CRegisterEntry::CRegisterEntry
+// ---------------------------------------------------------------------------
+//
+CAknItemActionMenuRegisterArray::CRegisterEntry::CRegisterEntry(
+        CEikMenuBar& aMenuBar, CAknItemActionMenu& aItemActionMenu )
+    : iMenuBar( &aMenuBar ),
+    iActionMenu( &aItemActionMenu )
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknItemActionMenuRegisterArray::CRegisterEntry::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CAknItemActionMenuRegisterArray::CRegisterEntry::ConstructL()
+    {
+    }
+
+// End of File