phonebookui/Phonebook2/UIControls/inc/CPbk2PredictiveSearchFilter.h
branchRCL_3
changeset 20 f4a778e096c2
parent 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/UIControls/inc/CPbk2PredictiveSearchFilter.h	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,290 @@
+/*
+* 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 search pane filter. This acts as a wrapper to the FindBox in
+*     NameslistView. Info needs to be passed to this filter before the FindBox.
+*
+*/
+#ifndef CPBK2PREDICTIVESEARCHFILTER_H_
+#define CPBK2PREDICTIVESEARCHFILTER_H_
+
+// INCLUDES
+#include <e32base.h>
+#include <e32def.h>
+#include <w32std.h>
+#include <coecntrl.h>   // CCoeControl
+#include <eikappui.h>
+
+// FORWARD DECLARATIONS
+class CAknSearchField;
+class MPbk2FilteredViewStack;
+class MPbk2ContactNameFormatter;
+class CRunAsynch;
+class MVPbkViewContact;
+class CPbk2PredictiveViewStack;
+
+/// Unnamed namespace for local definitions
+namespace {
+
+/// Search field length
+const TInt KSearchFieldLength = 40;
+
+} /// namespace
+
+/**
+ * Phonebook 2 predictive search filter.
+ */
+
+NONSHARABLE_CLASS(CPbk2PredictiveSearchFilter) : public CCoeControl
+    {
+    
+    enum TEditorMode
+        {
+        ENone = 0,
+        EPaste
+        };
+    
+    public: // Constructors and destructor
+
+        /**
+         * Creates a new instance of this class.
+         *
+         * @return  A new instance of this class.
+         */
+        static CPbk2PredictiveSearchFilter* NewL();
+
+        /**
+         * Destructor.
+         */
+        ~CPbk2PredictiveSearchFilter();
+        
+    public: // Implementation
+        /**
+         * Filters the KeyEvent
+         * 
+         */
+        void FilterL( const TKeyEvent& aKeyEvent, TEventCode aType, CAknSearchField* aSearchField );
+        
+        /**
+         * Updates the FindPane Display text.
+         * 
+         * Called when a character is added to or deleted from the FindPane.
+         * The descriptor aFindPaneText contains the entire new inline text string,
+         * not just the new text to be combined with the old inline text.
+         * 
+         * @param aFindPaneText Descriptor which holds the entire new inline text string.
+         * Once this function completes, this param will hold the
+         * respective predictive search key which can be passed to
+         * the ViewStack for the actual Search.
+         * 
+         *  
+         * @returns ETrue, if the filter data is updated successfully. 
+         *      Only then we need to pass the find query to the ViewStack 
+         */
+        TBool StartFindPaneInlineEditL( TDes& aFindPaneText );
+        
+        /**
+         * Handler to the Predictive Search Results when there is no match
+         * found for a query
+         * @param aQueryString - Holds the Actual Search Query
+         * @param aMatchSeq - Holds the matched item. The aMatchSeq will be 
+         *      empty, if there is no match found. 
+         */
+        void HandlePSNoMatchL( const TDesC& aQueryString, const TDesC& aMatchSeq );
+        
+        /**
+         * Sets the AKN FindPane
+         * @param aSearchField : Ptr to the Avkon findPane
+         */
+        void SetAknSearchFieldL( CAknSearchField* aSearchField );
+        
+        /**
+         * Checks if predictive search is supported
+         *
+         * @return ETrue if predictive input activated else EFalse
+         *  
+        */
+        TBool IsPredictiveActivated() const;
+        
+        /**
+         * Check whether the FindPane filter is locked or not
+         * 
+         * Before passing any keys to the FindPane this Function
+         * needs to be checked. Only Backspace should be passed
+         * if the the findpane is locked, which will release the lock.
+         * 
+         * @return ETrue if FindPane is locked else EFalse
+        */ 
+        TBool IsLocked() const;
+        
+        /**
+         * Reset the findPane Filter
+         * The state of the FindPane filter is reset
+         * This needs to be called along with the FindPane Reset
+         */ 
+        void ResetL();
+        
+        /**
+         * Reset the FindPane 
+         */ 
+        void FindPaneResetL();
+        
+        /**
+         * Fills the aSearchText with the actual Search String.
+         * NOTE: 
+         * -----
+         * When predictive search is enabled, the search text will be
+         * different from the findpane text, since the findpane will show the
+         * first matched item in the listbox and 
+         * not the excat chars for which the search was initiated.
+         * If you want to get the FindPane text, use the API FindPaneTextL()
+         * 
+         * When Predictive Search is Disabled, both GetSearchTextL &
+         * FindPaneTextL will return the same data.
+         * 
+         * @param aSearchText : This will be filled with the actual string
+         *          for which the search was initiated.
+         */ 
+        void GetSearchTextL( RBuf& aSearchText );
+        
+        /**
+         * Is editor in Paste Mode
+         * @return ETrue if the findpane is in PasteMode else EFalse
+         */ 
+        TBool IsPasteMode();
+        
+        /**
+         * Is Filtering of FindPane Text is ongoing
+         * Dont perforn any operation on the Findpane or FindPane filter
+         * when Filtering is ongoing.
+         * @return ETrue-if Filtering is ongoing else EFalse
+         */ 
+        TBool IsFiltering();
+        
+        
+        /**
+         * Commits the matched string to the FindPane
+         * 
+         * aViewStack - Holds the items displayed on the NamesList
+         * aNameFormatter - Phonebook 2 contact name formatter interface
+         */            
+        TInt CommitFindPaneTextL( MPbk2FilteredViewStack& aViewStack,
+              MPbk2ContactNameFormatter& aNameFormatter );
+        
+        /**
+         * Commits the matched string of specific contact to the FindPane
+         * 
+         * aViewStack - Holds the items displayed on the NamesList
+         * aNameFormatter - Phonebook 2 contact name formatter interface
+         */
+        void CommitFindPaneTextL( MPbk2FilteredViewStack& aViewStack,
+                                        MPbk2ContactNameFormatter& aNameFormatter, 
+                                        const TInt aIndex );
+        
+        
+        /**
+         * Foreground event handling function.
+         * 
+         * @ param  aForeground-Indicates the required focus state of the 
+         * control. 
+         */
+        void HandleForegroundEventL(TBool aForeground);
+        
+        /**
+         * Gets the text in the find box. Returns NULL if not
+         * applicable or there is no text in the box.
+         *            
+         * @return  Find box text or NULL.
+         */
+        HBufC* FindPaneTextL();
+        
+        /**
+         * Redraws search box content
+         */
+        void ReDrawL(TBool aAsynchronous = EFalse);
+             
+        void LookupL( const MVPbkViewContact& aContact, CPbk2PredictiveViewStack& aView, 
+                MPbk2ContactNameFormatter& aNameFormatter, TDes& aMatchSeqChr );
+        
+    private:
+        /*
+         * Add this FindPane filter to the View Stack
+         * This takes the high priority then FEP
+         */
+         void AddToViewStackL();
+         
+        /*
+         * Remove the filter from the View Stack
+         */ 
+         void RemoveFromViewStack();
+         
+         void CommitFindPaneTextL( const TDesC& aMatchSeq );
+         
+         TBool IsMirroredInputLang();
+         
+         void SetSearchBoxTextL( const TDesC& aText, TInt aCursorPos, TBool aDrawNow = ETrue );
+        
+    private: // Implementation
+        CPbk2PredictiveSearchFilter();
+        void ConstructL();
+
+    public: // From CCoeControl
+        TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+        
+    private: // Data
+        /// Own: Is true when filtering
+        TBool iFiltering;
+        
+        /// Ref : eikappui
+        CEikAppUi& iAppUi;
+        
+        /// Owns: Contains the actual string for which Predictive search was initiated
+        RBuf iPredictiveTextEntered;        
+        
+        ///Doesnt Own - FindPane
+        CAknSearchField* iSearchField;        
+        
+        /// To know whether Filter is locked or not
+        TBool iLocked;
+        
+        /// To know the mode of the findPane filter
+        TEditorMode iEditorMode;
+        
+        /// ETrue if the Filter has been added to the View Stack
+        TBool iViewStack;
+        
+        /// ETrue if Predictive search is enabled
+        TBool iPredictiveSearchEnabled;
+        
+        ///Identify a Long Key Press
+        TBool iLongKeyPress;
+        
+        ///Serach Text which is displayed on the FindPane
+        ///Display Text
+        ///Owns
+        HBufC* iSearchText;
+        
+        /// ETrue if the Filter should be added to the View Stack
+        TBool iAddToViewStack;
+        
+        /// If ETrue space should be removed
+        TBool iRemoveSpace;
+        
+        /// ETrue If virtual keyboard was used to tap query
+        TBool iVKbUsed;
+        
+        // Own: Use to run method in asynchronous mode
+        CRunAsynch* iRunAsynch;
+    };
+
+#endif /* CPBK2PREDICTIVESEARCHFILTER_H_ */