--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/uicomponents/src/fsalfscrollbarlayout.cpp Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,449 @@
+/*
+* 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: This file implements class CFsAlfScrollbarLayout.
+*
+*/
+
+
+//<cmail> SF
+#include "emailtrace.h"
+#include <alf/alfcontrol.h>
+#include <alf/alfanchorlayout.h>
+#include <alf/alfenv.h>
+#include <alf/alfimagebrush.h>
+#include <alf/alfbrusharray.h>
+#include <alf/alfconstants.h>
+#include <alf/alfgencomponent.h>
+#include <alf/alfconstants.h>
+//</cmail>
+
+#include "fsscrollbarpluginconstants.h"
+#include "fsalfscrollbarlayout.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+CFsAlfScrollbarLayout::CFsAlfScrollbarLayout()
+ : CAlfLayout()
+ {
+ FUNC_LOG;
+ }
+
+
+void CFsAlfScrollbarLayout::ConstructL( CAlfControl& aOwnerControl )
+ {
+ FUNC_LOG;
+ CAlfLayout::ConstructL( aOwnerControl );
+
+ iOwnerControl = &aOwnerControl;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Construct a new scrollbar layout and give its ownership to a control.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFsAlfScrollbarLayout* CFsAlfScrollbarLayout::AddNewL(
+ CAlfControl& aOwnerControl,
+ CAlfLayout* aParentLayout )
+ {
+ FUNC_LOG;
+ TInt ownerHandle( aOwnerControl.Identifier() );
+ TInt parentlayouthandle( 0 );
+ if ( aParentLayout )
+ {
+ parentlayouthandle = aParentLayout->Identifier();
+ }
+
+ TInt2 inputParams( aOwnerControl.Identifier(), parentlayouthandle );
+
+ TPckg<TInt2> paramBuf( inputParams );
+
+ CFsAlfScrollbarLayout* layout( new( ELeave )CFsAlfScrollbarLayout() );
+ CleanupStack::PushL( layout );
+
+ layout->CAlfVisual::ConstructL(
+ aOwnerControl,
+ EFsScrollbarCreateScreenLayout,
+ KFsScrollbarImplementationId, paramBuf );
+
+ User::LeaveIfError( aOwnerControl.Append( layout, aParentLayout ) );
+ CleanupStack::Pop( layout );
+ return layout;
+ }
+
+
+CFsAlfScrollbarLayout::~CFsAlfScrollbarLayout()
+ {
+ FUNC_LOG;
+ SetVisibilityMode( EFsScrollbarHideAlways, EFsScrollbarVertical );
+ SetVisibilityMode( EFsScrollbarHideAlways, EFsScrollbarHorizontal );
+ ReleaseCustomImage( EFsScrollbarVertical );
+ ReleaseCustomImage( EFsScrollbarHorizontal );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Set the range of the scrollbar. Will not actually move the scrollbar until
+// Update() is called.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFsAlfScrollbarLayout::SetRange(
+ TInt aStart,
+ TInt aEnd,
+ TFsScrollbar aScrollbar )
+ {
+ FUNC_LOG;
+ TFsScrollbarSet scrollbarSet;
+ scrollbarSet.iScrollbar = aScrollbar;
+ scrollbarSet.iRangeStart = aStart;
+ scrollbarSet.iRangeEnd = aEnd;
+
+ SendCommand( EFsScrollbarLayoutSetScrollbarRangeCommand, scrollbarSet );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Get scrollbars minimum range value.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CFsAlfScrollbarLayout::RangeStart( TFsScrollbar aScrollbar )
+ {
+ FUNC_LOG;
+ TFsScrollbarSet scrollbarSet;
+ TFsScrollbarSet paramScrollbarSet;
+ paramScrollbarSet.iScrollbar = aScrollbar;
+ SendCommand( EFsScrollbarLayoutGetScrollbarSettingsCommand,
+ paramScrollbarSet, scrollbarSet );
+ return scrollbarSet.iRangeStart;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Get scrollbars maximum range value.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CFsAlfScrollbarLayout::RangeEnd( TFsScrollbar aScrollbar )
+ {
+ FUNC_LOG;
+ TFsScrollbarSet scrollbarSet;
+ TFsScrollbarSet paramScrollbarSet;
+ paramScrollbarSet.iScrollbar = aScrollbar;
+ SendCommand( EFsScrollbarLayoutGetScrollbarSettingsCommand,
+ paramScrollbarSet, scrollbarSet );
+ return scrollbarSet.iRangeEnd;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Set the count of visible units at the time.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFsAlfScrollbarLayout::SetThumbSpan(
+ TInt aThumbSpan,
+ TFsScrollbar aScrollbar )
+ {
+ FUNC_LOG;
+ TFsScrollbarSet scrollbarSet;
+ scrollbarSet.iScrollbar = aScrollbar;
+ scrollbarSet.iThumbSpan = aThumbSpan;
+ SendCommand( EFsScrollbarLayoutSetScrollbarThumbSpanCommand,
+ scrollbarSet );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Get the set value for visible units.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CFsAlfScrollbarLayout::ThumbSpan( TFsScrollbar aScrollbar )
+ {
+ FUNC_LOG;
+ TFsScrollbarSet scrollbarSet;
+ TFsScrollbarSet paramScrollbarSet;
+ paramScrollbarSet.iScrollbar = aScrollbar;
+ SendCommand( EFsScrollbarLayoutGetScrollbarSettingsCommand,
+ paramScrollbarSet, scrollbarSet );
+ return scrollbarSet.iThumbSpan;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Adjust the vertical scrollbar's width.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFsAlfScrollbarLayout::SetVerticalScrollbarWidth(
+ TInt aWidth,
+ TInt aTransitionTime )
+ {
+ FUNC_LOG;
+ TInt2 params( aWidth, aTransitionTime );
+ TPckgC<TInt2> inBuf( params );
+ TBuf8<1> dummy;
+ TInt err( Comms()->DoSynchronousCmd(
+ EFsScrollbarLayoutSetVerticalScrollbarWidthCommand,
+ inBuf,
+ dummy ) );
+
+ __ASSERT_ALWAYS( err == KErrNone, User::Invariant() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Adjust the horizontal scrollbar's height.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFsAlfScrollbarLayout::SetHorizontalScrollbarHeight(
+ TInt aHeight,
+ TInt aTransitionTime )
+ {
+ FUNC_LOG;
+ TInt2 params( aHeight, aTransitionTime );
+ TPckgC<TInt2> inBuf( params );
+ TBuf8<1> dummy;
+ TInt err( Comms()->DoSynchronousCmd(
+ EFsScrollbarLayoutSetHorizontalScrollbarHeightCommand,
+ inBuf,
+ dummy ) );
+
+ __ASSERT_ALWAYS( err == KErrNone, User::Invariant() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Set the position of the scrollbar.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFsAlfScrollbarLayout::SetScrollbarPos(
+ const TInt aPos,
+ TFsScrollbar aScrollbar )
+ {
+ FUNC_LOG;
+ TFsScrollbarSet scrollbarSet;
+ scrollbarSet.iScrollbar = aScrollbar;
+ scrollbarSet.iScrollbarPos = aPos;
+
+ SendCommand( EFsScrollbarLayoutSetScrollbarPosCommand, scrollbarSet );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Resolve the position of the scrollbar.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CFsAlfScrollbarLayout::ScrollbarPos( TFsScrollbar aScrollbar )
+ {
+ FUNC_LOG;
+ TFsScrollbarSet scrollbarSet;
+ TFsScrollbarSet paramScrollbarSet;
+ paramScrollbarSet.iScrollbar = aScrollbar;
+ SendCommand( EFsScrollbarLayoutGetScrollbarSettingsCommand,
+ paramScrollbarSet, scrollbarSet );
+ return scrollbarSet.iScrollbarPos;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Set the scrollbar visibility.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFsAlfScrollbarLayout::SetVisibilityMode(
+ TFsScrollbarVisibility aVisibility,
+ TFsScrollbar aScrollbar )
+ {
+ FUNC_LOG;
+ TFsScrollbarSet scrollbarSet;
+ scrollbarSet.iScrollbar = aScrollbar;
+ scrollbarSet.iVisibility = aVisibility;
+
+ SendCommand( EFsScrollbarLayoutSetScrollbarVisibilityCommand,
+ scrollbarSet );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Resolve the scrollbar visibility.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TFsScrollbarVisibility CFsAlfScrollbarLayout::VisibilityMode(
+ TFsScrollbar aScrollbar )
+ {
+ FUNC_LOG;
+ TFsScrollbarSet scrollbarSet;
+ TFsScrollbarSet paramScrollbarSet;
+ paramScrollbarSet.iScrollbar = aScrollbar;
+ SendCommand( EFsScrollbarLayoutGetScrollbarSettingsCommand,
+ paramScrollbarSet, scrollbarSet );
+ return scrollbarSet.iVisibility;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Resolve if the specified scrollbar is visible.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CFsAlfScrollbarLayout::IsScrollbarVisible(
+ TFsScrollbar aScrollbar )
+ {
+ FUNC_LOG;
+ TFsScrollbarSet scrollbarSet;
+ TFsScrollbarSet paramScrollbarSet;
+ paramScrollbarSet.iScrollbar = aScrollbar;
+ SendCommand( EFsScrollbarLayoutGetScrollbarSettingsCommand,
+ paramScrollbarSet, scrollbarSet );
+ return scrollbarSet.iVisible;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Change the bar image to custom image. Ownership of the brushes are changed.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFsAlfScrollbarLayout::SetScrollbarImagesL(
+ CAlfImageBrush* aBarBrush, CAlfImageBrush* aThumbBrush,
+ TFsScrollbar aScrollbar )
+ {
+ FUNC_LOG;
+ ReleaseCustomImage( aScrollbar );
+
+ if ( EFsScrollbarVertical == aScrollbar )
+ {
+ iVBarBrush = aBarBrush;
+ iVThumbBrush = aThumbBrush;
+ }
+ else
+ {
+ iHBarBrush = aBarBrush;
+ iHThumbBrush = aThumbBrush;
+ }
+
+ TFsImageSet imageSet;
+ imageSet.iBarBrushId = aBarBrush->Identifier();
+ imageSet.iThumbBrushId = aThumbBrush->Identifier();
+ imageSet.iScrollbar = aScrollbar;
+
+ TPckgC<TFsImageSet> inBuf( imageSet );
+ TBuf8<1> dummy;
+
+ TInt err = Comms()->DoSynchronousCmd(
+ EFsScrollbarLayoutSetScrollbarCustomImagesCommand,
+ inBuf,
+ dummy );
+
+ __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Update the visibility of scrollbars.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFsAlfScrollbarLayout::Update( TInt aLayoutTransitionTime )
+ {
+ FUNC_LOG;
+ TPckgC<TInt> inBuf( aLayoutTransitionTime );
+ TBuf8<1> outDum;
+ TInt err = Comms()->DoSynchronousCmd(
+ EFsScrollbarLayoutSetScrollbarUpdateCommand,
+ inBuf,
+ outDum );
+
+ __ASSERT_ALWAYS( err == KErrNone, User::Invariant() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Get the target size of the scrolbar layout without the scrollbars.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TAlfRealPoint CFsAlfScrollbarLayout::LayoutSize()
+ {
+ FUNC_LOG;
+ TAlfRealPoint layoutSize;
+
+ TBuf8<1> inBuf;
+ TPckg<TAlfRealPoint> outBuf( layoutSize );
+ TInt err = Comms()->DoSynchronousCmd(
+ EFsScrollbarLayoutGetScrollbarLayoutSizeCommand,
+ inBuf,
+ outBuf );
+
+ __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
+
+ return layoutSize;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Send a command to server.
+// ---------------------------------------------------------------------------
+//
+void CFsAlfScrollbarLayout::SendCommand(
+ TFsScrollbarCommand aCommandId,
+ TFsScrollbarSet& aInScrollbarSet )
+ {
+ FUNC_LOG;
+ TFsScrollbarSet dummySet;
+ SendCommand( aCommandId, aInScrollbarSet, dummySet );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Send a command to server.
+// ---------------------------------------------------------------------------
+//
+void CFsAlfScrollbarLayout::SendCommand(
+ TFsScrollbarCommand aCommandId,
+ TFsScrollbarSet& aInScrollbarSet,
+ TFsScrollbarSet& aOutScrollbarSet )
+ {
+ FUNC_LOG;
+ TPckgC<TFsScrollbarSet> inBuf( aInScrollbarSet );
+ TPckg<TFsScrollbarSet> outBuf( aOutScrollbarSet );
+ TInt err = Comms()->DoSynchronousCmd(
+ aCommandId,
+ inBuf,
+ outBuf );
+
+ __ASSERT_ALWAYS( err == KErrNone, User::Invariant() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Release custom image reserved memory.
+// ---------------------------------------------------------------------------
+//
+void CFsAlfScrollbarLayout::ReleaseCustomImage( TFsScrollbar aScrollbar )
+ {
+ FUNC_LOG;
+ TFsScrollbarSet scrollbarSet;
+ scrollbarSet.iScrollbar = aScrollbar;
+ SendCommand( EFsScrollbarLayoutSetScrollbarClearCustomImagesCommand,
+ scrollbarSet );
+ if ( EFsScrollbarVertical == aScrollbar )
+ {
+ delete iVBarBrush;
+ iVBarBrush = NULL;
+ delete iVThumbBrush;
+ iVThumbBrush = NULL;
+ }
+ else
+ {
+ delete iHBarBrush;
+ iHBarBrush = NULL;
+ delete iHThumbBrush;
+ iHThumbBrush = NULL;
+ }
+ }
+