diff -r 12af337248b1 -r bd7edf625bdd notepad/notepad1/LibSrc/NpdExternalTextEditorDialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/notepad/notepad1/LibSrc/NpdExternalTextEditorDialog.cpp Wed Sep 01 12:32:31 2010 +0100 @@ -0,0 +1,427 @@ +/* +* 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: Implementation of Notepad Editor mode. +* +*/ + + +// INCLUDE FILES +#include "NpdLib.hrh" +#include "NpdExternalTextEditorDialog.h" +#include "NpdApi.h" +#include "NpdLib.h" +#include "NpdUtil.h" +#include "NpdEdwin.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include "NpdLibPanic.h" +#include "NpdEdwinLines.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CNotepadExternalTextDialog::NewL +// constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CNotepadExternalTextDialog* CNotepadExternalTextDialog::NewL( + HBufC** aText, + TInt& aReturnStatus, + const TDesC& aInitialText, + const TDesC& aTitle, + const TDesC& aConfirmText, + CEikDialog** aSelfPtr + ) + { + CNotepadExternalTextDialog* self = new(ELeave) CNotepadExternalTextDialog(); + self->iSelfPtr = aSelfPtr; + CleanupStack::PushL(self); + + TResourceReader rr; + self->iCoeEnv->CreateResourceReaderLC(rr, R_NOTEPAD_TEXT_EDITOR); + self->ConstructL( rr, aText, aReturnStatus, aInitialText, aTitle , aConfirmText); + CleanupStack::PopAndDestroy(); // rr + CleanupStack::Pop(); // rr + return self; + } + +// ----------------------------------------------------------------------------- +// CNotepadExternalTextDialog::ConstructL +// constructor. +// ----------------------------------------------------------------------------- +// +void CNotepadExternalTextDialog::ConstructL( + TResourceReader &rr, + HBufC** aText, + TInt& aReturnStatus, + const TDesC& aInitialText, + const TDesC& aTitle, + const TDesC& aConfirmText + ) + { + if ( aTitle.Length() != 0 ) + { + CNotepadDialogBase::SetTitleL(&aTitle); + } + iContent.Set( aInitialText ); + iContentPointer = aText; + + if (aConfirmText.Length() != 0) + { + iDeleteConfirmation.Set( aConfirmText ); + } + + iOKKeyPressed = ETrue; + CNotepadDialogBase::ConstructL(rr); + iReturnValue = &aReturnStatus; + iFindItemMenu = CFindItemMenu::NewL(ENotepadCmdFind); + } + +// ----------------------------------------------------------------------------- +// CNotepadExternalTextDialog::~CNotepadExternalTextDialog +// Destructor +// ----------------------------------------------------------------------------- +// +EXPORT_C CNotepadExternalTextDialog::~CNotepadExternalTextDialog() + { + delete iFindItemMenu; + } + +// ----------------------------------------------------------------------------- +// CNotepadExternalTextDialog::OkToExitL +// ----------------------------------------------------------------------------- +// +TBool CNotepadExternalTextDialog::OkToExitL( TInt aButtonId ) + { + TBool isOk(ETrue); + //MSK + if(aButtonId == EAknSoftkeyContextOptions ) + { + iOKKeyPressed = ETrue; + DisplayMenuL(); + return EFalse; + } + else if(aButtonId == EAknSoftkeyOptions ) + { + iOKKeyPressed = EFalse; + } + else + { + } + isOk = CAknDialog::OkToExitL(aButtonId); + + TInt size = iEditor->Text()->DocumentLength(); + + if(size == 0) + { + *iReturnValue = CNotepadApi::ENpdDataErased; + } + else if(size != 0 && (*iReturnValue) != CNotepadApi::ENpdDataDeleted ) + { + *iContentPointer = HBufC::NewL(size); + TPtr desptr = (*iContentPointer)->Des(); + iEditor->Text()->Extract(desptr,0,size); + if(NotepadUtil::IsEmpty(**iContentPointer)) + { + *iReturnValue = CNotepadApi::ENpdDataErased; + } + else + { + *iReturnValue = CNotepadApi::ENpdDataEdited; + } + } + + return isOk; + } + +// --------------------------------------------------------- +// CNotepadExternalTextDialog::HandleResourceChange +// from CCoeControl +// --------------------------------------------------------- +// +void CNotepadExternalTextDialog::HandleResourceChange(TInt aType) + { + if (aType == KEikDynamicLayoutVariantSwitch) + { + TRect mainPane; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane,mainPane); + SetRect(mainPane); + } + } + +// --------------------------------------------------------- +// CNotepadExternalTextDialog::SizeChanged +// from CCoeControl +// --------------------------------------------------------- +// +void CNotepadExternalTextDialog::SizeChanged() + { + CNotepadDialogBase::SizeChanged(); + if (iEditor && IsActivated()) + { + TRAP_IGNORE(iEditor->DoEditorLayoutL()); + } + } + +// ----------------------------------------------------------------------------- +// CNotepadExternalTextDialog::PostLayoutDynInitL +// ----------------------------------------------------------------------------- +// +void CNotepadExternalTextDialog::PostLayoutDynInitL() + { + + iEditor = STATIC_CAST(CNotepadEdwin*, Control(ENotepadIdEdwin)); + iEditor->ConstructBaseL(); + __ASSERT_DEBUG( iEditor, Panic(ENotepadLibraryPanicNoEdwin) ); + iEditor->CreatePreAllocatedScrollBarFrameL()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto); + + iEditor->Text()->Reset(); + iEditor->SetTextL(&iContent); + iEditor->HandleTextChangedL(); + + CEikAppUi* container = iAvkonAppUi->ContainerAppUi(); + //cannot find UIDs in SenduiMtmUids.h + TUid appuid = KNullUid; + if ( container ) + { + appuid = container->Application()->AppDllUid(); + } + + TRect rect(iEikonEnv->EikAppUi()->ClientRect()); + iEditor->SetRect(rect); + } + +// ----------------------------------------------------------------------------- +// CNotepadExternalTextDialog::ActivateL +// ----------------------------------------------------------------------------- +// +void CNotepadExternalTextDialog::ActivateL() + { + __ASSERT_DEBUG( iEditor, Panic(ENotepadLibraryPanicNoEdwin) ); + iEditor->InitNotepadEditorL(this, STATIC_CAST(CNotepadEdwinLines*, Control(ENotepadIdEdwinLines))); + iEditor->SetFocus(ETrue, ENoDrawNow); + CNotepadDialogBase::ActivateL(); + } + +// ----------------------------------------------------------------------------- +// CNotepadExternalTextDialog::OfferKeyEventL +// from CoeControl +// ----------------------------------------------------------------------------- +// +TKeyResponse CNotepadExternalTextDialog::OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + TKeyResponse keyResponse(EKeyWasConsumed); + + if ( !MenuShowing() && aType == EEventKey && + !( aKeyEvent.iModifiers & (EAllStdModifiers|EModifierSpecial) ) && + ( aKeyEvent.iCode == EKeyOK ) ) + { + iOKKeyPressed = ETrue; + DisplayMenuL(); + } + else if( aKeyEvent.iCode == EKeyPhoneEnd ) + { + TInt size = iEditor->Text()->DocumentLength(); + if(size == 0) + { + *iReturnValue = CNotepadApi::ENpdDataErased; + } + else if(size != 0 && (*iReturnValue) != CNotepadApi::ENpdDataDeleted ) + { + *iContentPointer = HBufC::NewL(size); + TPtr desptr = (*iContentPointer)->Des(); + iEditor->Text()->Extract(desptr,0,size); + if(NotepadUtil::IsEmpty(**iContentPointer)) + { + *iReturnValue = CNotepadApi::ENpdDataErased; + } + else + { + *iReturnValue = CNotepadApi::ENpdDataEdited; + } + } + } + else + { + keyResponse = CAknDialog::OfferKeyEventL(aKeyEvent, aType); + } + return keyResponse; + } + +// ----------------------------------------------------------------------------- +// CNotepadExternalTextDialog::GetHelpContext +// ----------------------------------------------------------------------------- +// +void CNotepadExternalTextDialog::GetHelpContext(TCoeHelpContext& aContext) const + { + aContext.iMajor = KUidNotepad; + aContext.iContext = KNMAKE_HLP_MEMO_EDITOR_APPS;//KNMAKE_HLP_MEMO_EDITOR; + } + +// ----------------------------------------------------------------------------- +// CNotepadExternalTextDialog::ProcessCommandL +// from MEikCommandObserver +// ----------------------------------------------------------------------------- +// +void CNotepadExternalTextDialog::ProcessCommandL(TInt aCommandId) + { + HideMenu(); + if ( iFindItemMenu && iFindItemMenu->CommandIsValidL( aCommandId ) ) + { + TInt ret = DoSearchL( iFindItemMenu->SearchCase(aCommandId) ); + if ( ret == EAknSoftkeyExit ) + { + aCommandId = ret; + } + else + { + return; + } + } + + switch (aCommandId) + { + case ENotepadCmdDelete: + { + TBool deleted; + if(iDeleteConfirmation.Length() != 0) + { + deleted = CNotepadDialogBase::ExecuteConfirmationQueryL( &iDeleteConfirmation ); + } + else + { + deleted =CNotepadDialogBase::ExecuteConfirmationQueryL( R_NOTEPAD_QUERY_DELETE_MEMO ); + } + if(deleted) + { + *iReturnValue = CNotepadApi::ENpdDataDeleted; + TryExitL(0); + } + break; + } + default: + CNotepadDialogBase::ProcessCommandL(aCommandId); + break; + } + } + +// ----------------------------------------------------------------------------- +// CNotepadExternalTextDialog::DynInitMenuPaneL +// from MEikMenuObserver +// ----------------------------------------------------------------------------- +// +void CNotepadExternalTextDialog::DynInitMenuPaneL( + TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + switch ( aResourceId ) + { + case R_NOTEPAD_TEXT_EDITOR_MENU: + if ( !(NotepadUtil::IsEmpty( iEditor->Text()->Read(0, iEditor->Text()->DocumentLength()) ) ) ) + { + if ( !(iOKKeyPressed) ) + { + iFindItemMenu->DisplayFindItemMenuItemL( + *aMenuPane, ENotepadCmdDelete); + } + } + if ( iOKKeyPressed ) + { + aMenuPane->SetItemDimmed(EAknCmdHelp,ETrue); + aMenuPane->SetItemDimmed(EAknCmdExit, ETrue); + iOKKeyPressed = ETrue; + } + else + { + iOKKeyPressed = ETrue; + } + if(!FeatureManager::FeatureSupported(KFeatureIdHelp)) + { + aMenuPane->SetItemDimmed(EAknCmdHelp, ETrue); + } + + break; + case R_FINDITEMMENU_MENU : + { + iFindItemMenu->DisplayFindItemCascadeMenuL(*aMenuPane); + break; + } + default: + break; + } + } + + +// ----------------------------------------------------------------------------- +// CNotepadExternalTextDialog::DynInitMenuBarL +// from MEikMenuObserver +// ----------------------------------------------------------------------------- +// +void CNotepadExternalTextDialog::DynInitMenuBarL(TInt aResourceId, CEikMenuBar* aMenuBar) + { + __ASSERT_DEBUG( aResourceId > 0,Panic(ENotepadLibraryPanicNoMenuResource) ); + __ASSERT_DEBUG( aMenuBar, Panic(ENotepadLibraryPanicNoMenuResource) ); + + CEikMenuBar::TMenuType menuType = (iOKKeyPressed) ? CEikMenuBar::EMenuOptionsNoTaskSwapper : + CEikMenuBar::EMenuOptions ; + aMenuBar->SetMenuType(menuType); + + } + +// ----------------------------------------------------------------------------- +// CNotepadExternalTextDialog::DoSearchL +// ----------------------------------------------------------------------------- +// +TInt CNotepadExternalTextDialog::DoSearchL(CFindItemEngine::TFindItemSearchCase aCase) + { + CFindItemDialog* dialog = CFindItemDialog::NewL( iEditor->Text()->Read(0), aCase ); + dialog->EnableSingleClick( ETrue ); + dialog->SetCallSubMenuVisibility( EFalse ); // Click-To-Call + TInt ret = dialog->ExecuteLD(); + TBuf<128> test = _L("FI returned: "); + test.AppendNum(ret); + iEikonEnv->InfoMsg(test); + return ret; + } + +// End of File