--- /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