diff -r 000000000000 -r f979ecb2b13e notepad/notepad1/LibSrc/NpdApi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/notepad/notepad1/LibSrc/NpdApi.cpp Tue Feb 02 10:12:19 2010 +0200 @@ -0,0 +1,612 @@ +/* +* 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 Library APIs. +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include + +#include "NpdApi.h" +#include "NpdModel_platsec.h" +#include "NpdListDialog.h" +#include "NpdEditorDialog.h" +#include "NpdExternalTextEditorDialog.h" +#include "NpdViewerDialog.h" +#include "NpdPopupList.h" + +// CONSTANTS +_LIT(KNpdResourceDrive, "z:"); +_LIT(KNpdLibResourceFilename, "npdlib.rsc"); + +//static const TInt KFetchMemoPromptMaxlength = 40; +//static const TInt KEmptyMessageMaxlength = 80; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CNotepadApi::NewL +// two-phased constructor +// ----------------------------------------------------------------------------- +// +EXPORT_C CNotepadApi* CNotepadApi::NewL() + { + CNotepadApi* self = NewLC(); + CleanupStack::Pop(); // self + return self; + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::NewLC +// two-phased constructor +// ----------------------------------------------------------------------------- +// +EXPORT_C CNotepadApi* CNotepadApi::NewLC() + { + CNotepadApi* self = new(ELeave) CNotepadApi; + CleanupStack::PushL(self); + TFileName fileName(KNpdResourceDrive); + fileName.Append(KDC_RESOURCE_FILES_DIR); + fileName.Append(KNpdLibResourceFilename); + + self->iResourceLoader.OpenL(fileName); + return self; // self is kept on CleanupStack + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::~CNotepadApi +// Destructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CNotepadApi::~CNotepadApi() + { + delete iModel; + iResourceLoader.Close(); + delete iDialog; + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::FetchMemoL +// ----------------------------------------------------------------------------- +// +EXPORT_C HBufC* CNotepadApi::FetchMemoL(const TDesC* aTitle) + { + CNotepadApi* api = CNotepadApi::NewLC(); // with resource adding + HBufC* fetchedMemo = api->DoPopupListL( + aTitle, + R_NOTEPAD_FETCH_MEMO_MODEL, + R_NOTEPAD_FETCH_MEMO_PRMPT); + CleanupStack::PopAndDestroy(); // api (release the resource) + return fetchedMemo; + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::FetchTemplateL +// ----------------------------------------------------------------------------- +// +EXPORT_C HBufC* CNotepadApi::FetchTemplateL(const TDesC* aTitle) + { + CNotepadApi* api = CNotepadApi::NewLC(); // with resource adding + HBufC* fetchedTemplate = api->DoPopupListL( + aTitle, + R_NOTEPAD_FETCH_TEMPLATE_MODEL, + R_NOTEPAD_FETCH_TEMPLATE_PRMPT, + R_NOTEPAD_MCE_EMPTY_LIST ); + CleanupStack::PopAndDestroy(); // api (release the resource) + return fetchedTemplate; + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::ExecTemplatesL +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CNotepadApi::ExecTemplatesL() + { + CNotepadApi* api = CNotepadApi::NewLC(); + api->CreateListDialogL(R_NOTEPAD_TEMPLATE_LIST_DIALOG); + CNotepadListDialog* dialog = + STATIC_CAST(CNotepadListDialog*, api->iDialog); + TInt returnValueOfDialogExecuteLD(dialog->ExecuteLD()); // wait dialog + CleanupStack::PopAndDestroy(); // api + return returnValueOfDialogExecuteLD; + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::ExecFileViewerL +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CNotepadApi::ExecFileViewerL( + const TDesC& aFileName, + const TDesC* aTitle, + const TBool aDoWait, + TBool aGuessEncoding, + TUint aEncoding) + { + CNotepadApi* api = CNotepadApi::NewLC(); + RFs fileSession; + User::LeaveIfError(fileSession.Connect()); + CleanupClosePushL(fileSession); + RFile file; + User::LeaveIfError(file.Open(fileSession, aFileName, EFileRead)); + CleanupClosePushL(file); + api->CreateViewerDialogL( + file, aTitle, aDoWait, aGuessEncoding, aEncoding); + TInt returnValueOfDialogExecuteLD( + STATIC_CAST(CNotepadViewerDialog*, api->iDialog)->ExecuteLD() ); + CleanupStack::PopAndDestroy(3); // api, file, fileSession + return returnValueOfDialogExecuteLD; + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::ExecFileViewerL file handle +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CNotepadApi::ExecFileViewerL( + RFile& aFile, + const TDesC* aTitle, + const TBool aDoWait, + TBool aGuessEncoding, + TUint aEncoding) + { + CNotepadApi* api = CNotepadApi::NewLC(); + api->CreateViewerDialogL( + aFile, aTitle, aDoWait, aGuessEncoding, aEncoding); + TInt returnValueOfDialogExecuteLD( + STATIC_CAST(CNotepadViewerDialog*, api->iDialog)->ExecuteLD() ); + CleanupStack::PopAndDestroy(); // api + return returnValueOfDialogExecuteLD; + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::AddContentL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CNotepadApi::AddContentL(const TDesC& aText) + { + CNotepadApi::NewLC(); // loading our resource + CNotepadCoreModel* model = new(ELeave) CNotepadCoreModel(); + CleanupStack::PushL(model); + model->ConstructL( R_NOTEPAD_DATAFILE_NAME ); + TInt key(KNotepadPseudoKeyIdForNewNote); + model->InsertL(aText, key); + CleanupStack::PopAndDestroy(2); // model, api (release the resource) + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::ExistsMemoL +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CNotepadApi::ExistsMemoL(const TInt aKey) + { + CNotepadApi* api = CNotepadApi::NewLC(); + TBool isFound( api->ProbeMemoL(aKey) ); + CleanupStack::PopAndDestroy(); // api + return isFound; + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::NumberOfTemplates +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CNotepadApi::NumberOfTemplates() + { + TInt numberOfTemplates(0); + TRAPD(err, + CNotepadApi::NewLC(); // loading our resource + CNotepadCoreModel* model = new(ELeave) CNotepadCoreModel(); + CleanupStack::PushL(model); + model->ConstructL( R_NOTEPAD_TEMPLATE_DATAFILE_NAME ); + numberOfTemplates = model->CountL(); + CleanupStack::PopAndDestroy(2); // model, api (release the resource) + ); + return (err < 0) ? err : numberOfTemplates; + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::SaveFileAsMemoL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CNotepadApi::SaveFileAsMemoL(const TDesC& aFileName) + { + CPlainText* text = CPlainText::NewL(CEditableText::EFlatStorage); + CleanupStack::PushL(text); + NotepadUtil::LoadFileL(*CCoeEnv::Static(), aFileName, + ETrue, // aGuessEncoding + 0, // aEncoding + *text ); + AddContentL(text->Read(0, text->DocumentLength())); + CleanupStack::PopAndDestroy(); // text + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::SaveFileAsMemoL file handle +// ----------------------------------------------------------------------------- +// +EXPORT_C void CNotepadApi::SaveFileAsMemoL(RFile& aFile) + { + CPlainText* text = CPlainText::NewL(CEditableText::EFlatStorage); + CleanupStack::PushL(text); + NotepadUtil::LoadFileL(*CCoeEnv::Static(), aFile, + ETrue, // aGuessEncoding + 0, // aEncoding + *text ); + AddContentL(text->Read(0, text->DocumentLength())); + CleanupStack::PopAndDestroy(); // text + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::SaveFileAsMemoL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CNotepadApi::SaveFileAsMemoL(const TDesC& aFileName, const TUint aEncoding) + { + CPlainText* text = CPlainText::NewL(CEditableText::EFlatStorage); + CleanupStack::PushL(text); + NotepadUtil::LoadFileL(*CCoeEnv::Static(), aFileName, + EFalse, // aGuessEncoding + aEncoding, // aEncoding + *text ); + AddContentL(text->Read(0, text->DocumentLength())); + CleanupStack::PopAndDestroy(); // text + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::SaveFileAsMemoL file handle +// ----------------------------------------------------------------------------- +// +EXPORT_C void CNotepadApi::SaveFileAsMemoL(RFile& aFile, const TUint aEncoding) + { + CPlainText* text = CPlainText::NewL(CEditableText::EFlatStorage); + CleanupStack::PushL(text); + NotepadUtil::LoadFileL(*CCoeEnv::Static(), aFile, + EFalse, // aGuessEncoding + aEncoding, // aEncoding + *text ); + AddContentL(text->Read(0, text->DocumentLength())); + CleanupStack::PopAndDestroy(); // text + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::Dialog +// ----------------------------------------------------------------------------- +// +EXPORT_C CEikDialog* CNotepadApi::Dialog() + { + return iDialog; + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::Model +// ----------------------------------------------------------------------------- +// +EXPORT_C CNotepadModel* CNotepadApi::Model() + { + return iModel; + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::CreateListDialogL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CNotepadApi::CreateListDialogL(TInt aResId) + { + delete iDialog; + iDialog = NULL; + iDialog = CNotepadListDialog::NewL(aResId, + REINTERPRET_CAST( CEikDialog**, &iDialog ) ); + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::CreateViewerDialogL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CNotepadApi::CreateViewerDialogL( + const TDesC& aFileName, + const TDesC* aTitle, + const TBool aDoWait, + TBool aGuessEncoding, + TUint aEncoding) + { + CreateViewerDialogL(aDoWait); + STATIC_CAST(CNotepadViewerDialog*, iDialog)->SetFileL( + aFileName, aTitle, aGuessEncoding, aEncoding ); + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::CreateViewerDialogL file handle +// ----------------------------------------------------------------------------- +// +EXPORT_C void CNotepadApi::CreateViewerDialogL( + RFile& aFile, + const TDesC* aTitle, + const TBool aDoWait, + TBool aGuessEncoding, + TUint aEncoding) + { + CreateViewerDialogL(aDoWait); + STATIC_CAST(CNotepadViewerDialog*, iDialog)->SetFileL( + aFile, aTitle, aGuessEncoding, aEncoding ); + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::CreateViewerDialogL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CNotepadApi::CreateViewerDialogL(const TBool aDoWait) + { + delete iDialog; + iDialog = NULL; + iDialog = CNotepadViewerDialog::NewL( + ( aDoWait ? R_NOTEPAD_VIEWER_WAITING : R_NOTEPAD_VIEWER ), + REINTERPRET_CAST( CEikDialog**, &iDialog ) ); + } + + +// ----------------------------------------------------------------------------- +// CNotepadApi::CreateViewerDialogL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CNotepadApi::CreateTextViewerDialogL( + HBufC **aContentPointer, + TInt& aReturnStatus, + TBool aReadOnly, + const TDesC& aText, + const TDesC& aTitle, + const TDesC& aDeleteConfirmationText + ) + { + delete iDialog; + iDialog = NULL; + iDialog = CNotepadViewerDialog::NewL( + ( R_NOTEPAD_VIEWER_WAITING ), + REINTERPRET_CAST( CEikDialog**, &iDialog ) ); + + STATIC_CAST(CNotepadViewerDialog*, iDialog)->InitDescriptorViewerL( + aContentPointer, aReturnStatus, aReadOnly, aText, aTitle, aDeleteConfirmationText ); + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::CreateTextEditorDialogL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CNotepadApi::CreateTextEditorDialogL( + HBufC **aContentPointer, + TInt& aReturnStatus, + const TDesC& aText, + const TDesC& aTitle, + const TDesC& aDeleteConfirmationText + ) + { + delete iDialog; + iDialog = NULL; + iDialog = CNotepadExternalTextDialog::NewL( + aContentPointer, aReturnStatus, aText, aTitle, aDeleteConfirmationText, + REINTERPRET_CAST( CEikDialog**, &iDialog ) + ); + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::CreateModelL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CNotepadApi::CreateModelL(TInt aResId) + { + delete iModel; + iModel = NULL; + iModel = CNotepadModel::NewL(iEnv->FsSession(), aResId); + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::ProbeMemoL +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CNotepadApi::ProbeMemoL(const TInt aKey) + { + if ( aKey < 0 ) + { + return EFalse; + } + if ( !iModel ) + { + iModel = CNotepadModel::NewL( + iEnv->FsSession(), R_NOTEPAD_SAVE_MEMO ); + } + return 0 == iModel->SeekKey(aKey); + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::CNotepadApi +// private c++ Constructor +// ----------------------------------------------------------------------------- +// +CNotepadApi::CNotepadApi() + : iEnv(CCoeEnv::Static()), iResourceLoader(*CCoeEnv::Static()) + { + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::DoPopupListL +// ----------------------------------------------------------------------------- +// +HBufC* CNotepadApi::DoPopupListL( + const TDesC* aTitle, + TInt aModelResId, + TInt aPromptResId, + TInt aEmptyTextResId ) + { + CreateModelL(aModelResId); + + TBool finished(ETrue); + TBool isNotCancelled; + TInt itemIndex(0); + + do + { + CAknSinglePopupMenuStyleListBox* listbox + = new(ELeave) CAknSinglePopupMenuStyleListBox; + CleanupStack::PushL(listbox); + CNotepadPopupList* popupList = CNotepadPopupList::NewL( + listbox, + R_AVKON_SOFTKEYS_SELECT_CANCEL, + AknPopupLayouts::EMenuWindow, + *iModel); + CleanupStack::PushL(popupList); + iModel->SetNotepadModelObserver(popupList); + + listbox->ConstructL(popupList, 0); + (listbox->Model())->SetItemTextArray(iModel); + (listbox->Model())->SetOwnershipType(ELbmDoesNotOwnItemArray); + listbox->CreateScrollBarFrameL(ETrue); + + listbox->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto); + if ( aTitle ) + { + popupList->SetTitleL(*aTitle); + } + else + { + HBufC* buf = StringLoader::LoadLC(aPromptResId); + popupList->SetTitleL(*buf); + CleanupStack::PopAndDestroy(buf); + } + if ( aEmptyTextResId > 0 ) + { + HBufC* buf = StringLoader::LoadLC(aEmptyTextResId); + listbox->View()->SetListEmptyTextL(*buf); + CleanupStack::PopAndDestroy(buf); + } + + isNotCancelled = popupList->EnhancedExecuteLD( finished ); + CleanupStack::Pop( popupList ); + itemIndex = listbox->CurrentItemIndex(); + CleanupStack::PopAndDestroy( listbox ); + } + while(!finished); + + HBufC* fetchedContent = NULL; + if ( isNotCancelled ) + { + if (iModel->MdcaCount()) + { + fetchedContent = + iModel->ContentL( itemIndex ); + } + } + + return fetchedContent; + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::ExecReadonlyTextViewerL +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CNotepadApi::ExecReadOnlyTextViewerL( + const TDesC& aText, + const TDesC& aTitle, + const TDesC& aDeleteConfirmationText + ) + { + + HBufC* tmp = NULL; + + CNotepadApi* api = CNotepadApi::NewLC(); + + TInt returnValueOfDialogExecuteLD; + + api->CreateTextViewerDialogL( &tmp, returnValueOfDialogExecuteLD, ETrue, aText, aTitle, aDeleteConfirmationText); + + returnValueOfDialogExecuteLD = STATIC_CAST(CNotepadViewerDialog*, api->iDialog)->ExecuteLD(); + + CleanupStack::PopAndDestroy(); // api + + delete tmp; + return returnValueOfDialogExecuteLD; + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::ExecTextViewerL +// ----------------------------------------------------------------------------- +// +EXPORT_C HBufC* CNotepadApi::ExecTextViewerL( + TInt& aReturnStatus, + const TDesC& aText, + const TDesC& aTitle, + const TDesC& aDeleteConfirmationText + ) + { + + HBufC* tmp = NULL; + + CNotepadApi* api = CNotepadApi::NewLC(); + + api->CreateTextViewerDialogL( &tmp, aReturnStatus, + EFalse, aText, aTitle, aDeleteConfirmationText); + + STATIC_CAST(CNotepadViewerDialog*, api->iDialog)->ExecuteLD(); + + CleanupStack::PopAndDestroy(); // api + + return tmp; + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::ExecTextEditorL +// ----------------------------------------------------------------------------- +// +EXPORT_C HBufC* CNotepadApi::ExecTextEditorL( + TInt& aReturnStatus, + const TDesC& aText, + const TDesC& aTitle, + const TDesC& aDeleteConfirmationText + ) + { + HBufC* tmp = NULL; + + CNotepadApi* api = CNotepadApi::NewLC(); + + aReturnStatus = KErrNone; + api->CreateTextEditorDialogL( &tmp, aReturnStatus, aText, aTitle, aDeleteConfirmationText); + + STATIC_CAST(CNotepadExternalTextDialog*, api->iDialog)->ExecuteLD(); + + CleanupStack::PopAndDestroy(); // api + + return tmp; + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::CNotepadApi_Reserved +// ----------------------------------------------------------------------------- +// +EXPORT_C void CNotepadApi::CNotepadApi_Reserved() + { + } + +// ----------------------------------------------------------------------------- +// CNotepadApi::CNotepadApi_Reserved_Static +// ----------------------------------------------------------------------------- +// +EXPORT_C void CNotepadApi::CNotepadApi_Reserved_Static() + { + } + +// End of File