--- /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 <E32std.h>
+#include <impspresenceconnectionuiconstsng.h>
+#include <MIMPSConnUiConnectionSettingsObserver.h>
+#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
+