--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CFilteredGroupView.cpp Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,341 @@
+/*
+* Copyright (c) 2002-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: Contacts Model store filtered contact view implementation.
+*
+*/
+
+
+// INCLUDES
+#include "CFilteredGroupView.h"
+
+// VPbkCntModel
+#include "CContactStore.h"
+#include "CFieldFactory.h"
+#include "CCustomFilteredGroupView.h"
+#include <VPbkCntModelRes.rsg>
+#include "VPbkCntModelRemoteViewPreferences.h"
+#include "NamedRemoteViewViewDefinitionStoreUtility.h"
+
+
+// VPbkEng
+#include <CVPbkFieldTypeSelector.h>
+#include <VPbkDataCaging.hrh>
+#include <CVPbkFieldType.h>
+#include <CVPbkFieldTypeList.h>
+#include <CVPbkContactViewDefinition.h>
+#include <TVPbkFieldVersitProperty.h>
+#include <VPbkSendEventUtility.h>
+#include <CVPbkSortOrder.h>
+
+// VPbkEngUtils
+#include <RLocalizedResourceFile.h>
+
+// System includes
+#include <cntview.h>
+#include <barsread.h>
+
+// Debugging headers
+#include <VPbkDebug.h>
+
+namespace VPbkCntModel {
+
+// --------------------------------------------------------------------------
+// CFilteredGroupView::CFilteredGroupView
+// --------------------------------------------------------------------------
+//
+inline CFilteredGroupView::CFilteredGroupView
+ ( CContactStore& aParentStore ) :
+ CViewBase( aParentStore )
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CFilteredGroupView::~CFilteredGroupView
+// --------------------------------------------------------------------------
+//
+CFilteredGroupView::~CFilteredGroupView()
+ {
+ // Customically filtered view has to be destructed first
+ delete iCustomFilteredView;
+ delete iFilter;
+
+ // Set iView to NULL, so that CViewBase does not close it
+ iView = NULL;
+
+ if ( iBaseView )
+ {
+ iBaseView->Close( *iNativeObserver );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CFilteredGroupView::NewLC
+// --------------------------------------------------------------------------
+//
+CFilteredGroupView* CFilteredGroupView::NewLC(
+ const CVPbkContactViewDefinition& aViewDefinition,
+ MVPbkContactViewObserver& aObserver,
+ CContactStore& aParentStore,
+ const MVPbkFieldTypeList& aSortOrder,
+ RFs& aFs )
+ {
+ CFilteredGroupView* self =
+ new ( ELeave ) CFilteredGroupView( aParentStore );
+ CleanupStack::PushL( self );
+ self->ConstructL( aViewDefinition, aObserver, aSortOrder, aFs );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CFilteredGroupView::ConstructL
+// --------------------------------------------------------------------------
+//
+void CFilteredGroupView::ConstructL(
+ const CVPbkContactViewDefinition& aViewDefinition,
+ MVPbkContactViewObserver& aObserver,
+ const MVPbkFieldTypeList& aSortOrder,
+ RFs& /*aFs*/ )
+ {
+ const CFieldFactory& fieldFactory = Store().FieldFactory();
+
+ // Construct the native filter
+ if ( aViewDefinition.FieldTypeFilter() )
+ {
+ // Copy construct the filter
+ iFilter = CVPbkFieldTypeSelector::NewL(
+ *aViewDefinition.FieldTypeFilter() );
+ }
+
+ CViewBase::ConstructL( aViewDefinition, aObserver, aSortOrder );
+ }
+
+// --------------------------------------------------------------------------
+// CFilteredGroupView::Type
+// --------------------------------------------------------------------------
+//
+TVPbkContactViewType CFilteredGroupView::Type() const
+ {
+ return EVPbkGroupsView;
+ }
+
+// --------------------------------------------------------------------------
+// CFilteredGroupView::DoInitializeViewL
+// --------------------------------------------------------------------------
+//
+void CFilteredGroupView::DoInitializeViewL(
+ const CVPbkContactViewDefinition& aViewDefinition,
+ RContactViewSortOrder& aViewSortOrder )
+ {
+ // Stop observing the base view, the custom view
+ // will observe it and report back
+ // Construction of the iCustomFilteredView should be done in two
+ // phases. Due to that there is dependencies between views in this
+ // and iCustomFilteredView class.
+ CCustomFilteredGroupView* customFilteredView =
+ new (ELeave) CCustomFilteredGroupView( Store(), iFilter,
+ *this );
+
+ if ( iCustomFilteredView )
+ {
+ delete iCustomFilteredView;
+ iCustomFilteredView = NULL;
+ }
+ iCustomFilteredView = customFilteredView;
+ customFilteredView = NULL;
+
+ ConstructBaseViewsL( aViewDefinition, *iCustomFilteredView,
+ aViewSortOrder );
+
+ iCustomFilteredView->ConstructL
+ ( aViewDefinition, *this, *iSortOrder, *iView );
+
+ iView = &iCustomFilteredView->ContactViewBase();
+ }
+
+// --------------------------------------------------------------------------
+// CFilteredGroupView::DoTeardownView
+// --------------------------------------------------------------------------
+//
+void CFilteredGroupView::DoTeardownView()
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CFilteredGroupView::DoChangeSortOrderL
+// --------------------------------------------------------------------------
+//
+TBool CFilteredGroupView::DoChangeSortOrderL(
+ const CVPbkContactViewDefinition& aViewDefinition,
+ RContactViewSortOrder& aSortOrder )
+ {
+ TBool canBeChanged = ETrue;
+ if ( iRemoteView )
+ {
+ if ( RemoteViewName( aViewDefinition ).Compare(
+ KVPbkAllGroupsViewName ) == 0 )
+ {
+ // Set Contacts Model default view setting only if client
+ // is using KVPbkAllGroupsViewName shared view
+ NamedRemoteViewViewDefinitionStoreUtility::
+ SetNamedRemoteViewViewDefinitionL(
+ KVPbkAllContactsViewName, aSortOrder,
+ KVPbkDefaultContactViewPrefs);
+ }
+ iRemoteView->ChangeSortOrderL( aSortOrder );
+ }
+ else
+ {
+ // CContactLocalView doesn't support ChangeSortOrderL
+ canBeChanged = EFalse;
+ }
+
+ return canBeChanged;
+ }
+
+// --------------------------------------------------------------------------
+// CFilteredGroupView::ContactViewReady
+// --------------------------------------------------------------------------
+//
+void CFilteredGroupView::ContactViewReady(
+ MVPbkContactViewBase& aView )
+ {
+ VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING
+ ("CFilteredGroupView::ContactViewReady(0x%x)"), &aView);
+
+ VPbkEng::SendViewEventToObservers( *this, iFilteringObservers,
+ &MFilteredViewSupportObserver::ContactViewReadyForFiltering,
+ &MVPbkContactViewObserver::ContactViewError );
+ VPbkEng::SendViewEventToObservers( *this, iObservers,
+ &MVPbkContactViewObserver::ContactViewReady,
+ &MVPbkContactViewObserver::ContactViewError );
+ VPbkEng::SendViewEventToObservers( *this, iFilteringObservers,
+ &MVPbkContactViewObserver::ContactViewReady,
+ &MVPbkContactViewObserver::ContactViewError );
+ }
+
+// --------------------------------------------------------------------------
+// CFilteredGroupView::ContactViewUnavailable
+// --------------------------------------------------------------------------
+//
+void CFilteredGroupView::ContactViewUnavailable(
+ MVPbkContactViewBase& aView )
+ {
+ VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING
+ ("CFilteredGroupView::ContactViewUnavailable(0x%x)"), &aView);
+
+ VPbkEng::SendViewEventToObservers( *this, iFilteringObservers,
+ &MFilteredViewSupportObserver::ContactViewUnavailableForFiltering,
+ &MVPbkContactViewObserver::ContactViewError );
+ VPbkEng::SendViewEventToObservers( *this, iObservers,
+ &MVPbkContactViewObserver::ContactViewUnavailable,
+ &MVPbkContactViewObserver::ContactViewError );
+ VPbkEng::SendViewEventToObservers( *this, iFilteringObservers,
+ &MVPbkContactViewObserver::ContactViewUnavailable,
+ &MVPbkContactViewObserver::ContactViewError );
+ }
+
+// --------------------------------------------------------------------------
+// CFilteredGroupView::ContactAddedToView
+// --------------------------------------------------------------------------
+//
+void CFilteredGroupView::ContactAddedToView(
+ MVPbkContactViewBase& aView,
+ TInt aIndex, const MVPbkContactLink& aContactLink )
+ {
+ VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING
+ ("CFilteredGroupView::ContactAddedToView(0x%x)"), &aView);
+
+ VPbkEng::SendViewEventToObservers( *this, aIndex, aContactLink,
+ iObservers,
+ &MVPbkContactViewObserver::ContactAddedToView,
+ &MVPbkContactViewObserver::ContactViewError );
+ VPbkEng::SendViewEventToObservers( *this, aIndex, aContactLink,
+ iFilteringObservers,
+ &MVPbkContactViewObserver::ContactAddedToView,
+ &MVPbkContactViewObserver::ContactViewError );
+ }
+
+// --------------------------------------------------------------------------
+// CFilteredGroupView::ContactRemovedFromView
+// --------------------------------------------------------------------------
+//
+void CFilteredGroupView::ContactRemovedFromView(
+ MVPbkContactViewBase& aView,
+ TInt aIndex, const MVPbkContactLink& aContactLink )
+ {
+ VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING
+ ("CFilteredGroupView::ContactRemovedFromView(0x%x)"), &aView);
+
+ VPbkEng::SendViewEventToObservers( *this, aIndex, aContactLink,
+ iObservers,
+ &MVPbkContactViewObserver::ContactRemovedFromView,
+ &MVPbkContactViewObserver::ContactViewError );
+ VPbkEng::SendViewEventToObservers( *this, aIndex, aContactLink,
+ iFilteringObservers,
+ &MVPbkContactViewObserver::ContactRemovedFromView,
+ &MVPbkContactViewObserver::ContactViewError );
+ }
+
+// --------------------------------------------------------------------------
+// CFilteredGroupView::ContactViewError
+// --------------------------------------------------------------------------
+//
+void CFilteredGroupView::ContactViewError(
+ MVPbkContactViewBase& aView,
+ TInt aError, TBool aErrorNotified )
+ {
+ VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING
+ ("CFilteredGroupView::ContactViewError(0x%x)"), &aView);
+
+ VPbkEng::SendEventToObservers( *this, aError, aErrorNotified, iObservers,
+ &MVPbkContactViewObserver::ContactViewError );
+ VPbkEng::SendEventToObservers( *this, aError, aErrorNotified,
+ iFilteringObservers, &MVPbkContactViewObserver::ContactViewError );
+ }
+
+// --------------------------------------------------------------------------
+// CFilteredGroupView::ConstructBaseViewsL
+// --------------------------------------------------------------------------
+//
+void CFilteredGroupView::ConstructBaseViewsL
+ ( const CVPbkContactViewDefinition& aViewDefinition,
+ MContactViewObserver& aObserver,
+ RContactViewSortOrder& aViewSortOrder )
+ {
+ iNativeObserver = &aObserver;
+
+ // Construct the all contacts view first
+ if ( RemoteViewDefinition( aViewDefinition ) )
+ {
+ iRemoteView = CContactNamedRemoteView::NewL(
+ *iNativeObserver, RemoteViewName( aViewDefinition ),
+ Store().NativeDatabase(), aViewSortOrder,
+ KVPbkDefaultGroupsViewPrefs );
+
+ iBaseView = iRemoteView;
+ }
+ else
+ {
+ iBaseView = CContactLocalView::NewL( *iNativeObserver,
+ Store().NativeDatabase(), aViewSortOrder,
+ KVPbkDefaultGroupsViewPrefs );
+ }
+
+ // Set base class view pointer
+ iView = iBaseView;
+ }
+
+} // namespace VPbkCntModel
+
+// End of File