diff -r 000000000000 -r 8466d47a6819 emailuis/emailui/src/FreestyleEmailUiPropertySubscriber.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailuis/emailui/src/FreestyleEmailUiPropertySubscriber.cpp Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,127 @@ +/* + * 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" + * 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: Used for observing property changes and notifying listeners. + * + */ + +// CLASS HEADER +#include "FreestyleEmailUiPropertySubscriber.h" + + +// CONSTRUCTION AND DESTRUCTION + +// ----------------------------------------------------------------------------- +// Private C++ constructor. +// ----------------------------------------------------------------------------- +// +CFreestyleEmailUiPropertySubscriber::CFreestyleEmailUiPropertySubscriber( + MFreestyleEmailUiPropertyChangedObserver& aObserver ) + : CActive( EPriorityStandard ), + iPropertyChangeObserver( aObserver ) + { + // No implementation required. + } + + +// ----------------------------------------------------------------------------- +// Two-phase constructor. +// ----------------------------------------------------------------------------- +// +CFreestyleEmailUiPropertySubscriber* CFreestyleEmailUiPropertySubscriber::NewLC( + const TUid aUid, + const TUint32 aKey, + MFreestyleEmailUiPropertyChangedObserver& aObserver ) + { + CFreestyleEmailUiPropertySubscriber* self = + new ( ELeave ) CFreestyleEmailUiPropertySubscriber( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL( aUid, aKey ); + return self; + } + + +// ----------------------------------------------------------------------------- +// Two-phase constructor. +// ----------------------------------------------------------------------------- +// +CFreestyleEmailUiPropertySubscriber* CFreestyleEmailUiPropertySubscriber::NewL( + const TUid aUid, + const TUint32 aKey, + MFreestyleEmailUiPropertyChangedObserver& aObserver ) + { + CFreestyleEmailUiPropertySubscriber* self = + CFreestyleEmailUiPropertySubscriber::NewLC( aUid, aKey, aObserver ); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// Second phase constructor. +// ----------------------------------------------------------------------------- +// +void CFreestyleEmailUiPropertySubscriber::ConstructL( const TUid aUid, + const TUint32 aKey ) + { + User::LeaveIfError( iProperty.Attach( aUid, aKey ) ); + CActiveScheduler::Add( this ); // Add to scheduler. + // The initial subscription and processing of the current property value. + RunL(); + } + + +// ----------------------------------------------------------------------------- +// Destructor. +// ----------------------------------------------------------------------------- +// +CFreestyleEmailUiPropertySubscriber::~CFreestyleEmailUiPropertySubscriber() + { + Cancel(); // Cancel any pending request. + iProperty.Close(); + } + + +// PRIVATE METHODS FROM CACTIVE + +// ----------------------------------------------------------------------------- +// Handles completion. +// ----------------------------------------------------------------------------- +// +void CFreestyleEmailUiPropertySubscriber::RunL() + { + // Resubscribe before processing a new value in order to prevent missing + // updates. + iProperty.Subscribe( iStatus ); + SetActive(); + + TInt intValue( 0 ); + + if ( iProperty.Get( intValue ) == KErrNone ) + { + iPropertyChangeObserver.PropertyChangedL( intValue ); + } + } + + +// ----------------------------------------------------------------------------- +// Cancels the pending requests. +// ----------------------------------------------------------------------------- +// +void CFreestyleEmailUiPropertySubscriber::DoCancel() + { + iProperty.Cancel(); + } + + +// End of file.