messagingappbase/smartmessaging/gmsmodel/src/CGmsWrapper.cpp
changeset 0 72b543305e3a
--- /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 <gmsModel.h>
+#include <s32file.h>                // RFileReadStream
+#include <txtrich.h>                // CRIchText
+#include <akntitle.h>
+#include <StringLoader.h>
+#include <DocumentHandler.h>        // CDocumentHandler
+#include <aknnotewrappers.h>        // Avkon note wrappers
+#include <mmsgbiocontrol.h>         // 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