diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookengines/VirtualPhonebook/VPbkEng/inc/CVPbkFindView.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/VirtualPhonebook/VPbkEng/inc/CVPbkFindView.h Wed Sep 01 12:29:52 2010 +0100 @@ -0,0 +1,156 @@ +/* +* 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: Find contact view +* +*/ + + +#ifndef CVPBKFINDVIEW_H +#define CVPBKFINDVIEW_H + +#include +#include +#include +#include +#include + +namespace VPbkEngUtils { class CVPbkAsyncOperation; } + +class CVPbkContactFindPolicy; + +/** + * Virtual Phonebook Find view + * + * This class can be used for find from an existing view. A client + * gives the view for find. + */ +NONSHARABLE_CLASS( CVPbkFindView ): public CBase, + public MVPbkContactViewBase, + public MVPbkContactViewObserver, + public MVPbkContactViewFiltering + { + public: + /** + * Two-phase constructor. + * + * @param aBaseView The view to filter. + * @param aObserver an observer that is notified when this + * view is ready for use. + * @param aFindWords an array words that must match to the contact. + * @param aAlwaysIncludedContacts contacts that must be in the view + * even they don't match to aFindWords. + * This an optional parameter. Give + * NULL if not needed. + * @param aMasterFieldTypeList Field type list + * @return a new instance of this class + */ + static CVPbkFindView* NewLC( + MVPbkContactViewBase& aBaseView, + MVPbkContactViewObserver& aObserver, + const MDesCArray& aFindWords, + const MVPbkContactBookmarkCollection* aAlwaysIncludedContacts, + const MVPbkFieldTypeList& aMasterFieldTypeList ); + ~CVPbkFindView(); + + protected: // From MVPbkContactViewBase + TVPbkContactViewType Type() const; + void ChangeSortOrderL(const MVPbkFieldTypeList& aSortOrder); + const MVPbkFieldTypeList& SortOrder() const; + void RefreshL(); + TInt ContactCountL() const; + const MVPbkViewContact& ContactAtL(TInt aIndex) const; + MVPbkContactLink* CreateLinkLC(TInt aIndex) const; + TInt IndexOfLinkL(const MVPbkContactLink& aContactLink) const; + void AddObserverL(MVPbkContactViewObserver& aObserver); + void RemoveObserver(MVPbkContactViewObserver& aObserver); + TBool MatchContactStore(const TDesC& aContactStoreUri) const; + TBool MatchContactStoreDomain(const TDesC& aContactStoreDomain) const; + MVPbkContactBookmark* CreateBookmarkLC(TInt aIndex) const; + TInt IndexOfBookmarkL( + const MVPbkContactBookmark& aContactBookmark) const; + MVPbkContactViewFiltering* ViewFiltering(); + + private: // From MVPbkContactViewFiltering + MVPbkContactViewBase* CreateFilteredViewLC( + MVPbkContactViewObserver& aObserver, + const MDesCArray& aFindWords, + const MVPbkContactBookmarkCollection* aAlwaysIncludedContacts ); + + void UpdateFilterL( + const MDesCArray& aFindWords, + const MVPbkContactBookmarkCollection* aAlwaysIncludedContacts ); + + private: // From MVPbkContactViewObserver + void ContactViewReady(MVPbkContactViewBase& aView); + void ContactViewUnavailable(MVPbkContactViewBase& aView); + void ContactAddedToView( + MVPbkContactViewBase& aView, + TInt aIndex, + const MVPbkContactLink& aContactLink ); + void ContactRemovedFromView( + MVPbkContactViewBase& aView, + TInt aIndex, + const MVPbkContactLink& aContactLink ); + void ContactViewError( + MVPbkContactViewBase& aView, + TInt aError, + TBool aErrorNotified ); + + private: // Implementation + CVPbkFindView( + MVPbkContactViewBase& aBaseView, + const MVPbkFieldTypeList* aMasterFieldTypeList ); + void ConstructL( + const MDesCArray& aFindWords, + const MVPbkContactBookmarkCollection* aAlwaysIncludedContacts ); + void BuildViewMappingL(); + void HandleBuildViewMapping(); + void DoAddObserverL(MVPbkContactViewObserver& aObserver); + void AddObserverError(MVPbkContactViewObserver& aObserver, TInt aError); + + void SetFindStringsL( const MDesCArray& aFindWords ); + void SetAlwaysIncludedContactsL( + const MVPbkContactBookmarkCollection* aAlwaysIncludedContacts ); + void SendViewEventToObservers( + void( MVPbkContactViewObserver::* aObserverFunc) + ( MVPbkContactViewBase& ) ); + void SendViewErrorEventToObservers( TInt aError, TBool + aErrorNotified ); + + private: // Data + ///Own: indicated whether view is ready + TBool iIsReady; + ///Ref: contact base view + MVPbkContactViewBase& iBaseView; + ///Ref: Master field type list + const MVPbkFieldTypeList* iMasterFieldTypeList; + ///Own: Asynchronous operation + VPbkEngUtils::CVPbkAsyncOperation* iAsyncOperation; + ///Own: mapping between base view and filtered view + RArray iContactMapping; + ///Ref: array to view observers + RPointerArray iObservers; + /// Own: find words for filtering + CDesCArrayFlat* iFindStrings; + /// Own: a policy for match + CVPbkContactFindPolicy* iContactFindPolicy; + /// Own: always included contacts + const MVPbkContactBookmarkCollection* iAlwaysIncludedContacts; + }; + +#endif // CVPBKFINDVIEW_H + +//End of file + +