phonebookui/Phonebook/PbkUI/src/CPbkAiwInterestArray.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/PbkUI/src/CPbkAiwInterestArray.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,182 @@
+/*
+* Copyright (c) 2002 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: 
+*     Implements AIW interest array for views.
+*
+*/
+
+
+// INCLUDE FILES
+#include <CPbkAiwInterestArray.h>
+
+#include <CPbkAppGlobalsBase.h>
+#include "MPbkAiwInterestItemFactory.h"
+#include <MPbkAiwCommandObserver.h>
+
+#include <AiwServiceHandler.h>
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+inline CPbkAiwInterestArray::CPbkAiwInterestArray
+        (CPbkContactEngine& aEngine):
+            iEngine(aEngine)
+    {
+    }
+
+CPbkAiwInterestArray::~CPbkAiwInterestArray()
+    {
+    iInterestItems.Close();
+
+    delete iServiceHandler;
+    }
+
+inline void CPbkAiwInterestArray::ConstructL()
+    {
+    // Create AIW handler
+    iServiceHandler = CAiwServiceHandler::NewL();  
+    }
+
+EXPORT_C CPbkAiwInterestArray* CPbkAiwInterestArray::NewL
+        (CPbkContactEngine& aEngine)
+    {
+    CPbkAiwInterestArray* self =
+        new (ELeave) CPbkAiwInterestArray(aEngine);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+
+void CPbkAiwInterestArray::CreateInterestItemAndAttachL(
+            TInt aInterestId,
+            TInt aMenuResourceId,
+            TInt aInterestResourceId,
+            TBool aAttachBaseServiceInterest)
+    {
+    MPbkAiwInterestItem* aiwInterest = CPbkAppGlobalsBase::InstanceL()->
+		AiwInterestItemFactory().CreateInterestItemL(
+            aInterestId, *iServiceHandler, iEngine);
+
+    if (aiwInterest)
+        {
+        aiwInterest->AttachL(
+            aMenuResourceId, 
+            aInterestResourceId, 
+            aAttachBaseServiceInterest);
+
+        // Append the interest item to the array, if it is not
+        // already there
+        TBool found(EFalse);
+        TInt count = iInterestItems.Count();
+        for (TInt i=0; i<count; ++i)
+            {
+            if (iInterestItems[i] == aiwInterest)
+                {
+                found = ETrue;
+                break;
+                }
+            }
+        if (!found)
+            {
+            User::LeaveIfError(iInterestItems.Append(aiwInterest));
+            }
+        }
+    }
+
+
+void CPbkAiwInterestArray::AttachL(
+        TInt aMenuResourceId,
+        TInt aInterestResourceId,
+        TBool aAttachBaseServiceInterest)
+    {
+    // Attach criteria items to menu
+    iServiceHandler->AttachMenuL(aMenuResourceId,
+        aInterestResourceId);
+
+    // If wanted, attach also base interest
+    if (aAttachBaseServiceInterest)
+        {
+        iServiceHandler->AttachL(aInterestResourceId);
+        }
+    }
+
+TBool CPbkAiwInterestArray::InitMenuPaneL(
+        TInt aResourceId,
+        CEikMenuPane& aMenuPane,
+        TUint aFlags)
+    {
+    // Offer the menu for AIW framework first
+    TBool ret = iServiceHandler->HandleSubmenuL(aMenuPane);
+
+	if (!ret)
+		{
+        // The submenu was not handled by AIW framework,
+        // offer it to interest items
+        for (TInt j = 0; j < iInterestItems.Count(); ++j)
+            {
+            MPbkAiwInterestItem* interestItem = iInterestItems[j];
+            ret = interestItem->InitMenuPaneL(aResourceId, aMenuPane, aFlags);
+            if (ret)
+                {
+                // Do not continue the loop if menu was handled
+                break;
+                }
+            }
+		}
+    return ret;
+    }
+
+TBool CPbkAiwInterestArray::HandleCommandL(
+        TInt aMenuCommandId,
+        const CContactIdArray& aContacts,
+        const TPbkContactItemField* aFocusedField /* =NULL */,
+        TInt aServiceCommandId /* =KNullHandle */,
+        MPbkAiwCommandObserver* aObserver /*= NULL*/)
+    {
+    TBool ret = EFalse;
+
+    // If service command parameter was not given,
+    // ask it from AIW framework
+    if (!aServiceCommandId)
+        {
+        aServiceCommandId =
+            iServiceHandler->ServiceCmdByMenuCmd(aMenuCommandId);
+        }
+
+    // There was a provider
+    if (aServiceCommandId)
+        {
+        // Offer the command to interest items
+        for (TInt j = 0; j < iInterestItems.Count(); ++j)
+            {
+            MPbkAiwInterestItem* interestItem = iInterestItems[j];
+            ret = interestItem->HandleCommandL(
+                aMenuCommandId,
+                aContacts,
+                aFocusedField,
+                aServiceCommandId,
+                aObserver);
+            if (ret)
+                {
+                // Do not continue the loop if command was handled
+                break;
+                }
+            }
+		}
+    return ret;
+    }
+
+//  End of File