--- /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