phonebookui/Phonebook/View/src/CPbkGroupMembersFetchDlg.cpp
changeset 0 e686773b3f54
child 21 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/View/src/CPbkGroupMembersFetchDlg.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,179 @@
+/*
+* 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 Phonebook Group members Fetch API.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPbkGroupMembersFetchDlg.h"  // This class
+#include <cntview.h>
+
+// PbkView APIs
+#include <PbkView.rsg>
+#include "CPbkFetchDlg.h"
+#include "MPbkFetchCallbacks.h"
+
+// PbkEng APIs
+#include <CPbkContactEngine.h>
+
+
+/// Unnamed namespace for local definitions
+namespace {
+
+// LOCAL CONSTANTS AND MACROS
+
+#ifdef _DEBUG
+enum TPanicCode
+    {
+    EPanicPostCond_Constructor = 1,
+    EPanicPreCond_ConstructL,
+    EPanicPreCond_ExecuteLD,
+    };
+#endif
+
+
+// ==================== LOCAL FUNCTIONS ====================
+
+#ifdef _DEBUG
+void Panic(TPanicCode aReason)
+    {
+    _LIT(KPanicText, "CPbkGroupMembersFetchDlg");
+    User::Panic(KPanicText, aReason);
+    }
+#endif
+
+}  // namespace
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// CPbkGroupMembersFetchDlg::TParams
+EXPORT_C CPbkGroupMembersFetchDlg::TParams::TParams() :
+    iGroupId(KNullContactId),
+    iMarkedEntries(NULL)
+    {
+    }
+
+EXPORT_C CPbkGroupMembersFetchDlg::TParams::operator TCleanupItem()
+    {
+    return TCleanupItem(Cleanup,this);
+    }
+
+void CPbkGroupMembersFetchDlg::TParams::Cleanup(TAny* aPtr)
+    {
+    TParams* self = static_cast<TParams*>(aPtr);
+    delete self->iMarkedEntries;
+    self->iMarkedEntries = NULL;
+    }
+
+
+// CPbkGroupMembersFetchDlg
+inline CPbkGroupMembersFetchDlg::CPbkGroupMembersFetchDlg
+        (TParams& aParams, CPbkContactEngine& aPbkEngine) :
+    iParams(aParams), iPbkEngine(aPbkEngine)
+    {
+    // PostCond
+    __ASSERT_DEBUG(!iFetchDlg && !iDestroyedPtr,
+        Panic(EPanicPostCond_Constructor));
+    }
+
+inline void CPbkGroupMembersFetchDlg::ConstructL()
+    {
+    // PreCond
+    __ASSERT_DEBUG
+        (!iFetchDlg && iParams.iGroupId != KNullContactId && !iGroupNonMembersSubView,
+        Panic(EPanicPreCond_ConstructL));
+
+    iGroupNonMembersSubView = CContactGroupView::NewL
+        (iPbkEngine.Database(), iPbkEngine.AllContactsView(), *this,
+        iParams.iGroupId, CContactGroupView::EShowContactsNotInGroup);
+
+    iGroupNonMembersSubView->SetViewFindConfigPlugin
+        (iPbkEngine.AllContactsView().GetViewFindConfigPlugin());
+    }
+
+EXPORT_C CPbkGroupMembersFetchDlg* CPbkGroupMembersFetchDlg::NewL(TParams& aParams, CPbkContactEngine& aPbkEngine)
+    {
+    CPbkGroupMembersFetchDlg* self = new(ELeave) CPbkGroupMembersFetchDlg(aParams, aPbkEngine);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C TInt CPbkGroupMembersFetchDlg::ExecuteLD()
+    {
+    // PreCond
+    __ASSERT_DEBUG(iParams.iGroupId != KNullContactId && !iFetchDlg,
+        Panic(EPanicPreCond_ExecuteLD));
+
+    // "D" function semantics
+    CleanupStack::PushL(this);
+    TBool thisDestroyed = EFalse;
+    iDestroyedPtr = &thisDestroyed;
+
+    // Convert aParams for CPbkFetchEntryDlg
+    CPbkFetchDlg::TParams params;
+    params.iResId = R_PBK_GROUP_MEMBER_FETCH_DLG;
+    params.iFlags = CPbkFetchDlg::FETCH_MARKED;
+    params.iContactView = iGroupNonMembersSubView;
+
+    // Run CPbkFetchEntryDlg dialog
+    iFetchDlg = CPbkFetchDlg::NewL(params, iPbkEngine);
+    iFetchDlg->ResetWhenDestroyed(&iFetchDlg);
+    TInt result = iFetchDlg->ExecuteLD();
+
+    if (thisDestroyed)
+        {
+        // This object has been destroyed
+        result = 0;
+        CleanupStack::Pop(this);
+        }
+    else
+        {
+        // Convert output back to our format
+        if (result)
+            {
+            iParams.iMarkedEntries = params.iMarkedEntries;
+            params.iMarkedEntries = NULL;
+            }
+        CleanupStack::PopAndDestroy(this);
+        }
+
+    return result;
+    }
+
+CPbkGroupMembersFetchDlg::~CPbkGroupMembersFetchDlg()
+    {
+    if (iDestroyedPtr)
+        {
+        *iDestroyedPtr = ETrue;
+        }
+    if (iGroupNonMembersSubView)
+        {
+        iGroupNonMembersSubView->Close(*this);
+        }
+    delete iFetchDlg;
+    }
+
+void CPbkGroupMembersFetchDlg::HandleContactViewEvent
+        (const CContactViewBase& /*aView*/,
+        const TContactViewEvent& /*aEvent*/)
+    {
+    }
+
+
+//  End of File