diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/UIControls/inc/cpbk2predictiveviewstack.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/UIControls/inc/cpbk2predictiveviewstack.h Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,362 @@ +/* +* Copyright (c) 2005-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: Phonebook 2 Predictive search view stack. +* +*/ + +#ifndef CPBK2PREDICTIVEVIEWSTACK_H +#define CPBK2PREDICTIVEVIEWSTACK_H + +// INCLUDES +#include +#include +#include +#include +#include "MPbk2FilteredViewStack.h" +#include +#include +#include +#include + +// FORWARD DECLARATIONS +class CVPbkContactFindPolicy; +class MVPbkContactBookmarkCollection; +class CPSRequestHandler; +class CPsSettings; +class CVPbkContactIdConverter; +class CPsQuery; +class CVPbkTopContactManager; +class CPbk2ContactPositionInfo; +class CPbk2PredictiveSearchFilter; +class MPbk2ContactNameFormatter; + +// CLASS DECLARATION +/** + * Implements Predictive Searching for Pbk2 UI. Uses Predictive Search Engine. + */ +NONSHARABLE_CLASS(CPbk2PredictiveViewStack) : public CActive, + public MPbk2FilteredViewStack, + private MVPbkContactViewObserver, + public MPsResultsObserver + { + public: // Constructors and destructor + + /** + * Creates a new instance of this class. + * + * @param aBaseView The non-filtered base view. + * @param aSearchFilter SearchPane Filter + * @param aNameformatter PBk2 contact name formatter interface + * @return A new instance of this class. + */ + static CPbk2PredictiveViewStack* NewL( + MVPbkContactViewBase& aBaseView, + CPbk2PredictiveSearchFilter& aSearchFilter, + MPbk2ContactNameFormatter& aNameformatter ); + + /** + * Destructor. + */ + ~CPbk2PredictiveViewStack(); + + public: // From MPbk2FilteredViewStack + + void UpdateFilterL( + const MDesCArray& aFindStrings, + const MVPbkContactBookmarkCollection* aAlwaysincluded, + TBool aAlwaysIncludedChanged ); + + void Reset(); + + MVPbkContactViewBase& BaseView() const; + + void SetNewBaseViewL( + MVPbkContactViewBase& aBaseView ); + + TInt Level() const; + + public: // New methods + + void AddStackObserverL( + MPbk2FilteredViewStackObserver& aStackObserver ); + + void RemoveStackObserver( + MPbk2FilteredViewStackObserver& aStackObserver ); + + + public: // 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 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: // from MPsResultsObserver + + void HandlePsResultsUpdate( + RPointerArray& searchResults, + RPointerArray& searchSeqs); + + void HandlePsError(TInt aErrorCode); + + void CachingStatus(TCachingStatus& aStatus, TInt& aError); + + private: // From CActive + + void RunL(); + void DoCancel(); + TInt RunError( TInt aError ); + + private: // Implementation + CPbk2PredictiveViewStack( CPbk2PredictiveSearchFilter& aSearchFilter, + MPbk2ContactNameFormatter& aNameformatter ); + + void ConstructL( + MVPbkContactViewBase& aBaseView ); + + void InitializePCSEngineL(); + void HandleContactDeletionL(MVPbkContactViewBase& aView, TInt aIndex, + const MVPbkContactLink& aContactLink); + void CalculateSearchResultIndexesL(RPointerArray& aSearchResults); + + TInt BaseViewIndex( TInt aSearchResultIndex ) const; + void SendTopViewChangedEvent( MVPbkContactViewBase& aOldTopView ); + void SendTopViewUpdatedEvent(); + void SendBaseViewChangedEvent(); + void ClearSearch(); + + public: + /** + * Return last Predictive Search query. + * This object is used in underlying and bookmark restoring. + * All Predictive Search result is valid only for one query. + * @return pointer to the last PCS query object. + */ + const CPsQuery* LastPCSQuery() const; + + /** + * Returns the instance of the request handler object for the Predicitve Search application + * + * @return pointer to the CPSRequestHandler. + */ + CPSRequestHandler* PSHandler() const; + + /** + * Get mathes part from data model object. + * Data model uses mathes patterns returned from PCS server. + * This method is added for bidirectional languages. + + * @param aSearchData The input data to be searched. + * @param aMatchLocation The list matched index and length of match + */ + void GetMatchingPartsL( const TDesC& aSearchData, + RArray& aMatchLocation) const; + + /** + * Sends no matched event of the last predictive search + * to the search filter. + */ + void SendPSNoResultsEventL(); + + /** + * Set the group contact link for curently open group. + * + * @param aGroupLinktoSet The input group contact link + */ + void SetCurrentGroupLinkL( MVPbkContactLink* aGroupLinktoSet); + private: + /** + * Create copy of matches patterns from PCS server + * Also creates patterns to be used in bidirectional matches functional + */ + void CreatePatternsL(RPointerArray& searchSeqs); + + + // Perform the psengine settings. + void SetPsSettingL( RPointerArray& aDatabases); + + /** + * save marked contacts info to iMarkedContactsPositionInfoArray, marked + * top contacts are excluded + */ + void SaveBookmarkContatsInfoL(); + + /** + * move given array to top of searched result + * @param aContactInfoArray array to be moved. + */ + void MoveArrayToSearchedResultTopL( + RPointerArray& aContactInfoArray ); + + /** + * find from iTopContactPositionInfoArray by index of contact in iBaseView + * @return KErrNotFound if not found + */ + TInt MatchingTopContactFind( const TInt aIndexInBaseView ); + + /** + * sort the give array by position in main view. + * @param aContactInfoArray array to be sorted. + */ + void SortbyPositionInMainView( + RPointerArray& aContactInfoArray ); + + public: + + /** + * @param index of contact + * @return true if the contact of index belongs to non matching marked contacts. + */ + TBool IsNonMatchingMarkedContact( const TInt aIndex ); + + private: // Data + + RPointerArray iViewObservers;// Ref: View observers + + RPointerArray iStackObservers;// Ref: Stack observers + + /**The base view of CPbk2PredictiveViewStack + * Not own + */ + MVPbkContactViewBase* iBaseView; //The base view of CPbk2PredictiveViewStack + + TBool iViewReady;//ETrue if view is ready + + TBool iSearchedState; //ETrue if Predictive search view is created + + /**Contact id converter for DefaultCntDbUri() + * own + */ + CVPbkContactIdConverter* iConverterDefaultStore; + + /**Predictive search handler + * own + */ + CPSRequestHandler* iPsHandler; //Predictive search handler + + + /** Query passed to PCS engine + * own + */ + CPsQuery* iPsQuery;// + + /**Contact link of searched contacts + * own + */ + CVPbkContactLinkArray* iPredictiveSearchResultContactLinkArrray; // + + //Owns : Array that holds the result pattern for predictive search + RPointerArray< CPsPattern > iPatternsCollection; + + /// Own: Array of bidirectional patterns + RPointerArray iBidiPatterns; + + /** + * CVPbkTopContactManager used for checking if contact is top contact + * own + */ + CVPbkTopContactManager* iTopContactManager; + + /** + * temporary array contains top contact position infomation from iBaseView, + * those top contacts are from PS search results + * own + */ + RPointerArray iTopContactPositionInfoArray; + + + //Owns : Group contact link for the currently open Group + MVPbkContactLink* iCurrentGroupLink; + + /// Own: True if predictive search is enabled + TBool iPredictiveSearch; + + /// Own: Text from search control + RBuf iSearchText; + + /** + * store marked contact's links + * not own + */ + MVPbkContactBookmarkCollection* iBookMarkCollection; + + /** + * temporary array contains marked contact position infomation from iBaseView, + * these contacts non matching contacts from search result. + * own + */ + RPointerArray iMarkedContactsPositionInfoArray; + + /** + * Predictive search filter + * ref + */ + CPbk2PredictiveSearchFilter& iSearchFilter; + + ///Ref : PBk2 contact name formatter interface + MPbk2ContactNameFormatter& iNameformatter; + + //Flag to indicate Feature manager initilization + TBool iFeatureManagerInitilized ; + + //Stores the Start Index of the Marked Contact that is not + //part of our searched contact list + TInt iNonMatchedMarkedContactStartIndex; + + //Stores the End Index of the Marked Contact that is not + //part of our searched contact list + TInt iNonMatchedMarkedContactEndIndex; +}; + +#endif // CPBK2_PREDICTIVEVIEWSTACK_H + +// End of File