fmradio/fmradio/inc/fmradiofrequencyquerycontrol.h
changeset 0 f3d95d9c00ab
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fmradio/fmradio/inc/fmradiofrequencyquerycontrol.h	Tue Feb 02 00:17:10 2010 +0200
@@ -0,0 +1,400 @@
+/*
+* Copyright (c) 2005-2006 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:  Header file for CFMRadioFrequencyQueryControl
+*
+*/
+
+
+#ifndef FMRADIOFREQUENCYQUERYCONTROL_H
+#define FMRADIOFREQUENCYQUERYCONTROL_H
+
+#include	<aknEditStateIndicator.h>
+#include	<AknIndicatorContainer.h>
+#include	<aknQueryControl.h>
+
+// CONSTANTS
+
+const TInt KFMRadioFrequencyQueryDialogCustomAdditionHeight = 110;
+
+class CFMRadioFrequencyEditor;
+class CAknsFrameBackgroundControlContext;
+
+/**
+ * Custom query control for frequency query dialog.
+ */
+class CFMRadioFrequencyQueryControl : public CAknQueryControl
+    {
+
+public:  // Methods
+
+    /**
+     * C++ default constructor.
+     */
+    CFMRadioFrequencyQueryControl();
+    
+    /**
+     * Destructor.
+     */
+    ~CFMRadioFrequencyQueryControl();
+
+	/**
+     * This control is constructed by the system using this static method.
+     */
+	static SEikControlInfo StaticCreateCustomControl( TInt aIdentifier );
+
+    /**
+	 * Gets the frequency from the control
+	 *
+	 * @return Frequency
+     */
+    TUint32 Frequency() const;
+
+	/**
+	 * Sets the frequency to the control
+	 *
+	 * @param aFreq Frequency
+     */
+    void SetFrequency(const TUint32 aFreq);
+
+	/**
+	 * Handle possible editor leave.
+	 *
+	 * @return ETrue, if editor can be left.
+	 */
+	TBool CanLeaveEditorL();
+
+    // from base class CAknQueryControl
+	/**
+     * From CAknQueryControl
+     *
+     * @see CAknQueryControl::ControlByLayoutOrNull( TInt aLayout )
+     */
+    CCoeControl* ControlByLayoutOrNull( TInt aLayout );
+
+	/**
+     * From CAknQueryControl
+     * 
+     * @see CAknQueryControl::EditorContentIsValidL() const
+     */
+    TBool EditorContentIsValidL() const;
+
+	/**
+     * From CAknQueryControl
+     *
+     * @see CAknQueryControl::SetAndUseFlags( TBitFlags16 aFlags )
+     */
+    void SetAndUseFlags( TBitFlags16 aFlags );
+
+	/**
+	 * From CAknQueryControl
+	 *
+	 * @see CAknQueryControl::WindowLayout( TAknWindowLineLayout& aLayout ) 
+	 *  const
+	 */
+	void WindowLayout( TAknWindowLineLayout& aLayout ) const;
+
+
+    // from base class CCoeControl
+	/**
+     * From CCoeControl
+     *
+     * @see CCoeControl::PrepareForFocusLossL()
+     */
+    void PrepareForFocusLossL();
+
+	/**
+     * From CCoeControl
+     *
+     * @see CCoeControl::FocusChanged( TDrawNow aDrawNow )
+     */
+    void FocusChanged( TDrawNow aDrawNow );
+
+	/**
+     * From CCoeControl
+     *
+     * @see CCoeControl::CountComponentControls() const
+     */
+    TInt CountComponentControls() const;
+
+	/**
+     * From CCoeControl
+     *
+     * @see CCoeControl::ComponentControl( TInt aIndex ) const
+     */
+    CCoeControl* ComponentControl( TInt aIndex ) const;
+    
+    /**
+     * Is public so that callbacks may utilize this.
+     * Sets repeat intervals.
+     * 
+     * @param aAccelerated ETrue=accelerated speed, EFalse=default values
+     */
+    void SetAcceleratedLongPress(TBool aAccelerated);
+    
+    /**
+     * From CCoeControl
+     * 
+     * @see CCoeControl::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
+     * */
+    TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+    
+    // from base class MCoeControlObserver
+	/**
+     * From MCoeControlObserver
+     *
+     * @see MCoeControlObserver::HandleControlEventL( 
+     *    CCoeControl* aControl, 
+     *    TCoeEvent aEventType )
+     */
+    void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType );
+
+	class CFMRadioManualTuningEditorIndicator : public CAknIndicatorContainer, public MAknEditingStateIndicator
+		{
+		public:
+			
+			static CFMRadioManualTuningEditorIndicator* NewL(CCoeControl* aControl);
+			
+			~CFMRadioManualTuningEditorIndicator();
+
+			/**
+			 * From MAknEditingStateIndicator
+			 */
+			void SetState(TAknEditingState aState); 
+
+			/**
+			 * From MAknEditingStateIndicator
+			 */
+			CAknIndicatorContainer* IndicatorContainer();
+
+			/**
+			 * Sets the information about the query flags.
+			 */
+			void SetFlags(TBitFlags16 aFlags);
+
+		private:
+		
+			CFMRadioManualTuningEditorIndicator();
+
+			void ConstructL(CCoeControl* aControl);
+            
+            // from base class CAknIndicatorContainer
+			/**
+			* From CAknIndicatorContainer
+			* 
+			* @see CAknIndicatorContainer::Reserved_1()
+			*/
+			void Reserved_1();
+
+		private:
+			/** 
+			 * Flags 
+			 */
+			TBitFlags16 iBitFlags;
+
+		};
+	
+		public:
+	    /**
+	     * Manage indexes into LAF tables
+	     */
+	    class TIndex 
+	    {   
+	    public:     
+	        TIndex(TInt aNumberOfPromptLines);  
+	    
+	    public: 
+	        TInt PromptLine() const;    
+	        
+	    public: 
+	        TInt DQPWindowTextsLine2(TInt aLineNum) const;  
+	        TInt PNWindow() const;  
+	        TInt PQDWindow(TInt aLineNum) const;    
+	        TInt PQCWindow() const;
+	        
+	    private:    
+
+	
+	    private:    
+	        TInt  iNumberOfPromptLines; 
+	    };  
+    
+protected:  // Methods
+
+    // from base class
+    /**
+     * From CAknQueryControl
+     * 
+     * @see CAknQueryControl::ConstructQueryL( TResourceReader& aRes )
+     */
+    void ConstructQueryL( TResourceReader& aRes );
+
+	/**
+     * From CAknQueryControl
+     *
+     * @see CAknQueryControl::LayoutEditor( const TLayoutMethod& aLayoutM )
+     */
+	void LayoutEditor( const TLayoutMethod& aLayoutM );
+
+    /**
+     * From CAknQueryControl
+     *
+     * @see CAknQueryControl::LayoutPrompt( const TLayoutMethod& aLayoutM )
+     */
+	void LayoutPrompt( const TLayoutMethod& aLayoutM );
+
+    /**
+     * From CAknQueryControl
+     *
+     * @see CAknQueryControl::LayoutImageOrAnim( 
+     *    const TLayoutMethod& aLayoutM )
+     */
+    void LayoutImageOrAnim( const TLayoutMethod& aLayoutM );
+
+    /**
+     * From CAknQueryControl
+     *
+     * @see CAknQueryControl::LayoutEditorFrame( 
+     *    const TLayoutMethod& aLayoutM )
+     */
+    void LayoutEditorFrame( const TLayoutMethod& aLayoutM );
+
+    /**
+     * From CAknQueryControl
+     *
+     * @see CAknQueryControl::LayoutEditorIndicator( 
+     *    const TLayoutMethod& aLayoutM )
+     */
+    void LayoutEditorIndicator( const TLayoutMethod& aLayoutM );
+
+    /**
+     * From CAknQueryControl
+     *
+     * @see CAknQueryControl::LayoutRect()
+     */
+	TRect LayoutRect();
+
+    /**
+     * From CAknQueryControl
+     *
+     * @see CAknQueryControl::SetLineWidthsL();
+     */
+	void SetLineWidthsL();
+
+	/**
+     * From CCoeControl
+     *
+     * @see CCoeControl::Draw( const TRect& aRect ) const
+     */
+    void Draw( const TRect& aRect ) const;
+
+    /**
+     * Draw editor frame and shadows
+     */
+     void DrawFrequencyEditorFrame(CWindowGc& aGc,TRect& aRect) const;
+     
+	/**
+     * From CCoeControl
+     *
+     * @see CCoeControl::SizeChanged()
+     */
+    void SizeChanged();
+
+	/**
+    * From MObjectProvider
+    *
+    * @see MObjectProvider::MopSupplyObject( TTypeUid aId )
+    */
+    TTypeUid::Ptr MopSupplyObject( TTypeUid aId );
+    
+    /**
+    * From CCoeControl.
+    * @see CCoeControl::HandlePointerEventL()
+    */
+    void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+    
+private:    // Methods
+    
+    /**
+     * Starts timer to accelerate long press repeat interval
+     */
+    void StartKeypress();
+    
+    /**
+     * Instructs frequency editor component to update the appropriate field
+     * if it is possible (user is not typing numbers). Update is either
+     * incrementing or decrementing depending on state of iChangeDirectionIncrease.
+     * If it is ETrue, the desired action is to increment the value.
+     */
+    void DoIncrementOrDecrement();
+
+    /**
+     * Callback for iLongPressAccelerationTimer
+     * Speeds up repeated key event interval.
+     * See CPeriodic::Start()
+     * 
+     * @param aAny pointer to self
+     * 
+     * @return ignored
+     */
+    static TInt LongPressAccelerateCallBack( TAny* aAny );
+    
+    /**
+     * Callback for iLongPressTimer
+     * Called repeatedly to act as long keypress repeat event.
+     * See CPeriodic::Start()
+     * 
+     * @return ignored
+     */
+    static TInt LongPressTimerCallBack( TAny* aAny );
+    
+private:    // Data
+
+	/** 
+	 * Prompt 
+	 */
+    CEikLabel* iMyPrompt;
+    
+	/**  
+	 * Editor indicator 
+	 */
+    CFMRadioManualTuningEditorIndicator* iMyEditorIndicator;
+	
+	/** 
+	 * Editor 
+	 */
+    CFMRadioFrequencyEditor*	iFreqEditor;
+    
+	/** 
+	 * A control context that provides a layout background generated from a frame item 
+	 */
+    CAknsFrameBackgroundControlContext* iEditorContext;
+     /**
+     * Accelerates manual tuning speed after two seconds
+     */
+    CPeriodic* iLongPressAccelerationTimer;
+    
+    CPeriodic* iLongPressTimer;
+    
+    /**
+     * State of current keypress. Value is valid only between EEventKeyDown
+     * and EEventKeyUp.
+     * ETrue == increment, EFalse == decrement
+     */
+    TBool iChangeDirectionIncrease;
+    
+    TBool iKeyPressReported;
+    
+    };
+
+#endif      // FMRADIOFREQUENCYQUERYCONTROL_H