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