fmradio/fmradio/inc/fmradiofrequencyeditor.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 00:17:10 +0200
changeset 0 f3d95d9c00ab
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 2004-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 CFMRadioFrequencyEditor
*
*/


#ifndef CFMRADIOFREQUENCYEDITOR_H
#define CFMRADIOFREQUENCYEDITOR_H

#include <eikmfne.h>

struct SEikControlInfo;

/**
 * Custom editor for editing radio frequencies.
 */
class CFMRadioFrequencyEditor : public CEikMfne
    {
    
public:  // Methods
   
    /**
     * C++ default constructor.
     */
    CFMRadioFrequencyEditor();

	/**
     * Symbian 2nd phase constructor.
     */
    void ConstructL(const TUint32 aFlags = 0);
    
    /**
     * Destructor.
     */
    ~CFMRadioFrequencyEditor();

	/**
     * This editor is constructed by the system using this static method.
     */
	static SEikControlInfo StaticCreateCustomEditor(TInt aIdentifier);

    /**
     * Sets the frequency of this editor.
     *
     * @param aFreq New frequency.
     */
    void SetFrequency(const TUint32 aFreq);

	/**
     * Returns the frequency of this editor.
     *
     * @return Frequency of this editor.
     */
    TUint32 Frequency() const;

	/**
     * Sets minimum and maximum frequencies of this editor.
     *
     * @param aMinimumFrequency Minimum frequency.
	 * @param aMaximumFrequency Maximum frequency.
     */
    void SetMinimumAndMaximum(const TUint32 aMinimumFrequency, 
        const TUint32 aMaximumFrequency);

	/**
     * Gets minimum and maximum frequencies of this editor.
     *
     * @param aMinimumFrequency Contains the minimum frequency when returned.
	 * @param aMaximumFrequency Contains the maximum frequency when returned.
     */
    void GetMinimumAndMaximum(TUint32& aMinimumFrequency, 
        TUint32& aMaximumFrequency) const;

	/**
	 * Returns validity of this editor.
	 * @return ETrue, if the values of the fields of this editor are valid. 
	 * EFalse otherwise.
	 */
	TBool IsValid() const;

	/**
	 * Returns the report state of this editor.
	 * @return ETrue, if the editor is valid to report of a state change. 
	 * EFalse otherwise.
	 */
	TBool IsValidToReport() const;

	/**
	 * Fills decimal field with zero decimal, if field is left in middle of 
	 * typing.
	 */
	void FillDecimalField();

	/**
	 * Handle possible editor leave.
	 *
	 * @return ETrue, if editor can be left.
	 */
	TBool CanLeaveEditorL();

    // from base class CCoeControl
    /**
     * From CCoeControl 
     * @see CCoeControl::ConstructFromResourceL
     */
    void ConstructFromResourceL( TResourceReader& aResourceReader );

    // from base class CEikMfne
	/**
	 * From CEikMfne OfferKeyEventL.	
	 * @see CEikMfne::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
	 */
	TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
	/**
	 * From CEikMfne HandlePointerEventL.	
	 * @see CEikMfne::HandlePointerEventL(const TPointerEvent& aPointerEvent)
	 */
	void HandlePointerEventL(const TPointerEvent& aPointerEvent);
	
	/**
     * Updates minimum and maximum values of the fields.
     */
	void UpdateMinimumAndMaximum();
	
	/**
     * Increments the current field.
     */
	void IncrementCurrentField();

	/**
     * Decrements the current field.
     */
	void DecrementCurrentField();
	
	void SetEditorReportState( TBool aReport );
	
	/**
	 * Redraws editor and reports of state change.
	 *
	 * @param aForceDrawNow forces immediate draw
	 */
	void DrawAndReportL( TBool aForceDrawNow );

    /*
     * Set editor frame rect
     * @param aRect editor frame rect 
     */
    void SetEditorFrameRect( const TRect& aRect );

protected:  // Methods

    // from base class CCoeControl
	/**
     * From CCoeControl 
     *
     * @see CCoeControl::FocusChanged( TDrawNow aDrawNow )
     */
	void FocusChanged( TDrawNow aDrawNow );

private: //Methods

	/**
	 * Increments the integer field.
	 */
	void IncrementIntField();
	
	/**
	 * Decrements the integer field.
	 */
	void DecrementIntField();
	
	/**
	 * Increments the decimal field.
	 */
	void IncrementDecField();
	
	/**
	 * Decrements the decimal field.
	 */
	void DecrementDecField();

	/**
     * Validates the values of the both fields.
	 * Calls ValidateIntField and ValidateDecField,
	 * but doesn't return anything.
     */
	void ValidateFields();

	/**
     * Validates the integer field. If field was changed, returns ETrue.
     */
	TBool ValidateIntField();

	/**
     * Validates the decimal field. If field was changed, returns ETrue.
     */
	TBool ValidateDecField();


	


private:    // Data
	/** 
	 * Minimum frequency got from RadioSettings. 
	 */
    TUint32	iMinFreq;
    
	/** 
	 * Maximum frequency got from RadioSettings. 
	 */
    TUint32 iMaxFreq;
    
	/** 
	 * Step frequency got from RadioSettings. 
	 */
    TUint32 iStepFreq;
    
	/** 
	 * Current minimum value of integer field. 
	 */
	TInt iMinIntValue;
	
	/** 
	 * Current maximum value of integer field. 
	 */
	TInt iMaxIntValue;
	
	/** 
	 * Current minimum value of decimal field. 
	 */ 
	TInt iMinDecValue;
	
	/** 
	 * Current maximum value of decimal field. 
	 */ 
	TInt iMaxDecValue;
	
	/** 
	 * The field at the beginning of keypress. 
	 */
	TInt iPreviousField;
	
	/** 
	 * ETrue, when user is in the middle of typing numbers in decimal 
	 * field. 
	 */
	TBool iTypedInDecField;
	
	/** 
	 * Editor is valid to report it's state (after internal validations). 
	 */
	TBool iValidToReport;
	
	/** 
	 * Decimal field divider that is based on decimal count. 
	 */
	TUint32 iDecDiv;
	/**
	 * flag to set editor report state
	 */
	TBool iReportEditorState;
	
	TInt iIncrements;
	
	/*
	 * Editor frame rect
	 */
	TRect iEditorFrameRect;

    };

#endif      // CFMRADIOFREQUENCYEDITOR_H