phonebookui/Phonebook/View/src/CPbkGroupBelongings.cpp
changeset 0 e686773b3f54
child 68 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/View/src/CPbkGroupBelongings.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,153 @@
+/*
+* 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: 
+*       Provides methods for UI control for Phonebook's "Group belongings".
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPbkGroupBelongings.h"  // This class
+#include <cntdb.h>      // CContactDatabase
+#include <cntitem.h>    // CContactGroup
+#include <avkon.hrh>
+#include <avkon.rsg>
+#include <StringLoader.h>
+
+#include <PbkView.rsg>
+#include "CPbkGroupPopup.h"
+#include <CPbkContactEngine.h>
+#include <CPbkContactItem.h>
+#include <CPbkContactSubView.h>
+
+
+// ==================== LOCAL FUNCTIONS ====================
+
+namespace {
+
+// LOCAL CONSTANTS AND MACROS
+#ifdef _DEBUG
+enum TPanicCode
+    {
+    EPanicPostCond_Constructor = 1,
+    EPanicPreCond_CreateGroupSubViewL,
+    EPanicPreCond_RunPopupL,
+    EPanicPreCond_IsContactIncluded
+    };
+
+void Panic(TPanicCode aReason)
+    {
+    _LIT(KPanicText, "CPbkGroupBelongings");
+    User::Panic(KPanicText, aReason);
+    }
+#endif
+
+}
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+inline CPbkGroupBelongings::CPbkGroupBelongings()
+    {
+    __ASSERT_DEBUG(!iGroupPopup && !iDestroyedPtr,
+        Panic(EPanicPostCond_Constructor));
+    }
+
+EXPORT_C CPbkGroupBelongings* CPbkGroupBelongings::NewL()
+    {
+    return new (ELeave) CPbkGroupBelongings;
+    }
+
+void CPbkGroupBelongings::CreateGroupSubViewL
+        (CPbkContactEngine& aEngine, TContactItemId aContactId)
+    {
+    __ASSERT_DEBUG(!iGroupView && !iGroups, Panic(EPanicPreCond_CreateGroupSubViewL));
+
+    CPbkContactItem* contact = aEngine.ReadContactLC(aContactId);
+    iGroups = contact->GroupsJoinedLC();
+    CleanupStack::Pop(iGroups);
+    CleanupStack::PopAndDestroy(contact);
+    iContactId = aContactId;
+    iGroupView = CPbkContactSubView::NewL
+        (*this, aEngine.Database(), aEngine.AllGroupsViewL(), *this);
+    }
+
+void CPbkGroupBelongings::RunPopupL()
+    {
+    __ASSERT_DEBUG(!iGroupPopup, Panic(EPanicPreCond_RunPopupL));
+
+    CPbkGroupPopup::TParams params
+        (*iGroupView, 
+        R_AVKON_SOFTKEYS_BACK,
+        R_AVKON_SOFTKEYS_BACK);
+    params.iPrompt = StringLoader::LoadLC(R_QTN_PHOB_QTL_ENTRY_IS_IN_GRP);
+    params.iEmptyText = StringLoader::LoadLC(R_QTN_PHOB_ENTRY_IS_IN_NO_GRP);
+    params.iListBoxFlags = EAknListBoxViewerFlags;
+
+    iGroupPopup = CPbkGroupPopup::NewL(params);
+    iGroupPopup->ResetWhenDestroyed(&iGroupPopup);
+    iGroupPopup->ExecuteLD();
+    CleanupStack::PopAndDestroy(2);  // params.iPrompt, params.iEmptyText
+    }
+
+EXPORT_C void CPbkGroupBelongings::ExecuteLD
+        (CPbkContactEngine& aEngine,
+        TContactItemId aContactId)
+    {
+    TBool thisDestroyed = EFalse;
+    iDestroyedPtr = &thisDestroyed;
+    CleanupStack::PushL(this);
+
+    CreateGroupSubViewL(aEngine, aContactId);
+    RunPopupL();
+
+    if (thisDestroyed)
+        {
+        CleanupStack::Pop(this);
+        }
+    else
+        {
+        CleanupStack::PopAndDestroy(this);
+        }
+    }
+
+CPbkGroupBelongings::~CPbkGroupBelongings()
+    {
+    if (iDestroyedPtr) 
+        {
+        *iDestroyedPtr = ETrue;
+        }
+    delete iGroupPopup;
+    if (iGroupView)
+        {
+        iGroupView->Close(*this);
+        }
+    delete iGroups;
+    }
+
+void CPbkGroupBelongings::HandleContactViewEvent
+        (const CContactViewBase& /*aView*/,
+        const TContactViewEvent& /*aEvent*/)
+    {
+    // iGroupPopup handles all events just fine
+    }
+
+TBool CPbkGroupBelongings::IsContactIncluded(TContactItemId aId)
+    {
+    __ASSERT_DEBUG(iGroups, Panic(EPanicPreCond_IsContactIncluded));
+    return (iGroups->Find(aId) != KErrNotFound);
+    }
+
+
+//  End of File