diff -r a3a1ae9acec6 -r da5135c61bad meetingrequest/mrgui/src/cesmrannivtimevalidator.cpp --- a/meetingrequest/mrgui/src/cesmrannivtimevalidator.cpp Mon Mar 15 12:39:10 2010 +0200 +++ b/meetingrequest/mrgui/src/cesmrannivtimevalidator.cpp Wed Mar 31 21:08:33 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 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" @@ -147,7 +147,11 @@ inline CESMRAnnivTimeValidator::CESMRAnnivTimeValidator() : iCurrentAnnivDate( Time::NullTTime() ), iCurrentAlarmTime( Time::NullTTime() ), - iAlarmOnOff( EFalse ) + iAlarmOnOff( EFalse ), + iInitialAlarmTime( Time::NullTTime() ), + iInitialAlarmOnOff( EFalse ), + iInitialStartDate( Time::NullTTime() ) + { } @@ -237,7 +241,7 @@ TCalTime startTime = entry.StartTimeL(); iCurrentAnnivDate = startTime.TimeLocalL(); SetDateToEditor( *iStartDate, iCurrentAnnivDate ); - + iInitialStartDate = iStartDate->Date(); CCalAlarm* alarm = entry.AlarmL(); CleanupStack::PushL( alarm ); @@ -246,9 +250,13 @@ { iCurrentAlarmTime = iCurrentAnnivDate - alarm->TimeOffset(); iAlarmOnOff = ETrue; + iInitialAlarmOnOff = iAlarmOnOff; SetTimeToEditor( *iAlarmTime, iCurrentAlarmTime ); SetDateToEditor( *iAlarmDate, iCurrentAlarmTime ); + + iInitialAlarmTime = iAlarmTime->Time(); + iInitialAlarmDate = iAlarmDate->Date(); } CleanupStack::PopAndDestroy( alarm ); @@ -268,66 +276,75 @@ { PreValidateEditorContent(); CCalEntry& entry( aEntry.Entry() ); - - TTime annivEdirotTime = StartTimeL(); - - TCalTime annivTime; - - // The default mode for anniversary is EFloating, - // But some 3rd party application might have saved a different type - // for one reason or another. In that case we are using - // the existing value. - if ( aEntry.IsStoredL() ) + TDateTime annivEditorTime = StartTimeL(); + + // If entry has been modified, we will write new values to entry. + // Otherwise entry will not be modified and thus saved + // (ex. new entry and press only Done ) + if( IsModifiedL( aEntry ) ) { - TCalTime::TTimeMode timeMode = - aEntry.Entry().StartTimeL().TimeMode(); - - switch ( timeMode ) + TCalTime annivTime; + + // The default mode for anniversary is EFloating, + // But some 3rd party application might have saved a different type + // for one reason or another. In that case we are using + // the existing value. + if ( aEntry.IsStoredL() ) { - case TCalTime::EFixedUtc: - { - annivTime.SetTimeUtcL( annivEdirotTime ); - break; - } - case TCalTime::EFixedTimeZone: - { - annivTime.SetTimeLocalL( annivEdirotTime ); - break; - } - case TCalTime::EFloating: - default: - { - annivTime.SetTimeLocalFloatingL( annivEdirotTime ); - } + TCalTime::TTimeMode timeMode = + aEntry.Entry().StartTimeL().TimeMode(); + + switch ( timeMode ) + { + case TCalTime::EFixedUtc: + { + annivTime.SetTimeUtcL( annivEditorTime ); + break; + } + case TCalTime::EFixedTimeZone: + { + annivTime.SetTimeLocalL( annivEditorTime ); + break; + } + case TCalTime::EFloating: + default: + { + annivTime.SetTimeLocalFloatingL( annivEditorTime ); + } + } } - } - else - { - annivTime.SetTimeLocalFloatingL( annivEdirotTime ); - } + else + { + annivTime.SetTimeLocalFloatingL( annivEditorTime ); + } + + entry.SetStartAndEndTimeL( annivTime, annivTime ); - entry.SetStartAndEndTimeL( annivTime, annivTime ); - if ( iAlarmOnOff ) - { - TTimeIntervalMinutes diff; - TTime alarm = AlarmTimeL(); - annivEdirotTime.MinutesFrom( alarm, diff ); - - CCalAlarm* alarmObject = entry.AlarmL(); - if ( !alarmObject ) + // Setting alarm only if entry needs to be saved + if ( iAlarmOnOff ) { - alarmObject = CCalAlarm::NewL(); + TTimeIntervalMinutes diff; + + TTime alarm = AlarmTimeL(); + TTime editorTime = annivEditorTime; + editorTime.MinutesFrom( alarm, diff ); + + CCalAlarm* alarmObject = entry.AlarmL(); + if ( !alarmObject ) + { + alarmObject = CCalAlarm::NewL(); + } + CleanupStack::PushL( alarmObject ); + alarmObject->SetTimeOffset( diff ); + entry.SetAlarmL( alarmObject ); + CleanupStack::PopAndDestroy( alarmObject ); + alarmObject = NULL; } - CleanupStack::PushL( alarmObject ); - alarmObject->SetTimeOffset( diff ); - entry.SetAlarmL( alarmObject ); - CleanupStack::PopAndDestroy( alarmObject ); - alarmObject = NULL; - } - else - { - entry.SetAlarmL( NULL ); + else + { + entry.SetAlarmL( NULL ); + } } } } @@ -363,6 +380,11 @@ { FUNC_LOG; iStartDate = &aStartDate; + + if ( Time::NullTTime() != iCurrentAnnivDate ) + { + SetDateToEditor( *iStartDate, iCurrentAnnivDate ); + } } // --------------------------------------------------------------------------- @@ -385,6 +407,11 @@ { FUNC_LOG; iAlarmTime = &aAlarmTime; + + if ( iAlarmOnOff ) + { + SetTimeToEditor( *iAlarmTime, iCurrentAlarmTime ); + } } // --------------------------------------------------------------------------- @@ -396,6 +423,11 @@ { FUNC_LOG; iAlarmDate = &aAlarmDate; + + if ( iAlarmOnOff ) + { + SetDateToEditor( *iAlarmDate, iCurrentAlarmTime ); + } } // --------------------------------------------------------------------------- @@ -410,6 +442,17 @@ } // --------------------------------------------------------------------------- +// CESMRAnnivTimeValidator::SetAbsoluteAlarmOnOffFieldL +// --------------------------------------------------------------------------- +// +void CESMRAnnivTimeValidator::SetAbsoluteAlarmOnOffFieldL( + MMRAbsoluteAlarmController& /*aAbsoluteAlarmController*/ ) + { + FUNC_LOG; + // No implementation for anniversary + } + +// --------------------------------------------------------------------------- // CESMRAnnivTimeValidator::StartTimeChangedL // --------------------------------------------------------------------------- // @@ -620,12 +663,12 @@ iStartDate->PrepareForFocusLossL(); } - if ( iAlarmTime && iAlarmTime->IsVisible() ) + if ( iAlarmOnOff && iAlarmTime && iAlarmTime->IsVisible() ) { iAlarmTime->PrepareForFocusLossL(); } - if ( iAlarmDate && iAlarmDate->IsVisible() ) + if ( iAlarmOnOff && iAlarmDate && iAlarmDate->IsVisible() ) { iAlarmDate->PrepareForFocusLossL(); } @@ -731,5 +774,36 @@ } } +// --------------------------------------------------------------------------- +// CESMRAnnivTimeValidator::IsModifiedL +// --------------------------------------------------------------------------- +// +TBool CESMRAnnivTimeValidator::IsModifiedL( MESMRCalEntry& aEntry ) + { + // Checks if any of the editor fields have changed from the original / + // initial values + TBool isEdited( EFalse ); + + TBool isSame = aEntry.Entry().CompareL( aEntry.OriginalEntry() ); + + if( !isSame || + iInitialAlarmOnOff != iAlarmOnOff || + iStartDate->Date() != iInitialStartDate ) + { + isEdited = ETrue; + } + + // If alarm is on, we will check alarm time and date also for changes + if( iAlarmOnOff ) + { + if( iAlarmTime->Time() != iInitialAlarmTime || + iAlarmDate->Date() != iInitialAlarmDate ) + { + isEdited = ETrue; + } + } + + return isEdited; + } + // EOF -