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