diff -r 000000000000 -r 3ee3dfdd8d69 extras/converter/Ui/Src/CCnvMainForm.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extras/converter/Ui/Src/CCnvMainForm.h Mon Jan 18 20:20:33 2010 +0200 @@ -0,0 +1,395 @@ +/* +* Copyright (c) 2002 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: +* An AVKON form class containing popup fields and floating point editors. +* Implements the 'Main State' of the application. +* +*/ + + + +#ifndef __CCNVMAINFORM_H__ +#define __CCNVMAINFORM_H__ + +// INCLUDES +#include +#include + +//Select Edwin +#include + + +// FORWARD DECLARATIONS +class CCnvConverter; +class CAknPopupField; +class CErrorUI; + +// CLASS DEFINITION +/** +* An AVKON form class containing popup fields and floating point editors. +* Implements the 'Main State' of the application. +*/ +class CCnvMainForm : public CAknForm , public MEikEdwinObserver + { + + public: // constructors and destructor + + /** + * Default constructor. + */ + CCnvMainForm( TBool &aAlreadyDead ); + + /** + * Destructor. + */ + ~CCnvMainForm(); + + /** + * 2nd phase constructor. + */ + void ConstructL(); + + private: // constructors + + /** + * Default constructor. Not implemented. + */ + CCnvMainForm(); + + public: // from CCoeControl + + /** + * Specifies the help context for this form. + * @param aContext the context IDs are placed here + */ + void GetHelpContext( TCoeHelpContext& aContext ) const; + + public: // from MEikCommandObserver + + /** + * Handles menu commands. + * @param aCommandId Command identifier. + */ + void ProcessCommandL( TInt aCommandId ); + + public: // from MEikDialogPageObserver + + /** + * Takes any action required when the current line is + * changed to aControlId. + * @param aControlId Control identifier. + */ + void LineChangedL( TInt aControlId ); + + public: // from MEikMenuObserver + + /** + * Dynamically initialises a menu pane. The Uikon framework calls this + * function, immediately before the menu pane is activated. + * @param aResourceId Resource ID identifying a menu pane to initialise + * @param aMenuPane The in-memory representation of the menu pane. + */ + void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ); + + protected: // from MCoeControlObserver + + /** + * Handles an event originating from one of the form's controls. + * @param aControl The control that reported the event. + * @param aEventType The type of the reported event. + */ + void HandleControlEventL( CCoeControl* aControl, + TCoeEvent aEventType ); + + protected: // from CAknForm + + /** + * Saves form popup field states to a file (not implemented, yet). + * @return ETrue if the editable state can be left + * (always in this case). + */ + TBool SaveFormData(); + + /** + * Deal with that the field is empty,when move focus to other field. + * The Uikon framework calls this function,immediately before focus move. + */ + void PrepareForFocusTransitionL(); + protected: // from CEikDialog + + /** + * Tests if it is OK to exit the dialog. + * @param aButtonId The ID of the button that was activated. + * @return ETrue to validate and exit the dialog, + * EFalse to keep the dialog active. + */ + TBool OkToExitL( TInt aButtonId ); + + /** + * Pre-layout dialog initialisation. + */ + void PreLayoutDynInitL(); + + private: // new methods + /** + * returns ETrue if the the character is an integer + */ + TBool IsDigit(TUint aChar); + + /** + * Checks if a form control has REALLY changed (uses history knowledge) + * Form controls report bogus state changed events, this is used to + * filter them out. + * @param controlId Form ID of the control to be checked + * @return ETrue if the specified control's state has changed + */ + TBool HasReallyChanged( TInt controlId ); + + /** + * Initialised change history (for HasReallyChanged) + */ + void InitialiseChangeHistory(); + + /** + * Called when the user has changed + * the unit type popup field selection. + */ + void HandleCategoryChangedL(); + + /** + * Called when the user has changed + * either of the unit popup field selections. + */ + void HandleUnitChangedL(); + + /** + * Checks if the unit rates (factors) are defined in the model + * for the currently selected unit type. + * @param aShowNote If ETrue "rates missing note" is shown, if + * rates are not valid. + * @return ETrue if rates are valid, EFalse otherwise. + */ + TBool AreRatesValidL(TBool aShowNote); + + /** + * Checks if a floating point editor's value is within allowable range. + * @param aEditorId Resource ID of the editor control to be checked. + * @return ETrue If value is in range, EFalse otherwise. + */ + TBool IsEditorValueValidL( TUint aEditorId ); + + /** + * Checks if a floating point editor's value is such that no conversion + * should be made and no "invalid value" error should be reported. + * @param aEditorId Resource ID of the editor control to be checked. + * @return ETrue Indicates that conversion should not proceed. + */ + TBool EditorValueCausesHold( TUint aEditorId ); + + /** + * Handles the ECmdRates command. Launches the Rates Form. + */ + void CmdRatesL(); + + /** + * Handles the ECmdSetType command. + */ + void CmdSetTypeL(); + + /** + * Handles the ECmdSetUnit command. + */ + void CmdSetUnitL(); + + /** + * Tells the model to load its state from a file. + */ + void LoadStateL(); + + /** + * Tells the model to save its state to a file. + * Displays an error note if there is not enough space in permanent + * storage. + */ + void SaveState(); + + /** + * Calculates and displays the unit conversion immediately. + */ + void SynchronousConversionL( TBool aShowRateInvalidNote = ETrue ); + + /** + * Calculates and displays the unit conversion after 0.75 seconds. + */ + void AsynchronousConversion(); + + /** + * Cancels a queued asynchronous conversion request, if any. + */ + void CancelConversion(); + + /** + * Called by the conversion timer after the 0.75 second timeout + * has exipred. Calls SynchronousConversion() to do + * the actual conversion. + * @param aMainForm Pointer to the CCnvMainForm instance. + */ + static TInt TimerCallback( TAny* aMainForm ); + + /** + * Shows an error note for invalid value situation + * @param aEditorId Id of the editor that holds the invalid value + */ + void ShowInvalidValueNoteL(TInt aEditorId); + + /** + * From CCoeControl processing of a key event + * @param aKeyEvent : Key event information + * aType : EEventKeyDown | EEventKey | EEventKeyUp + * @return : EKeyWasConsumed if keyevent is consumed. + * EKeyWasNotConsumed if keyevent is not consumed. + * Handling of the keys is taken care for the editor fields + */ + TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, + TEventCode aType); + + /** + *Checks if the number entered in the editor field is a valid number + *@param aEditroId : Id of the editor that needs to be evaluated + *@return : EFalse if the editor value is not a vaild number + * : ETrue if the number is a valid number + */ + TBool IsVaildNumberEntered(TInt aEditorId); + + /** + *From MEikEdwinObserver. handles the Navigation on the editor control. + */ + void HandleEdwinEventL(CEikEdwin* aEdwin,TEdwinEvent aEventType); + + /** + *Do the calculation and change the value for the related edit field + */ + void ValueCalculationL( TUint aUnit1Popup, TUint aUnit2Popup, TReal aMount ); + + private: // data + + /** + * Pointer to our model. Owned. + */ + CCnvConverter* iModel; + + /** + * Model accessor for unit types. + */ + TCnvCategory iTypeCategory; + + /** + * Model accessor for source units. + */ + TCnvCategory iUnit1Category; + + /** + * Model accessor for destination units. + */ + TCnvCategory iUnit2Category; + + /** + * Pointer to the Unit Type popup field. Not owned. + */ + CAknPopupField* iTypePopupCtrl; + + /** + * Pointer to the source Unit popup field. Not owned. + */ + CAknPopupField* iUnit1PopupCtrl; + + /** + * Pointer to the destination Unit popup field. Not owned. + */ + CAknPopupField* iUnit2PopupCtrl; + + /** + * Id of the currency category in the model. + */ + TUint iCurrencyCategoryId; + + /** + * ETrue if this instance is fully constructed, EFalse otherwise. + */ + TBool iIsFullyConstructed; + + /** + * ETrue if the user has already been notified that the disk is full. + */ + TBool iHasNotifiedDiscFull; + + /** + * ETrue if the iLastUsedEditorId has changed after the focus + * has entered the editor. + */ + TBool iActiveEditorChanged; + + /** + * Pointer to the timer used for asynchronous conversions + * (which need a0.75 second delay..) + */ + CPeriodic* iConversionTimer; + + /** + * The id of the unit amount field that the user has modified last. + */ + TInt iLastUsedEditorId; + + /** + * The id of the line that was last active in the form. + */ + TInt iLastActiveEditorLine; + + /** + * The previous type selection. + */ + TInt iHistoryTypeCategory; + + /** + * The previous source unit selection. + */ + TInt iHistoryUnit1Category; + + /** + * The previous destination unit selection. + */ + TInt iHistoryUnit2Category; + + /** + * Pointer to the Error UI object. Owned + * Used for displaying the Disk Full error message. + */ + CErrorUI* iErrorUI; + + /** + * Reference to a flag in this form's owner. + * Used to indicate that we have been deleted by someone + * (could be the app framework.. ) + */ + TBool& iAlreadyDead; + + TKeyEvent iKeyEvent; + + TBool isEdwinNavigated; + TBool isEdwinUpdateText; + + }; + +#endif // __CCNVMAINFORM_H__ +