emailuis/uicomponents/src/fstextviewer.cpp
changeset 0 8466d47a6819
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/uicomponents/src/fstextviewer.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,728 @@
+/*
+* 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
+*
+*/
+
+
+//<cmail> removed __FS_ALFRED_SUPPORT flag
+//#include <fsconfig.h>
+//</cmail> removed __FS_ALFRED_SUPPORT flag
+// <cmail> SF
+#include "emailtrace.h"
+#include <alf/alfbrush.h>
+#include <alf/alfimagebrush.h>
+#include <alf/alfgradientbrush.h>
+// </cmail>
+
+#include "fstextviewer.h"
+#include "fstextviewercontrol.h"
+#include "fstextviewervisualizer.h"
+#include "fstextviewerkeys.h"
+#include "fstextviewervisualizersettings.h"
+#include "fstextviewervisualizerdata.h"
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+EXPORT_C CFsTextViewer* CFsTextViewer::NewL ( CAlfEnv& aEnv )
+    {
+    FUNC_LOG;
+    CFsTextViewer* self = new ( ELeave ) CFsTextViewer( aEnv );
+    CleanupStack::PushL( self );
+    self->ConstructL( aEnv );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// ~CFsTextViewer
+// ---------------------------------------------------------------------------
+EXPORT_C CFsTextViewer::~CFsTextViewer()
+    {
+    FUNC_LOG;
+    delete iControl->Keys();
+
+    delete iVisualizer;
+    iVisualizer = NULL;
+
+    for ( TInt i = 0; i < iSettings->iPartBgs.Count(); ++i )
+        {
+        delete iSettings->iPartBgs[i].iBrush;
+        }
+
+    delete iSettings;
+    iSettings = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// GetControl
+// ---------------------------------------------------------------------------
+EXPORT_C CAlfControl* CFsTextViewer::GetControl() const
+    {
+    FUNC_LOG;
+    return static_cast< CAlfControl* >( iControl );
+    }
+
+// ---------------------------------------------------------------------------
+// SetText
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetTextL( 
+        CFsRichText* aText, 
+        CFsSmileyDictionary* aSmDict )
+    {
+    FUNC_LOG;
+    if ( iVisualizer )
+        {
+        delete iVisualizer;
+        iVisualizer = NULL;
+        }
+
+    iVisualizer = CFsTextViewerVisualizer::NewL( 
+            *iControl, 
+            aText, 
+            aSmDict, 
+            iSettings );
+    if ( iBackColorSet )
+        {
+        iVisualizer->SetBackgroundColorL( iColor );
+        }
+    if ( iTexture )
+        {
+        iVisualizer->SetBackgroundImageL( *iTexture );
+        }
+
+    iVisualizer->RefreshPartBgsL();
+
+    iControl->SetVisualizer( iVisualizer );
+    }
+
+// ---------------------------------------------------------------------------
+// Show
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::Show()
+    {
+    FUNC_LOG;
+    
+    }
+
+// ---------------------------------------------------------------------------
+// Hide
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::Hide()
+    {
+    FUNC_LOG;
+    
+    }
+
+// ---------------------------------------------------------------------------
+// SetObserver
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetObserver( MFsTextViewerObserver* aObserver )
+    {
+    FUNC_LOG;
+    iControl->SetObserver( aObserver );
+    }
+
+// ---------------------------------------------------------------------------
+// SetScrollOffsetInPx
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetScrollOffsetInPx( TInt aPxOffset )
+    {
+    FUNC_LOG;
+    iVisualizer->SetScrollOffsetInPx( aPxOffset );
+    }
+
+// ---------------------------------------------------------------------------
+// SetScrollOffsetInLines
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetScrollOffsetInLines( TInt aLineOffset )
+    {
+    FUNC_LOG;
+    iVisualizer->SetScrollOffsetInLines( aLineOffset );
+    }
+
+// ---------------------------------------------------------------------------
+// SetSmileySize
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetSmileySize( TSize aSize )
+    {
+    FUNC_LOG;
+    iVisualizer->SetSmileySize( aSize );
+    }
+
+// ---------------------------------------------------------------------------
+// SetScrollDelay
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetScrollDelay( TInt aDelay )
+    {
+    FUNC_LOG;
+    iVisualizer->SetScrollDelay( aDelay );
+    }
+
+// ---------------------------------------------------------------------------
+// SetCursorDelay
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetCursorDelay( TInt aDelay )
+    {
+    FUNC_LOG;
+    iVisualizer->SetCursorDelay( aDelay );
+    }
+
+// ---------------------------------------------------------------------------
+// EnableSmileys
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::EnableSmileys( TBool aStatus )
+    {
+    FUNC_LOG;
+    if ( iVisualizer )
+        {
+        iVisualizer->EnableSmileys( aStatus );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Smileys
+// ---------------------------------------------------------------------------
+EXPORT_C TBool CFsTextViewer::Smileys()
+    {
+    FUNC_LOG;
+    TBool retVal = ETrue;
+    if ( iVisualizer )
+        {
+        retVal = iVisualizer->SmileysEnabled();
+        }
+    return retVal;
+    }
+
+// ---------------------------------------------------------------------------
+// ReloadTextL
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::ReloadTextL()
+    {
+    FUNC_LOG;
+    if ( iVisualizer )
+        {
+        iVisualizer->ReloadL();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// GetCurrentHotspotL
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::GetCurrentHotspotL( TInt& aBegin, TInt& aEnd )
+    {
+    FUNC_LOG;
+    iVisualizer->GetHotspotRangeL( aBegin, aEnd );
+    }
+
+// ---------------------------------------------------------------------------
+// GetMarkedArea
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::GetMarkedArea( TInt& aBegin, TInt& aEnd )
+    {
+    FUNC_LOG;
+    iVisualizer->GetMarkedRange( aBegin, aEnd );
+    }
+
+// ---------------------------------------------------------------------------
+// EnableCursorUpDown
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::EnableCursorUpDown( TBool aStatus )
+    {
+    FUNC_LOG;
+    iControl->EnableCursorScroll( aStatus );
+    }
+
+// ---------------------------------------------------------------------------
+// CursorUpDown
+// ---------------------------------------------------------------------------
+EXPORT_C TBool CFsTextViewer::CursorUpDown()
+    {
+    FUNC_LOG;
+    return iControl->CursorScroll();
+    }
+
+// ---------------------------------------------------------------------------
+// CFsTextViewer
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetCustomKeys( CFsTextViewerKeys* aKeys )
+    {
+    FUNC_LOG;
+    if ( iControl )
+        {
+        if ( aKeys != iControl->Keys() )
+            {
+            CFsTextViewerKeys* keys = NULL;
+            
+            keys = iControl->Keys();
+            
+            delete keys;
+            keys = NULL;
+            }
+        iControl->SetKeys( aKeys );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Keys
+// ---------------------------------------------------------------------------
+EXPORT_C CFsTextViewerKeys* CFsTextViewer::Keys()
+    {
+    FUNC_LOG;
+    CFsTextViewerKeys* retVal = NULL;
+    if ( iControl )
+        {
+        retVal = iControl->Keys();
+        }
+    return retVal;
+    }
+
+// ---------------------------------------------------------------------------
+// SetWatermark
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetWatermarkL( 
+        CFsTextViewerWatermark* aWatermark )
+    {
+    FUNC_LOG;
+    iWatermark = aWatermark;
+    if ( iVisualizer )
+        {
+        iVisualizer->SetWatermarkL( iWatermark );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// RootLayout
+// ---------------------------------------------------------------------------
+EXPORT_C CAlfLayout* CFsTextViewer::RootLayout()
+    {
+    FUNC_LOG;
+    CAlfLayout* retVal = NULL;
+    if ( iVisualizer )
+        {
+        retVal = iVisualizer->RootLayout();
+        }
+    return retVal;
+    }
+
+// ---------------------------------------------------------------------------
+// SetBackgroundColor
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetBackgroundColorL( const TRgb& aColor )
+    {
+    FUNC_LOG;
+    iColor = aColor;
+    iBackColorSet = ETrue;
+    if ( iVisualizer )
+        {
+        iVisualizer->SetBackgroundColorL( iColor );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// SetBackgroundImage
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetBackgroundImageL( CAlfTexture& aTexture )
+    {
+    FUNC_LOG;
+    iTexture = &aTexture;
+    if ( iVisualizer )
+        {
+        iVisualizer->SetBackgroundImageL( *iTexture );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// SetBackgroundOpacity
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetBackgroundOpacity( const TAlfTimedValue& aOpacity )
+    {
+    FUNC_LOG;
+    iSettings->iBackgroundOpacity = aOpacity;
+    if ( iVisualizer )
+        {
+        iVisualizer->SetBackgroundOpacity();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// BackgroundOpacity
+// ---------------------------------------------------------------------------
+EXPORT_C const TAlfTimedValue& CFsTextViewer::BackgroundOpacity() const 
+    {
+    FUNC_LOG;
+    return iSettings->iBackgroundOpacity;
+    }
+
+// ---------------------------------------------------------------------------
+// SetPartBgColor
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetPartBgColorL( 
+        TInt aStartChar, 
+        TInt aEndChar, 
+        const TRgb& aColor )
+    {
+    FUNC_LOG;
+    TFsPartBg background;
+    background.iBrush = CAlfGradientBrush::NewL(iControl->Env());
+    static_cast<CAlfGradientBrush*>( background.iBrush )->SetColor( aColor );
+    background.iStart = aStartChar;
+    background.iEnd = aEndChar;
+    iSettings->iPartBgs.AppendL( background );
+    if ( iVisualizer )
+        {
+        iVisualizer->RefreshPartBgsL();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// SetPartBgImage
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetPartBgImageL( TInt aStartChar, TInt aEndChar, 
+                                                CAlfTexture& aTexture )
+    {
+    FUNC_LOG;
+    TFsPartBg background;
+    background.iBrush = CAlfImageBrush::NewL( iControl->Env(),TAlfImage( aTexture ) );
+    background.iStart = aStartChar;
+    background.iEnd = aEndChar;
+    iSettings->iPartBgs.AppendL( background );
+    if ( iVisualizer )
+        {
+        iVisualizer->RefreshPartBgsL();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// SetLiteLineBg
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetLiteLineBg( 
+        CAlfTexture& aTexture, 
+        TReal32 aOpacity )
+    {
+    FUNC_LOG;
+    iSettings->iHighlightLine = &aTexture;
+    iSettings->iHighlightLineOpacity = aOpacity;
+    }
+
+// ---------------------------------------------------------------------------
+// SetActionButton
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetActionButton( 
+        CAlfTexture& aTexture, 
+        TReal32 aOpacity )
+    {
+    FUNC_LOG;
+    iSettings->iActionButton = &aTexture;
+    iSettings->iActionButtonOpacity = aOpacity;
+    }
+
+// ---------------------------------------------------------------------------
+// SetActionButtonMargin
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetActionButtonMargin( TReal32 aMargin )
+    {
+    FUNC_LOG;
+    iSettings->iActionButtonMargin = aMargin;
+    }
+
+// ---------------------------------------------------------------------------
+// SetActionButtonSize
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetActionButtonSize( 
+        TReal32 aWidth, 
+        TReal32 aHeight )
+    {
+    FUNC_LOG;
+    iSettings->iActionButtonWidth = aWidth;
+    iSettings->iActionButtonHeight = aHeight;
+    }
+
+// ---------------------------------------------------------------------------
+// CFsTextViewer
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetMirroring( TBool aEnable )
+    {
+    FUNC_LOG;
+    iSettings->iMirroring = aEnable;
+    }
+
+// ---------------------------------------------------------------------------
+// GetTotalLines
+// ---------------------------------------------------------------------------
+EXPORT_C TInt CFsTextViewer::GetTotalLines()
+    {
+    FUNC_LOG;
+    return iVisualizer->iTotalLines;
+    }
+
+// ---------------------------------------------------------------------------
+// GetFirstDisplayedLine
+// ---------------------------------------------------------------------------
+EXPORT_C TInt CFsTextViewer::GetFirstDisplayedLine()
+    {
+    FUNC_LOG;
+    TInt retVal = 0;
+    if ( iVisualizer->Navigator()->GetLastVisible() )
+        {
+        retVal = iVisualizer->Navigator()->GetFirstVisible()->iLineNumber;
+        }
+
+    return retVal;
+    }
+
+// <cmail>
+// ---------------------------------------------------------------------------
+// GetLineOffset - get offset of first char in the line (line offset)
+// ---------------------------------------------------------------------------
+EXPORT_C TInt CFsTextViewer::GetFirstCharInLine(TInt aLineNum)
+    {
+    FUNC_LOG;
+    return iVisualizer->Navigator()->GetFirstCharInLine(aLineNum);
+    }
+
+
+// ---------------------------------------------------------------------------
+// GetCharLineNumber - get the line number for the given line offset
+// ---------------------------------------------------------------------------
+EXPORT_C TInt CFsTextViewer::GetLineNumber(TInt aChar)
+    {
+    FUNC_LOG;
+    return iVisualizer->Navigator()->GetCharLineNumber(aChar);
+    }
+
+// </cmail>
+
+// ---------------------------------------------------------------------------
+// GetLastDisplayedLine
+// ---------------------------------------------------------------------------
+EXPORT_C TInt CFsTextViewer::GetLastDisplayedLine()
+    {
+    FUNC_LOG;
+    TInt retVal = 0;
+    if ( iVisualizer->Navigator()->GetLastVisible() )
+        {
+        retVal = iVisualizer->Navigator()->GetLastVisible()->iLineNumber + 1;
+        }
+
+    return retVal;
+    }
+
+// ---------------------------------------------------------------------------
+// RemoveEndLines
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::RemoveEndLinesL( TInt aLines )
+    {
+    FUNC_LOG;
+    iVisualizer->RemoveEndLinesL( aLines );
+    }
+
+// ---------------------------------------------------------------------------
+// ReplaceTextL
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::ReplaceTextL( 
+        CFsRichText* aRichText, 
+        CFsSmileyDictionary* aSmDict )
+    {
+    FUNC_LOG;
+    iVisualizer->ReplaceTextL( aRichText, aSmDict );
+    }
+
+// ---------------------------------------------------------------------------
+// FocusLineL
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::FocusLineL( TInt aLine, TBool aShowAsFirstLine )
+    {
+    FUNC_LOG;
+    if ( iVisualizer && aLine > 0 )
+        {
+        iVisualizer->FocusLineL( aLine, aShowAsFirstLine );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// SetLeftMargin
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetLeftMargin( TInt aMargin )
+    {
+    FUNC_LOG;
+    if ( iSettings )
+        {
+        iSettings->iLeftMargin = aMargin;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// SetRightMargin
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetRightMargin( TInt aMargin )
+    {
+    FUNC_LOG;
+    if ( iSettings )
+        {
+        iSettings->iRightMargin = aMargin;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// ReloadPicturesL
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::ReloadPicturesL( TInt aLine )
+    {
+    FUNC_LOG;
+    if ( iVisualizer )
+        {
+        iVisualizer->ReloadPicturesL( aLine );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// GetVisibleFocusedHotspotLine
+// ---------------------------------------------------------------------------
+EXPORT_C TBool CFsTextViewer::GetVisibleFocusedHotspotLine( 
+        TInt& aLineNum ) const
+    {
+    FUNC_LOG;
+    TBool retVal = EFalse;
+    if ( iVisualizer )
+        {
+        retVal = iVisualizer->GetVisibleFocusedHotspotLine( aLineNum );
+        }
+
+    return retVal;
+    }
+
+// ---------------------------------------------------------------------------
+// HideActionButtonFromCurrentHighlightedHotspot
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::HideActionButtonFromCurrentHighlightedHotspot()
+    {
+    FUNC_LOG;
+    if ( iVisualizer && iVisualizer->Navigator())
+        {
+        iVisualizer
+            ->Navigator()
+            ->HideActionButtonFromCurrentHighlightedHotspot();
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// ShowActionButtonForCurrentHighlightedHotspotL
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::ShowActionButtonForCurrentHighlightedHotspotL()
+    {
+    FUNC_LOG;
+    if ( iVisualizer && iVisualizer->Navigator())
+        {
+        iVisualizer
+            ->Navigator()
+            ->ShowActionButtonForCurrentHighlightedHotspotL();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// SetCurrentHotspotByOrderL
+// ---------------------------------------------------------------------------
+// <cmail>
+EXPORT_C void CFsTextViewer::SetCurrentHotspotByOrderL( TInt aIndex, TBool aFocusLine )
+    {
+    FUNC_LOG;
+    if ( iVisualizer )
+        {
+        iVisualizer->SetCurrentHotspotByOrderL( aIndex, aFocusLine );
+        }
+    }
+
+EXPORT_C TInt CFsTextViewer::GetCurrentHotspotByOrder()
+    {
+    FUNC_LOG;
+    if ( iVisualizer )
+        {
+        return iVisualizer->GetCurrentHotspotByOrder();
+        }
+    else
+        {
+        return KErrNotFound;
+        }
+    }
+// </cmail>
+// ---------------------------------------------------------------------------
+// SetCurrentHotspotByCharL
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::SetCurrentHotspotByCharL( TInt aIndex )
+    {
+    FUNC_LOG;
+    if ( iVisualizer )
+        {
+        iVisualizer->SetCurrentHotspotByCharL( aIndex );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// GetStatusLayout
+// ---------------------------------------------------------------------------
+EXPORT_C CAlfLayout* CFsTextViewer::GetStatusLayout()
+    {
+    FUNC_LOG;
+    return iVisualizer->GetStatusLayout();
+    }
+
+// ---------------------------------------------------------------------------
+// UpdateStatusLayout
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::UpdateStatusLayout()
+    {
+    FUNC_LOG;
+    iVisualizer->UpdateStatusLayout();
+    }
+
+// ---------------------------------------------------------------------------
+// RemoveStatusLayout
+// ---------------------------------------------------------------------------
+EXPORT_C void CFsTextViewer::RemoveStatusLayout()
+    {
+    FUNC_LOG;
+    iVisualizer->RemoveStatusLayout();
+    }
+
+// ---------------------------------------------------------------------------
+// GetCurrentHotspotTextL
+// ---------------------------------------------------------------------------
+EXPORT_C HBufC* CFsTextViewer::GetCurrentHotspotTextL()
+    {
+    FUNC_LOG;
+    return iVisualizer->GetCurrentHotspotTextL();
+    }
+
+// ---------------------------------------------------------------------------
+// CFsTextViewer
+// ---------------------------------------------------------------------------
+CFsTextViewer::CFsTextViewer( CAlfEnv& /* aEnv */ )
+    {
+    FUNC_LOG;
+    iBackColorSet = EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+void CFsTextViewer::ConstructL( CAlfEnv& aEnv )
+    {
+    FUNC_LOG;
+    iControl = CFsTextViewerControl::NewL( aEnv );
+    iControl->SetKeys( CFsTextViewerKeys::NewL() );
+    iSettings = new ( ELeave ) CFsTextViewerVisualizerSettings();
+    }
+