diff -r 000000000000 -r 8466d47a6819 meetingrequest/mrgui/mrfieldbuilderplugin/src/cesmrdatefield.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrgui/mrfieldbuilderplugin/src/cesmrdatefield.cpp Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,304 @@ +/* +* 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 date field impl. + * +*/ + +#include "emailtrace.h" +#include "cesmrdatefield.h" + +#include +#include +#include +#include +#include +#include +// +#include "esmrdef.h" +// + +#include "cesmrmeetingtimevalidator.h" +#include "cesmrglobalnote.h" +#include "esmrfieldbuilderdef.h" +#include "mesmrlistobserver.h" +#include "cesmrgenericfieldevent.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CESMRDateField::CESMRDateField +// --------------------------------------------------------------------------- +// +CESMRDateField::CESMRDateField( + MESMRFieldValidator* aValidator ) : + iValidator(aValidator) + { + FUNC_LOG; + //do nothing + } + +// --------------------------------------------------------------------------- +// CESMRDateField::~CESMRDateField +// --------------------------------------------------------------------------- +// +CESMRDateField::~CESMRDateField( ) + { + FUNC_LOG; + delete iFrameBgContext; + } + +// --------------------------------------------------------------------------- +// CESMRDateField::NewL +// --------------------------------------------------------------------------- +// +CESMRDateField* CESMRDateField::NewL( + MESMRFieldValidator* aValidator, + TESMREntryFieldId aId ) + { + FUNC_LOG; + CESMRDateField* self = new (ELeave) CESMRDateField( aValidator ); + CleanupStack::PushL ( self ); + self->ConstructL( aId ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CESMRDateField::ConstructL +// --------------------------------------------------------------------------- +// +void CESMRDateField::ConstructL( TESMREntryFieldId aId ) + { + FUNC_LOG; + SetFieldId ( aId ); + + TTime startTime; + startTime.UniversalTime ( ); + + iDate = new (ELeave) CEikDateEditor; + iDate->ConstructL( TTIME_MINIMUMDATE, TTIME_MAXIMUMDATE, startTime, EFalse ); + iDate->SetUpAndDownKeysConsumed ( EFalse ); + + TAknsItemID aIconID = (iFieldId == EESMRFieldStartDate) ? KAknsIIDQgnMeetReqIndiDateStart + : KAknsIIDQgnMeetReqIndiDateEnd; + + iBackground = AknsDrawUtils::ControlContext( this ); + CESMRIconField::ConstructL( aIconID, iDate ); // ownership transferred + + // Initialize validator + if ( iValidator ) + { + switch ( iFieldId ) + { + case EESMRFieldStartDate: + iValidator->SetStartDateFieldL( *iDate ); + break; + case EESMRFieldStopDate: + iValidator->SetEndDateFieldL( *iDate ); + break; + case EESMRFieldAlarmDate: + iValidator->SetAlarmDateFieldL( *iDate ); + break; + default: + break; + } + } + } + +// --------------------------------------------------------------------------- +// CESMRDateField::InitializeL +// --------------------------------------------------------------------------- +// +void CESMRDateField::InitializeL() + { + FUNC_LOG; + iDate->SetFont( iLayout->Font(iCoeEnv, iFieldId ) ); + iDate->SetMfneAlignment( CESMRLayoutManager::IsMirrored() + ? EAknEditorAlignRight : EAknEditorAlignLeft ); + + iDate->SetSkinTextColorL( iLayout->NormalTextColorID() ); + iDate->SetBorder( TGulBorder::ENone ); + } + +// --------------------------------------------------------------------------- +// CESMRDateField::OkToLoseFocusL +// --------------------------------------------------------------------------- +// +TBool CESMRDateField::OkToLoseFocusL( + TESMREntryFieldId /*aNextItem*/ ) + { + FUNC_LOG; + return TriggerValidatorL(); + } + +// --------------------------------------------------------------------------- +// CESMRDateField::OfferKeyEventL +// --------------------------------------------------------------------------- +// +TKeyResponse CESMRDateField::OfferKeyEventL(const TKeyEvent& aEvent, + TEventCode aType ) + { + FUNC_LOG; + TKeyResponse response( EKeyWasNotConsumed); + + if ( aType == EEventKey ) + { + TInt fieldIndex( iDate->CurrentField() ); + + // flowthrough, these events shouldn't be consumed + if ( aEvent.iScanCode != EStdKeyUpArrow && + aEvent.iScanCode != EStdKeyDownArrow ) + { + response = iDate->OfferKeyEventL( aEvent, aType ); + } + } + + return response; + } + +// --------------------------------------------------------------------------- +// CESMRDateField::PositionChanged() +// --------------------------------------------------------------------------- +// +void CESMRDateField::PositionChanged() + { + FUNC_LOG; + CCoeControl::PositionChanged(); + if( iFrameBgContext ) + { + iFrameBgContext->SetFrameRects( iDate->Rect(), iDate->Rect() ); + } + } + +// --------------------------------------------------------------------------- +// CESMRDateField::ActivateL +// --------------------------------------------------------------------------- +// +void CESMRDateField::ActivateL() + { + FUNC_LOG; + CCoeControl::ActivateL(); + TRect rect(TPoint(iDate->Position()), iDate->Size()); + TRect inner(rect); + TRect outer(rect); + + iDate->SetSize(iLayout->FieldSize( FieldId() )); + + delete iFrameBgContext; + iFrameBgContext = NULL; + iFrameBgContext = CAknsFrameBackgroundControlContext::NewL(KAknsIIDQsnFrInput, outer, inner, EFalse ) ; + + iFrameBgContext->SetParentContext( iBackground ); + iDate->SetSkinBackgroundControlContextL(iFrameBgContext); + } + +// --------------------------------------------------------------------------- +// CESMRDateField::CheckIfValidatingNeededL +// --------------------------------------------------------------------------- +// +void CESMRDateField::CheckIfValidatingNeededL( + TInt aStartFieldIndex ) + { + FUNC_LOG; + TInt fieldIndex( iDate->CurrentField() ); + + if ( fieldIndex != aStartFieldIndex ) + { + TriggerValidatorL(); + } + } + +// --------------------------------------------------------------------------- +// CESMRDateField::TriggerValidatorL +// --------------------------------------------------------------------------- +// +TBool CESMRDateField::TriggerValidatorL() + { + FUNC_LOG; + TInt err( KErrNone ); + + if (iValidator ) + { + switch ( iFieldId ) + { + case EESMRFieldStartDate: + TRAP( err, iValidator->StartDateChandedL() ); + break; + case EESMRFieldStopDate: + TRAP(err, iValidator->EndDateChangedL() ); + break; + case EESMRFieldAlarmDate: + TRAP(err, iValidator->AlarmDateChangedL() ); + break; + default: + break; + } + } + + + if ( KErrNone != err ) + { + switch ( iFieldId ) + { + case EESMRFieldStartDate: + { + CESMRGlobalNote::ExecuteL( + CESMRGlobalNote::EESMRRepeatReSchedule ); + } + break; + case EESMRFieldStopDate: + { + if ( err == KErrArgument ) + { + CESMRGlobalNote::ExecuteL( + CESMRGlobalNote::EESMREndsBeforeStarts ); + } + else if ( err == KErrOverflow ) + { + CESMRGlobalNote::ExecuteL( + CESMRGlobalNote::EESMRRepeatReSchedule ); + } + } + break; + + case EESMRFieldAlarmDate: + { + CESMRGlobalNote::ExecuteL( + CESMRGlobalNote::EESMRCalenLaterDate ); + } + break; + + default: + break; + } + } + + return ( KErrNone == err ); + } + +// --------------------------------------------------------------------------- +// CESMRDateField::SetOutlineFocusL +// --------------------------------------------------------------------------- +// +void CESMRDateField::SetOutlineFocusL( TBool aFocus ) + { + FUNC_LOG; + CESMRField::SetOutlineFocusL ( aFocus ); + if ( aFocus ) + { + ChangeMiddleSoftKeyL(EESMRCmdSaveMR,R_QTN_MSK_SAVE); + } + } + +// EOF