emailuis/uicomponents/src/fsrichtext.cpp
changeset 0 8466d47a6819
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/uicomponents/src/fsrichtext.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,388 @@
+/*
+* Copyright (c)  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 class CFsTextViewer
+*
+*/
+
+
+#include "emailtrace.h"
+#include "fsrichtext.h"
+#include "fsrichtextfields.h"
+#include "fstexture.h"
+#include <eikenv.h>
+#include <fbs.h>
+
+// ---------------------------------------------------------------------------
+// CMyPicture
+// ---------------------------------------------------------------------------
+EXPORT_C CMyPicture::CMyPicture( TSize aSize, CFbsBitmap& aBitmap )
+    : iSizeInTwips(aSize), iBitmap(&aBitmap), iBitmapMask(NULL)
+    {
+    FUNC_LOG;
+    }
+    
+// ---------------------------------------------------------------------------
+// CMyPicture
+// ---------------------------------------------------------------------------
+EXPORT_C CMyPicture::CMyPicture( 
+                TSize aSize, CFbsBitmap& aBitmap, CFbsBitmap& aBitmapMask )
+    : iSizeInTwips(aSize), iBitmap(&aBitmap), iBitmapMask(&aBitmapMask)
+    {
+    FUNC_LOG;
+    }
+
+// ---------------------------------------------------------------------------
+// ~CMyPicture
+// ---------------------------------------------------------------------------
+EXPORT_C CMyPicture::~CMyPicture()
+    {
+    FUNC_LOG;
+    delete iBitmap;  
+    delete iBitmapMask;    
+    }
+// ---------------------------------------------------------------------------
+// Draw
+// ---------------------------------------------------------------------------
+EXPORT_C void CMyPicture::Draw( CGraphicsContext& /*aGc*/,
+                             const TPoint& /*aTopLeft*/,
+                             const TRect& /*aClipRect*/,
+                             MGraphicsDeviceMap* /*aMap*/ ) const
+    {
+    FUNC_LOG;
+    }
+
+// ---------------------------------------------------------------------------
+// ExternalizeL
+// ---------------------------------------------------------------------------
+EXPORT_C void CMyPicture::ExternalizeL( RWriteStream& /*aStream*/ ) const
+    {
+    FUNC_LOG;
+    }
+        
+// ---------------------------------------------------------------------------
+// SetOriginalSizeInTwips
+// ---------------------------------------------------------------------------
+EXPORT_C void CMyPicture::SetOriginalSizeInTwips( TSize aSize )
+    {
+    FUNC_LOG;
+    iSizeInTwips = aSize;
+    }
+
+// ---------------------------------------------------------------------------
+// GetOriginalSizeInTwips
+// ---------------------------------------------------------------------------
+EXPORT_C void CMyPicture::GetOriginalSizeInTwips( TSize& aSize ) const
+    {
+    FUNC_LOG;
+    aSize = iSizeInTwips;
+    }
+
+// ---------------------------------------------------------------------------
+// GetBitmap
+// ---------------------------------------------------------------------------
+EXPORT_C CFbsBitmap* CMyPicture::GetBitmap()
+    {
+    FUNC_LOG;
+    return iBitmap;
+    }
+    
+// ---------------------------------------------------------------------------
+// GetBitmapMask
+// ---------------------------------------------------------------------------
+EXPORT_C CFbsBitmap* CMyPicture::GetBitmapMask()
+    {
+    FUNC_LOG;
+    return iBitmapMask;
+    }
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+EXPORT_C CFsRichText* CFsRichText::NewL(const CParaFormatLayer* aGlobalParaLayer,
+                       const CCharFormatLayer* aGlobalCharLayer,
+                       TDocumentStorage aStorage,
+                       TInt aDefaultTextGranularity,
+                       TParaType aParaType)
+    {
+    FUNC_LOG;
+    CFsRichText* self = 
+        new(ELeave) CFsRichText(aGlobalParaLayer, aGlobalCharLayer);
+    CleanupStack::PushL(self);
+    self->ConstructL(aStorage, aDefaultTextGranularity, aParaType);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+EXPORT_C CFsRichText* CFsRichText::NewL(const CParaFormatLayer* aGlobalParaLayer,
+                       const CCharFormatLayer* aGlobalCharLayer,
+                       const CStyleList& aStyleList,
+                       TDocumentStorage aStorage,
+                       TInt aDefaultTextGranularity,
+                       TParaType aParaType)
+    {
+    FUNC_LOG;
+    CFsRichText* self = new(ELeave) CFsRichText(
+            aGlobalParaLayer, 
+            aGlobalCharLayer, 
+            CONST_CAST(CStyleList*, &aStyleList));
+    CleanupStack::PushL(self);
+    self->ConstructL(aStorage, aDefaultTextGranularity, aParaType);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+EXPORT_C CFsRichText* CFsRichText::NewL(const CStreamStore& aStore,
+                       TStreamId aStreamId,
+                       const CParaFormatLayer* aGlobalParaLayer,
+                       const CCharFormatLayer* aGlobalCharLayer,
+                       MTextFieldFactory* aFieldFactory,
+                       TDocumentStorage aStorage)
+    {
+    FUNC_LOG;
+    CFsRichText* self = 
+        new(ELeave) CFsRichText(aGlobalParaLayer, aGlobalCharLayer);
+    CleanupStack::PushL(self);
+    self->ConstructL(aStore, aStreamId, NULL, NULL, aFieldFactory, aStorage);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+EXPORT_C CFsRichText* CFsRichText::NewL(const CStreamStore& aStore, 
+                       TStreamId aStreamId,
+                       const CParaFormatLayer* aGlobalParaLayer, 
+                       const CCharFormatLayer* aGlobalCharLayer,
+                       MPictureFactory* aPictureFactory, 
+                       MRichTextStoreResolver* aStoreResolver,
+                       MTextFieldFactory* aFieldFactory,
+                       TDocumentStorage aStorage)
+
+    {
+    FUNC_LOG;
+    CFsRichText* self = 
+        new(ELeave) CFsRichText(aGlobalParaLayer, aGlobalCharLayer);
+    CleanupStack::PushL(self);
+    self->ConstructL(
+            aStore, 
+            aStreamId, 
+            aPictureFactory, 
+            aStoreResolver, 
+            aFieldFactory, 
+            aStorage);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// ~CFsRichText()
+// ---------------------------------------------------------------------------
+EXPORT_C CFsRichText::~CFsRichText()
+    {
+    FUNC_LOG;
+    iExpandAreaArray.Close();
+    iHotSpotAreaArray.Close();
+    iPictureAreaArray.Close();
+    }
+    
+// ---------------------------------------------------------------------------
+// CFsRichText
+// ---------------------------------------------------------------------------
+CFsRichText::CFsRichText(const CParaFormatLayer* aGlobalParaLayer, 
+                 const CCharFormatLayer* aGlobalCharLayer,
+                 CStyleList* aStyleList)
+            :CRichText(aGlobalParaLayer, aGlobalCharLayer, aStyleList)
+    {
+    FUNC_LOG;
+    
+    }
+
+// ---------------------------------------------------------------------------
+// SetPictureL
+// ---------------------------------------------------------------------------
+EXPORT_C TBool CFsRichText::SetPictureL(TFileName aFileName, TInt aIndex)
+    {
+    FUNC_LOG;
+    TBool retVal = ETrue;    
+    
+    TRichTextPictureArea richTextPictureArea;
+    
+    richTextPictureArea.iFileName = aFileName;
+    richTextPictureArea.iPictureIndex = aIndex;
+    
+    iPictureAreaArray.AppendL(richTextPictureArea);
+    
+    return retVal;
+    }
+
+// ---------------------------------------------------------------------------
+// SetHotSpotL
+// ---------------------------------------------------------------------------
+EXPORT_C TBool CFsRichText::SetHotSpotL(TInt aStartIndex, TInt aLength, TInt aId)
+    {
+    FUNC_LOG;
+    TBool retVal = ETrue;
+    
+    for(TInt i = 0 ; i < iHotSpotAreaArray.Count() ; ++i)
+        {
+        if((aStartIndex >= iHotSpotAreaArray[i].iStartIndex && 
+            aStartIndex < iHotSpotAreaArray[i].iStartIndex + iHotSpotAreaArray[i].iLength) ||
+            (aStartIndex + aLength >= iHotSpotAreaArray[i].iStartIndex && 
+            aStartIndex + aLength < iHotSpotAreaArray[i].iStartIndex + iHotSpotAreaArray[i].iLength))
+            {
+            retVal = EFalse;
+            }
+        }
+    
+    if( retVal )
+        { 
+        TRichTextHotSpotArea richTextHotSpotArea;
+        
+        richTextHotSpotArea.iStartIndex = aStartIndex;
+        richTextHotSpotArea.iOriginalStartIndex = aStartIndex;
+        richTextHotSpotArea.iLength = aLength;
+        richTextHotSpotArea.iOriginalLength = aLength;
+        richTextHotSpotArea.iId = aId;
+        
+        iHotSpotAreaArray.AppendL(richTextHotSpotArea);
+        }
+    
+    return retVal;
+    }
+
+// ---------------------------------------------------------------------------
+// SetExpandL
+// ---------------------------------------------------------------------------
+EXPORT_C TBool CFsRichText::SetExpandL(TInt aStartIndex, TInt aLength, TInt aCaptionLength)
+    {
+    FUNC_LOG;
+    TBool retVal = ETrue;
+    
+    for(TInt i = 0 ; i < iExpandAreaArray.Count() ; ++i)
+        {
+        if((aStartIndex >= iExpandAreaArray[i].iStartIndex && 
+            aStartIndex < iExpandAreaArray[i].iStartIndex + iExpandAreaArray[i].iLength) ||
+            (aStartIndex + aLength >= iExpandAreaArray[i].iStartIndex && 
+            aStartIndex + aLength < iExpandAreaArray[i].iStartIndex + iExpandAreaArray[i].iLength))
+            {
+            retVal = EFalse;
+            }
+        }
+    
+    if(retVal)
+        { 
+        TRichTextExapandArea richTextExpandArea;
+        
+        richTextExpandArea.iStartIndex = aStartIndex;
+        richTextExpandArea.iLength = aLength;
+        richTextExpandArea.iCaptionLength = aCaptionLength;
+        richTextExpandArea.iIsExpand = EFalse;
+        
+        iExpandAreaArray.AppendL(richTextExpandArea);
+        }
+    
+    return retVal;
+    }
+
+// ---------------------------------------------------------------------------
+// GetNumberOfExpandAreas
+// ---------------------------------------------------------------------------
+EXPORT_C TInt CFsRichText::GetNumberOfExpandAreas()
+    {
+    FUNC_LOG;
+    return iExpandAreaArray.Count();
+    }
+    
+// ---------------------------------------------------------------------------
+// GetNumberOfPicture
+// ---------------------------------------------------------------------------
+EXPORT_C TInt CFsRichText::GetNumberOfPicture()
+    {
+    FUNC_LOG;
+    return iPictureAreaArray.Count();
+    }
+
+// ---------------------------------------------------------------------------
+// GetNumberOfHotSpotAreas
+// ---------------------------------------------------------------------------
+EXPORT_C TInt CFsRichText::GetNumberOfHotSpotAreas()
+    {
+    FUNC_LOG;
+    return iHotSpotAreaArray.Count();
+    }
+
+// ---------------------------------------------------------------------------
+// GetExpandAreaL
+// ---------------------------------------------------------------------------
+EXPORT_C TRichTextExapandArea CFsRichText::GetExpandAreaL(TInt aIndex)
+    {
+    FUNC_LOG;
+    if(aIndex > iExpandAreaArray.Count())
+        {
+        User::Leave(KErrArgument);
+        }
+        
+    return iExpandAreaArray[aIndex];
+    }
+
+// ---------------------------------------------------------------------------
+// GetHotSpotAreaL
+// ---------------------------------------------------------------------------
+EXPORT_C TRichTextHotSpotArea CFsRichText::GetHotSpotAreaL(TInt aIndex)
+    {
+    FUNC_LOG;
+    if(aIndex > iHotSpotAreaArray.Count())
+        {
+        User::Leave(KErrArgument);
+        }
+        
+    return iHotSpotAreaArray[aIndex];
+    }
+
+// ---------------------------------------------------------------------------
+// GetPictureArea
+// ---------------------------------------------------------------------------
+// <cmail>
+EXPORT_C TRichTextPictureArea CFsRichText::GetPictureAreaL(TInt aIndex)
+// </cmail>
+    {
+    FUNC_LOG;
+    if(aIndex > iPictureAreaArray.Count())
+        {
+        User::Leave(KErrArgument);
+        }
+        
+    return iPictureAreaArray[aIndex];    
+    }
+
+// ---------------------------------------------------------------------------
+// Reset
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsRichText::Reset()
+    {
+    FUNC_LOG;
+    CRichText::Reset();
+    iExpandAreaArray.Reset();
+    iHotSpotAreaArray.Reset();
+    iPictureAreaArray.Reset();
+    }
+