diff -r 000000000000 -r 8466d47a6819 meetingrequest/mrgui/mrfieldevent/src/cesmrgenericfieldevent.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrgui/mrfieldevent/src/cesmrgenericfieldevent.cpp Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,385 @@ +/* +* 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: Implementation of the class CESMRGenericFieldEvent +* +*/ + +#include "emailtrace.h" +#include "cesmrgenericfieldevent.h" + +namespace { // codescanner::namespace + +#ifdef _DEBUG + +enum TPanic + { + EInvalidCast, + }; + +_LIT( KPanicCategory, "CESMRFieldEventValue"); + +#endif + +} + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CESMRGenericFieldEvent::CESMRGenericFieldEvent +// --------------------------------------------------------------------------- +// +CESMRGenericFieldEvent::CESMRGenericFieldEvent( + MESMRFieldEventNotifier* aSource, + MESMRFieldEvent::TEventType aType ) + : iType( aType ), + iSource( aSource ) + { + FUNC_LOG; + // Do nothing + } + +// --------------------------------------------------------------------------- +// CESMRGenericFieldEvent::NewL +// --------------------------------------------------------------------------- +// +EXPORT_C CESMRGenericFieldEvent* + CESMRGenericFieldEvent::NewL( MESMRFieldEventNotifier* aSource, + MESMRFieldEvent::TEventType aType ) + { + FUNC_LOG; + CESMRGenericFieldEvent* self = CESMRGenericFieldEvent::NewLC( aSource, + aType ); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// CESMRGenericFieldEvent::NewLC +// --------------------------------------------------------------------------- +// +EXPORT_C CESMRGenericFieldEvent* + CESMRGenericFieldEvent::NewLC( MESMRFieldEventNotifier* aSource, + MESMRFieldEvent::TEventType aType ) + { + FUNC_LOG; + CESMRGenericFieldEvent* self = + new( ELeave ) CESMRGenericFieldEvent( aSource, aType ); + CleanupStack::PushL( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// CESMRGenericFieldEvent::~CESMRGenericFieldEvent +// --------------------------------------------------------------------------- +// +CESMRGenericFieldEvent::~CESMRGenericFieldEvent() + { + FUNC_LOG; + iParams.ResetAndDestroy(); + } + + +// --------------------------------------------------------------------------- +// CESMRGenericFieldEvent::AddParamL +// --------------------------------------------------------------------------- +// +EXPORT_C void CESMRGenericFieldEvent::AddParamL( + CESMRFieldEventValue* aValue, + TBool aEncapsulate) + { + FUNC_LOG; + MESMRFieldEventValue* value = aValue; + if ( aEncapsulate ) + { + // Reserve space so next append will succeed + iParams.ReserveL( iParams.Count() + 1 ); + value = CESMRFieldEventValue::NewL( // codescanner::forgottoputptroncleanupstack + CESMRFieldEventValue::EESMRFieldEventValue, + value ); + } + iParams.AppendL( value ); + } + +// --------------------------------------------------------------------------- +// From class MESMRFieldEvent. +// CESMRGenericFieldEvent::Type +// --------------------------------------------------------------------------- +// +MESMRFieldEvent::TEventType CESMRGenericFieldEvent::Type() const + { + FUNC_LOG; + return iType; + } + +// --------------------------------------------------------------------------- +// From class MESMRFieldEvent. +// CESMRGenericFieldEvent::Source +// --------------------------------------------------------------------------- +// +MESMRFieldEventNotifier* CESMRGenericFieldEvent::Source() const + { + FUNC_LOG; + return iSource; + } + +// --------------------------------------------------------------------------- +// From class MESMRFieldEvent. +// CESMRGenericFieldEvent::ParamCount +// --------------------------------------------------------------------------- +// +TInt CESMRGenericFieldEvent::ParamCount() const + { + FUNC_LOG; + return iParams.Count(); + } + +// --------------------------------------------------------------------------- +// From class MESMRFieldEvent. +// CESMRGenericFieldEvent::Param +// --------------------------------------------------------------------------- +// +TAny* CESMRGenericFieldEvent::Param( TInt aIndex ) const + { + FUNC_LOG; + return iParams[ aIndex ]->Value(); // codescanner::accessArrayElementWithoutCheck2 + } + +// Class CESMRFieldEventValue + +// --------------------------------------------------------------------------- +// CESMRFieldEventValue::CESMRFieldEventValue +// --------------------------------------------------------------------------- +// +CESMRFieldEventValue::CESMRFieldEventValue( + MESMRFieldEventValue::TValueType aType ) + : iType( aType ) + { + FUNC_LOG; + // Do nothing + } + +// --------------------------------------------------------------------------- +// CESMRFieldEventValue::ConstructL +// --------------------------------------------------------------------------- +// +void CESMRFieldEventValue::ConstructL( TAny* aValue ) + { + FUNC_LOG; + switch ( iType ) + { + case EESMRTTime: + { + // Copy value + TTime* time = static_cast< TTime* >( aValue ); + iValue = new( ELeave ) TTime( *time ); + break; + } + case EESMRInteger: + { + TInt* value = static_cast< TInt* >( aValue ); + iValue = new( ELeave ) TInt( *value ); + break; + } + default: + { + iValue = aValue; + break; + } + } + } + +// --------------------------------------------------------------------------- +// CESMRFieldEventValue::NewL +// --------------------------------------------------------------------------- +// +EXPORT_C CESMRFieldEventValue* CESMRFieldEventValue::NewL( + MESMRFieldEventValue::TValueType aType, + TAny* aValue ) + { + FUNC_LOG; + CESMRFieldEventValue* self = CESMRFieldEventValue::NewLC( aType, aValue ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CESMRFieldEventValue::NewLC +// --------------------------------------------------------------------------- +// +EXPORT_C CESMRFieldEventValue* CESMRFieldEventValue::NewLC( + MESMRFieldEventValue::TValueType aType, + TAny* aValue ) + { + FUNC_LOG; + CESMRFieldEventValue* self = new( ELeave ) CESMRFieldEventValue( aType ); + CleanupStack::PushL( self ); + self->ConstructL( aValue ); + return self; + } + +// --------------------------------------------------------------------------- +// CESMRFieldEventValue::~CESMRFieldEventValue +// --------------------------------------------------------------------------- +// + +CESMRFieldEventValue::~CESMRFieldEventValue() + { + FUNC_LOG; + // Delete owned values + switch ( iType ) + { + case EESMRString: + { + TDesC* value = static_cast< TDesC* >( iValue ); + delete value; + break; + } + case EESMRString8: + { + TDesC8* value = static_cast< TDesC8* >( iValue ); + delete value; + break; + } + case EESMRFieldEventValue: + case EESMRCBase: + { + CBase* value = static_cast< CBase* >( iValue ); + delete value; + break; + } + case EESMRTTime: + { + TTime* time = static_cast< TTime* >( iValue ); + delete time; + break; + } + case EESMRInteger: + { + TInt* value = static_cast< TInt* >( iValue ); + delete value; + break; + } + default: + { + break; + } + } + } + +// --------------------------------------------------------------------------- +// CESMRFieldEventValue::Type +// --------------------------------------------------------------------------- +// +MESMRFieldEventValue::TValueType CESMRFieldEventValue::Type() const + { + FUNC_LOG; + return iType; + } + +// --------------------------------------------------------------------------- +// CESMRFieldEventValue::Value +// --------------------------------------------------------------------------- +// + +TAny* CESMRFieldEventValue::Value() const + { + FUNC_LOG; + return iValue; + } + +// --------------------------------------------------------------------------- +// CESMRFieldEventValue::IntValue +// --------------------------------------------------------------------------- +// +TInt CESMRFieldEventValue::IntValue() const + { + FUNC_LOG; + __ASSERT_DEBUG( iType == EESMRInteger, + User::Panic( KPanicCategory, EInvalidCast ) ); + TInt* value = static_cast< TInt* >( iValue ); + return *value; + } + +// --------------------------------------------------------------------------- +// CESMRFieldEventValue::StringValue +// --------------------------------------------------------------------------- +// +const TDesC& CESMRFieldEventValue::StringValue() const + { + FUNC_LOG; + __ASSERT_DEBUG( ( iType == EESMRString + || iType == EESMRStringRef ), + User::Panic( KPanicCategory, EInvalidCast ) ); + TDesC* string = static_cast< TDesC* >( iValue ); + return *string; + } + +// --------------------------------------------------------------------------- +// CESMRFieldEventValue::String8Value +// --------------------------------------------------------------------------- +// +const TDesC8& CESMRFieldEventValue::String8Value() const + { + FUNC_LOG; + __ASSERT_DEBUG( ( iType == EESMRString8 + || iType == EESMRString8Ref ), + User::Panic( KPanicCategory, EInvalidCast ) ); + TDesC8* string = static_cast< TDesC8* >( iValue ); + return *string; + } + +// --------------------------------------------------------------------------- +// CESMRFieldEventValue::FieldValue +// --------------------------------------------------------------------------- +// +const CESMRField& CESMRFieldEventValue::FieldValue() const + { + FUNC_LOG; + __ASSERT_DEBUG( iType == EESMRFieldRef, + User::Panic( KPanicCategory, EInvalidCast ) ); + CESMRField* field = static_cast< CESMRField* >( iValue ); + return *field; + } + +// --------------------------------------------------------------------------- +// CESMRFieldEventValue::CBaseValue +// --------------------------------------------------------------------------- +// +const CBase* CESMRFieldEventValue::CBaseValue() const + { + FUNC_LOG; + __ASSERT_DEBUG( ( iType == EESMRCBase + || iType == EESMRCBaseRef + || iType == EESMRFieldEventValue + || iType == EESMRFieldRef ), + User::Panic( KPanicCategory, EInvalidCast ) ); + CBase* base = static_cast< CBase* >( iValue ); + return base; + } + +// --------------------------------------------------------------------------- +// CESMRFieldEventValue::TimeValue +// --------------------------------------------------------------------------- +// +TTime CESMRFieldEventValue::TimeValue() const + { + FUNC_LOG; + __ASSERT_DEBUG( iType == EESMRTTime, + User::Panic( KPanicCategory, EInvalidCast ) ); + TTime* time = static_cast< TTime* >( iValue ); + return *time; + } +