--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/uicomponents/src/fsseparatorvisualizer.cpp Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,405 @@
+/*
+* 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: A visualizer for data items with separator.
+*
+*/
+
+
+//#include <fsconfig.h>
+
+#include "emailtrace.h"
+#include "fsseparatorvisualizer.h"
+#include "fsseparatordata.h"
+#include "fstreelist.h"
+#include "fslayoutmanager.h"
+// <cmail> SF
+#include <alf/alfanchorlayout.h>
+#include <alf/alfcurvepath.h>
+#include <alf/alflinevisual.h>
+#include <alf/alfenv.h>
+#include <alf/alfevent.h>
+// </cmail>
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFsSeparatorVisualizer*
+ CFsSeparatorVisualizer::NewL( CAlfControl& aOwnerControl )
+ {
+ FUNC_LOG;
+ CFsSeparatorVisualizer* self = new( ELeave ) CFsSeparatorVisualizer( aOwnerControl );
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// C++ destructor.
+// ---------------------------------------------------------------------------
+//
+CFsSeparatorVisualizer::~CFsSeparatorVisualizer()
+ {
+ FUNC_LOG;
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// The function sets separator's thickness in pixels.
+// ---------------------------------------------------------------------------
+//
+void CFsSeparatorVisualizer::SetSeparatorThickness( const TInt aThickness )
+ {
+ FUNC_LOG;
+ iThickness = aThickness;
+ }
+
+
+// ---------------------------------------------------------------------------
+// The function returns thikness of the separator line.
+// ---------------------------------------------------------------------------
+//
+TInt CFsSeparatorVisualizer::SeparatorThickness( ) const
+ {
+ FUNC_LOG;
+ return iThickness;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Sets the width of separator line. The separator line is always centered
+// horizontaly. The line width is given as the percentage of the whole item's width.
+// ---------------------------------------------------------------------------
+//
+void CFsSeparatorVisualizer::SetSeparatorWidth ( TReal32 aWidth )
+ {
+ FUNC_LOG;
+ iWidth = aWidth;
+
+ if ( iWidth > 1.0 )
+ {
+ iWidth = 1.0;
+ }
+ else if ( iWidth < 0.1 )
+ {
+ iWidth = 0.1;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Returns the width of the separator line.
+// ---------------------------------------------------------------------------
+//
+TReal32 CFsSeparatorVisualizer::SetSeparatorWidth ( ) const
+ {
+ FUNC_LOG;
+ return iWidth;
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// Returns visualizer's type.
+// ---------------------------------------------------------------------------
+//
+TFsTreeItemVisualizerType CFsSeparatorVisualizer::Type() const
+ {
+ FUNC_LOG;
+ return EFsSeparatorVisualizer;
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// Sets multiple flags for an item at one time.
+// ---------------------------------------------------------------------------
+//
+void CFsSeparatorVisualizer::SetFlags( TUint32 aFlags )
+ {
+ FUNC_LOG;
+ iFlags = aFlags;
+ iFlags &= ~KFsTreeListItemFocusable;
+ iFlags &= ~KFsTreeListItemManagedLayout;
+ iFlags &= ~KFsTreeListItemExtendable;
+ iFlags &= ~KFsTreeListItemExtended;
+ iFlags &= ~KFsTreeListItemAlwaysExtended;
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// Returns the size of an item in a normal (not extended) state.
+// ---------------------------------------------------------------------------
+//
+TSize CFsSeparatorVisualizer::Size() const
+ {
+ FUNC_LOG;
+ return iSize;
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// Sets the item's visualization state to extended.
+// Separator cannot be extended - the function has no effect.
+// ---------------------------------------------------------------------------
+//
+void CFsSeparatorVisualizer::SetExtended( TBool /*aFlag*/ )
+ {
+ FUNC_LOG;
+ iFlags &= ~KFsTreeListItemExtended;
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// Returns extended/not extended state of the item visualization.
+// Separator cannot be extended - the function always returns EFalse.
+// ---------------------------------------------------------------------------
+//
+TBool CFsSeparatorVisualizer::IsExtended() const
+ {
+ FUNC_LOG;
+ return EFalse;
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// Sets if an item can be in extended state or not.
+// Separator is not extendable - the function has no effect.
+// ---------------------------------------------------------------------------
+//
+void CFsSeparatorVisualizer::SetExtendable( TBool /*aFlag*/ )
+ {
+ FUNC_LOG;
+ iFlags &= ~KFsTreeListItemExtendable;
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// Returns an information if item can be in extended state.
+// Separator is not extendable - the function always returns EFalse.
+// ---------------------------------------------------------------------------
+//
+TBool CFsSeparatorVisualizer::IsExtendable( )
+ {
+ FUNC_LOG;
+ return EFalse;
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// This functions sets wether an item should always be in extended state.
+// ---------------------------------------------------------------------------
+//
+void CFsSeparatorVisualizer::SetAlwaysExtended( TBool /*aAlwaysExtended*/ )
+ {
+ FUNC_LOG;
+ iFlags &= ~KFsTreeListItemAlwaysExtended;
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// This function returns wether an item is always in extended state.
+// ---------------------------------------------------------------------------
+//
+TBool CFsSeparatorVisualizer::IsAlwaysExtended( ) const
+ {
+ FUNC_LOG;
+ return EFalse;
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// A call to this function means that the item is requested to draw itself
+// within specified parent layout.
+// ---------------------------------------------------------------------------
+//
+void CFsSeparatorVisualizer::ShowL( CAlfLayout& aParentLayout,
+ const TUint aTimeout )
+ {
+ FUNC_LOG;
+ if (!iLayout)
+ {
+ iParentLayout = &aParentLayout;
+ iLayout = CAlfAnchorLayout::AddNewL(iOwnerControl,iParentLayout);
+ iLayout->EnableBrushesL();
+ iLayout->SetClipping(ETrue);
+ iLayout->SetFlag( EAlfVisualFlagIgnorePointer );
+
+ CAlfCurvePath* path = CAlfCurvePath::NewLC( iOwnerControl.Env() );
+ path->AppendLineL(TPoint(0, 1), TPoint(100, 1), 1 );
+ iLineVisual = CAlfLineVisual::AddNewL( iOwnerControl, iLayout );
+ iLineVisual->SetPath(path, EAlfHasOwnership);
+ iLineVisual->SetThickness( TAlfTimedValue(static_cast<TReal32>(iThickness), 0) );
+ iLineVisual->SetColor(KRgbBlack);
+ CleanupStack::Pop(path);
+ iLineVisual->SetFlag( EAlfVisualFlagIgnorePointer );
+ }
+ else
+ {
+ //visuals are already created but not attached to the list layout
+ if (!iLayout->Layout())
+ {
+ aParentLayout.Append(iLayout, aTimeout);
+ iParentLayout = &aParentLayout;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// A call to this function means that the item is requested to update its
+// visual content.
+// ---------------------------------------------------------------------------
+//
+void CFsSeparatorVisualizer::UpdateL( const MFsTreeItemData& aData,
+ TBool /*aFocused*/,
+ const TUint aLevel,
+ CAlfTexture*& /*aMarkIcon*/,
+ CAlfTexture*& /*aMenuIcon*/,
+ const TUint /*aTimeout*/,
+ TBool /*aUpdateData*/)
+ {
+ FUNC_LOG;
+ if ( iLayout && iLineVisual )
+ {
+ if ( aData.Type() == KFsSeparatorDataType )
+ {
+ const CFsSeparatorData* data = static_cast<const CFsSeparatorData*>(&aData);
+
+ TSize size;
+
+ size = Size();
+ size.iWidth = iParentLayout->Size().Target().iX - iParentLayout->HorizontalPadding()*2;
+ //shrink width if we are at some level in the hierarchy
+ TInt indentation(0);
+ indentation = iTextIndentation * ( aLevel - 1 );
+ TRect currentSize = size;
+ if (CFsLayoutManager::IsMirrored())
+ {
+ currentSize.iBr = currentSize.iBr - TPoint(indentation, 0);
+ }
+ else
+ {
+ currentSize.iTl = currentSize.iTl + TPoint(indentation, 0);
+ }
+
+ CAlfCurvePath* path(NULL);
+ path = iLineVisual->Path();
+
+ if ( path )
+ {
+ path->Reset();
+
+ //draw the line in the middle of item's height
+ TInt y(0);
+ y = ( currentSize.Height() - iThickness ) / 2;
+
+ //width
+ TRect separatorRect = currentSize;
+
+ separatorRect.iTl.iY = y;
+ separatorRect.iBr.iY = y;
+
+ TInt lineWidth(0), space(0);
+ lineWidth = currentSize.Width() * iWidth;
+ space = ( currentSize.Width() - lineWidth ) / 2;
+
+ separatorRect.iTl += TPoint( space, 0 );
+ separatorRect.iBr -= TPoint( space, 0 );
+
+ path->AppendLineL( separatorRect.iTl, separatorRect.iBr, 1 );
+
+ iLineVisual->SetThickness( TAlfTimedValue(static_cast<TReal32>(iThickness), 0) );
+ iLineVisual->SetColor( data->SeparatorColor() );
+ }
+ }
+
+ iLayout->UpdateChildrenLayout( 0 );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// A call to this function means that the item goes out of the visible items
+// scope.
+// ---------------------------------------------------------------------------
+//
+void CFsSeparatorVisualizer::Hide( const TInt aTimeout )
+ {
+ FUNC_LOG;
+ if ( iLayout )
+ {
+ iParentLayout->Remove(iLayout, aTimeout);
+ iLayout->RemoveAndDestroyAllD();
+ iLayout = NULL;
+ iParentLayout = NULL;
+ iLineVisual = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// Method to marquee the text when it's too long.
+// ---------------------------------------------------------------------------
+//
+void CFsSeparatorVisualizer::MarqueeL(const TFsTextMarqueeType /*aMarqueeType*/,
+ const TUint /*aMarqueeSpeed*/,
+ const TInt /*aMarqueeStartDelay*/,
+ const TInt /*aMarqueeCycleStartDelay*/,
+ const TInt /*aMarqueeRepetitions*/)
+ {
+ FUNC_LOG;
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CFsSeparatorVisualizer::CFsSeparatorVisualizer( CAlfControl& aOwnerControl )
+ : CFsTreeItemVisualizerBase( aOwnerControl ),
+ iThickness( KDefaultSeparatorThickness ),
+ iWidth( 1.0 )
+ {
+ FUNC_LOG;
+ TUint flags(0);
+ SetFlags( flags );
+ SetSize( TSize( KDefaultWidth, KDefaultHeight ));
+ }
+
+
+// ---------------------------------------------------------------------------
+// Second phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CFsSeparatorVisualizer::ConstructL( )
+ {
+ FUNC_LOG;
+ CFsTreeItemVisualizerBase::ConstructL();
+ }
+