diff -r 666f914201fb -r 2fe1408b6811 epoc32/include/app/cpbkcontacteditordlg.h --- a/epoc32/include/app/cpbkcontacteditordlg.h Tue Nov 24 13:55:44 2009 +0000 +++ b/epoc32/include/app/cpbkcontacteditordlg.h Tue Mar 16 16:12:26 2010 +0000 @@ -1,1 +1,238 @@ -cpbkcontacteditordlg.h +/* +* 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 the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Phonebook contact editor dialog. +* +*/ + + +#ifndef __CPbkContactEditorDlg_H__ +#define __CPbkContactEditorDlg_H__ + +// INCLUDES +#include <AknForm.h> // CAknForm +#include <cntdef.h> // TContactItemId +#include <babitflags.h> // TBitFlags + + +// FORWARD DECLARATIONS +class CAknTitlePane; +class CPbkContextPaneIcon; +class CPbkThumbnailPopup; +class CPbkThumbnailCmd; +class CPbkContactEditorFieldArray; +class CPbkContactEngine; +class CPbkContactItem; +class MPbkContactEditorStrategy; +class MPbkEditorOkToExitCallback; +class CAknNavigationControlContainer; + + +// CLASS DECLARATION + +/** + * A contact editing dialog implementation. This class can be used + * to construct an UI editor dialog that is specifically tailored + * to edit contacts in a similar fashion as in the platform contacts + * application. + */ +class CPbkContactEditorDlg : + public CAknForm + { + public: // Constructors and destructor + /** + * Creates an instance of an editor dialog for an aContactItem. + * + * @param aEngine Phonebook engine + * @param aContactItem Contact item to edit + * @param aIsNewContact Set to ETrue if aContactItem is a new contact + * (not yet in the database) + * @param aFocusIndex Optional index of field to focus initially, + * default behaviour is to focus the topmost field. + * @param aEdited If ETrue sets the contact initially to the edited state. + * Use when some data is added to aContactItem + * that needs to be saved even if user edits + * nothing. Default behaviour is to set the contact to + * non-edited state. + * @return A new dialog object. + */ + IMPORT_C static CPbkContactEditorDlg* NewL + (CPbkContactEngine& aEngine, + CPbkContactItem& aContactItem, + TBool aIsNewContact, + TInt aFocusIndex=-1, + TBool aEdited=EFalse); + + /** + * Destructor. + */ + ~CPbkContactEditorDlg(); + + public: // Interface + /** + * Sets aSelfPtr to NULL when this dialog is destroyed. + * @precond Precondition: !aSelfPtr || *aSelfPtr==this + */ + IMPORT_C void ResetWhenDestroyed(CPbkContactEditorDlg** aSelfPtr); + + /** + * Runs the dialog. This object is destroyed when this function + * returns or leaves. + * NOTE: Current status pane layout is replaced with the + * Phonebook one. Restoring the original pane is left to be + * the responsibility of the caller. + * + * @return The id of the saved contact. KNullContactId if not saved. + * Please note that the contact item (aContactItem passed + * to NewL) might be modified even if it is not saved to the + * database. + */ + IMPORT_C TContactItemId ExecuteLD(); + + /** + * Hides the 'Exit' command from the options menu. This must be called + * before calling ExecuteLD. + */ + IMPORT_C void HideExitCommand(); + + /** + * Sets help context. There are many applications using contact editor + * and they may have an own help topic to be shown, when editor's help + * is launched. With this command it's possible to define the used + * help content. If not called after, uses Phonebook's own help context + * as default. + * @param aContext Help context to use + */ + IMPORT_C void SetHelpContext(TCoeHelpContext aContext); + + /** + * Sets exit callback. The callback is called before exit happens. + * If the callback returns EFalse, the exit process is cancelled. + * @param aCallback Exit callback + */ + IMPORT_C void SetExitCallback(MPbkEditorOkToExitCallback* aCallback); + + /** + * Sets the exit command in the options menu to forward aCommandId to the + * application framework. Allows clients to process and capture the exit + * command in the application exit situation. + * @param aCommandId Command id to send to the framework when the exit + * occurs. + */ + IMPORT_C void SetExitCommandId(TInt aCommandId); + + private: // from CCoeControl + TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType); + void GetHelpContext(TCoeHelpContext& aContext) const; + + private: // Command handlers + void CmdSaveL(); + void CmdDoneL(); + void CmdEditItemLabelL(); + void CmdAddItemL(); + void CmdDeleteItemL(); + void CmdFetchThumbnailL(); + void CmdRemoveThumbnailL(); + + private: // From CAknForm + void PreLayoutDynInitL(); + void PostLayoutDynInitL(); + void SetInitialCurrentLine(); + void ProcessCommandL(TInt aCommandId); + void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane); + TBool OkToExitL(TInt aKeycode); + void HandleControlStateChangeL(TInt aControlId); + + protected: // Constructors + CPbkContactEditorDlg + (CPbkContactEngine& aEngine, + CPbkContactItem& aContactItem, + TInt aFocusIndex); + void BaseConstructL(TBool aIsNewContact, TBool aEdited); + + protected: // Implementation + void StoreTitlePaneTextL(); + void ConstructContextMenuL(); + void ConstructNaviPaneL(); + TBool IsNewContact() const; + void UpdateTitlePaneL(); + void CloseAllPopups(); + TBool ContactAlreadyExistsL(); + TBool DuplicateNameMatchL(CContactIdArray* aIdArray); + TBool CheckForDuplicateEntryL(); + void ReloadThumbnailL(); + + void WriteContactToDbL(); + + /// State flag values for CPbkContactEditorDlg + enum TStateFlag + { + EHideExit, // Hide exit + EEscKeyReceived, /// Espace key received + EUnderDestruction // The dialog is under destruction + }; + + protected: // data + /// Ref: Contact item under editing + CPbkContactItem& iContactItem; + /// Own: Contact editor field manager + CPbkContactEditorFieldArray* iFieldManager; + + private: // Data + /// Ref; Contact engine + CPbkContactEngine& iEngine; + /// Own: Index of field to focus initially + TInt iFocusIndex; + /// Own: state flags + mutable TBitFlags iStateFlags; + /// Ref: pointer to ExecuteLD return value + TContactItemId* iSavedContactPtr; + /// Ref: application's title pane + CAknTitlePane* iTitlePane; + /// Own: Title pane text to restore on exit + HBufC* iStoredTitlePaneText; + /// Own: Phonebook context pane icon + CPbkContextPaneIcon* iContextPaneIcon; + /// Own: Thumbnail image handler + CPbkThumbnailPopup* iThumbnailHandler; + /// Own: context menu bar + CEikMenuBar* iContextMenuBar; + /// Own: Thumbnail command handler + CPbkThumbnailCmd* iThumbnailCmd; + /// Own: editor dialog strategy + MPbkContactEditorStrategy* iEditorStrategy; + /** + * Ref: self pointer for easier leave handling + * @invariant !iSelfPtr || *iSelfPtr==this + */ + CPbkContactEditorDlg** iSelfPtr; + class CExtension; + /// Own: for adding extensions + CExtension* iExtension; + /// Own: the help context to use + TCoeHelpContext iHelpContext; + /// Ref: Contact editor exit callback + MPbkEditorOkToExitCallback* iExitCallback; + /// Own: exit command id + TInt iExitCommandId; + /// Ref: status pane handle + CAknNavigationControlContainer* iNaviContainer; + + private: // friends + friend class CExtension; + }; + +#endif // __CPbkContactEditorDlg_H__ + +// End of File