diff -r 000000000000 -r 8466d47a6819 emailuis/uicomponents/src/fstextviewerselectline.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/uicomponents/src/fstextviewerselectline.cpp Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,378 @@
+/*
+* Copyright (c) 2007 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: Whole line highlight class
+*
+*/
+
+
+// removed __FS_ALFRED_SUPPORT flag
+//#include
+// removed __FS_ALFRED_SUPPORT flag
+// SF
+#include "emailtrace.h"
+#include
+#include
+#include
+#include
+//
+#include
+
+#include "fstextviewerselectline.h"
+#include "fstextviewervisualizer.h"
+#include "fstextviewervisualizerdata.h"
+#include "fstextviewerselectsmanager.h"
+#include "fstextviewervisualizersettings.h"
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+CFsTextViewerSelectLine* CFsTextViewerSelectLine::NewL(
+ CFsTextViewerSelectsManager* aManager )
+ {
+ FUNC_LOG;
+ CFsTextViewerSelectLine* self =
+ new (ELeave) CFsTextViewerSelectLine( aManager );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// SelectL
+// ---------------------------------------------------------------------------
+void CFsTextViewerSelectLine::SelectL()
+ {
+ FUNC_LOG;
+ for ( TInt i = 0; i < iVisuals.Count(); ++i )
+ {
+ if ( !iVisuals[i]->iVisual )
+ {
+ return;
+ }
+ }
+
+ if(!iIsShown)
+ {
+ iIsShown = ETrue;
+
+ TRect target = TRect( 0, 0, 0, 0 );
+ TInt targetLine = 0;
+ if ( iVisuals.Count() > 0 )
+ {
+ if ( iVisuals[0]->iIsText )
+ {
+// CAlfTextVisual* tmp = static_cast( iVisuals[0]->iVisual );
+ target = iVisuals[0]->iRect;
+// target.SetSize( tmp->TextExtents() );
+ }
+ else
+ {
+ target = iVisuals[0]->iRect;
+ }
+ targetLine =
+ iManager->Visualizer()->Navigator()
+ ->GetRangedVisual(iVisuals[0]->iVisual)->iLineNumber;
+ }
+ TRect visual;
+ TInt visualLine;
+ for ( TInt i = 0; i < iVisuals.Count(); ++i )
+ {
+ if ( iVisuals[i]->iIsText )
+ {
+// CAlfTextVisual* tmp = static_cast( iVisuals[i]->iVisual );
+ visual = iVisuals[i]->iRect;
+// visual.SetSize( tmp->TextExtents() );
+ }
+ else
+ {
+ visual = iVisuals[i]->iRect;
+ }
+
+ visualLine = iVisuals[i]->iLineNumber;
+
+ if( targetLine != visualLine )
+ {
+ CAlfImageVisual* highlightLine;
+ highlightLine = CAlfImageVisual::AddNewL(
+ *iManager->iControl,
+ iManager->Visualizer()->BackgroundLayout() );
+ highlightLine->SetFlag( EAlfVisualFlagManualLayout );
+ highlightLine->SetScaleMode( CAlfImageVisual::EScaleFit );
+ highlightLine->SetImage(
+ TAlfImage( *iManager->iHighlightLine ) );
+ highlightLine->SetRect( target );
+ highlightLine->SetOpacity(
+ iManager->iHighlightLineOpacity );
+
+ TFsPartBgVisual toAdd;
+ toAdd.iVisual = highlightLine;
+ toAdd.iRect = target;
+ iManager->Visualizer()->Navigator()->AppendBgL( toAdd );
+
+ iHighlightLines.Append(highlightLine);
+
+ target = visual;
+ targetLine = visualLine;
+ }
+ else
+ {
+
+ if ( target.iTl.iX > visual.iTl.iX )
+ {
+ target.iTl.iX = visual.iTl.iX;
+ }
+ if ( target.iBr.iX < visual.iBr.iX )
+ {
+ target.iBr.iX = visual.iBr.iX;
+ }
+ if(target.iTl.iY > visual.iTl.iY)
+ {
+ target.iTl.iY = visual.iTl.iY;
+ }
+
+ if(target.iBr.iY < visual.iBr.iY)
+ {
+ target.iBr.iY = visual.iBr.iY;
+ }
+ }
+
+ if(i == (iVisuals.Count() - 1))
+ {
+ CAlfImageVisual* highlightLine;
+ highlightLine = CAlfImageVisual::AddNewL(
+ *iManager->iControl,
+ iManager->Visualizer()->BackgroundLayout() );
+ highlightLine->SetFlag( EAlfVisualFlagManualLayout );
+ highlightLine->SetScaleMode( CAlfImageVisual::EScaleFit );
+ highlightLine->SetImage(
+ TAlfImage( *iManager->iHighlightLine ) );
+ highlightLine->SetRect( target );
+ highlightLine->SetOpacity(
+ iManager->iHighlightLineOpacity );
+
+ TFsPartBgVisual toAdd;
+ toAdd.iVisual = highlightLine;
+ toAdd.iRect = target;
+ iManager->Visualizer()->Navigator()->AppendBgL( toAdd );
+
+ iHighlightLines.Append( highlightLine );
+ }
+ }
+
+ if( iIsActionButton && !iActionButton && iVisuals.Count() > 0)
+ {
+ TAlfTimedPoint highlightedLineSize = iHighlightLines[0]->Size();
+ TAlfTimedPoint highlightedLinePos = iHighlightLines[0]->Pos();
+
+ TInt actionButtonWidth = iManager->Visualizer()->iSettings->iActionButtonWidth;
+ TInt actionButtonHeight = iManager->Visualizer()->iSettings->iActionButtonHeight;
+ TInt actionButtonMargin = iManager->Visualizer()->iSettings->iActionButtonMargin;
+
+ // Width of the actual text content area (without scroll bar)
+ TInt contentWidth = iManager->Visualizer()->iContentSize.iWidth +
+ iManager->Visualizer()->iSettings->iLeftMargin +
+ iManager->Visualizer()->iSettings->iRightMargin;
+
+ // If the width of the whole main pane is more than the width of
+ // the actual content area, it means that scroll bar is visible.
+ // In that case we don't need to leave any extra margin for the
+ // action button, because the scroll bar has some margin already.
+ // This way the button overlaps the text bit less in long lines.
+ if( iManager->Visualizer()->iDisplaySize.iWidth > contentWidth )
+ {
+ actionButtonMargin = 0;
+ }
+
+ TInt yTranslate = (highlightedLineSize.Target().iY - actionButtonHeight) / 2;
+
+ if(iManager->Visualizer()->iSettings->iMirroring)
+ {
+ target.iTl.iX = actionButtonMargin;
+ target.iTl.iY = highlightedLinePos.Target().iY + yTranslate;
+ target.iBr.iX = target.iTl.iX + actionButtonWidth;
+ target.iBr.iY = target.iTl.iY + actionButtonHeight;
+ }
+ else
+ {
+ target.iTl.iX = contentWidth - actionButtonMargin - actionButtonWidth;
+ target.iTl.iY = highlightedLinePos.Target().iY + yTranslate;
+ target.iBr.iX = target.iTl.iX + actionButtonWidth;
+ target.iBr.iY =target.iTl.iY + actionButtonHeight;
+ }
+
+ TFsPartBgVisual toAdd;
+ iActionButton = CAlfImageVisual::AddNewL(
+ *iManager->iControl,
+ iManager->Visualizer()->BackgroundLayout() );
+ iActionButton->SetScaleMode( CAlfImageVisual::EScaleFit );
+ iActionButton->SetImage( TAlfImage( *iManager->iActionButton ) );
+ iActionButton->SetRect( target );
+ iActionButton->SetOpacity( iManager->iActionButtonOpacity );
+
+/*
+ if(iManager->Visualizer()->iSettings->iMirroring)
+ {
+ iActionButton->SetTurnAngle(180);
+ }
+*/
+
+ toAdd.iVisual = iActionButton;
+ toAdd.iRect = target;
+ iManager->Visualizer()->Navigator()->AppendBgL( toAdd );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Deselect
+// ---------------------------------------------------------------------------
+void CFsTextViewerSelectLine::DeselectL()
+ {
+ FUNC_LOG;
+ TInt ala = iHighlightLines.Count();
+
+ for( TInt i = iHighlightLines.Count() - 1 ; i >= 0 ; --i )
+ {
+ if ( iManager->Visualizer()->Navigator()
+ ->RemoveBg( iHighlightLines[i] ) )
+ {
+ iHighlightLines[i]->RemoveAndDestroyAllD();
+ }
+
+ iHighlightLines[i] = NULL;
+ iHighlightLines.Remove(i);
+ }
+
+ iIsShown = EFalse;
+
+ if ( iActionButton )
+ {
+ if(iManager->Visualizer()->Navigator()->RemoveBg( iActionButton ))
+ {
+ iActionButton->RemoveAndDestroyAllD();
+ }
+
+ iActionButton = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// SelectedL
+// ---------------------------------------------------------------------------
+void CFsTextViewerSelectLine::SelectedL()
+ {
+ FUNC_LOG;
+ }
+
+// ---------------------------------------------------------------------------
+// HideActionButton
+// ---------------------------------------------------------------------------
+void CFsTextViewerSelectLine::HideActionButton()
+ {
+ FUNC_LOG;
+ if ( iActionButton )
+ {
+ if(iManager->Visualizer()->Navigator()->RemoveBg( iActionButton ))
+ {
+ iActionButton->RemoveAndDestroyAllD();
+ }
+
+ iActionButton = NULL;
+ }
+
+ iIsActionButton = EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// ShowActionButtonL
+// ---------------------------------------------------------------------------
+void CFsTextViewerSelectLine::ShowActionButtonL()
+ {
+ FUNC_LOG;
+ if(!iIsActionButton && iVisuals.Count() > 0 && !iActionButton )
+ {
+ iIsActionButton = ETrue;
+
+ TInt pxTranslation = 10;
+ TRect target = TRect( 0, 0, 0, 0 );
+
+ if(iManager->Visualizer()->iSettings->iMirroring)
+ {
+ target = iVisuals[0]->iVisual->DisplayRectTarget();
+
+ target.iBr.iX = target.iTl.iX + pxTranslation;
+ target.iTl.iX -= pxTranslation;
+ }
+ else
+ {
+ target = iVisuals[iVisuals.Count() - 1]->iVisual->DisplayRectTarget();
+
+ target.iTl.iX = target.iBr.iX - pxTranslation;
+ target.iBr.iX += pxTranslation;
+ }
+
+ TFsPartBgVisual toAdd;
+ iActionButton = CAlfImageVisual::AddNewL(
+ *iManager->iControl,
+ iManager->Visualizer()->BackgroundLayout() );
+ iActionButton->SetScaleMode( CAlfImageVisual::EScaleFit );
+ iActionButton->SetImage( TAlfImage( *iManager->iActionButton ) );
+ iActionButton->SetRect( target );
+ iActionButton->SetOpacity( iManager->iActionButtonOpacity );
+
+/*
+ if(iManager->Visualizer()->iSettings->iMirroring)
+ {
+ iActionButton->SetTurnAngle(180);
+ }
+*/
+
+ toAdd.iVisual = iActionButton;
+ toAdd.iRect = target;
+ iManager->Visualizer()->Navigator()->AppendBgL( toAdd );
+ }
+ }
+// ---------------------------------------------------------------------------
+// ~CFsTextViewerSelectLine
+// ---------------------------------------------------------------------------
+CFsTextViewerSelectLine::~CFsTextViewerSelectLine()
+ {
+ FUNC_LOG;
+ for(TInt i = iHighlightLines.Count() - 1 ; i >= 0 ; --i)
+ {
+ iHighlightLines[i]->RemoveAndDestroyAllD();
+ iHighlightLines[i] = NULL;
+ iHighlightLines.Remove(i);
+ }
+
+ iHighlightLines.Close();
+ }
+
+// ---------------------------------------------------------------------------
+// CFsTextViewerSelectLine
+// ---------------------------------------------------------------------------
+CFsTextViewerSelectLine::CFsTextViewerSelectLine(
+ CFsTextViewerSelectsManager* aManager )
+ {
+ FUNC_LOG;
+ iManager = aManager;
+ iType = EFsLineType;
+ iActionButton = NULL;
+
+ iIsShown = EFalse;
+ iIsActionButton = ETrue;
+ }
+
+