williamr@2: /* williamr@2: * Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@4: * under the terms of "Eclipse Public License v1.0" williamr@2: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: Implementation of Query control and List query control. williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: #ifndef AKNQUERYCONTROL_H williamr@2: #define AKNQUERYCONTROL_H williamr@2: williamr@2: // INCLUDES williamr@4: #include williamr@2: #include williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@4: #include williamr@4: #include williamr@2: #include williamr@2: williamr@2: #include williamr@2: #include williamr@2: williamr@4: #include williamr@4: #include williamr@2: williamr@2: #include williamr@2: #include williamr@2: williamr@2: // FORWARD DECLARATIONS williamr@2: class CAknQueryControl; williamr@2: class TAknQueryEcsObserver; williamr@2: class CAknEcsDetector; williamr@2: class CAknBitmapAnimation; williamr@2: class CAknTextControl; williamr@2: class CAknQueryEditIndicator; williamr@2: class MLAFIndex; williamr@2: class MAknEditingStateIndicator; williamr@2: class TInetAddr; williamr@2: class CAknQueryExtension; williamr@2: class TAknWindowLineLayout; williamr@2: class CAknButton; williamr@2: class CAknQueryControlExtension; williamr@2: class CAknLocationEditor; williamr@2: /** williamr@2: * MAknQueryControlObserver williamr@2: * Callback class for CAknQueryDialog williamr@2: */ williamr@2: class MAknQueryControlObserver williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * Enumeration for query control events williamr@2: */ williamr@2: enum TQueryControlEvent williamr@2: { williamr@2: EQueryControltSizeChanging, williamr@2: EQueryControlEditorStateChanging, williamr@2: EEmergencyCallAttempted williamr@2: }; williamr@2: williamr@2: /** williamr@2: * Enumeration for editor validation status williamr@2: */ williamr@2: enum TQueryValidationStatus williamr@2: { williamr@2: EEditorValueValid = KErrNone, williamr@2: EEditorValueTooSmall, williamr@2: EEditorValueTooLarge, williamr@2: EEditorValueNotParsed, williamr@2: EEditorEmpty williamr@2: }; williamr@2: williamr@2: public: williamr@2: /** williamr@2: * Gets called when editor sends size event williamr@2: */ williamr@2: virtual TBool HandleQueryEditorSizeEventL(CAknQueryControl* aQueryControl, TQueryControlEvent aEventType)=0; williamr@2: /** williamr@2: * Gets called when editor sends state event williamr@2: */ williamr@2: virtual TBool HandleQueryEditorStateEventL(CAknQueryControl* aQueryControl, TQueryControlEvent aEventType, TQueryValidationStatus aStatus)=0; williamr@2: }; williamr@2: williamr@2: /** williamr@2: * The control for a query dialog. williamr@2: * williamr@2: * Manage layout of elements in a query dialog:- the text, the image williamr@2: * and the editors. williamr@2: * williamr@2: * @see CAknQueryDialog, CAknText williamr@2: */ williamr@2: class CAknQueryControl : public CAknControl , public MEikEdwinObserver , public MEikEdwinSizeObserver , public MCoeControlObserver williamr@2: { williamr@2: public: williamr@2: williamr@2: DECLARE_TYPE_ID(0x10283143) williamr@2: williamr@2: public: williamr@2: /** williamr@2: * Enumeration for indexing into control flags, which williamr@2: * determine the control behaviour relative to a number williamr@2: * of things, e.g. emergency control handling, displaying of williamr@2: * edit indicator, enabling of predictive text, etc williamr@2: */ williamr@2: enum TQueryControlFlagBitIndices williamr@2: { williamr@2: /** Query supports emergency calls. williamr@2: */ williamr@2: EEmergencyCallsEnabledByAPI, williamr@2: /** Query doesn't support emergency calls. williamr@2: */ williamr@2: EEmergencyCallsDisabledByAPI, williamr@2: /** Predictive text input is allowed in the query. williamr@2: */ williamr@2: EPredictiveTextEntryPermitted, williamr@2: /** Editor indicators are not shown in the query. williamr@2: */ williamr@2: EEditorIndicatorOff, williamr@2: /** Additional support to ECS for CBA label change. williamr@2: * Must be enabled for touch full screen query for the williamr@2: * ECS to function properly. williamr@2: */ williamr@2: EEmergencyCallsCBASupport williamr@2: }; williamr@2: williamr@2: /** williamr@2: * Layout for queries can be done williamr@2: * using the following methods. Each williamr@2: * method is specified in a LAF section williamr@2: */ williamr@2: enum TLayoutMethod williamr@2: { williamr@2: EConfQueryLayoutM, ///LAYOUT according to LAF specs for conf queries williamr@2: EDataQueryLayoutM, ///LAYOUT according to LAF specs for data queries williamr@2: ECodeQueryLayoutM, ///LAYOUT accoridng to LAF specs for code queries williamr@2: ETimeQueryLayoutM, ///LAYOUT according to LAF specs for time queries williamr@2: EDateQueryLayoutM, ///LAYOUT according to LAF specs for date queries williamr@2: ECombinedCodeDataQueryLayoutM ///LAYOUT according to LAF specs for combined code and data queries williamr@2: }; williamr@2: williamr@2: public: // Constructors and destructor williamr@2: williamr@2: /** williamr@2: * C++ Constructor. williamr@2: */ williamr@2: IMPORT_C CAknQueryControl(); williamr@2: williamr@2: /** williamr@2: * C++ Destructor. williamr@2: */ williamr@2: IMPORT_C virtual ~CAknQueryControl(); williamr@2: williamr@2: /** williamr@2: * Second phase constructor: loads contents of array from resources. williamr@2: * williamr@2: * @param aRea resource reader pointed to a williamr@2: * query resource. williamr@2: */ williamr@2: IMPORT_C void ConstructFromResourceL(TResourceReader& aRes); williamr@2: williamr@2: public: // New functions williamr@2: williamr@2: /** williamr@2: * Set observer for query control. williamr@2: * williamr@2: * @param aQueryControlObserver Pointer to oberver class williamr@2: */ williamr@2: IMPORT_C void SetQueryControlObserver(MAknQueryControlObserver* aQueryControlObserver); williamr@2: williamr@2: /** williamr@2: * Read prompt text from resource and call SetPrompt if there was text for prompt. williamr@2: * williamr@2: * @param aRes resource reader pointed to a query resource williamr@2: */ williamr@2: IMPORT_C virtual void ReadPromptL(TResourceReader& aRes); williamr@2: williamr@2: /** williamr@2: * Set prompt text for query. This call WrapToStringL. williamr@2: * williamr@2: * @param aDesC Text for prompt williamr@2: */ williamr@2: IMPORT_C virtual void SetPromptL(const TDesC& aDesC); williamr@2: williamr@2: /** williamr@2: * Get text from text, secret text, numeric secret text snd phonenumber editor. williamr@2: * williamr@2: * @param aDes Address of variable where text returned. williamr@2: */ williamr@2: IMPORT_C void GetText(TDes& aDes) const; williamr@2: williamr@2: /** williamr@2: * Get time from date or time editors williamr@2: * williamr@2: * @return Returns data from editor. williamr@2: */ williamr@2: IMPORT_C TTime GetTime() const; williamr@2: williamr@2: /** williamr@2: * Get number from number editor. williamr@2: * williamr@2: * @return Returns number from editor williamr@2: */ williamr@2: IMPORT_C TInt GetNumber() const; williamr@2: williamr@2: /** williamr@2: * Get number from floating point editor. williamr@2: * williamr@2: * @return Returns number from editor williamr@2: */ williamr@2: IMPORT_C TReal GetFloatingPointNumberL() const; williamr@2: williamr@2: /** williamr@2: * Get duration from duration editor williamr@2: * williamr@2: * @return Return duration from editor. williamr@2: */ williamr@2: IMPORT_C TTimeIntervalSeconds GetDuration() const; williamr@2: williamr@2: williamr@2: /** williamr@2: * Get location from location editor williamr@2: * williamr@2: * Modifies aLocation in such way that either williamr@2: * longitude or latitude will change. williamr@2: */ williamr@2: IMPORT_C void GetLocation(TPosition &aLocation) const; williamr@2: williamr@2: /** williamr@2: * Set text to text and phonenumber editor. williamr@2: * williamr@2: * @param aDesC Text for editor williamr@2: */ williamr@2: IMPORT_C void SetTextL(const TDesC& aDesC); williamr@2: williamr@2: /** williamr@2: * Set date of time to editor williamr@2: * williamr@2: * @param aTime Time or date to editor. williamr@2: */ williamr@2: IMPORT_C void SetTime(TTime& aTime); williamr@2: williamr@2: /** williamr@2: * Set duration to duration editor williamr@2: * williamr@2: * @param aDuration Duration to editor williamr@2: */ williamr@2: IMPORT_C void SetDuration(TTimeIntervalSeconds& aDuration); williamr@2: williamr@2: /** williamr@2: * Set number to number editor williamr@2: * @param aNumber Number to editor williamr@2: * williamr@2: */ williamr@2: IMPORT_C void SetNumberL(TInt aNumber); williamr@2: williamr@2: /** williamr@2: * Set number to floating point editor williamr@2: * @param aNumber Number to editor williamr@2: * williamr@2: */ williamr@2: IMPORT_C void SetFloatingPointNumberL(const TReal* aNumber); williamr@2: williamr@2: /** williamr@2: * Set location to location editor williamr@2: * williamr@2: * Modifies editor in such way that it'll start williamr@2: * showing either longitude or latitude from williamr@2: * the given location. It depends on resource file williamr@2: * flags of the location editor which is used. williamr@2: * williamr@2: * @param aLocation Location to editor williamr@2: * williamr@2: */ williamr@2: IMPORT_C void SetLocation(const TPosition &aLocation); williamr@2: williamr@2: /** williamr@2: * Set max length of text to text editor. This will override length from resource williamr@2: * @param aLength Max length of text in editor williamr@2: * williamr@2: */ williamr@2: IMPORT_C void SetTextEntryLength(TInt aLength); williamr@2: williamr@2: /** williamr@2: * Return the max length of the text in the text editor williamr@2: * @return max text length williamr@2: */ williamr@2: IMPORT_C TInt GetTextEntryLength() const; williamr@2: williamr@2: /** williamr@2: * Set minimum and maximum time or date to editor williamr@2: * @param aMinimum Minimum value williamr@2: * @param aMaximum Maximum value williamr@2: * williamr@2: */ williamr@2: IMPORT_C void SetMinimumAndMaximum(const TTime& aMinimum, const TTime& aMaximum); williamr@2: williamr@2: /** williamr@2: * Set minimum and maximum duration to editor williamr@2: * @param aMinimumDuration Minimum value williamr@2: * @param aMaximumDuration Maximum value williamr@2: */ williamr@2: IMPORT_C void SetMinimumAndMaximum(const TTimeIntervalSeconds& aMinimumDuration, const TTimeIntervalSeconds& aMaximumDuration); williamr@2: williamr@2: /** williamr@2: * Set minimum and maximum number to editor williamr@2: * @param aMinimumValue Minimum value williamr@2: * @param aMaximumValue Maximum value williamr@2: */ williamr@2: IMPORT_C void SetMinimumAndMaximum(TInt aMinimumValue, TInt aMaximumValue); williamr@2: williamr@2: williamr@2: /** williamr@2: * Checks if the given number in the editor is within the maximum and minimum values. williamr@2: */ williamr@2: IMPORT_C TBool CheckNumber(); williamr@2: williamr@2: /** williamr@2: * Set the number of lines in the editor. williamr@2: * williamr@2: * @param aNum Number of lines in the editor williamr@2: */ williamr@2: IMPORT_C void SetNumberOfEditorLines(TInt aNum); williamr@2: williamr@2: /** williamr@2: * Set minimum and maximum number to floating point editor williamr@2: * @param aMinimumValue Minimum value williamr@2: * @param aMaximumValue Maximum value williamr@2: */ williamr@2: IMPORT_C void SetMinimumAndMaximum(const TReal& aMinimumValue, const TReal& aMaximumValue); williamr@2: /** williamr@2: * Get text length from editor. williamr@2: * williamr@2: * @return Length of text from editor williamr@2: */ williamr@2: IMPORT_C TInt GetTextLength() const; williamr@2: williamr@2: /** williamr@2: * Return number of editor lines williamr@2: * williamr@2: * @return Number lines in the editor williamr@2: */ williamr@2: williamr@2: IMPORT_C TInt NbrOfEditorLines() const; williamr@2: williamr@2: williamr@2: /** williamr@2: * Return number of prompt lines williamr@2: * williamr@2: * @return Number of lines in the prompt williamr@2: */ williamr@2: IMPORT_C TInt NbrOfPromptLines() const; williamr@2: williamr@2: /** williamr@2: * Get pointer to query controls control (editor) williamr@2: * williamr@2: * @param aLayout Controls layout (for one line queries use williamr@2: * EDataLayout, ECodeLayout... and for williamr@2: * multiline queries use williamr@2: * EMultiDataFirstEdwin, EMultiDataSecondEdwin...) williamr@2: * @return Pointer to control, NULL if not found williamr@2: */ williamr@2: IMPORT_C virtual CCoeControl* ControlByLayoutOrNull(TInt aLayout); williamr@2: williamr@2: /** williamr@2: * Sets and overrides other image or animation williamr@2: * Takes ownership of aImage williamr@2: */ williamr@2: IMPORT_C void SetImageL(CEikImage* aImage); williamr@2: williamr@2: /** williamr@2: * Sets and overrides other image or animation williamr@2: */ williamr@2: IMPORT_C void SetImageL(const TDesC& aImageFile, williamr@2: TInt aBmpId, TInt aBmpMaskId); williamr@2: /** williamr@2: * Sets and overrides other animation williamr@2: * williamr@2: */ williamr@2: IMPORT_C void SetAnimationL(TInt aResource); williamr@2: williamr@2: /** williamr@2: * starts animation if one present williamr@2: * williamr@2: */ williamr@2: IMPORT_C void StartAnimationL(); williamr@2: williamr@2: /** williamr@2: * stops animation if one present williamr@2: * williamr@2: * @return error code williamr@2: */ williamr@2: IMPORT_C TInt CancelAnimation(); williamr@2: williamr@2: /** williamr@2: * This cancels the query. Used when the query control has to get abandon the query williamr@2: * for some reason williamr@2: */ williamr@2: void CancelQueryL(); williamr@2: williamr@2: /** williamr@2: * @return true if the content of the editor is valid, false otherwise williamr@2: */ williamr@2: TBool EditorContentIsValidL() const; williamr@2: williamr@2: /** williamr@2: * This transfers CAknQueryControl's flags set by the dialog and then uses them. williamr@2: * The method must be called after all the contained controls are constructed; williamr@2: * Inside PreLayoutDynamicInitL is recommended. williamr@2: * williamr@2: * @param flag pattern to set and then act on. williamr@2: */ williamr@2: void SetAndUseFlagsL( TBitFlags16 aFlags ); williamr@2: williamr@2: public: // Functions from CCoeControl williamr@2: williamr@2: /** williamr@2: * From CCoeControl Handle key events. When a key event occurs, williamr@2: * CONE calls this function for each control on the control stack, williamr@2: * until one of them returns EKeyWasConsumed to indicate that it processed the key event. williamr@2: * @param aKeyEvent The key event. williamr@2: * @param aType The type of the event: EEventKey, EEventKeyUp or EEventKeyDown. williamr@2: * @return Indicates whether or not the key event was used by this control. williamr@2: */ williamr@2: IMPORT_C TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType); williamr@2: williamr@2: /** williamr@2: * From CCoeControl Give the control a mimimum size. williamr@2: * williamr@2: * @return The minimum size required by the control. williamr@2: */ williamr@2: IMPORT_C TSize MinimumSize(); williamr@2: williamr@2: /** williamr@2: * From CCoeControl Added to pass-through focus-loss warnings. williamr@2: * if not ready, this will leave. williamr@2: * @return Indicates whether or not the key event was used by this control. williamr@2: */ williamr@2: void PrepareForFocusLossL(); williamr@2: williamr@2: /** williamr@2: * From CCoeControl Added to pass-through focus-loss warnings. williamr@2: * if not ready, this will leave. williamr@2: * @return Indicates whether or not the key event was used by this control. williamr@2: */ williamr@2: void FocusChanged(TDrawNow aDrawNow); williamr@2: williamr@2: /** williamr@2: * From MEikEdwinObserver williamr@2: * williamr@2: * @param aEdwin Editor who sent the event williamr@2: * @param aEventType Type of the event williamr@2: */ williamr@2: IMPORT_C void HandleEdwinEventL(CEikEdwin* aEdwin,TEdwinEvent aEventType); williamr@2: williamr@2: public:// Functions from MEikEdwinSizeObserver williamr@2: williamr@2: /** williamr@2: * From MEikEdwinObserver williamr@2: * williamr@2: * @param aEdwin Editor who's size has changed williamr@2: * @param aEventType Type of the size event williamr@2: * @param aDesirableEdwinSize Desirable size of the edwin williamr@2: */ williamr@2: IMPORT_C TBool HandleEdwinSizeEventL(CEikEdwin* aEdwin, TEdwinSizeEvent aEventType, TSize aDesirableEdwinSize); williamr@2: williamr@2: public:// Functions from MCoeControlObserver williamr@2: williamr@2: /** williamr@2: * From MCoeControlObserver williamr@2: * @param aControl Control who caused the event williamr@2: * @param aEventType Type of the event williamr@2: */ williamr@2: IMPORT_C void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType); williamr@2: williamr@2: public: williamr@2: /** williamr@2: * @return Layout indication williamr@2: * williamr@2: * At the moment the layout is a good indication of the query type (PIN,number,etc) williamr@2: * The query dialog uses this information to determine query type in order to williamr@2: * process key events in a way dependent on the query type. These key events williamr@2: * can't be processes by the control directly because they involve actions only williamr@2: * the dialog can perform williamr@2: */ williamr@2: inline TInt QueryType() const { return iQueryType; } williamr@2: williamr@2: /** williamr@2: * Return window layout depending on Layout williamr@2: * Window layout is done by the dialog williamr@2: */ williamr@2: virtual void WindowLayout( TAknWindowLineLayout& aLayout ) const; williamr@2: williamr@2: public:// Functions from CCoeControl williamr@2: /** williamr@2: * From CCoeControl Count number of controls contained in a compound control. williamr@2: * williamr@2: * @return The number of component controls contained by this control. williamr@2: */ williamr@2: TInt CountComponentControls() const; williamr@2: williamr@2: /** williamr@2: * From CCoeControl Get the components of a compound control. williamr@2: * It returns one of the control's component controls, identified by aIndex. williamr@2: * @param anIndex The index of the control to get. williamr@2: * @return The component control with an index of aIndex. williamr@2: */ williamr@2: CCoeControl* ComponentControl(TInt anIndex) const; williamr@2: williamr@2: /** williamr@2: * From CCoeControl. williamr@2: * Handles pointer events williamr@2: */ williamr@2: IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent); williamr@2: williamr@2: IMPORT_C void HandleResourceChange(TInt aType); williamr@2: williamr@2: public: williamr@2: /** williamr@2: * Manage indexes into LAF tables williamr@2: */ williamr@2: class TIndex williamr@2: { williamr@2: public: williamr@2: TIndex(TInt aNumberOfPromptLines); williamr@2: williamr@2: public: williamr@2: TInt PromptLine() const; williamr@2: williamr@2: public: williamr@2: TInt DQPWindowTextsLine2(TInt aLineNum) const; williamr@2: TInt PNWindow() const; williamr@2: TInt PQDWindow(TInt aLineNum) const; williamr@2: TInt PQCWindow() const; williamr@2: williamr@2: private: williamr@2: void SelfTest() const; williamr@2: williamr@2: private: williamr@2: TInt iNumberOfPromptLines; williamr@2: }; williamr@2: williamr@2: protected: williamr@2: /** williamr@2: * From CCoeControl Respond to size changed. This function is called by CONE whenever SetExtentL(), williamr@2: * SetSizeL(), SetRectL(), SetCornerAndSizeL(), or SetExtentToWholeScreenL() williamr@2: * are called on the control. williamr@2: */ williamr@2: void SizeChanged(); williamr@2: williamr@2: /** williamr@2: * From CCoeControl Draw a control. williamr@2: * williamr@2: * @param aRect The region of the control to be redrawn. williamr@2: */ williamr@2: void Draw(const TRect& aRect) const; williamr@2: williamr@2: /** williamr@2: * From MObjectProvider williamr@2: */ williamr@2: TTypeUid::Ptr MopSupplyObject(TTypeUid aId); williamr@2: williamr@2: /** williamr@2: * Perform layout by calling SizeChanged williamr@2: * williamr@2: */ williamr@2: void Layout(); williamr@2: williamr@2: protected: williamr@2: /** williamr@2: * Determine the line widths for the prompt, depends on layout williamr@2: */ williamr@2: virtual void SetLineWidthsL(); williamr@2: williamr@2: /** williamr@2: * After having read the query type from resource. This method is williamr@2: * called in CostructFromResourceL() williamr@2: * williamr@2: * @see ConstructFromResourceL() williamr@2: */ williamr@2: virtual void ConstructQueryL(TResourceReader& aRes); williamr@2: williamr@2: /** williamr@2: * Layout rectangle (shift up and left by margins) williamr@2: */ williamr@2: virtual TRect LayoutRect(); williamr@2: williamr@2: /** williamr@2: * Return the rect that is used by the dialog for layout williamr@2: * This can be determined using LAF values and is equal to williamr@2: * TPoint(0,0) plus the control size plus the margins williamr@2: */ williamr@2: TRect DialogRect() const; williamr@2: williamr@2: /** williamr@2: * Return the size of the dialog. This equals to the control williamr@2: * size plus the margins. williamr@2: */ williamr@2: TSize DialogSize() const; williamr@2: williamr@2: /** williamr@2: * Calculates the size of the dialog. This can be determined williamr@2: * using LAF values and is equal to the control size plus williamr@2: * the margins. williamr@2: */ williamr@2: void DialogSizeChanged(); williamr@2: williamr@2: protected: williamr@2: /** williamr@2: * Layout the query prompt williamr@2: */ williamr@2: virtual void LayoutPrompt(const TLayoutMethod& aLayoutM); williamr@2: williamr@2: /** williamr@2: * Layout the image or the animation williamr@2: */ williamr@2: virtual void LayoutImageOrAnim(const TLayoutMethod& aLayoutM); williamr@2: williamr@2: /** williamr@2: * Layout the text editor williamr@2: */ williamr@2: virtual void LayoutEditor(const TLayoutMethod& aLayoutM); williamr@2: williamr@2: /** williamr@2: * Layout the editor frame williamr@2: */ williamr@2: virtual void LayoutEditorFrame(const TLayoutMethod& aLayoutM); williamr@2: williamr@2: /** williamr@2: * Layout the editor state indicator icons williamr@2: */ williamr@2: virtual void LayoutEditorIndicator(const TLayoutMethod& aLayoutM); williamr@2: williamr@2: protected: williamr@2: williamr@2: /** williamr@2: * Get the extension object instance, if any exists. williamr@2: */ williamr@2: CAknQueryExtension* QueryExtension() const; williamr@2: williamr@2: /** williamr@2: * Draw editor frame and shadows williamr@2: */ williamr@2: void DrawEditorFrame(CWindowGc& aGc,TRect& aRect) const; williamr@2: williamr@2: private: williamr@2: williamr@2: /** williamr@2: * This transfers CAknQueryControl's flags set by the dialog williamr@2: * williamr@2: * @param flag pattern to set williamr@2: * williamr@2: */ williamr@2: void SetFlags( TBitFlags16 aFlags ); williamr@2: williamr@2: /** williamr@2: * This acts on the Query control flags that are set from CAknQueryDialog williamr@2: * williamr@2: */ williamr@2: void DeployFlagsL(); williamr@2: williamr@2: /** williamr@2: * Call CAknTextControl::ParseTextL williamr@2: * williamr@2: */ williamr@2: void DoSetPromptL(); williamr@2: williamr@2: static TInt StaticPictographCallBack( TAny* aPtr ); williamr@2: void PictographCallBack(); williamr@2: williamr@2: /** williamr@2: * Checks if this query control should contain embedded virtual keypad. williamr@2: * williamr@2: * @return ETrue if embedded virtual keypad should be used. williamr@2: */ williamr@2: TBool EmbeddedVirtualInput() const; williamr@2: williamr@2: /** williamr@2: * Returns pointer to dialog. williamr@2: * williamr@2: * @return Pointer to dialog if it exists. williamr@2: */ williamr@2: CEikDialog* Dialog() const; williamr@2: williamr@2: /** williamr@2: * Creates increment and decrement buttons. williamr@2: * williamr@2: */ williamr@2: void CreateIncAndDecButtonsL(); williamr@2: williamr@2: /** williamr@2: * Creates backspace button. williamr@2: * williamr@2: */ williamr@2: void CreateBackspaceButtonL(); williamr@2: williamr@2: /** williamr@2: * Layouts the query prompt in case of Full Screen Query. williamr@2: * williamr@2: */ williamr@2: void LayoutEditorForFullScreen( const TLayoutMethod& /*aLayoutM*/ ); williamr@2: williamr@2: /** williamr@2: * Layout the text editor in case of Full Screen Query. williamr@2: * williamr@2: */ williamr@2: void LayoutPromptForFullScreen(); williamr@2: williamr@4: /** williamr@4: * Callback for pin code timeouts for producing a tacticons. williamr@4: * williamr@4: * @param aThis Pointer to this object, which is used to williamr@4: * play tacticon. williamr@4: */ williamr@4: static TInt PinCodeTimeoutCallback( TAny* aThis ); williamr@4: williamr@4: /** williamr@4: * Plays a tacticon. Used by the timeout callback. williamr@4: */ williamr@4: void PlayPinCodeTacticon(); williamr@2: williamr@4: /** williamr@4: * Resets the timer for pincode query tacticon playback. williamr@4: */ williamr@4: void ResetPinCodeTacticonTimer(); williamr@2: williamr@4: /** williamr@4: * Stops/removes the timer for pincode query tacticon playback. williamr@4: */ williamr@4: void StopPinCodeTacticonTimer(); williamr@2: williamr@2: private: williamr@2: /** williamr@2: * From CAknControl williamr@2: */ williamr@2: IMPORT_C void* ExtensionInterface( TUid aInterface ); williamr@2: protected: williamr@2: CAknLocationEditor *&LocationEd(); williamr@2: CAknLocationEditor *LocationEd() const; williamr@2: williamr@2: public: williamr@2: /** williamr@2: * Return prompt needed by FEP to query dialog williamr@2: */ williamr@2: void GetCaption( TDes& aCaption ) const; williamr@2: williamr@2: /** williamr@2: * Sets the ECS CBA visibility in the query. williamr@2: * williamr@2: * TBool aVisible @c ETrue if an ECS number is entered to the williamr@2: * query, @c EFalse otherwise. williamr@2: */ williamr@2: void SetEcsCbaVisibleL( TBool aVisible ); williamr@2: williamr@2: /** williamr@2: * Attempts to make an emergency call if a valid emergency williamr@2: * number has been entered to the query. williamr@2: */ williamr@2: void AttemptEmergencyCallL(); williamr@2: williamr@2: protected: williamr@2: /// Control for prompt text williamr@2: CAknTextControl* iPrompt; williamr@2: /// Editor indicator icons williamr@2: CAknQueryEditIndicator* iEditIndicator; williamr@2: /// Edwin editor williamr@2: CEikEdwin* iEdwin; williamr@2: /// Date editor williamr@2: CEikDateEditor* iDateEdwin; williamr@2: /// Time editor williamr@2: CEikTimeEditor* iTimeEdwin; williamr@2: /// Duration editor williamr@2: CEikDurationEditor* iDurationEdwin; williamr@2: /// Secret editor williamr@2: CEikSecretEditor* iSecretEd; williamr@2: /// Integer editor williamr@2: CAknIntegerEdwin* iNumberEdwin; williamr@2: /// Numeric secret editor williamr@2: CAknNumericSecretEditor* iPinEdwin; williamr@2: // Floating point editor williamr@2: CEikFloatingPointEditor* iFloatingPointEditor; williamr@2: // Image williamr@2: CEikImage* iImage; williamr@2: /// Control id williamr@2: TInt iControl; williamr@2: // Layoutrect for Mfne williamr@2: TAknLayoutRect iLayoutMfne; williamr@2: // Emergency call detector williamr@2: CAknEcsDetector* iEcsDetector; williamr@2: // Emergency call observer williamr@2: TAknQueryEcsObserver* iEcsObserver; williamr@2: // Flags for emergency call support and other things williamr@2: TBitFlags16 iFlags; williamr@2: TUint16 iSpare_1; // padding williamr@2: // Animation williamr@2: CAknBitmapAnimation* iAnimation; williamr@2: // Pointer to query control observer williamr@2: MAknQueryControlObserver* iQueryControlObserver; williamr@2: // Query type williamr@2: TInt iQueryType; williamr@2: // Layout rect for editor's vertical shadow williamr@2: TAknLayoutRect iEditorVerShadow; williamr@2: // Layout rect for editor's horizontal shadow williamr@2: TAknLayoutRect iEditorHorShadow; williamr@2: // Layout rect for editor's frame williamr@2: TAknLayoutRect iEditorFrame; williamr@2: williamr@2: TInt iNumberOfEditorLines; ///Maximum number of lines in the editor williamr@2: williamr@2: TBool iHasEditor; //False for confirmation queries (default), williamr@2: //true for all other queries williamr@2: williamr@2: CArrayFixFlat* iLineWidths; ///Widths of prompt lines (in pixels) williamr@2: williamr@2: CAknButton* iIncreaseValueButton; //Reserved for plus button for MFNE editors williamr@2: CAknButton* iDecreaseValueButton; //Reserved for minus button for MFNE editors williamr@2: williamr@2: TSize iDialogSize; // Dialog size williamr@2: private: williamr@2: CAknQueryControlExtension *iExtension; williamr@2: private: williamr@2: TInt iSpare[1]; williamr@2: }; williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: * The extended control for a query dialog. williamr@2: * ip and fixed point editors williamr@2: * williamr@2: * Manage layout of elements in a query dialog:- the text, the image williamr@2: * and the editors. williamr@2: * williamr@2: * @see CAknQueryDialog, CAknText williamr@2: * @since 2.1 williamr@2: */ williamr@2: williamr@2: class CAknExtQueryControl : public CAknQueryControl williamr@2: { williamr@2: williamr@2: public: // Constructors and destructor williamr@2: williamr@2: /** williamr@2: * C++ Constructor. williamr@2: */ williamr@2: IMPORT_C CAknExtQueryControl(); williamr@2: williamr@2: /** williamr@2: * C++ Destructor. williamr@2: */ williamr@2: IMPORT_C virtual ~CAknExtQueryControl(); williamr@2: williamr@2: public: //New functions williamr@2: williamr@2: /** williamr@2: * Get ip address from ip editor. williamr@2: * williamr@2: * @return Returns data from editor williamr@2: */ williamr@2: IMPORT_C TInetAddr GetInetAddress() const; williamr@2: williamr@2: /** williamr@2: * Set ip address to editor williamr@2: * williamr@2: * @param aInetAddress to editor. williamr@2: */ williamr@2: IMPORT_C void SetInetAddress(TInetAddr& aInetAddress); williamr@2: williamr@2: /** williamr@2: * Get number from fixed point editor. williamr@2: * williamr@2: * @return Returns number from editor williamr@2: */ williamr@2: IMPORT_C TInt GetFixedPointNumber() const; williamr@2: williamr@2: /** williamr@2: * Set number to fixed point editor williamr@2: * @param aNumber Number to editor williamr@2: * williamr@2: */ williamr@2: IMPORT_C void SetFixedPointNumberL(const TInt* aNumber); williamr@2: williamr@2: williamr@2: public: // from CAknQueryControl williamr@2: williamr@2: /** williamr@2: * Set minimum and maximum ip address to editor williamr@2: * @param aMinimum Minimum value williamr@2: * @param aMaximum Maximum value williamr@2: * williamr@2: */ williamr@2: IMPORT_C void SetMinimumAndMaximum(const TInetAddr& aMinimumAddress, const TInetAddr& aMaximumAddress); williamr@2: williamr@2: /** williamr@2: * Set minimum and maximum fixed point number to editor williamr@2: * @param aMinimumValue Minimum value williamr@2: * @param aMaximumValue Maximum value williamr@2: */ williamr@2: IMPORT_C void SetMinimumAndMaximum(TInt aMinimumValue, TInt aMaximumValue); williamr@2: williamr@2: williamr@2: /** williamr@2: * Get pointer to query controls control (editor) williamr@2: * williamr@2: * @param aLayout Controls layout (for one line queries use williamr@2: * EDataLayout, ECodeLayout... and for williamr@2: * multiline queries use williamr@2: * EMultiDataFirstEdwin, EMultiDataSecondEdwin...) williamr@2: * @return Pointer to control, NULL if not found williamr@2: */ williamr@2: IMPORT_C virtual CCoeControl* ControlByLayoutOrNull(TInt aLayout); williamr@2: williamr@2: /** williamr@2: * @return true if the content of the editor is valid, false otherwise williamr@2: */ williamr@2: TBool EditorContentIsValidL() const; williamr@2: williamr@2: /** williamr@2: * This transfers CAknQueryControl's flags set by the dialog and then uses them. williamr@2: * The method must be called after all the contained controls are constructed; williamr@2: * Inside PreLayoutDynamicInitL is recommended. williamr@2: * williamr@2: * @param flag pattern to set and then act on. williamr@2: */ williamr@2: void SetAndUseFlagsL( TBitFlags16 aFlags ); williamr@2: williamr@2: public: // Functions from CCoeControl williamr@2: williamr@2: /** williamr@2: * From CCoeControl Added to pass-through focus-loss warnings. williamr@2: * if not ready, this will leave. williamr@2: * @return Indicates whether or not the key event was used by this control. williamr@2: */ williamr@2: void PrepareForFocusLossL(); williamr@2: williamr@2: /** williamr@2: * From CCoeControl Added to pass-through focus-loss warnings. williamr@2: * if not ready, this will leave. williamr@2: * @return Indicates whether or not the key event was used by this control. williamr@2: */ williamr@2: void FocusChanged(TDrawNow aDrawNow); williamr@2: williamr@2: williamr@2: public:// Functions from MCoeControlObserver williamr@2: williamr@2: /** williamr@2: * From MCoeControlObserver williamr@2: * @param aControl Control who caused the event williamr@2: * @param aEventType Type of the event williamr@2: */ williamr@2: IMPORT_C void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType); williamr@2: williamr@2: williamr@2: public:// Functions from CCoeControl williamr@2: /** williamr@2: * From CCoeControl Count number of controls contained in a compound control. williamr@2: * williamr@2: * @return The number of component controls contained by this control. williamr@2: */ williamr@2: TInt CountComponentControls() const; williamr@2: williamr@2: /** williamr@2: * From CCoeControl Get the components of a compound control. williamr@2: * It returns one of the control's component controls, identified by aIndex. williamr@2: * @param anIndex The index of the control to get. williamr@2: * @return The component control with an index of aIndex. williamr@2: */ williamr@2: CCoeControl* ComponentControl(TInt anIndex) const; williamr@2: williamr@2: /** williamr@2: * From CCoeControl. Handles pointer event. williamr@2: * @param aPointerEvent Pointer event to be handled. williamr@2: */ williamr@2: IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent); williamr@2: williamr@2: public: williamr@2: /** williamr@2: * Manage indexes into LAF tables williamr@2: */ williamr@2: class TIndex williamr@2: { williamr@2: public: williamr@2: TIndex(TInt aNumberOfPromptLines); williamr@2: williamr@2: public: williamr@2: TInt PromptLine() const; williamr@2: williamr@2: public: williamr@2: TInt DQPWindowTextsLine2(TInt aLineNum) const; williamr@2: TInt PNWindow() const; williamr@2: TInt PQDWindow(TInt aLineNum) const; williamr@2: williamr@2: private: williamr@2: void SelfTest() const; williamr@2: williamr@2: private: williamr@2: TInt iNumberOfPromptLines; williamr@2: }; williamr@2: williamr@2: williamr@2: protected: williamr@2: williamr@2: /** williamr@2: * After having read the query type from resource. This method is williamr@2: * called in CostructFromResourceL() williamr@2: * williamr@2: * @see ConstructFromResourceL() williamr@2: */ williamr@2: virtual void ConstructQueryL(TResourceReader& aRes); williamr@2: williamr@2: protected: williamr@2: williamr@2: /** williamr@2: * Layout the text editor williamr@2: */ williamr@2: virtual void LayoutEditor(const TLayoutMethod& aLayoutM); williamr@2: williamr@2: private: williamr@2: williamr@2: /** williamr@2: * From CAknControl williamr@2: */ williamr@2: IMPORT_C void* ExtensionInterface( TUid aInterface ); williamr@2: williamr@2: private: williamr@2: williamr@2: /** williamr@2: * This transfers CAknQueryControl's flags set by the dialog williamr@2: * williamr@2: * @param flag pattern to set williamr@2: * williamr@2: */ williamr@2: void SetFlags( TBitFlags16 aFlags ); williamr@2: williamr@2: /** williamr@2: * This acts on the Query control flags that are set from CAknQueryDialog williamr@2: * williamr@2: */ williamr@2: void DeployFlagsL(); williamr@2: williamr@2: static TInt StaticPictographCallBack( TAny* aPtr ); williamr@2: void PictographCallBack(); williamr@2: williamr@2: protected: williamr@2: // editors williamr@2: CAknIpFieldEditor* iIpEditor; williamr@2: CEikFixedPointEditor* iFixedPointEditor; williamr@2: private: williamr@2: williamr@2: TAny* iSpare_1; williamr@2: TAny* iSpare_2; williamr@2: }; williamr@2: williamr@2: williamr@2: #endif