phonebookui/Phonebook2/Commands/src/CPbk2AiwInterestItemBase.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/Commands/src/CPbk2AiwInterestItemBase.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,161 @@
+/*
+* Copyright (c) 2005-2007 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:  Phonebook 2 AIW interest item base.
+*
+*/
+
+
+#include "CPbk2AiwInterestItemBase.h"
+
+// System includes
+#include <AiwServiceHandler.h>
+
+// Debugging headers
+#include <Pbk2Debug.h>
+#include <Pbk2Profile.h>
+
+
+/// Unnamed namespace for local definitions
+namespace {
+
+const TInt KGranularity = 1;
+
+} /// namespace
+
+
+// --------------------------------------------------------------------------
+// CPbk2AiwInterestItemBase::CPbk2AiwInterestItemBase
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPbk2AiwInterestItemBase::CPbk2AiwInterestItemBase
+        ( TInt aInterestId, CAiwServiceHandler& aServiceHandler ) :
+            CActive( EPriorityIdle ),
+            iServiceHandler( aServiceHandler ),
+            iInterestId( aInterestId ),
+            iAttachedResources( KGranularity )
+    {
+    // Do nothing
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2AiwInterestItemBase::~CPbk2AiwInterestItemBase
+// --------------------------------------------------------------------------
+//
+//CPbk2AiwInterestItemBase::~CPbk2AiwInterestItemBase()
+//    {
+    // Do nothing
+//    }
+
+// --------------------------------------------------------------------------
+// CPbk2AiwInterestItemBase::IsMenuPaneAttached
+// --------------------------------------------------------------------------
+//
+EXPORT_C TBool CPbk2AiwInterestItemBase::IsMenuPaneAttached
+        ( TInt aMenuResourceId )
+    {
+    TBool menuFound = EFalse;
+
+    // Check through attached resources
+    TInt count = iAttachedResources.Count();
+    for( TInt i = 0; i < count && !menuFound; ++i )
+        {
+        if( iAttachedResources[i].iMenuResourceId == aMenuResourceId )
+            {
+            menuFound = ETrue;
+            }
+        }
+
+    return menuFound;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2AiwInterestItemBase::InterestId
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt CPbk2AiwInterestItemBase::InterestId() const
+    {
+    return iInterestId;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2AiwInterestItemBase::AttachL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2AiwInterestItemBase::AttachL
+        ( TInt aMenuResourceId, TInt aInterestResourceId,
+          TBool aAttachBaseServiceInterest )
+    {
+    TBool alreadyAttached = EFalse;
+    TBool baseServiceAttached = EFalse;
+    TAttachedResources resource;
+    TInt index = KErrNotFound;
+
+    TInt count = iAttachedResources.Count();
+
+    // First check has the resource-interest pair already been attached
+    for (TInt i=0; i<count; ++i)
+        {
+        if ( ( iAttachedResources[i].iMenuResourceId == aMenuResourceId) &&
+            ( iAttachedResources[i].iInterestResourceId
+                == aInterestResourceId ) )
+            {
+            alreadyAttached = ETrue;
+            if (iAttachedResources[i].iBaseServiceAttached)
+                {
+                baseServiceAttached = ETrue;
+                }
+            // Store the index and break out
+            index = i;
+            break;
+            }
+        }
+
+    if ( !alreadyAttached )
+        {
+        PBK2_PROFILE_START(Pbk2Profile::EAiwMenuAttach);
+        // Attach criteria items to menu
+        iServiceHandler.AttachMenuL(aMenuResourceId,
+            aInterestResourceId);
+        PBK2_PROFILE_END(Pbk2Profile::EAiwMenuAttach);
+
+        resource.iInterestResourceId = aInterestResourceId;
+        resource.iMenuResourceId = aMenuResourceId;
+        }
+
+    // If wanted, attach also base interest...
+    if (aAttachBaseServiceInterest)
+        {
+        // ...if not already done
+        if (!baseServiceAttached)
+            {
+            PBK2_PROFILE_START(Pbk2Profile::EAiwBaseServiceAttach);
+            iServiceHandler.AttachL(aInterestResourceId);
+            PBK2_PROFILE_END(Pbk2Profile::EAiwBaseServiceAttach);
+            resource.iBaseServiceAttached = ETrue;
+            }
+        }
+
+    if ( !alreadyAttached )
+        {
+        // Append to the array
+        iAttachedResources.AppendL(resource);
+        }
+    else if ( !baseServiceAttached && resource.iBaseServiceAttached )
+        {
+        // We need to modify the base service flag
+        iAttachedResources[index].iBaseServiceAttached = ETrue;
+        }
+    }
+
+// End of File