connectionutilities/ConnectionDialogs/DisconnectDlg/src/DisconnectDlgDialog.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:23:51 +0100
branchRCL_3
changeset 58 83ca720e2b9a
parent 57 05bc53fe583b
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* 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 pop-up selection list with the active connections.
*
*/


// INCLUDE FILES
#include "DisconnectDlgDialog.h"
#include "DisconnectDlgUi.h"
#include "ConnectionInfo.h"
#include "ConnectionCArray.h"
#include "ConnectionModel.h"
#include "ConnectionDialogsLogger.h"
#include "ExpiryTimer.h"

#include <DisconnectDlg.rsg>
#include <AknIconArray.h>
#include <StringLoader.h>
#include <uikon/eiksrvui.h>


// CONSTANTS
/**
* Listbox item format mask
*/
_LIT( KFormat, "%d\t%S\t%S" );

/**
* Max size of Listbox item text
*/
const TInt KListItemTextBuf = 512;


// ================= MEMBER FUNCTIONS =======================

// ---------------------------------------------------------
// CDisconnectDlgDialog::NewL
// ---------------------------------------------------------
//
CDisconnectDlgDialog* CDisconnectDlgDialog::NewL( 
                                     CDisconnectDialogUi* aDisconnectDialogUi,
                                     CConnectionModel* aConnModel,
                                     TInt* aIndex,
                                     TUint32& aIAPId )
    {
    CLOG_ENTERFN("CDisconnectDlgDialog::NewL");    
    CDisconnectDlgDialog* dialog = new( ELeave ) CDisconnectDlgDialog( 
                            aDisconnectDialogUi, aConnModel, aIndex, aIAPId );
    CleanupStack::PushL( dialog );
    dialog->ConstructL();
    CleanupStack::Pop( dialog ); // dialog
    CLOG_LEAVEFN("CDisconnectDlgDialog::NewL");    

    return dialog;
    }


// ---------------------------------------------------------
// CDisconnectDlgDialog::CDisconnectDlgDialog
// ---------------------------------------------------------
//
CDisconnectDlgDialog::CDisconnectDlgDialog( 
                                    CDisconnectDialogUi* aDisconnectDialogUi,
                                    CConnectionModel* aConnModel,
                                    TInt* aIndex,
                                    TUint32& aIAPId )
: CAknListQueryDialog( aIndex ), 
  iIAPId( aIAPId )  
    {
    CLOG_ENTERFN("CDisconnectDlgDialog::CDisconnectDlgDialog");    
    
    iDisconnectDialogUi = aDisconnectDialogUi;
    iConnModel = aConnModel;

    CLOG_LEAVEFN("CDisconnectDlgDialog::CDisconnectDlgDialog");
    }


// ---------------------------------------------------------
// CDisconnectDlgDialog::RunDlgLD
// ---------------------------------------------------------
//
void CDisconnectDlgDialog::RunDlgLD()
    {
    CLOG_ENTERFN("CDisconnectDlgDialog::RunDlgLD");    
    
    iPrompt = StringLoader::LoadL( R_QTN_NETW_HEAD_CONN_TO_CLOSE );
    ExecuteLD( R_DISCONNECTDLG_DIALOG, iPrompt->Des() );

    CLOG_LEAVEFN("CDisconnectDlgDialog::RunDlgLD");    
    }


// ---------------------------------------------------------
// CDisconnectDlgDialog::ConstructL
// ---------------------------------------------------------
//
void CDisconnectDlgDialog::ConstructL()
    {
    }


// ---------------------------------------------------------
// CDisconnectDlgDialog::~CDisconnectDlgDialog
// ---------------------------------------------------------
//
CDisconnectDlgDialog::~CDisconnectDlgDialog()
    {
    CLOG_ENTERFN("CDisconnectDlgDialog::~CDisconnectDlgDialog");    
    
    delete iPrompt;
    STATIC_CAST( CEikServAppUi*, 
                CCoeEnv::Static()->AppUi() )->SuppressAppSwitching( EFalse );
    
    delete iExpiryTimer;

    CLOG_LEAVEFN("CDisconnectDlgDialog::~CDisconnectDlgDialog");    
    }


