wvuing/IMPSConnectionUI/NotifySrc/CIMPSConnUiConnectionSettingsNotifierImp.cpp
changeset 0 094583676ce7
--- /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
+