diff -r 000000000000 -r 8466d47a6819 emailuis/uicomponents/src/fstextviewerselectsmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailuis/uicomponents/src/fstextviewerselectsmanager.cpp Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,596 @@ +/* +* 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: Manager for selectable elements (hotspots and expand areas) +* +*/ + + +// removed __FS_ALFRED_SUPPORT flag +//#include +// removed __FS_ALFRED_SUPPORT flag +// SF +#include "emailtrace.h" +#include +// +#include "fstextviewerselectsmanager.h" +#include "fstextviewerselecthotspot.h" +#include "fstextviewerselectembed.h" +#include "fstextviewerselectline.h" +#include "fstextviewervisualizer.h" +#include "fstextviewervisualizersettings.h" +#include "fstextviewervisualizerdata.h" +#include "fstextparser.h" + + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +CFsTextViewerSelectsManager* CFsTextViewerSelectsManager::NewL( + CFsTextViewerVisualizer* aOwner ) + { + FUNC_LOG; + CFsTextViewerSelectsManager* self = + new (ELeave) CFsTextViewerSelectsManager( aOwner ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// ~CFsTextViewerSelectsManager +// --------------------------------------------------------------------------- +CFsTextViewerSelectsManager::~CFsTextViewerSelectsManager() + { + FUNC_LOG; + iOwner = NULL; + for ( TInt i = 0; i < iSelects.Count(); ++i ) + { + delete iSelects[i]; + } + iSelects.Close(); + } + +// --------------------------------------------------------------------------- +// AppendSelectVisL +// --------------------------------------------------------------------------- +void CFsTextViewerSelectsManager::AppendSelectVisL( TFsRangedVisual* aVisual, + TInt aId, + CFsTextViewerSelect::TFsTextViewerSelectType aType ) + { + FUNC_LOG; + TBool newNeeded = ETrue; + for ( TInt i = 0; i < iSelects.Count(); ++i ) + { + if ( iSelects[i]->GetId() == aId + && iSelects[i]->GetType() == aType ) + { + iSelects[i]->AppendVisualL( aVisual ); + newNeeded = EFalse; + } + } + + if ( newNeeded ) + { + CFsTextViewerSelect* select = NULL; + switch ( aType ) + { + case CFsTextViewerSelect::EFsHotspotType: + { + select = CFsTextViewerSelectHotspot::NewL( this ); + break; + } + case CFsTextViewerSelect::EFsEmbedType: + { + select = CFsTextViewerSelectEmbed::NewL( this ); + break; + } + case CFsTextViewerSelect::EFsLineType: + { + select = CFsTextViewerSelectLine::NewL( this ); + break; + } + default: + { + break; + } + + } + select->SetId( aId ); + select->AppendVisualL( aVisual ); + iSelects.AppendL( select ); + } + else + { + } + + TLinearOrder order( Compare ); + iSelects.Sort( order ); + } + +// --------------------------------------------------------------------------- +// Visualizer +// --------------------------------------------------------------------------- +CFsTextViewerVisualizer* CFsTextViewerSelectsManager::Visualizer() + { + FUNC_LOG; + return iOwner; + } + +// --------------------------------------------------------------------------- +// MoveNext +// --------------------------------------------------------------------------- +TBool CFsTextViewerSelectsManager::MoveNextL( TBool& aChanged ) + { + FUNC_LOG; + TBool retVal = EFalse; + + if ( iCurrent >= 0 && iCurrent < iSelects.Count() ) + { + iSelects[iCurrent]->DeselectL(); + } + + if ( iCurrent < 0 && iSelects.Count() > 0 ) + { + iCurrent = 0; + if ( iSelects[0]->IsVisible() ) + { + retVal = ETrue; + } + } + else if ( iSelects.Count() > 0 ) + { + for ( TInt i = iCurrent + 1; i < iSelects.Count(); ++i ) + { + if ( iSelects[i]->IsVisible() && !retVal ) + { + iCurrent = i; + retVal = ETrue; + } + } + } + + if ( !retVal && iCurrent >= 0 && iCurrent < iSelects.Count() && !iSelects[iCurrent]->IsVisible() ) + { + for ( TInt i = 0; i < iCurrent; ++i ) + { + if ( iSelects[i]->IsVisible() && !retVal ) + { + iCurrent = i; + retVal = ETrue; + } + } + } + + if ( iCurrent >= 0 && iCurrent < iSelects.Count() && iSelects[iCurrent]->IsVisible() ) + { + iSelects[iCurrent]->SelectL(); + } + + aChanged = retVal; + if ( iCurrent >= 0 + && iCurrent < iSelects.Count() + && iSelects[iCurrent]->GetStartLine() >= iOwner->Navigator()->GetFirstVisible()->iLineNumber + 4 + && aChanged ) + { + retVal = EFalse; + } + else + { + + } + + return retVal; + } + +// --------------------------------------------------------------------------- +// MovePrev +// --------------------------------------------------------------------------- +TBool CFsTextViewerSelectsManager::MovePrevL( TBool& aChanged ) + { + FUNC_LOG; + TBool retVal = EFalse; + + if ( iCurrent >= 0 && iCurrent < iSelects.Count() ) + { + iSelects[iCurrent]->DeselectL(); + } + + if ( iCurrent < 0 && iSelects.Count() > 0 ) + { + iCurrent = 0; + if ( iSelects[0]->IsVisible() ) + { + retVal = ETrue; + } + } + else if ( iSelects.Count() > 0 ) + { + for ( TInt i = iCurrent - 1; i >= 0; --i ) + { + if ( iSelects[i]->IsVisible() && !retVal ) + { + iCurrent = i; + retVal = ETrue; + } + } + } + + if ( !retVal && iCurrent >= 0 && iCurrent < iSelects.Count() && !iSelects[iCurrent]->IsVisible() ) + { + for ( TInt i = iSelects.Count() - 1; i > iCurrent; --i ) + { + if ( iSelects[i]->IsVisible() && !retVal ) + { + iCurrent = i; + retVal = ETrue; + } + } + } + + if ( iCurrent >= 0 && iCurrent < iSelects.Count() && iSelects[iCurrent]->IsVisible() ) + { + iSelects[iCurrent]->SelectL(); + } + + if ( iCurrent >= 0 && iCurrent < iSelects.Count() + && iSelects[iCurrent]->GetStartLine() <= iOwner->Navigator()->GetLastVisible()->iLineNumber - 4 && aChanged ) + { + retVal = EFalse; + } + else + { + + } + + aChanged = retVal; + return retVal; + } + +// --------------------------------------------------------------------------- +// RemoveVisual +// --------------------------------------------------------------------------- +void CFsTextViewerSelectsManager::RemoveVisual( TFsRangedVisual* aVisual ) + { + FUNC_LOG; + for ( TInt i = 0; i < iSelects.Count(); ++i ) + { + iSelects[i]->RemoveVisual( aVisual ); + } + } + +// --------------------------------------------------------------------------- +// Clicked +// --------------------------------------------------------------------------- +void CFsTextViewerSelectsManager::ClickedL() + { + FUNC_LOG; + if ( iCurrent >= 0 && iCurrent < iSelects.Count() ) + { + iSelects[iCurrent]->SelectedL(); + } + } + +// --------------------------------------------------------------------------- +// IsHotspotHighlighted +// --------------------------------------------------------------------------- +TBool CFsTextViewerSelectsManager::IsHotspotHighlighted() + { + FUNC_LOG; + TBool retVal = EFalse; + if ( iCurrent >= 0 && + iSelects.Count() > 0 + && ( iSelects[iCurrent]->GetType() + == CFsTextViewerSelect::EFsHotspotType + || iSelects[iCurrent]->GetType() + == CFsTextViewerSelect::EFsLineType ) ) + { + retVal = ETrue; + } + + return retVal; + } + +// --------------------------------------------------------------------------- +// GetCurrentSelectId +// --------------------------------------------------------------------------- +TInt CFsTextViewerSelectsManager::GetCurrentSelectId() + { + FUNC_LOG; + TInt retVal = -1; + + if ( iCurrent >= 0 && + iSelects.Count() > 0 + && ( iSelects[iCurrent]->GetType() + == CFsTextViewerSelect::EFsHotspotType + || iSelects[iCurrent]->GetType() + == CFsTextViewerSelect::EFsLineType ) ) + { + retVal = iSelects[iCurrent]->GetId(); + } + + return retVal; + } + +// +TInt CFsTextViewerSelectsManager::GetCurrentSelectedIndex() + { + return iCurrent; + } +// + +// --------------------------------------------------------------------------- +// DimAll +// --------------------------------------------------------------------------- +void CFsTextViewerSelectsManager::DimAllL() + { + FUNC_LOG; + for ( TInt i = 0; i < iSelects.Count(); ++i ) + { + if ( i != iCurrent + && iSelects[i]->GetType() != CFsTextViewerSelect::EFsLineType ) + { + if ( iSelects[i]->IsVisible() ) + { + iSelects[i]->DeselectL(); + } + } + } + } + +// --------------------------------------------------------------------------- +// RefreshSelection +// --------------------------------------------------------------------------- +void CFsTextViewerSelectsManager::RefreshSelectionL() + { + FUNC_LOG; + for ( TInt i = 0; i < iSelects.Count(); ++i ) + { + if ( i != iCurrent + && iSelects[i]->GetType() != CFsTextViewerSelect::EFsLineType ) + { + iSelects[i]->DeselectL(); + } + } + if ( iCurrent >= 0 ) + { + iSelects[iCurrent]->SelectL(); + } + } + + +// --------------------------------------------------------------------------- +// SelectL +// --------------------------------------------------------------------------- +void CFsTextViewerSelectsManager::SelectL( TInt aId ) + { + FUNC_LOG; + CFsTextViewerSelect* hotspotFound = NULL; + TInt arrayIndex = 0; + for ( TInt i = 0; i < iSelects.Count(); ++i ) + { + if ( iSelects[i]->GetId() == aId ) + { + hotspotFound = iSelects[i]; + arrayIndex = i; + } + } + if ( hotspotFound ) + { + if ( iCurrent >= 0 ) + { + iSelects[iCurrent]->DeselectL(); + } + iCurrent = arrayIndex; + if ( iSelects[iCurrent]->IsVisible() ) + { + iSelects[iCurrent]->SelectL(); + } + } + } + +// --------------------------------------------------------------------------- +// SelectByCharL +// --------------------------------------------------------------------------- +void CFsTextViewerSelectsManager::SelectByCharL( TInt aIndex ) + { + FUNC_LOG; + CFsTextViewerSelect* hotspotFound = NULL; + TInt arrayIndex = 0; + + for ( TInt i = 0; i < iSelects.Count(); ++i ) + { + if ( iOwner->Parser()->GetStartIndexOfHotSpotAreaL( iSelects[i]->GetId(), ETrue ) <= aIndex && + iOwner->Parser()->GetEndIndexOfHotSpotAreaL( iSelects[i]->GetId(), ETrue ) >= aIndex ) + { + hotspotFound = iSelects[i]; + arrayIndex = i; + } + } + + if ( hotspotFound ) + { + if ( iCurrent >= 0 ) + { + iSelects[iCurrent]->DeselectL(); + } + iCurrent = arrayIndex; + if ( iSelects[iCurrent]->IsVisible() ) + { + iSelects[iCurrent]->SelectL(); + } + } + } + +// --------------------------------------------------------------------------- +// SelectByIndexL +// --------------------------------------------------------------------------- +void CFsTextViewerSelectsManager::SelectByIndexL( TInt aIndex ) + { + FUNC_LOG; + if ( aIndex >= 0 && aIndex < iSelects.Count() ) + { + if ( iCurrent >= 0 && iCurrent < iSelects.Count() ) + { + if ( iSelects[iCurrent]->IsVisible() ) + { + iSelects[iCurrent]->DeselectL(); + } + } + iCurrent = aIndex; + if ( iSelects[iCurrent]->IsVisible() ) + { + iSelects[iCurrent]->SelectL(); + } + } + } + +// --------------------------------------------------------------------------- +// GetDisplaySize +// --------------------------------------------------------------------------- +TSize CFsTextViewerSelectsManager::GetDisplaySize() + { + FUNC_LOG; + return iDisplaySize; + } + +// --------------------------------------------------------------------------- +// IsCurrentHotspotVisible +// --------------------------------------------------------------------------- +TBool CFsTextViewerSelectsManager::IsCurrentHotspotVisible() + { + FUNC_LOG; + TBool retVal = EFalse; + if ( iSelects.Count() > 0 && iCurrent >=0 ) + { + retVal = iSelects[iCurrent]->IsVisible(); + } + return retVal; + } + +// --------------------------------------------------------------------------- +// GetCurrentHotspotLine +// --------------------------------------------------------------------------- +TInt CFsTextViewerSelectsManager::GetCurrentHotspotLine() + { + FUNC_LOG; + TInt retVal = -1; + if ( iSelects.Count() > 0 && iCurrent >=0 ) + { + retVal = iSelects[iCurrent]->GetStartLine(); + } + return retVal; + } + +// --------------------------------------------------------------------------- +// HideActionButtonFromCurrentHighlightedHotspot +// --------------------------------------------------------------------------- +void CFsTextViewerSelectsManager +::HideActionButtonFromCurrentHighlightedHotspot() + { + FUNC_LOG; + if ( iCurrent >= 0 && + iSelects.Count() > 0 && + iSelects[iCurrent]->GetType() == CFsTextViewerSelect::EFsLineType) + { + static_cast(iSelects[iCurrent]) + ->HideActionButton(); + } + } + +// --------------------------------------------------------------------------- +// ShowActionButtonForCurrentHighlightedHotspotL +// --------------------------------------------------------------------------- +void CFsTextViewerSelectsManager +::ShowActionButtonForCurrentHighlightedHotspotL() + { + FUNC_LOG; + if ( iCurrent >= 0 && + iSelects.Count() > 0 && + iSelects[iCurrent]->GetType() == CFsTextViewerSelect::EFsLineType) + { + static_cast + (iSelects[iCurrent])->ShowActionButtonL(); + } + } + +// --------------------------------------------------------------------------- +// Compare +// --------------------------------------------------------------------------- +TInt CFsTextViewerSelectsManager::Compare( + const CFsTextViewerSelect& aFirst, + const CFsTextViewerSelect& aSecond ) + { + FUNC_LOG; +// if ( aFirst.iRect.iTl.iY > aSecond.iRect.iTl.iY ) +// { +// return 1; +// } +// else if ( aFirst.iRect.iTl.iY == aSecond.iRect.iTl.iY ) +// { +// if ( aFirst.iRect.iTl.iX > aSecond.iRect.iTl.iX ) +// { +// return 1; +// } +// else if ( aFirst.iRect.iTl.iX == aSecond.iRect.iTl.iX ) +// { +// return 0; +// } +// else +// { +// return -1; +// } +// } + if ( aFirst.GetId() > aSecond.GetId() ) + { + return 1; + } + else if ( aFirst.GetId() == aSecond.GetId() ) + { + return 0; + } + else + { + return -1; + } + } + +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +void CFsTextViewerSelectsManager::ConstructL() + { + FUNC_LOG; + iCurrent = -1; + iHighlightLine = iOwner->iSettings->iHighlightLine; + iHighlightLineOpacity = iOwner->iSettings->iHighlightLineOpacity; + iActionButton = iOwner->iSettings->iActionButton; + iActionButtonOpacity = iOwner->iSettings->iActionButtonOpacity; + iActionButtonMargin = iOwner->iSettings->iActionButtonMargin; + iActionButtonWidth = iOwner->iSettings->iActionButtonWidth; + iActionButtonHeight = iOwner->iSettings->iActionButtonHeight; + iDisplaySize = iOwner->iDisplaySize; + iControl = iOwner->Control(); + } + +// --------------------------------------------------------------------------- +// CFsTextViewerSelectsManager +// --------------------------------------------------------------------------- +CFsTextViewerSelectsManager::CFsTextViewerSelectsManager( + CFsTextViewerVisualizer* aOwner ) + { + FUNC_LOG; + iOwner = aOwner; + } +