notepad/notepad1/inc/NpdEditorDialog.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 14 Sep 2010 21:17:03 +0300
branchRCL_3
changeset 31 97232defd20e
parent 0 f979ecb2b13e
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* 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:  Declaration of Notepad Editor Dialog class.
*
*/


#ifndef NPDEDITORDIALOG_H
#define NPDEDITORDIALOG_H

// INCLUDES
#include <eikapp.h>
#include <eikdoc.h>
#include <e32std.h>
#include <coeccntx.h>
#include <aknappui.h>
#include <eikedwob.h>
#include "NpdDialogBase.h"
#include "NpdModelObserver.h"
#include <finditemengine.h>
#include <e32property.h> 

// FORWARD DECLARATIONS
class CNotepadModel;
class CNotepadEdwin;
class CNotepadEditorLaf;
class CSendUi;
class CNotepadListDialog;
class CAknAppUi;
class CIdle;
class CFindItemMenu;
class CAiwServiceHandler;

// CLASS DECLARATION
/**
* Dialog of editor mode.
* CNotepadEditorDialog is a dialog for both memo editor and template editor.
*  
* @lib NpdLib.lib
* @see CNotepadDialogBase
*/
class CNotepadEditorDialog : public CNotepadDialogBase, 
    public MNotepadModelObserver
    {
    public:  // Constructors and destructor
        /**
        * Constructor.
        *
        * @param aResId resource id of type STRUCT NOTEPAD_EDITOR_DIALOG.
        * @param aModel pointer to CNotepadModel, never NULL.
        * @param aSendUi aSendUi object.
        * @return new CNotepadDialogBase object.
        * @internal
        */
        IMPORT_C static CNotepadEditorDialog* NewL(
            TInt aResId, 
            CNotepadModel* aModel,
            CNotepadListDialog* aListDialog,
            CSendUi* aSendUi);

        /**
        *  Destructor.
        */
        IMPORT_C virtual ~CNotepadEditorDialog();

    public: // New functions

        #ifdef RD_INTELLIGENT_TEXT_INPUT   
        void FocusChanged(TDrawNow aDrawNow);
        #endif
        /**
        * Execute a dialog.
        *
        * @return exit status value of CEikDialog's ExecuteLD.
        * @internal
        */
        IMPORT_C TInt ExecuteLD();

        /**
        * Switch contents of the editor to text of specified item.
        *
        * @param aKey Unique key id of Notepad items.
        */
        void SwitchTextL(TInt aKey); 

        /**
        * Save current contents of the editor into database.
        *
        * @param aNeedListRefresh Refresh List mode if ETrue.
        * @return TNotepadModelRowResult ( return value of SaveL ).
        */
        TInt SaveOnExitL(TBool aNeedListRefresh);

        /**
        * Switch contents of the editor to text of specified item.
        * Current contents of the editor is saved before the switching.
        * 
        * This method is called when receiving a message from 
        * Pinboard while editor dialog is running.
        *
        * @param aKey unique memo id.
        * @param aAppUi base app ui.
        */
        void EditByKeyL(const TInt aKey, CAknAppUi& aAppUi);

        /**
        * Set a key event. This method is used when the editor is opened 
        * from list mode by pressing a number key.
        *
        * @param aKeyEvent number key event.
        */
        void SetInitialKeyEventL(const TKeyEvent& aKeyEvent);

    protected:  // Functions from base classes

        /**
        * From MNotepadModelObserver.
        */
        void HandleNotepadModelEventL(TEvent aEvent, TInt aParam = 0);

        /**
        * From MEikMenuObserver.
        * 
        * @param aResourceId resource id.
        * @param menu pane object.
        */
        void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane);

       
       	/**
        * From MEikMenuObserver.
        * 
        * @param aResourceId resource id.
        * @param menu Bar object.
        */
        void DynInitMenuBarL(TInt aResourceId,CEikMenuBar* aMenuBar);
        
        
        /**
        * From MEikCommandObserver
        * 
        * @param aCommandId command.
        */
        void ProcessCommandL(TInt aCommandId);

        /**
        * From CEikDialog.
        * Override to implement dynamically changing decoration.
        *
        * @param aControlId id of editor dialog line.
        */
        void HandleControlStateChangeL(TInt aControlId);

        /**
        * From CEikDialog.
        */
        void PreLayoutDynInitL();

        /**
        * From CEikDialog.
        */
        TBool OkToExitL( TInt aButtonId ) ;

        /**
        * From CCoeControl.
        */
        void ActivateL();

        /**
        * From CCoeControl
        *
        * @param aKeyEvent key event which includes ScanCode etc.
        * @param aType event type ( up, in, down...).
        */
        TKeyResponse OfferKeyEventL(
            const TKeyEvent& aKeyEvent, 
            TEventCode aType);

        /**
        * From CCoeControl.
        *
        * @param aContext TCoeHelpContext.
        */
        void GetHelpContext(TCoeHelpContext& aContext) const;

        /**
        * From CCoeControl
        *
        * @param aType event type.
        */
		void HandleResourceChange(TInt aType);

        /**
        * From CCoeControl.
        * Called when SizeChanged.
        */
        void SizeChanged();

    private: // Constructors

        /**
        * C++ constructor.
        */
        CNotepadEditorDialog(
            CNotepadModel& aModel, 
            CNotepadListDialog* aListDialog );

        /**
        * Internal base constructor.
        *
        * @param aReader resource reader already opened for 
        *                "STRUCT NOTEPAD_EDITOR_DIALOG".
        */
        void ConstructL(TResourceReader& aReader);

    private: // New functions.

        /**
        * Save current content of editor into database.
        *
        * @return TNotepadModelRowResult
        */
        TInt SaveL();


        /**
        * Called on ENotepadCmdAdd.
        */
        void OnCmdAddL();

        /**
        * Called on ENotepadCmdNextMemo
        */
        void OnCmdNextMemoL();

        /**
        * Called on ENotepadCmdPreviousMemo
        */
        void OnCmdPreviousMemoL();

        /**
        * Called on ENotepadCmdDelete
        */
        void OnCmdDeleteL();


        /** 
        * Number key callback function for deferred key event (for FEP).
        *
        * @param a pointer of CNotepadEditorDialog.
        * @return always EFalse.
        */
        static TInt NumberKeyCallBack(TAny *aSelf);


        /**
        * Check the condition if the Notepad editor is empty or not.
        */
  	     inline TBool IsEmpty() const;


        /**
        * Resource id of prompt text when deleting a single item.
        *
        * @return TBUF resource id.
        */
        inline TInt QueryDeleteSingleResId() const;

        /**
        * Create iSequence.
        */
        void CreateSequenceL();

        /**
        * Sync between iSequence and iModel->iKeyArray.
        *
        * @param aForceSync if EFalse syncing is done only when the last 
        *   SyncSequenceL failed on LEAVE, otherwise syncing is done always.
        */
        void SyncSequenceL(const TBool aForceSync);

        /**
        * Check wether we are at the end of Sequence.
        *
        * @return ETrue if sequence exists and current is last.
        */
        TBool IsSequenceAtLast() const;

        /**
        * Check wether we are at the top of Sequence.
        *
        * @return ETrue if sequence exists and current is first.
        */
        TBool IsSequenceAtFirst() const;

        /**
        * The current index in Sequence of the item now editing.
        *
        * @return the current index if IsModeEditing, 
        *   KNotepadInvalidSequenceIndex if IsModeAdding.
        */
        TInt CurrentSequence() const;

        /**
        * Check if current mode is Adding.
        *
        * @return ETrue iff the current mode is Adding.
        */
        inline TBool IsModeAdding() const;

        /**
        * Check if current mode is Editing.
        *
        * @return ETrue iff the current mode is Editing.
        */
        inline TBool IsModeEditing() const;

        /**
        * Key id of the item next to the item now editing.
        *
        * If the mode is Adding and iSequence is empty, 
        * return KNotepadPseudoKeyIdForNewNote.
        *
        * If the mode is Adding and iSequence is not empty, 
        * return a key of the first item in iSequence.
        *
        * If the mode is Editing and the item now editing is the last item
        * in iSequence, return the key now editing.
        *
        * If the mode is Editing and the item now editing is not the last 
        * item in iSequence, return the key of the next item.
        *
        * @return Key id of the item next to the item now editing.
        */
        TInt NextKeyInSequence() const;

        /**
        * Key id of the item previous to the item now editing.
        *
        * If the mode is Adding, return KNotepadPseudoKeyIdForNewNote.
        *
        * If the mode is Editing and the item now editing is the first item
        * in iSequence, return the key now editing.
        *
        * If the mode is Editing and the item now editing is not the first 
        * item in iSequence, return the key of the previous item.
        *
        * @return Key id of the item previous to the item now editing.
        */
        TInt PreviousKeyInSequence() const;

		/**
		* Changes for Find Item.
		* To search a given buffer for phone numbers, email ids, URLs.
		**/
		TInt DoSearchL(CFindItemEngine::TFindItemSearchCase aCase);
		/**
		* test whether the text contains the linefeed character.
		* @return ETrue if the test contains linefeed character, EFalse if not.
		*/
		TBool IsContainLinefeedSymbol(const TDesC& aDes);

    private: // reserved

        /**
        * Reserved.
        */
        IMPORT_C void CNotepadEditorDialog_Reserved();

    private:
        enum TNotepadEditorFlags
            {
            ENotepadFindItemRuning = 0x01,
            ENotepadMenuByOkKey = 0x02,
            ENotepadRequireSequenceUpdate = 0x04,
            ENotepadCatchSaveOnExitCallback = 0x08
            };
        CNotepadEdwin* iEditor; // not own (CEikDialog own)
        CNotepadModel& iModel; // never own
        CSendUi* iSendUi; // not own
        CNotepadListDialog* iListDialog;
        TInt iKey;
        CIdle* iIdle;
        TKeyEvent iEvent; // moved to here from ListDialog
        TUint iFlags;
        CArrayFixFlat<TInt>* iSequence; // own, map SequenceIndex -> Key.
        CFindItemMenu*  iFindItemMenu; //Manual Find Item
        TBool iRedrawBackground;
        RProperty iQwertyModeStatusProperty;
        CAiwServiceHandler* iServiceHandler; // Own: AIW
        CActiveSchedulerWait iStoreWait;
        TBool iTaskSwapperFlag;
        TBool iExitByTerminateKey;
    };

#include "NpdEditorDialog.inl"
#endif // NPDEDITORDIALOG_H

// End of File