classicui_pub/searchfield_api/inc/aknsfld.h
changeset 0 2f259fa3e83a
child 10 3d340a0166ff
equal deleted inserted replaced
-1:000000000000 0:2f259fa3e83a
       
     1 /*
       
     2 * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *  Search Field support. 
       
    16 *
       
    17 *
       
    18 */
       
    19 
       
    20 
       
    21 #ifndef __AKNSFLD_H__
       
    22 #define __AKNSFLD_H__
       
    23 
       
    24 // INCLUDES
       
    25 #include <AknControl.h>
       
    26 #include <gulicon.h>
       
    27 #include <eikgted.h>
       
    28 #include <aknappui.h>
       
    29 #include <e32property.h>  // for subscriber/publisher
       
    30 
       
    31 // FORWARD DECLARATIONS
       
    32 class CEikEdwin;
       
    33 class CGlobalText;
       
    34 class CAknInputFrame;
       
    35 class CAknSearchFieldIndicator;
       
    36 class CAknsListBoxBackgroundControlContext;
       
    37 class CAknsFrameBackgroundControlContext;
       
    38 class CEikListBox;
       
    39 class CAknAdaptiveSearch;
       
    40 class MAdaptiveSearchTextObserver; 
       
    41 class CAknSearchField;
       
    42 class CHwKbSubscriber;
       
    43 
       
    44 /** 
       
    45  * Adaptive search text observer will be notified when adaptive search 
       
    46  * text/language are changed. Notify about text changing when adaptive search 
       
    47  * grid is opened for the first time (empty search text is generated) or when 
       
    48  * user taps the grid so that new character is inputted. Notify about language
       
    49  * chnging when got information from CenRep.  
       
    50  * 
       
    51  * @since 5.0 
       
    52  */ 
       
    53 class MAdaptiveSearchTextObserver 
       
    54     { 
       
    55     public: 
       
    56        /** 
       
    57         * Notification and handling of an adaptive search text change. 
       
    58         * 
       
    59         * @param aSearchField The source search field of this message. 
       
    60         */ 
       
    61         virtual void AdaptiveSearchTextChanged( CAknSearchField* aSearchField ) = 0; 
       
    62     }; 
       
    63 
       
    64  
       
    65 // CLASS DECLARATION
       
    66 
       
    67 /**
       
    68  * The CAknSearchField class implements a Search field control. There are 
       
    69  * different styles for the search field defined by a TSearchFieldStyle.
       
    70  *
       
    71  * @since Series 60 0.9
       
    72  */
       
    73 NONSHARABLE_CLASS(CAknSearchField) : public CAknControl,
       
    74 		                             public MCoeControlObserver,			
       
    75                 		             public MEikCommandObserver
       
    76 {
       
    77 public:
       
    78    /**
       
    79     * Search field style.
       
    80     */
       
    81     enum TSearchFieldStyle 
       
    82         {
       
    83         /** Use only ESearch in Series 60 */
       
    84         ESearch,
       
    85         /** (Not used) */        
       
    86         EInput,
       
    87         /** (Not used) */
       
    88         EUrl,  
       
    89         /** (Not used) */
       
    90         EPhone,
       
    91         /** (Not used) */
       
    92         EPlain,
       
    93         /** Use as popup search field. */
       
    94         EPopup,         
       
    95         /** Use as pinb search field. */
       
    96         EPinb,          
       
    97         /** For Clock application/list_single_heading_pane. */
       
    98         EClockApp,      
       
    99         /** Same as ESearch, but using CreateWindowL(). */
       
   100         EFixed,         
       
   101         /** Layout where no line is used. */
       
   102         ESearchWithoutLine, 
       
   103         /** Popup window layout. */
       
   104         EPopupWindow,
       
   105 	    /** For adaptive search grid */
       
   106 	    /** @since 5.0 */
       
   107 	    EAdaptiveSearch,
       
   108 	    /** For adaptive search grid */
       
   109 	    /** Same as EAdaptiveSearch, but using CreateWindowL(). */
       
   110 	    /** @since 5.0 */
       
   111 	    EAdaptive,
       
   112         /** For adaptive search grid */
       
   113 	    /** Same as EAdaptiveSearch, but using popup find pane. */
       
   114 	    /** @since 5.0 */
       
   115 	    EPopupAdaptiveSearch,
       
   116         /** For adaptive search grid */
       
   117 	    /** Popup window layout */
       
   118 	    /** @since 5.0 */
       
   119 	    EPopupAdaptiveSearchWindow
       
   120         };
       
   121   
       
   122 public:
       
   123 
       
   124    /**
       
   125     * Destructor.
       
   126     */
       
   127     IMPORT_C ~CAknSearchField();
       
   128 
       
   129    /**
       
   130     * Two-phased constructor.
       
   131     * @param aParent Reference to parent control.
       
   132     * @param aFieldStyle Defines the UI style.
       
   133     * @param aIcon A pointer to the icon to be shown in the search box frame.
       
   134     *              Takes ownerships. Can be @c NULL.
       
   135     * @param aTextLimit Defines the maximum text length.
       
   136     * @return A pointer to contructed @c CAknSearchField object.
       
   137     */
       
   138     IMPORT_C static CAknSearchField* NewL( const CCoeControl& aParent, TSearchFieldStyle aFieldStyle, CGulIcon* aIcon, TInt aTextLimit );
       
   139 
       
   140 public:                 // for search string manipulation
       
   141    /**
       
   142     * Returns the length of search text.
       
   143     * @return The length of search text.
       
   144     */
       
   145     IMPORT_C TInt TextLength() const;
       
   146 
       
   147    /**
       
   148     * Returns the text of search field by writing it into the 
       
   149     * buffer aSearchTxt.
       
   150     * @param aSearchTxt Reference to the text buffer. Buffer size must be same
       
   151     *                   or greater than maximum text length, which is given in 
       
   152     *                   constructor.
       
   153     */
       
   154     IMPORT_C void GetSearchText( TDes& aSearchTxt ) const;
       
   155 
       
   156    /**
       
   157     * Sets text into search field.
       
   158     * @param aSearchTxt Reference to the text buffer.
       
   159     */
       
   160     IMPORT_C void SetSearchTextL( const TDesC& aSearchTxt );
       
   161 
       
   162    /**
       
   163     * Selects the whole search text.
       
   164     */
       
   165     IMPORT_C void SelectSearchTextL();
       
   166 
       
   167    /**
       
   168     * Clears text in the search field.
       
   169     */
       
   170     IMPORT_C void ResetL();
       
   171 
       
   172    /**
       
   173     * Sets additional info text to the search field.
       
   174     * @param aText Reference to the text buffer.
       
   175     */
       
   176     IMPORT_C void SetInfoTextL( const TDesC& aText );
       
   177 
       
   178    /**
       
   179     * Calls editor's @c ClipboardL() function.
       
   180     * @param aClipboardFunc Clipboard function.
       
   181     */
       
   182     IMPORT_C void ClipboardL( CEikEdwin::TClipboardFunc aClipboardFunc );
       
   183 
       
   184    /**
       
   185     * Return search field style
       
   186     * @since 5.0
       
   187     * @return style of search field 
       
   188     */   
       
   189     IMPORT_C CAknSearchField::TSearchFieldStyle SearchFieldStyle() const;
       
   190 
       
   191 public: // new methods for Avkon Skins support
       
   192 
       
   193    /**
       
   194     * Sets whether skins are enabled on this control. The default value is 
       
   195     * determined from global setting from @c CAknAppUi.
       
   196     * @since Series 60 2.0 
       
   197     * @param aEnabled @c ETrue if skins are enabled, @c EFalse if not.
       
   198     */
       
   199     IMPORT_C void SetSkinEnabledL( const TBool aEnabled );
       
   200 
       
   201 public: // from MCoeControlObserver
       
   202 
       
   203    /**
       
   204     * From @c MCoeControlObserver, Acts upon changes in the hosted control's state.
       
   205     * This class's implementation is trivial and should be able to be safely 
       
   206     * re-implemented in directly client-derived classes. For non-base setting
       
   207     * page classes, a call to the base class should be made.
       
   208     * @param aControl Control that caused the event. (not used in default implementation)
       
   209     * @param aEventType Type of the event. 
       
   210     */
       
   211     void HandleControlEventL( CCoeControl* aControl,TCoeEvent aEventType );
       
   212 
       
   213 public: // From CCoeControl
       
   214 
       
   215    /**
       
   216     * From @c CCoeControl, Handles key event.
       
   217     * @param aKeyEvent The key event. 
       
   218     * @param aType The type of the event.
       
   219     * @return Indicates whether the key event was used by this control or not.
       
   220     */
       
   221     IMPORT_C TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,TEventCode aType );
       
   222 
       
   223    /**
       
   224     * From @c CCoeControl, Handles pointer event.
       
   225     * @since 5.0
       
   226     * @param aPointerEvent The pointer event. 
       
   227     *	Invert adaptive search grid by tapping search field.    
       
   228     */
       
   229     void HandlePointerEventL( const TPointerEvent& aPointerEvent );
       
   230 
       
   231    /**
       
   232     * From @c CCoeControl, Returns minimum size. Minimum size depends on 
       
   233     * zoom factor. 
       
   234     * @return Minimum size.
       
   235     */
       
   236     IMPORT_C TSize MinimumSize();
       
   237 
       
   238    /**
       
   239     * Sets this control as visible or invisible.
       
   240     *
       
   241     * @since S60 3.2
       
   242     * @param aVisible ETrue to make the control visible, EFalse to make
       
   243     *                 it invisible.
       
   244     */
       
   245     IMPORT_C void MakeVisible( TBool aVisible );
       
   246     
       
   247     /**
       
   248      * From @c CCoeControl, Resource change handling.
       
   249      *
       
   250      * @param aType Message type.
       
   251      */
       
   252     void HandleResourceChange( TInt aType );
       
   253 
       
   254 public:
       
   255 
       
   256    /**
       
   257     * Sets position of the line on main pane.
       
   258     * @since Series 60 2.0
       
   259     * @param aLinePos The position as defined in @c TAknSeparatorLinePos
       
   260     */
       
   261     IMPORT_C void SetLinePos( TInt aLinePos );
       
   262 
       
   263    /**
       
   264     * Access to the edwin owned by the search field.
       
   265     * @since Series 60 2.6
       
   266     * @return Reference to the edwin owned by the search field.
       
   267     */
       
   268     IMPORT_C CEikEdwin& Editor() const;
       
   269 
       
   270    /**
       
   271     * Set adaptive search grid characters.
       
   272     * @since 5.0
       
   273     * @param aGridChars The characters for adaptive search grid.
       
   274     */
       
   275     IMPORT_C void SetAdaptiveGridChars( const TDesC& aGridChars ) const;
       
   276 
       
   277    /**
       
   278     * Show adaptive search grid. 
       
   279     * Application can activate adaptive search grid from the option menu.
       
   280     * @since 5.0
       
   281     */
       
   282     IMPORT_C void ShowAdaptiveSearchGrid() const;   
       
   283     
       
   284    /**
       
   285     * Set column filter flag for adaptive search grid  
       
   286     * @since 5.0
       
   287     * @param aFlag The bit flag shows which columns take into account
       
   288     * during filtering.
       
   289     */
       
   290     IMPORT_C void SetListColumnFilterFlags( const TBitFlags32 aFlag );
       
   291 
       
   292    /**
       
   293     * Send column filter flag for adaptive search grid  
       
   294     * @since 5.0
       
   295     * @return aFlag The bit flag shows which columns take into account
       
   296     * during filtering.
       
   297     */
       
   298     IMPORT_C TBitFlags32 ListColumnFilterFlags() const;
       
   299 
       
   300    /** 
       
   301     * Adds an adaptive search text observer. Duplicates are not checked 
       
   302     * (i.e. adding the same observer multiple times is not prevented). 
       
   303     * @since 5.0 
       
   304     * @param aObserver Must be non-NULL. 
       
   305     */ 
       
   306     IMPORT_C void AddAdaptiveSearchTextObserverL( MAdaptiveSearchTextObserver* aObserver );
       
   307 
       
   308    /** 
       
   309     * Removes an adaptive search text observer. 
       
   310     * @since 5.0 
       
   311     * @param aObserver The observer to be removed. 
       
   312     * @return ETrue if removal ok, EFalse if observer was not removed (not 
       
   313     * found from the list of observers). 
       
   314     */ 
       
   315     IMPORT_C TBool RemoveAdaptiveSearchTextObserver( MAdaptiveSearchTextObserver* aObserver );
       
   316 
       
   317    /** 
       
   318     * Returns information whether adaptive search is enabled or not
       
   319     * @since 5.0   
       
   320     * @return ETrue if adaptive search is enabled, EFalse otherwise.
       
   321     */ 
       
   322     IMPORT_C TBool AdaptiveSearchEnabled();
       
   323 
       
   324    /** 
       
   325     * Notify client if input language changed in settings, for adaptive search
       
   326     * @since 5.0       
       
   327     * @return ETrue if language has changed, EFalse otherwise.
       
   328     */
       
   329     IMPORT_C TBool LanguageChanged() const;
       
   330 
       
   331 private: // from MObjectProvider
       
   332     TTypeUid::Ptr MopSupplyObject( TTypeUid aId );
       
   333 private:
       
   334     TInt CountComponentControls() const;
       
   335     CCoeControl* ComponentControl( TInt aIndex ) const;
       
   336     void SizeChanged();
       
   337     void FocusChanged( TDrawNow aDrawNow );
       
   338 private:
       
   339     void ConstructL( const CCoeControl& aParent, TSearchFieldStyle aFieldStyle, CGulIcon* aIcon, TInt aTextLimit );
       
   340     CAknSearchField(); 
       
   341 private:
       
   342     void ZoomEditorL();
       
   343 private: // from MEikCommandObserver
       
   344     IMPORT_C void ProcessCommandL( TInt aCommandId );
       
   345 private:
       
   346     void UpdatePopupCBAL();
       
   347     void RestorePopupCBA();
       
   348     void SetupSkinContextL();
       
   349 public:
       
   350 
       
   351    /**
       
   352     * Sets a list box for this control.
       
   353     * @since Series 60 2.6
       
   354     * @param aListBox A pointer to a list box object.
       
   355     */
       
   356     void SetListbox( CEikListBox* aListBox );
       
   357 
       
   358    /**
       
   359     * Sets the parent control for this control.
       
   360     * @since Series 60 2.6
       
   361     * @param aParent A pointer to the parent control.
       
   362     */
       
   363     void SetParentCtrl( CCoeControl* aParent );
       
   364 
       
   365    /**
       
   366     * Indicates that is the control popup or not.
       
   367     * @since Series 60 2.6
       
   368     * @return @c ETrue if it is a popup, @c EFalse if not.
       
   369     */
       
   370     TBool IsPopup();
       
   371 
       
   372    /**
       
   373     * Sets index, where listbox focus should return when popup findbox is
       
   374     * canceled.
       
   375     * @since Series 60 3.1
       
   376     * @internal
       
   377     */
       
   378     void SetOldItemIndex( TInt aOldItemIndex );
       
   379 
       
   380    /**
       
   381     * Returns index, where listbox focus should return when popup findbox is
       
   382     * canceled
       
   383     * @since Series 60 3.1
       
   384     * @internal
       
   385     */
       
   386     TInt OldItemIndex();
       
   387 
       
   388    /** 
       
   389     * Set the language changed flag, for adaptive search
       
   390     * @since 5.0       
       
   391     * @param aLanguageChanged ETrue if language has changed, EFalse otherwise.
       
   392     */
       
   393     void SetLanguageChangedFlag( TBool aLanguageChanged );
       
   394     
       
   395     /**
       
   396      * Handle HW keyboard active/deactive event.
       
   397      * @since 5.0
       
   398      */
       
   399     void HandleHWKeyboardModeChangeL();
       
   400 
       
   401     /**
       
   402      * A helper methord used in ContructL().
       
   403      * Get Adaptive Search setting and subscribe hardware 
       
   404      * keyboard layout changing.
       
   405      *
       
   406      * @param aShowIndicator, ETrue if indicator need be shown
       
   407      * @return ETrue if Adaptive is enabled in cenrep/
       
   408      * @since 5.0
       
   409      */
       
   410     TBool GetASStatusAndSubKbLayoutL( TBool& aShowIndicator );
       
   411 
       
   412 private:	
       
   413     // The bit flag shows which collumns take into account during filltering  
       
   414     TBitFlags32 iColumnFlag;
       
   415     CEikEdwin* iEditor;   
       
   416     CGlobalText* iGlobalText;
       
   417     CAknInputFrame* iInputFrame;
       
   418     CAknSearchFieldIndicator* iIndicator; 
       
   419     CAknsListBoxBackgroundControlContext* iSkinContext;
       
   420     TInt iFlags;  
       
   421     TInt iLinePos;
       
   422     CAknsFrameBackgroundControlContext* iInputContext;
       
   423     TBool iIsPopup;
       
   424     TBool iCBAObserverUpdated;
       
   425     CEikListBox *iListBox; // not owned
       
   426     CCoeControl *iParent; // not owned
       
   427     CEikButtonGroupContainer *iCba; // this is only for checking whether cba changed 
       
   428     TInt iOldItemIndex;
       
   429     CAknAppUi* iBackedAppUi;
       
   430     CAknAdaptiveSearch* iAdaptiveSearch; 
       
   431     TSearchFieldStyle iStyle;    
       
   432     TBool iLanguageChanged; // flag shows was input language changed or not
       
   433 
       
   434     // For hybird keyborad
       
   435     RProperty iHwKeyboardPro;
       
   436     CHwKbSubscriber* iHwKbSub;
       
   437     };
       
   438  
       
   439 #endif
       
   440 
       
   441