wvuing/IMPSConnectionUI/OperationStepSrc/CCnUiReconnectAllUiCntrlStep.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/IMPSConnectionUI/OperationStepSrc/CCnUiReconnectAllUiCntrlStep.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,258 @@
+/*
+* 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:  Network connection restore UI control.
+*
+*/
+
+// INCLUDE FILES
+#include <E32std.h>
+#include <CIMPSSAPSettings.h>
+#include "CCnUiReconnectAllUiCntrlStep.h"
+
+#include "MCnUiUiControlContext.h"
+#include "MCnUiUiFacade.h"
+#include "MCnUiSignaller.h"
+#include "MCnUiConnectionHandler.h"
+#include "MCnUiClientPlugin.h"
+#include "CCnUiConnOpener.h"
+
+
+#include "CnUiErrors.h"
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+// Two-phased constructor.
+CCnUiReconnectAllUiCntrlStep* CCnUiReconnectAllUiCntrlStep::NewLC(
+    MCnUiUiControlContext& aCCntxt,
+    CIMPSSAPSettings& aLoginSap,
+    TIMPSConnectionClient aReconnectedClient,
+    CPEngNWSessionSlotID2& aNWSessionSlotID )
+    {
+    CCnUiReconnectAllUiCntrlStep* self =
+        new ( ELeave ) CCnUiReconnectAllUiCntrlStep(
+        aCCntxt,
+        aLoginSap,
+        aReconnectedClient,
+        aNWSessionSlotID );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+// Destructor
+CCnUiReconnectAllUiCntrlStep::~CCnUiReconnectAllUiCntrlStep()
+    {
+    iClientsToReConn.Reset();
+    }
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CCnUiReconnectAllUiCntrlStep::CCnUiReconnectAllUiCntrlStep(
+    MCnUiUiControlContext& aCCntxt,
+    CIMPSSAPSettings& aLoginSap,
+    TIMPSConnectionClient aReconnectedClient,
+    CPEngNWSessionSlotID2& aNWSessionSlotID )
+        : CCnUiLoginUiCntrlStep( aCCntxt, aLoginSap, aNWSessionSlotID, aReconnectedClient ),
+        iRequestedReconnClient( aReconnectedClient ), iNWSessionSlotID( aNWSessionSlotID )
+    {
+    }
+
+
+// Symbian OS default constructor can leave.
+void CCnUiReconnectAllUiCntrlStep::ConstructL()
+    {
+    CCnUiLoginUiCntrlStep::ConstructL();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiReconnectAllUiCntrlStep::HandleCompleteL()
+// -----------------------------------------------------------------------------
+//
+TCnUiHandleCompleteStatus CCnUiReconnectAllUiCntrlStep::HandleCompleteL()
+    {
+    //if there has been a client to reconnect, it has been
+    //the first in the count array ==> index 0
+
+    if ( iClientsToReConn.Count() > 0 )
+        {
+        iClientsToReConn.Remove( 0 );
+        }
+
+
+    //If there is more clients to reconnect, do so
+    if ( iClientsToReConn.Count() > 0 )
+        {
+        //there is still clients to reconnect
+        return ECnUiRestartStep;
+        }
+    else
+        {
+        //all done
+        return ECnUiStepContinueTeardown;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiReconnectAllUiCntrlStep::UndoStepL()
+// -----------------------------------------------------------------------------
+//
+void CCnUiReconnectAllUiCntrlStep::UndoStepL()
+    {
+    //nothing to undo
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiReconnectAllUiCntrlStep::DoInitLoginStepL()
+// Template method
+// -----------------------------------------------------------------------------
+//
+TInt CCnUiReconnectAllUiCntrlStep::DoInitLoginStepL( TIMPSConnectionClient& aClient )
+    {
+    if ( !iInitDone )
+        {
+        //Login and thus also reconnects are connection owning so they have
+        //to always check for simultaneous operations
+        if ( iCCntxt.Signaller().OperationRunning() )
+            {
+            ShowSimultaneousLoginOperationNoteL();
+            return KCnUiErrorLoginOperationAlreadyInUse;
+            }
+
+
+        //initialize the reconnection array
+        InitNWReConnectL();
+        iInitDone = ETrue;
+        if ( iClientsToReConn.Count() == 0 )
+            {
+            //there isn't any clients to reconnect
+            return KCnUiErrorNoClientsToReconnect;
+            }
+        }
+
+    //in all other rounds prepare the client again,
+    //to cope from possible sub steps.
+    if ( iClientsToReConn.Count() > 0 )
+        {
+        aClient = iClientsToReConn[ 0 ];
+        return ECnUiLoginInitContinue;
+        }
+
+    else
+        {
+        //no more clients to logout
+        return KErrNone; //breaks away from RunStepL() with KErrNone
+        }
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CCnUiReconnectAllUiCntrlStep::DoShowLoginStateSpecificWaitnoteL()
+// -----------------------------------------------------------------------------
+//
+void CCnUiReconnectAllUiCntrlStep::DoShowLoginStateSpecificWaitnoteL(
+    TInt aStateId,
+    TIMPSConnectionClient aClient )
+    {
+    switch ( aStateId )
+        {
+        case ECnOpenerOpeningSAPConnection:
+        case ECnOpenerProcessingPlugin:
+        case ECnOpenerClosingInterferingSAPConnection:
+            {
+            if ( !iWaitNote )
+                {
+                //the same wait note is used
+                //both when opening SAP connection &
+                //processing plug-in stuff
+                if ( aClient == EIMPSConnClientIM )
+                    {
+                    iWaitNote = iCCntxt.Ui().WaitNoteL( ECnUiWaitNoteReConnectingChat,
+                                                        iLoginSap.SAPName(),
+                                                        this );
+                    }
+
+                else
+                    {
+                    //client is considered to be PEC
+                    iWaitNote = iCCntxt.Ui().WaitNoteL( ECnUiWaitNoteReConnectingPEC,
+                                                        iLoginSap.SAPName(),
+                                                        this );
+                    }
+                }
+
+            break;
+            }
+
+        case ECnOpenerIdle:
+        case ECnOpenerClosingOwnedSAPConnection:
+        default:
+            {
+            //clear any existing wait note set by the previous
+            //progress steps. No wait note used during these steps.
+            //own waitnote container used ==> direct deletion ok.
+            delete iWaitNote;
+            iWaitNote = NULL;
+
+            break;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCnUiReconnectAllUiCntrlStep::InitNWReConnectL()
+// -----------------------------------------------------------------------------
+//
+void CCnUiReconnectAllUiCntrlStep::InitNWReConnectL()
+    {
+    //internal count array
+    iClientsToReConn.Reset();
+
+    //determine is reconnection needed for given clients
+    //UI specification states that only those clients which
+    //connection mode settings is automatic are reconnected back
+
+    MCnUiClientPlugin& clientPlugin = iCCntxt.ClientPluginL( iRequestedReconnClient,
+                                                             iNWSessionSlotID );
+    if ( clientPlugin.CurrentConnectionModeSettingL() == ECnUiCMAutomatic )
+        {
+        User::LeaveIfError( iClientsToReConn.Append( iRequestedReconnClient ) );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiReconnectAllUiCntrlStep::ShowSimultaneousLoginOperationNoteL()
+// -----------------------------------------------------------------------------
+//
+void CCnUiReconnectAllUiCntrlStep::ShowSimultaneousLoginOperationNoteL()
+    {
+    HBufC* serverName = NULL;
+    iCCntxt.Signaller().OperationDetailsL( serverName );
+
+    //OperationDetailsL() returns the HBufC ownership
+    CleanupStack::PushL( serverName );
+    iCCntxt.Ui().ShowNoteL( ECnUiConnOperationAllreadyRunning, *serverName );
+    CleanupStack::PopAndDestroy( serverName ); //serverName
+    }
+
+
+
+//  End of File