diff -r 000000000000 -r 8466d47a6819 emailuis/uicomponents/src/fstextviewer.cpp --- /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 +* +*/ + + +// removed __FS_ALFRED_SUPPORT flag +//#include +// removed __FS_ALFRED_SUPPORT flag +// SF +#include "emailtrace.h" +#include +#include +#include +// + +#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( 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; + } + +// +// --------------------------------------------------------------------------- +// 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); + } + +// + +// --------------------------------------------------------------------------- +// 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 +// --------------------------------------------------------------------------- +// +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; + } + } +// +// --------------------------------------------------------------------------- +// 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(); + } +