connectionutilities/ConnectionDialogs/DisconnectDlg/src/DisconnectDlgUi.cpp
changeset 0 5a93021fdf25
child 26 0a9e01492035
child 41 bbb64eb3bdee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionutilities/ConnectionDialogs/DisconnectDlg/src/DisconnectDlgUi.cpp	Thu Dec 17 08:55:21 2009 +0200
@@ -0,0 +1,420 @@
+/*
+* 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: 
+*     Defines the main handler, CDisconnectDialogUi and public API for 
+*     Disconnect Dialog UI.
+*
+*/
+
+
+// INCLUDE FILES
+#include "DisconnectDlgUi.h"
+#include "ActiveDisconnectDlgPlugin.h"
+#include "ConnectionModel.h"
+#include "QueryDisconnectDlgDialog.h"
+#include "ConnectionDialogsUidDefs.h"
+#include "ConnectionDialogsLogger.h"
+
+#include <bautils.h>
+#include <textresolver.h>
+
+#include <DisconnectDlg.rsg>
+#include <data_caging_path_literals.hrh>
+
+
+// CONSTANTS
+
+// ROM folder
+_LIT( KDriveZ, "z:" );
+
+// Name of the RSC file containing resources
+_LIT( KDisconnectDlgUiRSCFile, "DisconnectDlg.rsc" );
+
+/**
+* Count of used MEikSrvNotifierBase
+*/
+LOCAL_D const TInt KPluginGranularity = 1;
+
+
+LOCAL_C void CreateNotifiersL( 
+                          CArrayPtrFlat<MEikSrvNotifierBase2>* aNotifiers );
+
+
+EXPORT_C CArrayPtr<MEikSrvNotifierBase2>* NotifierArray()
+    {
+    CArrayPtrFlat<MEikSrvNotifierBase2>* array = new( ELeave )
+                    CArrayPtrFlat<MEikSrvNotifierBase2>( KPluginGranularity );
+
+    if ( array )
+        {
+        TRAPD( err, CreateNotifiersL( array ) );
+        if( err )
+            {
+            TInt count = array->Count();
+            while( count-- )
+                {
+                ( *array )[count]->Release();
+                }
+            delete array;
+            array = NULL;
+            }
+        }
+
+    return( array );
+    }
+
+
+// ---------------------------------------------------------
+// CreateNotifiersL( CArrayPtrFlat<MEikSrvNotifierBase>* aNotifiers )
+// ---------------------------------------------------------
+//
+LOCAL_C void CreateNotifiersL( 
+                              CArrayPtrFlat<MEikSrvNotifierBase2>* aNotifiers )
+    {
+    MEikSrvNotifierBase2 *serNotify;
+
+    serNotify = CDisconnectDialogUi::NewL();
+    CleanupStack::PushL( serNotify );
+    aNotifiers->AppendL( serNotify );
+    CleanupStack::Pop( serNotify ); // serNotify
+    }
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CDisconnectDialogUi::NewLC
+// ---------------------------------------------------------
+//
+CDisconnectDialogUi* CDisconnectDialogUi::NewL()
+    {
+    CDisconnectDialogUi* self = new( ELeave ) CDisconnectDialogUi();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self ); // self
+
+    return self;
+    }
+
+
+// ---------------------------------------------------------
+// CDisconnectDialogUi::~CDisconnectDialogUi
+// ---------------------------------------------------------
+//
+CDisconnectDialogUi::~CDisconnectDialogUi()
+    {
+    delete iActivePlugin; 
+    delete iConnModel;
+    delete iErrorMsgDetails;
+    if ( iResOffset )
+        {
+        CCoeEnv::Static()->DeleteResourceFile( iResOffset );
+        }
+    }
+
+
+// ---------------------------------------------------------
+// CDisconnectDialogUi::CDisconnectDialogUi
+// ---------------------------------------------------------
+//
+CDisconnectDialogUi::CDisconnectDialogUi()
+: iDialogRun( EFalse ), 
+  iQueryRun( EFalse ), 
+  iResOffset( 0 ),
+  iConnModel( NULL ), 
+  iIndex( 0 ), 
+  iStarted( EFalse ), 
+  iActivePlugin( NULL )
+    {
+    }
+
+
+// ---------------------------------------------------------
+// CDisconnectDialogUi::ConstructL
+// ---------------------------------------------------------
+//
+void CDisconnectDialogUi::ConstructL( )
+    {
+    // The resource has to be loaded manually since it is not an application.
+
+    TFileName resourceFileName;
+
+    resourceFileName.Append( KDriveZ );
+    resourceFileName.Append( KDC_RESOURCE_FILES_DIR );   
+    resourceFileName.Append( KDisconnectDlgUiRSCFile );
+
+    BaflUtils::NearestLanguageFile( CCoeEnv::Static()->FsSession(),
+                                    resourceFileName );
+    iResOffset = CCoeEnv::Static()->AddResourceFileL( resourceFileName );
+    }
+
+
+// ---------------------------------------------------------
+// CDisconnectDialogUi::Cvt
+// ---------------------------------------------------------
+//
+TInt CDisconnectDialogUi::Cvt()
+    {
+    return KErrNone;
+    }
+
+
+// ---------------------------------------------------------
+// CDisconnectDialogUi::InitializedL
+// ---------------------------------------------------------
+//
+void CDisconnectDialogUi::InitializedL( CConnectionInfo* aConnectionInfo )
+    {
+    CLOG_ENTERFN( "CDisconnectDialogUi::InitializedL" );
+    iQueryRun = EFalse;
+    delete iConnModel;
+    iConnModel = NULL;
+    iConnModel = CConnectionModel::NewL( this, aConnectionInfo );
+
+    // Now all the info are ready to show
+    // Let's show the dialog        
+    iDialogRun = ETrue;
+    iDisconnectDialog = CDisconnectDlgDialog::NewL( this, iConnModel, 
+                                                    &iIndex, iIapId );
+    iDisconnectDialog->RunDlgLD();
+    iDialogRun = EFalse;
+    
+    CLOG_LEAVEFN( "CDisconnectDialogUi::InitializedL" );    
+    }
+
+
+// ---------------------------------------------------------
+// void CDisconnectDialogUi::Release()
+// ---------------------------------------------------------
+//
+void CDisconnectDialogUi::Release()
+    {
+    delete this;
+    }
+
+
+// ---------------------------------------------------------
+// TNotifierInfo CDisconnectDialogUi::RegisterL()
+// ---------------------------------------------------------
+//
+CDisconnectDialogUi::TNotifierInfo CDisconnectDialogUi::RegisterL()
+    {
+    iInfo.iUid = KUidDisconnectDlg;
+    iInfo.iPriority = ENotifierPriorityHigh;
+    iInfo.iChannel = KUidDisconnectDlg;
+
+    return iInfo;
+    }
+
+
+// ---------------------------------------------------------
+// TNotifierInfo CDisconnectDialogUi::Info() const
+// ---------------------------------------------------------
+//
+CDisconnectDialogUi::TNotifierInfo CDisconnectDialogUi::Info() const
+    {
+    return iInfo;
+    }
+
+
+// ---------------------------------------------------------
+// TPtrC8 CDisconnectDialogUi::StartL( const TDesC8& /*aBuffer*/ )
+// ---------------------------------------------------------
+//
+TPtrC8 CDisconnectDialogUi::StartL( const TDesC8& /*aBuffer*/ )
+    {
+    return KNullDesC8().Ptr();
+    }
+
+
+// ---------------------------------------------------------
+// void CDisconnectDialogUi::StartL( const TDesC8& /*aBuffer*/, 
+//                                  const TAny* /*aReturnVal*/, 
+//                                  RMessage /*aMessage*/)
+// ---------------------------------------------------------
+//
+
+void CDisconnectDialogUi::StartL( const TDesC8& aBuffer, 
+                                  TInt aReplySlot,
+                                  const RMessagePtr2& aMessage )
+    { 
+    CLOG_ENTERFN("CDisconnectDialogUi::StartL");        
+      
+    iStarted = ETrue;
+
+    TPckgBuf<TDisconnectConnectionPrefs> passedInfo;
+    passedInfo.Copy( aBuffer );
+    iConnectionPrefs = passedInfo();
+    
+    iReplySlot = aReplySlot;    
+    iMessage = aMessage;
+    
+    CLOG_WRITEF(_L( "iCntPrefs.iPrompt: %d" ), iConnectionPrefs.iPrompt );
+    
+    TInt err( KErrNone );    
+    TRAP( err, iActivePlugin = CActiveDisconnectDlgPlugin::NewL( this ) ); 
+    
+    if ( err )
+        {
+        delete iActivePlugin;
+        iActivePlugin = NULL;
+        User::Leave( err );           
+        }
+        
+    iActivePlugin->StartSearchConnections(); 
+     
+    CLOG_LEAVEFN("CDisconnectDialogUi::StartL");        
+    }
+
+
+// ---------------------------------------------------------
+// void CDisconnectDialogUi::AskDisconnectL
+// ---------------------------------------------------------
+//
+
+TInt CDisconnectDialogUi::AskDisconnectL()
+    {
+    CLOG_ENTERFN( "CDisconnectDialogUi::AskDisconnectL" );        
+    
+    const TInt KErrorCode = -6000;
+    TInt proceed( KErrNone );
+    TInt textId;
+    TUint textFlags;
+
+    delete iErrorMsgDetails;
+    iErrorMsgDetails = NULL;
+
+    CTextResolver* resolver = CTextResolver::NewLC();
+    const TDesC& error = resolver->ResolveErrorString( KErrorCode, 
+                                        textId, textFlags, 
+                                        CTextResolver::ECtxNoCtxNoSeparator );
+
+    if ( !( textFlags & EErrorResBlankErrorFlag ||
+            textFlags & ETextResolverUnknownErrorFlag ) )
+        {
+        iErrorMsgDetails = error.AllocL();
+
+        CleanupStack::PopAndDestroy( resolver );
+            
+        iQueryDisconnectDlgDialog = new ( ELeave ) CQueryDisconnectDlgDialog( 
+                                                                        this );
+        iQueryDisconnectDlgDialog->SetPromptL( *iErrorMsgDetails );
+        iQueryRun = ETrue;
+        proceed = iQueryDisconnectDlgDialog->ExecuteLD( 
+                                                    R_DISCONNECTDLG_PROCEED );
+        iQueryRun = EFalse;
+        }
+    else
+        {
+        CleanupStack::PopAndDestroy( resolver );
+        }
+
+    CLOG_LEAVEFN( "CDisconnectDialogUi::AskDisconnectL" );        
+
+    return proceed;
+    }
+
+
+// ---------------------------------------------------------
+// void CDisconnectDialogUi::Cancel()
+// ---------------------------------------------------------
+//
+void CDisconnectDialogUi::Cancel()
+    {
+    CLOG_ENTERFN("CDisconnectDialogUi::Cancel");        
+    
+    delete iActivePlugin;
+    iActivePlugin = NULL;
+    
+    if ( iStarted )
+        {           
+        iStarted = EFalse;
+        if ( !iMessage.IsNull() )
+            {
+            iMessage.Complete( KErrCancel );
+            }
+        }
+       
+    if ( iQueryRun )
+        {
+        delete iQueryDisconnectDlgDialog;
+        }
+
+    if ( iDialogRun )
+        {
+        delete iDisconnectDialog;
+        }
+        
+    iQueryDisconnectDlgDialog = NULL;
+    iDisconnectDialog = NULL;
+
+    delete iErrorMsgDetails;
+    iErrorMsgDetails = NULL;
+                
+    CLOG_LEAVEFN("CDisconnectDialogUi::Cancel");                
+    }
+
+
+// ---------------------------------------------------------
+// void CDisconnectDialogUi::CompleteL( TInt aStatus )
+// ---------------------------------------------------------
+//
+void CDisconnectDialogUi::CompleteL( TInt aStatus )
+    {
+    CLOG_ENTERFN("CDisconnectDialogUi::CompleteL"); 
+   
+    if ( !iMessage.IsNull() )
+        {
+        if ( aStatus == KErrNone )
+            {
+            iMessage.WriteL( iReplySlot, TPckg<TUint32>( iIapId ) );
+            CLOG_WRITEF( _L( "iIapId : %d" ), iIapId );        
+            }
+      
+        iMessage.Complete( aStatus );
+        }
+    
+    iStarted = EFalse;
+    Cancel();                
+    
+    CLOG_LEAVEFN("CDisconnectDialogUi::CompleteL");        
+    }
+
+
+// ---------------------------------------------------------
+// TPtrC8 CConnDlgPluginBase::UpdateL(const TDesC8& /*aBuffer*/)
+// ---------------------------------------------------------
+//
+TPtrC8 CDisconnectDialogUi::UpdateL(const TDesC8& /*aBuffer*/)
+    {
+    return KNullDesC8().Ptr();
+    }
+    
+    
+// ---------------------------------------------------------
+// void CDisconnectDialogUi::SetClosedIapId
+// ---------------------------------------------------------
+//
+void CDisconnectDialogUi::SetClosedIapId( TUint32 aIapId )
+    {
+    CLOG_ENTERFN("CDisconnectDialogUi::SetClosedIapId");     
+    
+    iIapId = aIapId;
+
+    CLOG_WRITEF( _L( "iIapId : %d" ), iIapId );
+    CLOG_LEAVEFN("CDisconnectDialogUi::SetClosedIapId");            
+    }
+    
+
+// End of File