diff -r 000000000000 -r 2f259fa3e83a commonuis/CommonUi/src/DocNotepadHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commonuis/CommonUi/src/DocNotepadHandler.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,193 @@ +/* +* Copyright (c) 2002-2007 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 text data handler. +* +*/ + + +// INCLUDE FILES + +#include "DocNotepadHandler.h" +#include "DocSaver.h" + +#include "CommonUiNpdApiLoader.h" + +// CONSTANTS +// Path and filename of wrapper dll. +_LIT( KCommonUiNpdApiLoaderName, "z:\\sys\\bin\\commonuinpdapiloader.dll" ); +// Entry point for dynamically loaded dlls. +const TInt KNpdApiDllEntryPoint = 1; + +// TYPE DEFINITIONS +typedef TAny* (*NpdApiL)(); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CDocNotepadHandler* CDocNotepadHandler::NewL( + const TDataType& aDataType, + const TUid& aUid, + CDocumentHandler* aDocDispatcher ) + { + CDocNotepadHandler *self = + CDocNotepadHandler::NewLC( aDataType, + aUid, aDocDispatcher ); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// Two-phased constructor. Leaves the contructed instance in to the +// clean up stack. +// ----------------------------------------------------------------------------- +CDocNotepadHandler* CDocNotepadHandler::NewLC( + const TDataType& aDataType, + const TUid& aUid, + CDocumentHandler* aDocDispatcher ) + { + CDocNotepadHandler *self = + new( ELeave ) CDocNotepadHandler( aDataType, aUid, + aDocDispatcher, EDocOpenAndSave ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// Epoc constructor +// ----------------------------------------------------------------------------- +void CDocNotepadHandler::ConstructL() + { + BaseConstructL(); + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +CDocNotepadHandler::~CDocNotepadHandler() + { + delete iNpdApi; + if( iNpdDllLoaded ) + { + iNpdDll.Close(); + } + } + +// ----------------------------------------------------------------------------- +// Constructor +// ----------------------------------------------------------------------------- +CDocNotepadHandler::CDocNotepadHandler( + const TDataType& aDataType, + const TUid& aUid, + CDocumentHandler* aDocDispatcher, + TDocServiceMode aServiceMode ) : + CDocDefaultHandler( aDataType, aUid, aDocDispatcher, aServiceMode ) + { + } + + +// ----------------------------------------------------------------------------- +// TInt CDocNotepadHandler::CopyOrMoveL(..) +// Copy the text file content to Notepad's storage. +// ----------------------------------------------------------------------------- +TInt CDocNotepadHandler::CopyOrMoveL( const TUint ) + { + TInt error = KErrNone; + if( !iNpdDllLoaded ) + { + LoadNpdApiL(); + } + iNpdApi->SaveFileAsMemoL( iSourceFile ); + + // If this was MoveL-function, then we have to delete source file + if (DocOperation() == EDocMove || DocOperation() == EDocSilentMove) + { + error = iFileManager->Delete(iSourceFile, ETrue); + } + + // skip note if silentmove + if (DocOperation() != EDocSilentMove) + { + AddResourcesL(); + HBufC* text; + text = StringLoader::LoadLC( + R_DOCUMENT_HANDLER_FILE_SAVED_TO, + this->iAppInfo.iCaption ); + CDocSaver::ConfNoteL( text->Des(), ETrue ); + CleanupStack::PopAndDestroy(); // text + RemoveResources(); + } + + HandleServerAppExit(0); + return SetAndReturnStatus( error ); + } + +// ----------------------------------------------------------------------------- +// TInt CDocNotepadHandler::CopyHandleL(..) +// Copy the text file content to Notepad's storage. +// ----------------------------------------------------------------------------- +TInt CDocNotepadHandler::CopyHandleL( const RFile& aSourceFile, const TUint ) + { + TInt error = KErrNone; + if( !iNpdDllLoaded ) + { + LoadNpdApiL(); + } + iNpdApi->SaveFileAsMemoL( aSourceFile ); + + AddResourcesL(); + HBufC* text; + text = StringLoader::LoadLC( + R_DOCUMENT_HANDLER_FILE_SAVED_TO, + this->iAppInfo.iCaption ); + CDocSaver::ConfNoteL( text->Des(), ETrue ); + CleanupStack::PopAndDestroy(); // text + RemoveResources(); + + HandleServerAppExit(0); + return SetAndReturnStatus( error ); + } + +// ----------------------------------------------------------------------------- +// TInt CDocNotepadHandler::LoadNpdApiL +// Load Notepad Api. +// ----------------------------------------------------------------------------- +void CDocNotepadHandler::LoadNpdApiL() + { + // Memo saving dll loading. + if( !iNpdDllLoaded ) + { + if( iNpdDll.Load( KCommonUiNpdApiLoaderName ) == KErrNone ) + { + iNpdDllLoaded = ETrue; + // Request the entry function + NpdApiL npdApi = (NpdApiL) iNpdDll.Lookup( KNpdApiDllEntryPoint ); + if( npdApi ) + { + // Create the class + iNpdApi = (CCommonUiNpdApiLoader*) (*npdApi)(); + } + } + } + // The wrapper failed to load. + if ( !iNpdApi ) + { + User::Leave( KErrNotFound ); + } + } + +// End of File