williamr@4: /* williamr@4: * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). williamr@4: * All rights reserved. williamr@4: * This component and the accompanying materials are made available williamr@4: * under the terms of "Eclipse Public License v1.0" williamr@4: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: * williamr@4: * Initial Contributors: williamr@4: * Nokia Corporation - initial contribution. williamr@4: * williamr@4: * Contributors: williamr@4: * williamr@4: * Description: williamr@4: * Search Field support. williamr@4: * williamr@4: * williamr@4: */ williamr@4: williamr@4: williamr@4: #ifndef __AKNSFLD_H__ williamr@4: #define __AKNSFLD_H__ williamr@4: williamr@4: // INCLUDES williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include // for subscriber/publisher williamr@4: williamr@4: // FORWARD DECLARATIONS williamr@4: class CEikEdwin; williamr@4: class CGlobalText; williamr@4: class CAknInputFrame; williamr@4: class CAknSearchFieldIndicator; williamr@4: class CAknsListBoxBackgroundControlContext; williamr@4: class CAknsFrameBackgroundControlContext; williamr@4: class CEikListBox; williamr@4: class CAknAdaptiveSearch; williamr@4: class MAdaptiveSearchTextObserver; williamr@4: class CAknSearchField; williamr@4: class CHwKbSubscriber; williamr@4: williamr@4: /** williamr@4: * Adaptive search text observer will be notified when adaptive search williamr@4: * text/language are changed. Notify about text changing when adaptive search williamr@4: * grid is opened for the first time (empty search text is generated) or when williamr@4: * user taps the grid so that new character is inputted. Notify about language williamr@4: * chnging when got information from CenRep. williamr@4: * williamr@4: * @since 5.0 williamr@4: */ williamr@4: class MAdaptiveSearchTextObserver williamr@4: { williamr@4: public: williamr@4: /** williamr@4: * Notification and handling of an adaptive search text change. williamr@4: * williamr@4: * @param aSearchField The source search field of this message. williamr@4: */ williamr@4: virtual void AdaptiveSearchTextChanged( CAknSearchField* aSearchField ) = 0; williamr@4: }; williamr@4: williamr@4: williamr@4: // CLASS DECLARATION williamr@4: williamr@4: /** williamr@4: * The CAknSearchField class implements a Search field control. There are williamr@4: * different styles for the search field defined by a TSearchFieldStyle. williamr@4: * williamr@4: * @since Series 60 0.9 williamr@4: */ williamr@4: NONSHARABLE_CLASS(CAknSearchField) : public CAknControl, williamr@4: public MCoeControlObserver, williamr@4: public MEikCommandObserver williamr@4: { williamr@4: public: williamr@4: /** williamr@4: * Search field style. williamr@4: */ williamr@4: enum TSearchFieldStyle williamr@4: { williamr@4: /** Use only ESearch in Series 60 */ williamr@4: ESearch, williamr@4: /** (Not used) */ williamr@4: EInput, williamr@4: /** (Not used) */ williamr@4: EUrl, williamr@4: /** (Not used) */ williamr@4: EPhone, williamr@4: /** (Not used) */ williamr@4: EPlain, williamr@4: /** Use as popup search field. */ williamr@4: EPopup, williamr@4: /** Use as pinb search field. */ williamr@4: EPinb, williamr@4: /** For Clock application/list_single_heading_pane. */ williamr@4: EClockApp, williamr@4: /** Same as ESearch, but using CreateWindowL(). */ williamr@4: EFixed, williamr@4: /** Layout where no line is used. */ williamr@4: ESearchWithoutLine, williamr@4: /** Popup window layout. */ williamr@4: EPopupWindow, williamr@4: /** For adaptive search grid */ williamr@4: /** @since 5.0 */ williamr@4: EAdaptiveSearch, williamr@4: /** For adaptive search grid */ williamr@4: /** Same as EAdaptiveSearch, but using CreateWindowL(). */ williamr@4: /** @since 5.0 */ williamr@4: EAdaptive, williamr@4: /** For adaptive search grid */ williamr@4: /** Same as EAdaptiveSearch, but using popup find pane. */ williamr@4: /** @since 5.0 */ williamr@4: EPopupAdaptiveSearch, williamr@4: /** For adaptive search grid */ williamr@4: /** Popup window layout */ williamr@4: /** @since 5.0 */ williamr@4: EPopupAdaptiveSearchWindow williamr@4: }; williamr@4: williamr@4: public: williamr@4: williamr@4: /** williamr@4: * Destructor. williamr@4: */ williamr@4: IMPORT_C ~CAknSearchField(); williamr@4: williamr@4: /** williamr@4: * Two-phased constructor. williamr@4: * @param aParent Reference to parent control. williamr@4: * @param aFieldStyle Defines the UI style. williamr@4: * @param aIcon A pointer to the icon to be shown in the search box frame. williamr@4: * Takes ownerships. Can be @c NULL. williamr@4: * @param aTextLimit Defines the maximum text length. williamr@4: * @return A pointer to contructed @c CAknSearchField object. williamr@4: */ williamr@4: IMPORT_C static CAknSearchField* NewL( const CCoeControl& aParent, TSearchFieldStyle aFieldStyle, CGulIcon* aIcon, TInt aTextLimit ); williamr@4: williamr@4: public: // for search string manipulation williamr@4: /** williamr@4: * Returns the length of search text. williamr@4: * @return The length of search text. williamr@4: */ williamr@4: IMPORT_C TInt TextLength() const; williamr@4: williamr@4: /** williamr@4: * Returns the text of search field by writing it into the williamr@4: * buffer aSearchTxt. williamr@4: * @param aSearchTxt Reference to the text buffer. Buffer size must be same williamr@4: * or greater than maximum text length, which is given in williamr@4: * constructor. williamr@4: */ williamr@4: IMPORT_C void GetSearchText( TDes& aSearchTxt ) const; williamr@4: williamr@4: /** williamr@4: * Sets text into search field. williamr@4: * @param aSearchTxt Reference to the text buffer. williamr@4: */ williamr@4: IMPORT_C void SetSearchTextL( const TDesC& aSearchTxt ); williamr@4: williamr@4: /** williamr@4: * Selects the whole search text. williamr@4: */ williamr@4: IMPORT_C void SelectSearchTextL(); williamr@4: williamr@4: /** williamr@4: * Clears text in the search field. williamr@4: */ williamr@4: IMPORT_C void ResetL(); williamr@4: williamr@4: /** williamr@4: * Sets additional info text to the search field. williamr@4: * @param aText Reference to the text buffer. williamr@4: */ williamr@4: IMPORT_C void SetInfoTextL( const TDesC& aText ); williamr@4: williamr@4: /** williamr@4: * Calls editor's @c ClipboardL() function. williamr@4: * @param aClipboardFunc Clipboard function. williamr@4: */ williamr@4: IMPORT_C void ClipboardL( CEikEdwin::TClipboardFunc aClipboardFunc ); williamr@4: williamr@4: /** williamr@4: * Return search field style williamr@4: * @since 5.0 williamr@4: * @return style of search field williamr@4: */ williamr@4: IMPORT_C CAknSearchField::TSearchFieldStyle SearchFieldStyle() const; williamr@4: williamr@4: public: // new methods for Avkon Skins support williamr@4: williamr@4: /** williamr@4: * Sets whether skins are enabled on this control. The default value is williamr@4: * determined from global setting from @c CAknAppUi. williamr@4: * @since Series 60 2.0 williamr@4: * @param aEnabled @c ETrue if skins are enabled, @c EFalse if not. williamr@4: */ williamr@4: IMPORT_C void SetSkinEnabledL( const TBool aEnabled ); williamr@4: williamr@4: public: // from MCoeControlObserver williamr@4: williamr@4: /** williamr@4: * From @c MCoeControlObserver, Acts upon changes in the hosted control's state. williamr@4: * This class's implementation is trivial and should be able to be safely williamr@4: * re-implemented in directly client-derived classes. For non-base setting williamr@4: * page classes, a call to the base class should be made. williamr@4: * @param aControl Control that caused the event. (not used in default implementation) williamr@4: * @param aEventType Type of the event. williamr@4: */ williamr@4: void HandleControlEventL( CCoeControl* aControl,TCoeEvent aEventType ); williamr@4: williamr@4: public: // From CCoeControl williamr@4: williamr@4: /** williamr@4: * From @c CCoeControl, Handles key event. williamr@4: * @param aKeyEvent The key event. williamr@4: * @param aType The type of the event. williamr@4: * @return Indicates whether the key event was used by this control or not. williamr@4: */ williamr@4: IMPORT_C TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,TEventCode aType ); williamr@4: williamr@4: /** williamr@4: * From @c CCoeControl, Handles pointer event. williamr@4: * @since 5.0 williamr@4: * @param aPointerEvent The pointer event. williamr@4: * Invert adaptive search grid by tapping search field. williamr@4: */ williamr@4: void HandlePointerEventL( const TPointerEvent& aPointerEvent ); williamr@4: williamr@4: /** williamr@4: * From @c CCoeControl, Returns minimum size. Minimum size depends on williamr@4: * zoom factor. williamr@4: * @return Minimum size. williamr@4: */ williamr@4: IMPORT_C TSize MinimumSize(); williamr@4: williamr@4: /** williamr@4: * Sets this control as visible or invisible. williamr@4: * williamr@4: * @since S60 3.2 williamr@4: * @param aVisible ETrue to make the control visible, EFalse to make williamr@4: * it invisible. williamr@4: */ williamr@4: IMPORT_C void MakeVisible( TBool aVisible ); williamr@4: williamr@4: /** williamr@4: * From @c CCoeControl, Resource change handling. williamr@4: * williamr@4: * @param aType Message type. williamr@4: */ williamr@4: void HandleResourceChange( TInt aType ); williamr@4: williamr@4: public: williamr@4: williamr@4: /** williamr@4: * Sets position of the line on main pane. williamr@4: * @since Series 60 2.0 williamr@4: * @param aLinePos The position as defined in @c TAknSeparatorLinePos williamr@4: */ williamr@4: IMPORT_C void SetLinePos( TInt aLinePos ); williamr@4: williamr@4: /** williamr@4: * Access to the edwin owned by the search field. williamr@4: * @since Series 60 2.6 williamr@4: * @return Reference to the edwin owned by the search field. williamr@4: */ williamr@4: IMPORT_C CEikEdwin& Editor() const; williamr@4: williamr@4: /** williamr@4: * Set adaptive search grid characters. williamr@4: * @since 5.0 williamr@4: * @param aGridChars The characters for adaptive search grid. williamr@4: */ williamr@4: IMPORT_C void SetAdaptiveGridChars( const TDesC& aGridChars ) const; williamr@4: williamr@4: /** williamr@4: * Show adaptive search grid. williamr@4: * Application can activate adaptive search grid from the option menu. williamr@4: * @since 5.0 williamr@4: */ williamr@4: IMPORT_C void ShowAdaptiveSearchGrid() const; williamr@4: williamr@4: /** williamr@4: * Set column filter flag for adaptive search grid williamr@4: * @since 5.0 williamr@4: * @param aFlag The bit flag shows which columns take into account williamr@4: * during filtering. williamr@4: */ williamr@4: IMPORT_C void SetListColumnFilterFlags( const TBitFlags32 aFlag ); williamr@4: williamr@4: /** williamr@4: * Send column filter flag for adaptive search grid williamr@4: * @since 5.0 williamr@4: * @return aFlag The bit flag shows which columns take into account williamr@4: * during filtering. williamr@4: */ williamr@4: IMPORT_C TBitFlags32 ListColumnFilterFlags() const; williamr@4: williamr@4: /** williamr@4: * Adds an adaptive search text observer. Duplicates are not checked williamr@4: * (i.e. adding the same observer multiple times is not prevented). williamr@4: * @since 5.0 williamr@4: * @param aObserver Must be non-NULL. williamr@4: */ williamr@4: IMPORT_C void AddAdaptiveSearchTextObserverL( MAdaptiveSearchTextObserver* aObserver ); williamr@4: williamr@4: /** williamr@4: * Removes an adaptive search text observer. williamr@4: * @since 5.0 williamr@4: * @param aObserver The observer to be removed. williamr@4: * @return ETrue if removal ok, EFalse if observer was not removed (not williamr@4: * found from the list of observers). williamr@4: */ williamr@4: IMPORT_C TBool RemoveAdaptiveSearchTextObserver( MAdaptiveSearchTextObserver* aObserver ); williamr@4: williamr@4: /** williamr@4: * Returns information whether adaptive search is enabled or not williamr@4: * @since 5.0 williamr@4: * @return ETrue if adaptive search is enabled, EFalse otherwise. williamr@4: */ williamr@4: IMPORT_C TBool AdaptiveSearchEnabled(); williamr@4: williamr@4: /** williamr@4: * Notify client if input language changed in settings, for adaptive search williamr@4: * @since 5.0 williamr@4: * @return ETrue if language has changed, EFalse otherwise. williamr@4: */ williamr@4: IMPORT_C TBool LanguageChanged() const; williamr@4: williamr@4: private: // from MObjectProvider williamr@4: TTypeUid::Ptr MopSupplyObject( TTypeUid aId ); williamr@4: private: williamr@4: TInt CountComponentControls() const; williamr@4: CCoeControl* ComponentControl( TInt aIndex ) const; williamr@4: void SizeChanged(); williamr@4: void FocusChanged( TDrawNow aDrawNow ); williamr@4: private: williamr@4: void ConstructL( const CCoeControl& aParent, TSearchFieldStyle aFieldStyle, CGulIcon* aIcon, TInt aTextLimit ); williamr@4: CAknSearchField(); williamr@4: private: williamr@4: void ZoomEditorL(); williamr@4: private: // from MEikCommandObserver williamr@4: IMPORT_C void ProcessCommandL( TInt aCommandId ); williamr@4: private: williamr@4: void UpdatePopupCBAL(); williamr@4: void RestorePopupCBA(); williamr@4: void SetupSkinContextL(); williamr@4: public: williamr@4: williamr@4: /** williamr@4: * Sets a list box for this control. williamr@4: * @since Series 60 2.6 williamr@4: * @param aListBox A pointer to a list box object. williamr@4: */ williamr@4: void SetListbox( CEikListBox* aListBox ); williamr@4: williamr@4: /** williamr@4: * Sets the parent control for this control. williamr@4: * @since Series 60 2.6 williamr@4: * @param aParent A pointer to the parent control. williamr@4: */ williamr@4: void SetParentCtrl( CCoeControl* aParent ); williamr@4: williamr@4: /** williamr@4: * Indicates that is the control popup or not. williamr@4: * @since Series 60 2.6 williamr@4: * @return @c ETrue if it is a popup, @c EFalse if not. williamr@4: */ williamr@4: TBool IsPopup(); williamr@4: williamr@4: /** williamr@4: * Sets index, where listbox focus should return when popup findbox is williamr@4: * canceled. williamr@4: * @since Series 60 3.1 williamr@4: * @internal williamr@4: */ williamr@4: void SetOldItemIndex( TInt aOldItemIndex ); williamr@4: williamr@4: /** williamr@4: * Returns index, where listbox focus should return when popup findbox is williamr@4: * canceled williamr@4: * @since Series 60 3.1 williamr@4: * @internal williamr@4: */ williamr@4: TInt OldItemIndex(); williamr@4: williamr@4: /** williamr@4: * Set the language changed flag, for adaptive search williamr@4: * @since 5.0 williamr@4: * @param aLanguageChanged ETrue if language has changed, EFalse otherwise. williamr@4: */ williamr@4: void SetLanguageChangedFlag( TBool aLanguageChanged ); williamr@4: williamr@4: /** williamr@4: * Handle HW keyboard active/deactive event. williamr@4: * @since 5.0 williamr@4: */ williamr@4: void HandleHWKeyboardModeChangeL(); williamr@4: williamr@4: /** williamr@4: * A helper methord used in ContructL(). williamr@4: * Get Adaptive Search setting and subscribe hardware williamr@4: * keyboard layout changing. williamr@4: * williamr@4: * @param aShowIndicator, ETrue if indicator need be shown williamr@4: * @return ETrue if Adaptive is enabled in cenrep/ williamr@4: * @since 5.0 williamr@4: */ williamr@4: TBool GetASStatusAndSubKbLayoutL( TBool& aShowIndicator ); williamr@4: williamr@4: private: williamr@4: // The bit flag shows which collumns take into account during filltering williamr@4: TBitFlags32 iColumnFlag; williamr@4: CEikEdwin* iEditor; williamr@4: CGlobalText* iGlobalText; williamr@4: CAknInputFrame* iInputFrame; williamr@4: CAknSearchFieldIndicator* iIndicator; williamr@4: CAknsListBoxBackgroundControlContext* iSkinContext; williamr@4: TInt iFlags; williamr@4: TInt iLinePos; williamr@4: CAknsFrameBackgroundControlContext* iInputContext; williamr@4: TBool iIsPopup; williamr@4: TBool iCBAObserverUpdated; williamr@4: CEikListBox *iListBox; // not owned williamr@4: CCoeControl *iParent; // not owned williamr@4: CEikButtonGroupContainer *iCba; // this is only for checking whether cba changed williamr@4: TInt iOldItemIndex; williamr@4: CAknAppUi* iBackedAppUi; williamr@4: CAknAdaptiveSearch* iAdaptiveSearch; williamr@4: TSearchFieldStyle iStyle; williamr@4: TBool iLanguageChanged; // flag shows was input language changed or not williamr@4: williamr@4: // For hybird keyborad williamr@4: RProperty iHwKeyboardPro; williamr@4: CHwKbSubscriber* iHwKbSub; williamr@4: }; williamr@4: williamr@4: #endif williamr@4: williamr@4: