--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/uicomponents/src/fstextviewerselectsmanager.cpp Wed Sep 01 12:28:57 2010 +0100
@@ -0,0 +1,600 @@
+/*
+* 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)
+*
+*/
+
+
+//<cmail> removed __FS_ALFRED_SUPPORT flag
+//#include <fsconfig.h>
+//</cmail> removed __FS_ALFRED_SUPPORT flag
+// <cmail> SF
+#include "emailtrace.h"
+#include <alf/alfvisual.h>
+// </cmail>
+#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;
+ }
+
+ }
+
+ if (select)
+ {
+ select->SetId( aId );
+ select->AppendVisualL( aVisual );
+ iSelects.AppendL( select );
+ }
+ }
+ else
+ {
+ }
+
+ TLinearOrder<CFsTextViewerSelect> 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;
+ }
+
+// <cmail>
+TInt CFsTextViewerSelectsManager::GetCurrentSelectedIndex()
+ {
+ return iCurrent;
+ }
+// </cmail>
+
+// ---------------------------------------------------------------------------
+// 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<CFsTextViewerSelectLine*>(iSelects[iCurrent])
+ ->HideActionButton();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ShowActionButtonForCurrentHighlightedHotspotL
+// ---------------------------------------------------------------------------
+void CFsTextViewerSelectsManager
+::ShowActionButtonForCurrentHighlightedHotspotL()
+ {
+ FUNC_LOG;
+ if ( iCurrent >= 0 &&
+ iSelects.Count() > 0 &&
+ iSelects[iCurrent]->GetType() == CFsTextViewerSelect::EFsLineType)
+ {
+ static_cast<CFsTextViewerSelectLine*>
+ (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;
+ }
+