--- a/meetingrequest/mrgui/src/cesmrlistcomponent.cpp Mon Mar 15 12:39:10 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,610 +0,0 @@
-/*
-* Copyright (c) 2007-2009 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: ESMR policy implementation
-*
-*/
-
-#include "emailtrace.h"
-#include <caltime.h>
-#include <calentry.h>
-#include <layoutmetadata.cdl.h>
-#include <e32math.h>
-#include <aknphysics.h>
-
-#include "cesmrlistcomponent.h"
-#include "cesmrlayoutmgr.h"
-#include "nmrlayoutmanager.h"
-#include "mesmrfieldstorage.h"
-#include "mesmrcalentry.h"
-#include "cesmrfield.h"
-#include "cmrlistpane.h"
-// <cmail> Removed profiling. </cmail>
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::NewL()
-// ---------------------------------------------------------------------------
-//
-CESMRListComponent* CESMRListComponent::NewL( const CCoeControl* aParent,
- MESMRFieldStorage* aStorage,
- CESMRLayoutManager* aLayout )
- {
- FUNC_LOG;
- CESMRListComponent* self = new (ELeave) CESMRListComponent( aStorage,
- aLayout );
- CleanupStack::PushL( self );
- self->ConstructL( aParent );
- CleanupStack::Pop( self );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::CESMRListComponent()
-// ---------------------------------------------------------------------------
-//
-CESMRListComponent::CESMRListComponent( MESMRFieldStorage* aFactory,
- CESMRLayoutManager* aLayout ) :
- iFactory( aFactory ),
- iLayout( aLayout )
- {
- FUNC_LOG;
- // Do nothing
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::~CESMRListComponent
-// ---------------------------------------------------------------------------
-//
-CESMRListComponent::~CESMRListComponent()
- {
- FUNC_LOG;
- delete iFactory;
- delete iScroll;
- delete iContainer;
-
- delete iPhysics;
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::ConstructL()
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::ConstructL( const CCoeControl* aParent )
- {
- FUNC_LOG;
- CreateWindowL( aParent );
-
- iScroll = new (ELeave) CAknDoubleSpanScrollBar( this );
- iScroll->ConstructL( EFalse, this, this, CEikScrollBar::EVertical, 0 );
- iScroll->SetModel( &iScrollModel );
- iScroll->MakeVisible( ETrue );
-
- const TInt count(iFactory->Count());
- for ( TInt i = 0; i < count; i++ )
- {
- CESMRField* field = iFactory->Field(i);
-
- field->SetListObserver( this );
- field->SetLayoutManager( iLayout );
- }
-
- iContainer = CMRListPane::NewL( *this, *iFactory, iScrollModel );
- iPrevThumbPos = iScroll->ThumbPosition();
-
- if ( CAknPhysics::FeatureEnabled() )
- {
- iPhysics = CAknPhysics::NewL( *this, iContainer );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::InternalizeL()
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::InitializeL()
- {
- FUNC_LOG;
- const TInt count(iFactory->Count());
- for ( TInt i = 0; i < count; i++ )
- {
- iFactory->Field(i)->InitializeL();
- }
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::InternalizeL()
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::InternalizeL( MESMRCalEntry& aEntry )
- {
- FUNC_LOG;
- iFactory->InternalizeL( aEntry );
- // This is called to make sure everything is drawn correctly
- DrawDeferred();
- }
-
-void CESMRListComponent::DisableSizeChange(TBool aDisable )
- {
- FUNC_LOG;
- iDisableSizeChanged = aDisable;
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::ExternalizeL()
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::ExternalizeL(
- MESMRCalEntry& aEntry,
- TBool aForceValidation )
- {
- FUNC_LOG;
- CESMRField* currentFocus = FocusedItem();
- ASSERT( currentFocus );
- TESMREntryFieldId id = currentFocus->FieldId();
-
- if ( aForceValidation )
- {
- // force validate the values:
- TInt err = iFactory->Validate( id, aForceValidation );
- // fill the calendar entry with data in fields.
- iFactory->ExternalizeL( aEntry );
- }
- else
- {
- TInt err = iFactory->Validate( id );
- if ( err )
- {
- SetControlFocusedL( id );
- User::Leave( err );
- }
- else
- {
- // fill the calendar entry with data in fields.
- iFactory->ExternalizeL( aEntry );
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::CountComponentControls()
-// ---------------------------------------------------------------------------
-//
-TInt CESMRListComponent::CountComponentControls() const
- {
- FUNC_LOG;
- return 2;
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::HandleFontChange()
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::HandleFontChange()
- {
- FUNC_LOG;
- // Disable SizeChanged handling until all fonts are updated
- iDisableSizeChanged = ETrue;
- const TInt count(iFactory->Count());
- for ( TInt i = 0; i < count; i++ )
- {
- // Updates Font depending on the type of a field
- TRAP_IGNORE( iFactory->Field(i)->FontChangedL() );
- }
- // Enable and call SizeChanged
- iDisableSizeChanged = EFalse;
- SizeChanged();
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::ComponentControl()
-// ---------------------------------------------------------------------------
-//
-CCoeControl* CESMRListComponent::ComponentControl( TInt aInd ) const
- {
- FUNC_LOG;
- CCoeControl* control = NULL;
- switch ( aInd )
- {
- case 0:
- control = iContainer;
- break;
- case 1:
- control = iScroll;
- break;
- default:
- break;
- }
- return control;
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::SizeChanged
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::SizeChanged()
- {
- FUNC_LOG;
- if ( iDisableSizeChanged || Rect() == TRect( 0, 0, 0, 0 ) )
- {
- return;
- }
-
- TRect containerRect( Rect() );
-
- TAknLayoutRect listareaLayoutRect =
- NMRLayoutManager::GetLayoutRect( containerRect, NMRLayoutManager::EMRLayoutListArea );
- TRect listareaRect( listareaLayoutRect.Rect() );
- iContainer->SetRect( listareaRect );
-
- TAknWindowComponentLayout scrollLayout =
- NMRLayoutManager::GetWindowComponentLayout( NMRLayoutManager::EMRLayoutScrollBar );
- AknLayoutUtils::LayoutControl( iScroll, containerRect, scrollLayout );
-
- ScrollItemVisible( KErrNotFound ); // Update scroll position
-
- // physics needs to be initialized before screensaver gets activated
- TRAP_IGNORE( UpdatePhysicsL() );
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::OfferKeyEventL
-// ---------------------------------------------------------------------------
-//
-TKeyResponse CESMRListComponent::OfferKeyEventL(
- const TKeyEvent &aEvent,
- TEventCode aType )
- {
- FUNC_LOG;
- TKeyResponse response = iContainer->OfferKeyEventL( aEvent, aType );
-
- if ( EKeyWasConsumed == response )
- {
- iScroll->SetModel( &iScrollModel );
- }
-
- TInt thumbPos = iScroll->ThumbPosition();
- iPrevThumbPos = thumbPos;
-
- if( iPhysics )
- {
- iPhysics->StopPhysics();
- iPhysics->ResetFriction();
- }
-
- return response;
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::HandleScrollEventL
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::HandleScrollEventL(
- CEikScrollBar* aScrollBar,
- TEikScrollEvent /*aEventType*/ )
- {
- FUNC_LOG;
- if ( aScrollBar == iScroll )
- {
- TInt thumbPos = aScrollBar->ThumbPosition();
- TInt delta = thumbPos - iPrevThumbPos;
- if ( delta != 0 )
- {
- iPrevThumbPos = thumbPos;
- iContainer->ScrollView( delta );
- }
- }
- if( iPhysics )
- {
- iPhysics->StopPhysics();
- iPhysics->ResetFriction();
- }
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::UpdatePhysicsL
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::UpdatePhysicsL()
- {
- FUNC_LOG;
- if ( iPhysics )
- {
- const TSize viewSize( Size() );
- TInt wSize = iScrollModel.ScrollSpan();
- const TSize worldSize( viewSize.iWidth, wSize );
-
-
- iPhysics->StopPhysics();
- iPhysics->ResetFriction();
- iPhysics->InitPhysicsL( worldSize, viewSize, EFalse );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::ViewPositionChanged
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::ViewPositionChanged(
- const TPoint& aNewPosition,
- TBool /*aDrawNow*/,
- TUint /*aFlags*/ )
- {
- // Sometimes ViewPositionChanged events come after view is already changed,
- // so adding a safety check here
- if( IsVisible() )
- {
- TPoint centerPos = iContainer->GetViewCenterPosition();
- TInt scrollOffset = aNewPosition.iY - centerPos.iY;
-
- iContainer->ScrollView( scrollOffset );
- iPrevThumbPos = iScroll->ThumbPosition();
- // updates scrollbar thumb position and does redrawing
- iScroll->SetModel( &iScrollModel );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::PhysicEmulationEnded
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::PhysicEmulationEnded()
- {
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::ViewPosition
-// ---------------------------------------------------------------------------
-//
-TPoint CESMRListComponent::ViewPosition() const
- {
- TPoint viewPos = iContainer->GetViewCenterPosition();
- return viewPos;
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::ScrollItemVisible()
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::ScrollItemVisible( TInt aInd/*, TBool*/ /*aSizeChanged*/ )
- {
- FUNC_LOG;
- iContainer->ScrollItemVisible( aInd );
- UpdateScrollBar();
- DrawDeferred();
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::UpdateScrollBar()
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::UpdateScrollBar()
- {
- FUNC_LOG;
- iContainer->UpdateFocusPosition();
- iScroll->SetModel( &iScrollModel );
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::ListObserver
-// ---------------------------------------------------------------------------
-//
-MESMRListObserver& CESMRListComponent::ListObserver()
- {
- FUNC_LOG;
- return *this;
- }
-
-CESMRField* CESMRListComponent::FocusedItem() const
- {
- FUNC_LOG;
- return iContainer->FocusedItem();
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::IsControlVisible()
-// ---------------------------------------------------------------------------
-//
-TBool CESMRListComponent::IsControlVisible( TESMREntryFieldId aField )
- {
- FUNC_LOG;
- TBool ret( EFalse );
-
- CESMRField* field = iFactory->FieldById( aField );
- if ( field && field->IsVisible() )
- {
- ret = ETrue;
- }
-
- return ret;
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::ControlSizeChanged()
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::ControlSizeChanged( CESMRField* aField )
- {
- FUNC_LOG;
- /* Called whenever one of the controls size changed
- * E.G. when a eik edwin expands */
- iContainer->ControlSizeChanged( aField );
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::InsertControl()
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::InsertControl( TESMREntryFieldId aField )
- {
- FUNC_LOG;
- iContainer->InsertControl( aField );
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::RemoveControl()
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::RemoveControl( TESMREntryFieldId aField )
- {
- FUNC_LOG;
- iContainer->RemoveControl( aField );
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::SetControlFocused()
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::SetControlFocusedL( TESMREntryFieldId aField )
- {
- FUNC_LOG;
- iContainer->SetControlFocusedL( aField );
- UpdateScrollBar();
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::MoveListAreaDownL
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::MoveListAreaDownL( TInt aAmount )
- {
- FUNC_LOG;
- iContainer->MoveListAreaDownL( aAmount );
-
- // Do the view scrolling if needed:
- if ( aAmount )
- {
- UpdateScrollBar();
- DrawDeferred();
- }
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::MoveListAreaUpL
-// ---------------------------------------------------------------------------
-//
-void CESMRListComponent::MoveListAreaUpL( TInt aAmount )
- {
- FUNC_LOG;
- iContainer->MoveListAreaUpL( aAmount );
-
- // do the scrolling if needed:
- if ( aAmount > 0 )
- {
- UpdateScrollBar();
- DrawDeferred();
- }
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::ListHeight()
-// ---------------------------------------------------------------------------
-//
-TInt CESMRListComponent::ListHeight()
- {
- FUNC_LOG;
- return iContainer->Size().iHeight;
- }
-
-// ---------------------------------------------------------------------------
-// CESMRListComponent::IsFieldBottomVisible()
-// ---------------------------------------------------------------------------
-//
- TBool CESMRListComponent::IsFieldBottomVisible()
- {
- FUNC_LOG;
- return iContainer->IsFieldBottomVisible();
- }
-
- // -----------------------------------------------------------------------------
- // CESMRListComponent::HandlePointerEventL
- // -----------------------------------------------------------------------------
- //
- void CESMRListComponent::HandlePointerEventL( const TPointerEvent& aPointerEvent )
- {
- FUNC_LOG;
-
-
- CCoeControl::HandlePointerEventL(aPointerEvent);
- TPoint position = aPointerEvent.iPosition;
-
- switch ( aPointerEvent.iType )
- {
- case TPointerEvent::EButton1Down:
- iPreviousPosition = iOriginalPosition = aPointerEvent.iPosition;
-
- iIsScrolling = iScroll->Rect().Contains(aPointerEvent.iPosition );
- iCurrentScrollSpan = iScrollModel.ScrollSpan();
-
-
- iIsDragging = EFalse;
- if( iPhysics )
- {
- iStartTime.HomeTime();
- UpdatePhysicsL();
- }
- break;
-
- case TPointerEvent::EDrag:
- if (!iIsScrolling)
- {
- // if when dragging scrollbar pointer touches container rectangle,
- // do not activate physics!
- iIsDragging = ETrue;
-
- if( iPhysics )
- {
- TPoint delta( 0, iPreviousPosition.iY - position.iY );
- iPhysics->RegisterPanningPosition( delta );
- }
- }
- // Save current position as previous pos for future calculations
- iPreviousPosition = position;
- break;
-
- case TPointerEvent::EButton1Up:
- if( iIsDragging && iPhysics )
- {
- TPoint drag(iOriginalPosition - aPointerEvent.iPosition);
- iPhysics->StartPhysics(drag, iStartTime);
- }
-
- // some fields may change their size due to as result of click, update model if needed
- if (iCurrentScrollSpan != iScrollModel.ScrollSpan())
- {
- iScroll->SetModel( &iScrollModel );
- }
- break;
- }
- }
-
-
- // -----------------------------------------------------------------------------
- // CESMRListComponent::MakeVisible
- // -----------------------------------------------------------------------------
- //
-void CESMRListComponent::MakeVisible( TBool aIsVisible )
- {
- if(!aIsVisible && IsVisible() )
- {
- // hiding the control, stop physics for performance gain
- if( iPhysics )
- {
- iPhysics->StopPhysics();
- iPhysics->ResetFriction();
- }
- }
- }
-// End of file
-