--- /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 <AknForm.h>
+#include <TCnvCategory.h>
+
+//Select Edwin
+#include <eikedwob.h>
+
+
+// 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.. <sigh>)
+ */
+ TBool& iAlreadyDead;
+
+ TKeyEvent iKeyEvent;
+
+ TBool isEdwinNavigated;
+ TBool isEdwinUpdateText;
+
+ };
+
+#endif // __CCNVMAINFORM_H__
+