// ---------------------------------------------------------
// CDisconnectDlgDialog::PreLayoutDynInitL
// ---------------------------------------------------------
//
void CDisconnectDlgDialog::PreLayoutDynInitL()
    {
    CLOG_ENTERFN("CDisconnectDlgDialog::PreLayoutDynInitL");    
    
    CAknListQueryDialog::PreLayoutDynInitL();
    
    STATIC_CAST( CEikServAppUi*, 
                CCoeEnv::Static()->AppUi() )->SuppressAppSwitching( ETrue );
    
    CConnectionCArray* connArray = iConnModel->GetConnArray();

    // items: application and IAP names
    CDesCArrayFlat* items = new( ELeave )CDesCArrayFlat( connArray->Count() );
    CleanupStack::PushL( items );
    // icons: application icons
    CArrayPtr< CGulIcon >* icons = new( ELeave )CAknIconArray( 
                                                        connArray->Count() );
    CleanupStack::PushL( icons );

    CGulIcon* iconTemp = NULL;
    CGulIcon* icon = NULL;

    TInt count = connArray->Count();
    CLOG_WRITEF(_L( "count: %d" ), count );     

    // Get the info of every connection and initialize the list of dialog
    for( TInt i = 0; i < count; i++ )
        {
        CConnectionInfo* info = connArray->At( i );

        TBool useSharedIcon = EFalse;
        // Application and IAP name
        HBufC* listItem = HBufC::NewLC( KListItemTextBuf );
        TPtrC iap = info->GetIapNameL();
        
        TPtrC app = info->GetAppNameL( useSharedIcon ); 

        // Application icon
        iconTemp = info->GetAppIconL( useSharedIcon );
        icon = CGulIcon::NewL();
        icon->SetBitmapsOwnedExternally( ETrue );
        icon->SetBitmap( iconTemp->Bitmap() );
        icon->SetMask( iconTemp->Mask() );

        icons->AppendL( icon );

        listItem->Des().Format( KFormat, i, &iap, &app );
        items->AppendL( listItem->Des() );

        CleanupStack::PopAndDestroy( listItem ); // listItem
        }

    // set new item list
    SetItemTextArray( items );
    // set icon list
    SetIconArrayL( icons );
    // we don't have to take care of delete items
    SetOwnershipType( ELbmOwnsItemArray );

    CleanupStack::Pop( icons );
    CleanupStack::Pop( items );
    
    iExpiryTimer = CExpiryTimer::NewL( *this );
    iExpiryTimer->Start();

    CLOG_LEAVEFN("CDisconnectDlgDialog::PreLayoutDynInitL");
    }


// ---------------------------------------------------------
// CDisconnectDlgDialog::OkToExitL
// ---------------------------------------------------------
//
TBool CDisconnectDlgDialog::OkToExitL( TInt aButtonId )
    {
    CLOG_ENTERFN("CDisconnectDlgDialog::OkToExitL");    
    
    TBool retVal( ETrue );
    CLOG_WRITEF(_L( "aButtonId: %d" ), aButtonId );     
    
    if ( aButtonId == EAknSoftkeySelect || aButtonId == EAknSoftkeyOk ||
         aButtonId == EAknSoftkeyDone )
        {
        TInt toBeClosedItem = ListBox()->CurrentItemIndex();
        TInt result = iConnModel->EndConnection( toBeClosedItem );
        iDisconnectDialogUi->iDialogRun = EFalse;
        if ( result )
            {            
            if( KNullUnit == result )
                {
                result = KErrNone;
                }
            else
                {               
                iConnModel->InfoNoteL( R_QTN_NETW_INFO_DISCONNECT_FAILED );
                result = KErrGeneral;
                }
            
            iDisconnectDialogUi->CompleteL( result );
            }
        }
    else if ( aButtonId == EAknSoftkeyCancel )
        {
        iConnModel->CancelNotification();
        iDisconnectDialogUi->iDialogRun = EFalse;        
        iDisconnectDialogUi->CompleteL( KErrCancel );
        }
    else
        {
        retVal = EFalse;
        }

    CLOG_WRITEF(_L( "retVal: %d" ), retVal );    
    CLOG_LEAVEFN("CDisconnectDlgDialog::OkToExitL");    

    return retVal;
    }

void CDisconnectDlgDialog::HandleTimedOut()
    {
    TRAP_IGNORE( TryExitL(EAknSoftkeyCancel) );
    }

// End of File