--- /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 <e32base.h>
+#include <MVPbkContactViewObserver.h>
+#include <MVPbkContactViewBase.h>
+#include <badesca.h>
+#include "MPbk2FilteredViewStack.h"
+#include <MPsResultsObserver.h>
+#include <CPsClientData.h>
+#include <CPsPattern.h>
+#include <CVPbkContactLinkArray.h>
+
+// 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<CPsClientData>& searchResults,
+ RPointerArray<CPsPattern>& 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<CPsClientData>& 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<TPsMatchLocation>& 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<CPsPattern>& searchSeqs);
+
+
+ // Perform the psengine settings.
+ void SetPsSettingL( RPointerArray<TDesC>& 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<CPbk2ContactPositionInfo>& 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<CPbk2ContactPositionInfo>& 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<MVPbkContactViewObserver> iViewObservers;// Ref: View observers
+
+ RPointerArray<MPbk2FilteredViewStackObserver> 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<HBufC> 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<CPbk2ContactPositionInfo> 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<CPbk2ContactPositionInfo> 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