diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CFindViewBase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CFindViewBase.h Wed Sep 01 12:29:52 2010 +0100 @@ -0,0 +1,292 @@ +/* +* 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 contact view implementation. +* +*/ + + +#ifndef VPBKCNTMODEL_CFINDVIEWBASE_H +#define VPBKCNTMODEL_CFINDVIEWBASE_H + +// INCLUDES + +#include +#include +#include +#include + +// From VPbkEng +#include +#include + +// From VPbkCntModel +#include "MParentViewForFiltering.h" + +// FORWARD DECLARATIONS +class CVPbkFieldTypeRefsList; +class MVPbkContactFindPolicy; +class CContactIdArray; +template class CVPbkAsyncObjectOperation; +template class CVPbkAsyncObjectOperation; + +namespace VPbkCntModel { + +// FORWARD DECLARATIONS +class CViewContact; +class CViewBase; + +/** + * An interface for checking if the contact is one of the + * always included contacts + */ +NONSHARABLE_CLASS( MAlwaysIncludedContacts ) + { + public: + /** + * Checks if contact is always included + * @param aContact Contact to be checked + * @return ETrue if aContact is always included + */ + virtual TBool IsContactAlwaysIncluded( + const CViewContact& aContact ) const = 0; + + protected: + ~MAlwaysIncludedContacts() {} + }; + +/** + * Declared only for using static protected CompareFieldsL in + * Symbian's CContactViewBase. + */ +NONSHARABLE_CLASS( CCompareView ) : public CContactViewBase + { + public: + + /** + * Compare function for Contacts Model view contacts. + * Forwards request to CContactViewBase of Contacts Model. + * @param aFirst First view contact to be compared + * @param aSecond Second view contact to be compared + * @return Result of CompareFieldsL from cntviewbase + */ + static TInt CompareFieldsL( const ::CViewContact &aFirst, + const ::CViewContact &aSecond ); + + private: + /** + * Dummy constructor. Not to be used. + */ + CCompareView( const CContactDatabase& aDb ); + }; + +/** + * A base class for find views that implements MVPbkContactView + */ +NONSHARABLE_CLASS( CFindViewBase ): public CBase, + public MParentViewForFiltering, + public MVPbkContactViewFiltering, + public MFilteredViewSupportObserver, + protected MAlwaysIncludedContacts + { + public: // Constructor and destructor + /** + * Destructor. + */ + ~CFindViewBase(); + + public: //New functions + + /** + * Acticates the match asynchrnously. View ready event + * will be send when the find view is ready + */ + void ActivateContactMatchL(); + + public: // From MVPbkContactView + MVPbkObjectHierarchy& ParentObject() const; + void RefreshL(); + TInt ContactCountL() const; + const MVPbkViewContact& ContactAtL( + TInt aIndex ) const; + MVPbkContactLink* CreateLinkLC( + TInt aIndex ) const; + TInt IndexOfLinkL( + const MVPbkContactLink& aContactLink ) const; + TVPbkContactViewType Type() const; + void ChangeSortOrderL(const MVPbkFieldTypeList& aSortOrder); + const MVPbkFieldTypeList& SortOrder() 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(); + + public: // From MParentViewForFiltering + void AddFilteringObserverL( MFilteredViewSupportObserver& aObserver ); + void RemoveFilteringObserver( MFilteredViewSupportObserver& aObserver ); + + public: // From MVPbkContactViewFiltering + MVPbkContactViewBase* CreateFilteredViewLC( + MVPbkContactViewObserver& aObserver, + const MDesCArray& aFindWords, + const MVPbkContactBookmarkCollection* aAlwaysIncludedContacts ); + /// Subclasses must implement this + virtual void UpdateFilterL( + const MDesCArray& aFindWords, + const MVPbkContactBookmarkCollection* aAlwaysIncludedContacts ) = 0; + + public: // 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 ); + // From MFilteredViewSupportObserver + void ContactViewReadyForFiltering( + MParentViewForFiltering& aView ); + void ContactViewUnavailableForFiltering( + MParentViewForFiltering& aView ); + + + protected: // Implementation + + /** + * @param aParentView the view whose contacts are filtered + * @param aBaseView the all contacts view. + * @param aOwnsMatchedContacts ETrue if this instance owns + * contacts in iMatchedContacts + */ + CFindViewBase( MParentViewForFiltering& aParentView, + CViewBase& aBaseView, + TBool aOwnsMatchedContacts ); + + /** + * @param aFindString the find words for filtering + * @param aFindPolicy a policy for matching. + * @param aExternalViewObserver an observer that was given + * by the Virtual Phonebook client + */ + void BaseConstructL( const MDesCArray& aFindStrings, + MVPbkContactFindPolicy& aFindPolicy, + MVPbkContactViewObserver& aExternalViewObserver ); + + /** + * Checks if aViewContact matches to iFindStrings + * + * @param aViewContact the contact to be checked + */ + TBool IsMatchL( const MVPbkViewContact& aViewContact ); + + /** + * Returns the find words used in filtering + * + * @return the find words used in filtering + */ + const MDesCArray& FindStrings() const; + + /** + * Deletes the old find strings and allocates new ones + * based on aFindStrings + * + * @param aFindStrings new find strings + */ + void SetFindStringsL( const MDesCArray& aFindStrings ); + + /** + * Calls ViewReady or Unavailable depending on state + */ + void SendViewStateEventToObservers(); + + /** + * a type definition for Contacts Model view contact for + * separating it clearly from VPbkCntModel::CViewContact + */ + typedef ::CViewContact CCntModelViewContact; + + private: // New functions + virtual void MatchL( + RPointerArray& aMatchedContacts ) = 0; + virtual void DoContactAddedToViewL( MVPbkContactViewBase& aView, + TInt aIndex, const MVPbkContactLink& aContactLink, + RPointerArray& aMatchedContacts ) = 0; + + private: // implementation + void DoContactViewReadyForFilteringL( MVPbkContactViewBase& aView ); + void HandleContactAddedToViewL( MVPbkContactViewBase& aView, + TInt aIndex, const MVPbkContactLink& aContactLink ); + void HandleContactRemovedFromViewL( MVPbkContactViewBase& aView, + TInt aIndex, const MVPbkContactLink& aContactLink ); + void DoAddObserver( MVPbkContactViewObserver& aObserver ); + void DoAddObserverError( MVPbkContactViewObserver& aObserver, + TInt aError ); + void DoAddFilteringObserverL( + MFilteredViewSupportObserver& aObserver ); + void DoAddFilteringObserverError( + MFilteredViewSupportObserver& aObserver, TInt aError ); + void ContactMatchL(); + void ResetContacts(); + void SendContactViewErrorEvent( TInt aError, TBool aErrorNotified ); + + protected: // Data + /// Ref: The view that cretead this filtered view + MParentViewForFiltering& iParentView; + /// Ref: The all contacts view + CViewBase& iBaseView; + + private: // Data + /// Own: A matched contacts + RPointerArray iMatchedContacts; + /// Ref: other observer added by AddObserverL + RPointerArray iObservers; + /// Ref: an array of observers that filters this view. + RPointerArray iFilteringObservers; + /// Own: find words for filtering + CDesCArrayFlat* iFindStrings; + /// Own: a field type list for name construction policy + CVPbkFieldTypeRefsList* iFieldTypeRefsList; + /// Ref: a policy for match + MVPbkContactFindPolicy* iContactFindPolicy; + /// Own: a view contact for ContactAtL + CViewContact* iViewContact; + /// Own: an async operation for MVPbkContactViewObserver + CVPbkAsyncObjectOperation* iObserverOp; + /// Own: an async operation for MFilteredViewSupportObserver + CVPbkAsyncObjectOperation* iFilterObsOp; + /// Own: ETrue if this view owns matched contacts + TBool iOwnsContacts; + /// Own: ETrue if this view is ready + TBool iViewReady; + /// Own: Mark if this object be destroyed + TBool* iDestroyed; + }; +} // namespace VPbkCntModel + +#endif // VPBKCNTMODEL_CFINDVIEWBASE_H + +// End of File