diff -r 000000000000 -r 72b543305e3a messagingappbase/smartmessaging/gmsmodel/src/CGmsWrapper.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/smartmessaging/gmsmodel/src/CGmsWrapper.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,210 @@ +/* +* 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: +* Wrapper for handling GMS message. It wraps a CGmsModel. +* +*/ + + + +// INCLUDE FILES +#include "CGmsPictureControl.h" +#include "CGmsWrapper.h" + +#include +#include // RFileReadStream +#include // CRIchText +#include +#include +#include // CDocumentHandler +#include // Avkon note wrappers +#include // for KErrMsgBioMessageNotValid + +// CONSTANTS + +// The picture is written to this temporary file because Photoalbum wants it +// in a file. And the file ending has to be 'ota', otherwise it won't be +// recognised by the photoalbum viewer. +_LIT(KTempOtaFileName, "gmstmp.ota"); + +_LIT(KCGmsWrapper,"CGmsWrapper"); + +// MEMBER FUNCTIONS + +EXPORT_C CGmsWrapper* CGmsWrapper::NewL(RFs& aFs) + { + CGmsWrapper* self = new (ELeave) CGmsWrapper(aFs); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CGmsWrapper::~CGmsWrapper() + { + delete iModel; + if (iExistsTmpFile) + { + __ASSERT_DEBUG(iFileName.Length() > 0, Panic(EGmsWrFilenameEmpty2)); + iFs.Delete(iFileName); + } + + } + +EXPORT_C void CGmsWrapper::LoadMsgL(const CRichText& aMsgRich) + { + iModel->ImportGMSL(aMsgRich); + ExportBitmapToTempFileL(); + } + +EXPORT_C void CGmsWrapper::AddPictureControlToViewL(CMsgEditorView& aView, TInt aId) + { + __ASSERT_DEBUG(iModel, Panic(EGmsWrNoModel1)); + __ASSERT_ALWAYS(iModel->HasPicture(), Panic(EGmsWrNoPicture)); + __ASSERT_ALWAYS(iFileName.Length() > 0, Panic(EGmsWrFilenameEmpty)); + CGmsPictureControl* imageControl = CGmsPictureControl::NewL(&aView); + CleanupStack::PushL(imageControl); + imageControl->SetControlId(aId); + imageControl->LoadImageL(iFileName); + aView.AddControlL(imageControl, imageControl->ControlId(), + EMsgFirstControl, EMsgBody); + CleanupStack::Pop(imageControl); + } + +EXPORT_C void CGmsWrapper::PictureSelectionPopupL(TInt /*aBadPicTextResId*/ ) + { + // This method is deprecated + User::Leave( KErrNotSupported ); + } + +EXPORT_C CRichText* CGmsWrapper::GetTextLC() + { + CRichText* richText = CRichText::NewL( + STATIC_CAST(CEikonEnv*, CCoeEnv::Static())->SystemParaFormatLayerL(), + STATIC_CAST(CEikonEnv*, CCoeEnv::Static())->SystemCharFormatLayerL()); + CleanupStack::PushL(richText); + HBufC16* text = iModel->TextAsHBufC16LC(); + richText->Reset(); // is this needed? + richText->InsertL( 0, *text); + CleanupStack::PopAndDestroy(text); + return richText; + } + +EXPORT_C void CGmsWrapper::SetTextL(CRichText& aRich) + { + TInt docLength = aRich.DocumentLength(); + HBufC16* buf = HBufC16::NewLC(docLength); + TPtr16 ptr16(buf->Des()); + aRich.Extract(ptr16, 0, docLength); + iModel->SetTextL(ptr16); + CleanupStack::PopAndDestroy(buf); + } + +EXPORT_C HBufC* CGmsWrapper::GetMessageLC() + { + return iModel->ExportGMS16LC(); + } + +EXPORT_C void CGmsWrapper::SetPictureMsgTitleL(CEikStatusPane& aStatusPane, + TInt aTitleTextResIs) + { + CEikStatusPane* sp = &aStatusPane; + CAknTitlePane* title = STATIC_CAST( + CAknTitlePane*, + sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ))); + HBufC* text = StringLoader::LoadLC(aTitleTextResIs); + title->SetTextL(*text); + CleanupStack::PopAndDestroy(text); + } + +EXPORT_C TInt CGmsWrapper::MsgSizeExcludingText() + { + return iModel->TotalSizeExcludingText(); + } + +EXPORT_C void CGmsWrapper::AddToPhotoAlbumL(TInt aDefaultNameResIs, + TInt /*aPictureCopiedResId*/) + { + CDocumentHandler* handler = CDocumentHandler::NewLC(NULL); + TDataType nullType; + TInt err = handler->CopyL( + iFileName, + *StringLoader::LoadLC(aDefaultNameResIs), + nullType, NULL); + CleanupStack::PopAndDestroy(2, handler); // (pic name) + handler + if (err != KUserCancel && err != KErrNone) + { + User::Leave(err); + } + /* These are the other docHandler error codes: + KBadMimeType = 12002; // Mime type conflict etc. + KMimeNotSupported = 12003; // No handler found + KNullContent = 12005; // Empty content + KDataDirNotFound = 12006; // No data dir found + KExecNotAllowed = 12007; // Executables not allowed + KNoHostProcess = 12008; // Embedding without host + KNotInitialized = 12009; // Not initialized + */ + } + +EXPORT_C const CGmsModel& CGmsWrapper::Model() const + { + return *iModel; + } + +void CGmsWrapper::Panic(TGmsWrapperPanic aCode) + { + User::Panic(KCGmsWrapper, aCode); + } + +void CGmsWrapper::ExportBitmapToTempFileL() + { + __ASSERT_ALWAYS(iFileName.Length() == 0, Panic(EGmsWrTmpPicFileNotNeeded)); + __ASSERT_ALWAYS(!iExistsTmpFile, Panic(EGmsWrTmpFileAlreadyExists)); + + User::LeaveIfError(iFs.CreatePrivatePath(EDriveC)); + + TChar driveChar; + iFs.DriveToChar( EDriveC,driveChar); + TDriveName driveName; + driveName.Append(driveChar); + driveName.Append(KDriveDelimiter); + + iFs.PrivatePath(iFileName); + iFileName.Insert(0,driveName); + iFileName.Append(KTempOtaFileName); + RFileWriteStream writeStream; + User::LeaveIfError(writeStream.Replace( + iFs, + iFileName, + EFileStream )); + iExistsTmpFile = ETrue; + + writeStream.PushL(); + iModel->ExportOTABitmapL(writeStream); + writeStream.CommitL(); + writeStream.Close(); + CleanupStack::Pop(); // (writeStream cleanup item) + } + +void CGmsWrapper::ConstructL() + { + iModel = CGmsModel::NewL(iFs, KErrMsgBioMessageNotValid); + } + +CGmsWrapper::CGmsWrapper(RFs& aFs) : iFs(aFs), iExistsTmpFile(EFalse) + { + } + +// end of file