diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook/View/src/CPbkGroupBelongings.cpp --- /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 // CContactDatabase +#include // CContactGroup +#include +#include +#include + +#include +#include "CPbkGroupPopup.h" +#include +#include +#include + + +// ==================== 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