diff -r 000000000000 -r 72b543305e3a mobilemessaging/postcard/postcardinc/PostcardAddressForm.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/postcard/postcardinc/PostcardAddressForm.h Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,331 @@ +/* +* Copyright (c) 2005 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: +* Postcard application address dialog +* +*/ + + + +#ifndef __POSTCARDADDRESSFORM_H__ +#define __POSTCARDADDRESSFORM_H__ + +// INCLUDES +#include // CAknForm +#include +#include + +#include +#include +#include + +#include "PostcardContact.h" +#include "Postcard.hrh" + +// FORWARD DECLARATIONS +class CAknNavigationDecorator; +class CContactCard; +class CContactItem; +class CEikMenuPane; +class CPostcardAppUi; +class CPostcardDocument; + +/** + * Postcard Address Form. + */ +class CPostcardAddressForm : public CAknForm, + public MEikEdwinObserver + { + public: // Constants + enum + { + // Name, info, street, zip, city, state, country + ENumAddrFields = 7 + }; + public: // Constructors and destructor + + /** + * Two-phased constructor. + * param IN aAppUi reference to AppUi object + * param IN aDocument reference to document object + * param IN aContactItem the item to be edited + * param OUT aRetValue if for example Send was pressed in the dialog it's returned here + * param IN aFirstActive the field that should be activated first + * param IN aKeyEvent possible keyevent to simulate when dialog opened + * @return pointer to created CPostcardAddressForm + */ + static CPostcardAddressForm* NewL( CPostcardAppUi& aAppUi, + CPostcardDocument& aDocument, + CContactCard& aContactItem, + TInt& aRetValue, + TInt aFirstActive = -1, + TKeyEvent aKeyEvent = TKeyEvent() ); + + /** + * Destructor. + */ + ~CPostcardAddressForm(); + + public: + + /** + * @return CAknDialog::RunLD() + */ + TInt ExecLD( ); + + public: // Functions from base classes + + /** + * From MEikCommandObserver Prosesses menucommands + * @param aCommandId - id of the command + */ + void ProcessCommandL( TInt aCommandId ); + + /** + * From CCoeControl Handles key events + * @param aKeyEvent - keyevent to be handled + * @param aType - keyeventtype to be handled + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ); + + /** + * HandleResourceChange + */ + void HandleResourceChange(TInt aType); + + /** + * from CEikDialog + */ + void PreLayoutDynInitL(); + + /** + * from CEikDialog + * Fills the fields. + */ + void PostLayoutDynInitL(); + + /** + * from MCoeControlObserver + * Updates the length indicator and checks if the field is too long + */ + void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType); + + protected: // Functions from base classes + + /** + * From MEikMenuObserver Initializes items on the menu + * + * @param aMenuId Current menu's resource Id + * @param aMenuPane Pointer to menupane + */ + void DynInitMenuPaneL(TInt aMenuId, CEikMenuPane* aMenuPane); + + /** + * From CEikDialog Handles button events and looks if the dialog + * can be closed. First calls CAknDialog::OkToExitL. If that returns + * true, and aButtonId is either EAknSoftkeyBack, EAknSoftkeyExit, + * EAknSoftkeyDone, EAknCmdExit, EEikCmdExit or EPostcardCmdSend, + * If a message is not yet sent, then recipient is added to the message + * and ETrue is returned. + * Otherwise returns false; + * @param aButtonId Id of the 'pressed' button + * + * @return ETrue if it's OK to exit + * EFalse otherwise + */ + TBool OkToExitL( TInt aButtonId ); + + /** + * If aEventType is EEventTextUpdate -> Updates navipane and checks the length of the field + */ + void HandleEdwinEventL( CEikEdwin* aEdwin, TEdwinEvent aEventType ); + + /** + * Changes the edwin event observer and updates navipane + */ + void LineChangedL(TInt aControlId); + + protected: // New functions + + /** + * DynInitMainMenuL Initializes items on the menu + * + * @param aMenuPane Pointer to menupane + */ + void DynInitMainMenuL(CEikMenuPane* aMenuPane); + + /** + * DynInitInsertSubMenuL Initializes items on the menu + * + * @param aMenuPane Pointer to menupane + */ + void DynInitInsertSubMenuL(CEikMenuPane* aMenuPane); + + /** + * DynInitContextMenuL Initializes items on the menu + * + * @param aMenuPane Pointer to menupane + */ + void DynInitContextMenuL(CEikMenuPane* aMenuPane); + + /** + * IsMainMenuOptionInvisible + * Returns true if menuoption aMenuOptionId is visible in Mainmenu + * @param aMenuOptionId menu option to be checked + * @return TBool True if option is invisible + */ + TBool IsMainMenuOptionInvisible( TInt aMenuOptionId ); + + /** + * LaunchHelpL + * This function is called when Help application is launched. + */ + void LaunchHelpL( ); + + private: // From CAknForm + + /** + * Calls CAknForm::SetInitialCurrentLine() if it's not been called yet + */ + void SetInitialCurrentLine(); + + /** + * Does nothing at the moment + */ + void HandleControlStateChangeL(TInt aControlId); + + private: // Own ones + + /** + * Opens the add recipient dialog + */ + void DoSelectionKeyL( ); + + /** + * Changes the value of iRetVal and tries to exit the dialog + */ + void SendL( ); + + /** + * Changes the value of iRetVal and tries to exit the dialog + */ + void ForwardMessageL( ); + + /** + * Updates current TMsvEntry and calls AppUi's DoShowMessageInfoL + */ + void MessageInfoL( ); + + /** + * Checks the length of current text field and shows an info note if necessary + */ + void CheckTextExceedingL( ); + + /** + * Uses CPostcardContact to show the recipient fetch dialog + * Uses CPostcardRecipientWrapper to fetch the right detail of the contact item + * Adds the value of the contact item into the address fields + */ + void DoAddRecipientL( ); + + /** + * Updates recipient to entry. + */ + void UpdateRecipientToEntryL(); + + /** + * Adds the right fields of aContact to right fields of the dialog + */ + void UpdateFieldsL( CContactItem& aContact ); + + /** + * Add the aLocation fields of aContact to right fields of the dialog + */ + void UpdateFieldsL( CPostcardContact::TLocation aLocation ); + + /** + * Returns true if none of the fields have any text + */ + TBool IsEmpty( ); + + /** + * Cleans navipane. + */ + void CleanNavipane(); + + /** + * Forces all visible lines to be redrawn on the screen + */ + void RefreshDisplay( ); + + /** + * Set middle softkey according to the mode (viewer / edit) + * and whether address is empty or not + */ + void SetMiddleSoftkeyL(); + + protected: // Constructors + CPostcardAddressForm( CPostcardAppUi& aAppUi, + CPostcardDocument& aDocument, + CContactCard& aContactItem, + TInt& aRetValue, + TInt aFirstActive, + TKeyEvent aKeyEvent ); + + /** + * EPOC constructor + */ + void ConstructL(); + + /** + * Goes thru the fields. Hides the hidden ones. + * Shows error note of an empty field if necessary. + * Changes the focused field to the right one. + * Updates navipane. Simulate keys if necessary. + */ + void ActivateL(); + + protected: // data + /// Ref: Contact item under editing + CContactCard& iContactItem; + + private: // Data + + enum PostcardAddressFlags + { + EPostcardAddressHelpSupported = 1, + EPostcardAddressTextExceeded = 2 + }; + + CPostcardAppUi& iAppUi; + CPostcardDocument& iDocument; + + CAknNavigationDecorator* iNaviDecorator; + + TKeyEvent iKeyEvent; + TInt& iRetValue; + TInt iAddrFlags; + TInt iMaxLen; + TInt iPreviousControl; + TInt iFirstActive; + + CPostcardContact* iContact; // interface to contact database + + TInt iMskResource; // current middle softkey resource ID + }; + +#endif // __CPbkContactEditorDlg_H__ + +// End of File