--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CGroupMembersView.cpp Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,133 @@
+/*
+* Copyright (c) 2004-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: Virtual Phonebook group members view
+*
+*/
+
+
+#include "CGroupMembersView.h"
+
+// System includes
+#include <cntitem.h>
+#include <cntview.h>
+
+// From VPbkEng
+#include <MVPbkContactViewObserver.h>
+#include <MVPbkFieldType.h>
+#include <MVPbkContactStoreProperties.h>
+#include <VPbkError.h>
+#include <CVPbkSortOrder.h>
+#include <CVPbkAsyncCallback.h>
+#include <CVPbkContactViewDefinition.h>
+
+// From VPbkCntModel
+#include "CContactStore.h"
+#include "CFieldFactory.h"
+#include "CContact.h"
+#include "CFieldTypeList.h"
+#include "CContactLink.h"
+#include "CContactView.h"
+
+namespace VPbkCntModel {
+
+CGroupMembersView::CGroupMembersView(
+ CContactStore& aParentStore,
+ TContactItemId aGroupId ) :
+ CViewBase( aParentStore ),
+ iGroupId( aGroupId )
+ {
+ }
+
+void CGroupMembersView::ConstructL(
+ MVPbkContactViewObserver& aObserver,
+ const MVPbkFieldTypeList& aSortOrder )
+ {
+ // For showing a group members it needs a contact view that contains
+ // all the contacts
+ // First create a handle to the "All Contacts" remote view.
+ CVPbkContactViewDefinition* viewDefinition =
+ CVPbkContactViewDefinition::NewLC();
+ viewDefinition->SetUriL( Store().StoreProperties().Uri().UriDes() );
+ viewDefinition->SetType( EVPbkContactsView );
+ viewDefinition->SetSharing( EVPbkSharedView );
+
+ CViewBase* tempView = CContactView::NewLC( *viewDefinition, *this, Store(),
+ aSortOrder );
+ CleanupStack::Pop();
+ iBaseView = tempView;
+ tempView = NULL;
+
+ // Group members view is a local view built on iBaseView.
+ // aSortOrder will be ignored because the sort order is defined
+ // by iBaseView.
+ viewDefinition->SetSharing( EVPbkLocalView );
+ CViewBase::ConstructL( *viewDefinition, aObserver, aSortOrder );
+ CleanupStack::PopAndDestroy( viewDefinition );
+ }
+
+CGroupMembersView* CGroupMembersView::NewLC(
+ CContactStore& aParentStore,
+ TContactItemId aGroupId,
+ MVPbkContactViewObserver& aObserver,
+ const MVPbkFieldTypeList& aSortOrder )
+ {
+ CGroupMembersView* self = new ( ELeave ) CGroupMembersView(
+ aParentStore, aGroupId );
+ CleanupStack::PushL( self );
+ self->ConstructL( aObserver, aSortOrder );
+ return self;
+ }
+
+CGroupMembersView::~CGroupMembersView()
+ {
+ delete iBaseView;
+ }
+
+TVPbkContactViewType CGroupMembersView::Type() const
+ {
+ return EVPbkContactsView;
+ }
+
+void CGroupMembersView::DoInitializeViewL(
+ const CVPbkContactViewDefinition& /*aViewDefinition*/,
+ RContactViewSortOrder& /*aViewSortOrder*/ )
+ {
+ iView = CContactGroupView::NewL(
+ Store().NativeDatabase(),
+ iBaseView->NativeView(),
+ *this,
+ iGroupId,
+ CContactGroupView::EShowContactsInGroup );
+ }
+
+void CGroupMembersView::DoTeardownView()
+ {
+ }
+
+TBool CGroupMembersView::DoChangeSortOrderL(
+ const CVPbkContactViewDefinition& /*aViewDefinition*/,
+ RContactViewSortOrder& aSortOrder )
+ {
+ // CContactGroupView doesn't support ChangeSortOrderL, but it's
+ // built on iBaseView so the order must be changed from iBaseView.
+ MVPbkFieldTypeList* newSortOrder = CFieldTypeList::NewLC(
+ aSortOrder, Store().FieldTypeMap() );
+ iBaseView->ChangeSortOrderL( *newSortOrder );
+ CleanupStack::PopAndDestroy(); // newSortOrder
+ return ETrue;
+ }
+
+} // namespace VPbkCntModel
+
+// End of File