diff -r 000000000000 -r 094583676ce7 wvuing/IMPSConnectionUI/NotifySrc/CIMPSConnUiConnectionSettingsNotifierImp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/IMPSConnectionUI/NotifySrc/CIMPSConnUiConnectionSettingsNotifierImp.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,284 @@ +/* +* Copyright (c) 2004 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: Connection settings notifier implementation. +* +*/ + +// INCLUDE FILES +#include +#include +#include +#include "CIMPSConnUiConnectionSettingsNotifierImp.h" + +#include "CnUiPanics.h" + +// ================= MEMBER FUNCTIONS ======================= + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionSettingsNotifierImp::NewL() +// ----------------------------------------------------------------------------- +// +CIMPSConnUiConnectionSettingsNotifierImp* CIMPSConnUiConnectionSettingsNotifierImp::NewL( + CIMPSConnUiConnectionSettingsNotifier& aInterface, + TIMPSConnectionClient aClient ) + { + CIMPSConnUiConnectionSettingsNotifierImp* self = + new ( ELeave ) CIMPSConnUiConnectionSettingsNotifierImp( aInterface, + aClient ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); //self + return self; + } + + +// Destructor +CIMPSConnUiConnectionSettingsNotifierImp::~CIMPSConnUiConnectionSettingsNotifierImp() + { + Dying(); + iObserverArray.Close(); + } + + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CIMPSConnUiConnectionSettingsNotifierImp::CIMPSConnUiConnectionSettingsNotifierImp( + CIMPSConnUiConnectionSettingsNotifier& aInterface, + TIMPSConnectionClient aClient ) + : iInterface( aInterface ), + iClient( aClient ), + iStarted( EFalse ), + iDying( EFalse ) + { + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionSettingsNotifierImp::ConstructL() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionSettingsNotifierImp::ConstructL() + { + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionSettingsNotifierImp::StartL() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionSettingsNotifierImp::StartL() + { + //make here sanity checks to encapsulate + //notifier behaviour + if ( iDying ) + { + //if dying, the notifier restart is silently ignored + //notifier is evidently going down anyway + return; + } + + if ( iStarted ) + { + User::Leave( KErrInUse ); + } + + if ( iObserverArray.Count() == 0 ) + { + User::Leave( KErrNotReady ); + } + + TRAPD( err, DoStartL() ); + if ( err != KErrNone ) + { + DoStop(); + User::Leave( err ); + } + + iStarted = ETrue; + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionSettingsNotifierImp::Stop() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionSettingsNotifierImp::Stop() + { + //notify observers from cancel + StopAndNotifyObserversFromError( KErrCancel ); + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionSettingsNotifierImp::AddObserverL() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionSettingsNotifierImp::AddObserverL( + MIMPSConnUiConnectionSettingsObserver* aObserver ) + { + __ASSERT_ALWAYS( aObserver, + CnUiPanicOrLeaveL( EIMPSConn_NULLPtr, + KErrArgument ) ); + + iObserverArray.AddObserverL( aObserver ); + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionSettingsNotifierImp::RemoveObserver() +// ----------------------------------------------------------------------------- +// +TInt CIMPSConnUiConnectionSettingsNotifierImp::RemoveObserver( + MIMPSConnUiConnectionSettingsObserver* aObserver ) + { + return iObserverArray.RemoveObserver( aObserver ); + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionSettingsNotifierImp::ConnectionSettingByCategoryL() +// ----------------------------------------------------------------------------- +// +TIMPSConnectionSettingsEvent +CIMPSConnUiConnectionSettingsNotifierImp::ConnectionSettingByCategoryL( + TIMPSConnectionSettingsEvent /*aSettingsEventCateqory*/ ) + { + return EIMPSCSEUnknown; + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionSettingsNotifierImp::DoStartL() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionSettingsNotifierImp::DoStartL() + { + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionSettingsNotifierImp::DoStop() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionSettingsNotifierImp::DoStop() + { + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionSettingsNotifierImp::Dying() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionSettingsNotifierImp::Dying() + { + iDying = ETrue; + if ( iStarted ) + { + iStarted = EFalse; + DoStop(); + } + } + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionSettingsNotifierImp::NotifyObserversFromEvent() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionSettingsNotifierImp::NotifyObserversFromEvent( + TIMPSConnectionSettingsEvent aEvent ) + { + //if not running, don't notify the clients + if ( !iStarted ) + { + return; + } + + iObserverArray.NotifyObservers( *this, aEvent ); + } + + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionSettingsNotifierImp::StopAndNotifyObserversFromError() +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionSettingsNotifierImp::StopAndNotifyObserversFromError( TInt aError ) + { + //if not running, don't notify the clients + if ( !iStarted ) + { + return; + } + + //Error propagating from the underlying implementation + //causes the notifier to stop. However, flag & actual + //stopping must be done before notifying the clients + //since some client may wan't to restart this notifier + //in the notification callback... + + //Also the state must be set to "not started" before + //actual stopping since the stopping of some event + //sources cause further KErrCancel events + //(==>those will be filtered on !started check on above.) + iStarted = EFalse; + DoStop(); + + //do the notify + iObserverArray.NotifyObserversFromError( *this, aError ); + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionSettingsNotifierImp::MediateNotifyL() +// From MGenObserverNotifyMediator +// Forwards handling to pre-registered mediator function. +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionSettingsNotifierImp::MediateNotifyL( + MIMPSConnUiConnectionSettingsObserver& aObserverToNotify, + TIMPSConnectionSettingsEvent& aNotifyData ) + { + aObserverToNotify.HandleConnectionSettingsEventL( &iInterface, aNotifyData ); + } + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionSettingsNotifierImp::MediateNotifyError() +// From MGenObserverNotifyMediator +// Forwards any error propagated from MediateNotifyL() to +// observer handle error. +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionSettingsNotifierImp::MediateNotifyError( + MIMPSConnUiConnectionSettingsObserver& aObserverToNotify, + TInt aLeaveError ) + { + aObserverToNotify.HandleConnectionSettingsEventNotifyError( &iInterface, aLeaveError ); + } + + +// ----------------------------------------------------------------------------- +// CIMPSConnUiConnectionSettingsNotifierImp::MediateError() +// From MGenObserverNotifyMediator +// ----------------------------------------------------------------------------- +// +void CIMPSConnUiConnectionSettingsNotifierImp::MediateError( + MIMPSConnUiConnectionSettingsObserver& aObserverToNotify, + TInt aError ) + { + aObserverToNotify.HandleConnectionSettingsEventNotifyError( &iInterface, aError ); + } + + +// End of File +