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; + } + +