--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/UIControls/inc/CPbk2AdaptiveSearchGridFiller.h Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,169 @@
+/*
+* 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 contact editor dialog implementation.
+*
+*/
+
+
+#ifndef CPBK2ADAPTIVESEARCHGRIDFILLER_H
+#define CPBK2ADAPTIVESEARCHGRIDFILLER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <aknsfld.h>
+
+// FORWARD DECLARATIONS
+class CAknSearchField;
+class CFindUtil;
+class CPbk2AdaptiveGrid;
+class MVPbkContactViewBase;
+class MPbk2ContactNameFormatter;
+
+// CLASS DECLARATION
+
+/**
+ * Phonebook 2 adaptive search grid filler.
+ *
+ * This class used to create adaptive search grid used to
+ * search contacts from Phonebook 2.
+ */
+NONSHARABLE_CLASS(CPbk2AdaptiveSearchGridFiller) : public CActive
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Creates a new instance of this class.
+ *
+ * @param aField Search field where adaptive search grid is updated.
+ */
+ static CPbk2AdaptiveSearchGridFiller* NewL( CAknSearchField& aField, MPbk2ContactNameFormatter& aNameFormatter );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPbk2AdaptiveSearchGridFiller();
+
+ public: // Interface
+
+ /**
+ * Start creating adaptive search grid
+ *
+ * Grid will be created asynchronously. When the grid is updated, it is
+ * automatically updated to the CAknSearchField object provided in the
+ * construction of this object. Client will not be notified when constructing
+ * of the grid is ready.
+ *
+ * @param aModel contains contacts shown in the list box, this is used
+ * to create adaptive search grid
+ * @param aFindText is text user has entered in the find pane.
+ */
+ void StartFilling( const MVPbkContactViewBase& aView, const TDesC& aSearchString );
+
+
+ /**
+ * Stop creating adaptive search grid
+ */
+ void StopFilling();
+
+ /**
+ * Clear adaptive search grid cache.
+ *
+ * Data set (contacts shown in the list box) has changed, e.g. contact is removed or added.
+ * This means that adaptive search grids used before, cannot be reused.
+ */
+ void ClearCache();
+
+
+ /**
+ * Invalidate Adaptive Search Grid
+ *
+ * This means that even if the adaptive search grid doesn't set, it is still given again to the
+ * Avkon component. If this is not called, then the grid is given to Avkon components only when
+ * it changes.
+ */
+ void InvalidateAdaptiveSearchGrid();
+
+
+ /**
+ * Change focus back to Adaptive Search Grid
+ *
+ * This means that even if the "C" key is pressed,the focus will be change to parent control.
+ * But actually this operation is done to Adaptive Search Grid. So set the focus back to it.
+ */
+ void SetFocusToAdaptiveSearchGrid();
+
+
+ private: // from CActive
+
+ void RunL();
+ void DoCancel();
+ TInt RunError( TInt aError );
+
+ private: // Implementation
+
+ CPbk2AdaptiveSearchGridFiller( CAknSearchField& aField, MPbk2ContactNameFormatter& aNameFormatter );
+ void ConstructL();
+
+ CPbk2AdaptiveGrid* KeyMapFromCache( const TDesC& aFindText );
+ void AddKeyMapToCacheL( const TDesC& aFindText, const TDesC& aKeyMap );
+ void SetAdaptiveGridCharsL( const TInt aMaxSpacesNumber );
+ CDesC16Array* SplitContactFieldTextIntoArrayLC( const TDesC& aText );
+ void BuildGridL( const TDesC& aContactTitle, const TDesC& aSearchString, HBufC*& aKeyMap );
+ TInt NumberOfSpacesInString( const TDesC& aSearchString );
+ // Used to judge if this contact's title include drgraphs
+ TBool IsDigraphContactsTitleL(const TDesC& aContactTitle);
+ private: // Data
+
+ /// Own: Containts adaptive search grid.
+ HBufC* iKeyMap;
+
+ /// Own: Contacts in the model are processed in a steps, this variable is
+ /// used to hold the next step.
+ TInt iCounter;
+
+ /// Ref: Search field where use enters the text. Responsible to show adaptive search grid.
+ CAknSearchField& iSearchField;
+
+ /// Own: Cache adaptive grid keymaps
+ RPointerArray<CPbk2AdaptiveGrid> iAdaptiveGridCache;
+
+ /// Ref: View containing contacts.
+ const MVPbkContactViewBase* iView;
+
+ /// Ref: Used to format contact name
+ MPbk2ContactNameFormatter& iNameFormatter;
+
+ /// Own: Search string used to match contacts
+ HBufC* iSearchString;
+
+ /// Own: Find util used to match contacts and construct character grid
+ CFindUtil* iFindUtil;
+
+ /// Own: Current adaptive search grid. Used to prevent setting same grid multiple times.
+ HBufC* iCurrentGrid;
+
+ /// Used to invalidate grid, even if the grid remains same, it is anyway set if this is set to
+ /// ETrue
+ TBool iInvalidateAdaptiveSearchGrid;
+
+ /// Used to get the focus for the search pane,when it is true, the search pane will be drawn and get
+ /// the focus
+ TBool iSetFocusToSearchGrid;
+ /// Used to save the contacts' title which include drgraphs
+ RPointerArray<HBufC> iDigraphContactsTitleArray;
+ };
+
+#endif // CPBK2ADAPTIVESEARCHGRIDFILLER_H
+
+// End of File