voipplugins/accountcreationplugin/src/acpdialog.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 27 Apr 2010 16:28:03 +0300
branchRCL_3
changeset 12 876a3df1f464
parent 0 a4daefaec16c
permissions -rw-r--r--
Revision: 201015 Kit: 201017

/*
* Copyright (c) 2007-2008 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:  Implements CAcpDialog methods
*
*/


#include <avkon.rsg>
#include <StringLoader.h>
#include <AknGlobalNote.h>
#include <AknQueryDialog.h> 
#include <aknnotewrappers.h>
#include <AknGlobalMsgQuery.h> 
#include <accountcreationplugin.rsg>

#include "acpdialog.h"
#include "accountcreationpluginlogger.h"
#include "macpdialogobserver.h"


// ---------------------------------------------------------------------------
// CAcpDialog::CAcpDialog
// ---------------------------------------------------------------------------
//
CAcpDialog::CAcpDialog( MAcpDialogObserver& aObserver )
    : CActive ( EPriorityStandard ),
    iObserver( aObserver )
    {
    CActiveScheduler::Add( this );
    }

// ---------------------------------------------------------------------------
// CAcpDialog::NewL
// ---------------------------------------------------------------------------
//
CAcpDialog* CAcpDialog::NewL( MAcpDialogObserver& aObserver )
    {
    CAcpDialog* self = CAcpDialog::NewLC( aObserver );
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// CAcpDialog::NewLC
// ---------------------------------------------------------------------------
//
CAcpDialog* CAcpDialog::NewLC( MAcpDialogObserver& aObserver )
    {
    CAcpDialog* self = new ( ELeave ) CAcpDialog( aObserver );
    CleanupStack::PushL( self );
    return self;
    }

// ---------------------------------------------------------------------------
// CAcpDialog::~CAcpDialog
// ---------------------------------------------------------------------------
//
CAcpDialog::~CAcpDialog()
    {
    Cancel();
    }

// ---------------------------------------------------------------------------
// CAcpDialog::LaunchWaitNoteL
// Launches a wait note.
// ---------------------------------------------------------------------------
//
void CAcpDialog::LaunchWaitNoteL( TInt aWaitNote )
    {
    ACPLOG( "CAcpDialog::LaunchWaitNoteL begin" );

    if ( !IsActive() )
        {
        // Show wait note with appropriate text.
        HBufC* text = StringLoader::LoadLC( aWaitNote );
        iWaitNote = CAknGlobalNote::NewL();
        iWaitNote->SetSoftkeys( R_AVKON_SOFTKEYS_CANCEL );
        iNoteId = iWaitNote->ShowNoteL( 
            iStatus, 
            EAknGlobalWaitNote, 
            *text );
        CleanupStack::PopAndDestroy( text );
        ACPLOG( " - SetActive();" );
        SetActive();
        }
     ACPLOG( "CAcpDialog::LaunchWaitNoteL end" );
     }

// ---------------------------------------------------------------------------
// CAcpDialog::LaunchWaitNoteL
// Launches a wait note with a custom string.
// ---------------------------------------------------------------------------
//
void CAcpDialog::LaunchWaitNoteL( TInt aWaitNote, const TDesC& aString )
    {
    ACPLOG( "CAcpDialog::LaunchWaitNoteL begin" );

    if ( !IsActive() )
        {
        // Show wait note with appropriate text.
        HBufC* text = StringLoader::LoadLC( aWaitNote, aString );
        iWaitNote = CAknGlobalNote::NewL();
        iWaitNote->SetSoftkeys( R_AVKON_SOFTKEYS_CANCEL );
        iNoteId = iWaitNote->ShowNoteL( 
            iStatus, 
            EAknGlobalWaitNote, 
            *text );
        CleanupStack::PopAndDestroy( text );
        ACPLOG( " - SetActive();" );
        SetActive();
        }
     ACPLOG( "CAcpDialog::LaunchWaitNoteL end" );
     }

// ---------------------------------------------------------------------------
// CAcpDialog::DestroyWaitNote
// Destroys a wait note.
// ---------------------------------------------------------------------------
//
void CAcpDialog::DestroyWaitNote()
    {
    ACPLOG( "CAcpDialog::DestroyWaitNote begin" );
    Cancel();
    
    // If dialog handler wasn't active anymore, DoCancel wasn't called and
    // the wait note needs to be deleted separately.
    if ( iWaitNote )
        {
        TRAP_IGNORE( iWaitNote->CancelNoteL( iNoteId ) );
        delete iWaitNote;
        iWaitNote = NULL;
        }
    
    ACPLOG( "CAcpDialog::DestroyWaitNoteL end" );
    }

// ---------------------------------------------------------------------------
// CAcpDialog::ShowQueryL
// ---------------------------------------------------------------------------
//
TInt CAcpDialog::ShowQueryL( TInt aQuery )
    {
    ACPLOG( "CAcpDialog::ShowQueryL begin" );
    CAknQueryDialog* query = new ( ELeave ) 
        CAknQueryDialog( CAknQueryDialog::ENoTone );
    ACPLOG( " - return ( query->ExecuteLD( aQuery ) );" );
    ACPLOG( "CAcpDialog::ShowQueryL end" );
    return ( query->ExecuteLD( aQuery ) );
    }

// ---------------------------------------------------------------------------
// CAcpDialog::ShowMessageQueryL
// ---------------------------------------------------------------------------
//
void CAcpDialog::ShowMessageQueryL( TInt aMessageQuery, const TDesC& aString )
    {
    ACPLOG( "CAcpDialog::ShowMessageQueryL begin" );
    
    if ( !IsActive() )
        {
        HBufC* text = StringLoader::LoadLC( aMessageQuery, aString );
        iGlobalMsgQuery = CAknGlobalMsgQuery::NewL();
        
        ACPLOG( "   --> show query" );
 
        iGlobalMsgQuery->ShowMsgQueryL( 
           iStatus, 
           text->Des(), 
           R_AVKON_SOFTKEYS_OK_EMPTY,
           KNullDesC, 
           KNullDesC ); 

        CleanupStack::PopAndDestroy( text );
        SetActive();
        }
    
    ACPLOG( "CAcpDialog::ShowMessageQueryL end" );
    }

// ---------------------------------------------------------------------------
// CAcpDialog::ShowNoteL
// ---------------------------------------------------------------------------
//
void CAcpDialog::ShowNoteL( TInt aNote, const TDesC& aString )
    {
    ACPLOG( "CAcpDialog::ShowNoteL(string) begin" );
    HBufC* text = StringLoader::LoadLC( aNote, aString );
    CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue );
    note->ExecuteLD( *text );
    CleanupStack::PopAndDestroy( text );
    ACPLOG( "CAcpDialog::ShowNoteL(string) end" );
    }

// ---------------------------------------------------------------------------
// CAcpDialog::ShowGlobalNoteL
// ---------------------------------------------------------------------------
//
void CAcpDialog::ShowGlobalNoteL( TInt aNote )
    {
    ACPLOG( "CAcpDialog::ShowGlobalNoteL begin" );    
    HBufC* text = StringLoader::LoadLC( aNote );
    CAknGlobalNote* note = CAknGlobalNote::NewLC();
    note->SetSoftkeys( R_AVKON_SOFTKEYS_OK_EMPTY );
    note->ShowNoteL( EAknGlobalInformationNote, *text );
    CleanupStack::PopAndDestroy( 2, text );    
    ACPLOG( "CAcpDialog::ShowGlobalNoteL end" );
    }

// ---------------------------------------------------------------------------
// CAcpDialog::ShowGlobalNoteL
// ---------------------------------------------------------------------------
//
void CAcpDialog::ShowGlobalNoteL( TInt aNote, const TDesC& aString )
    {
    ACPLOG( "CAcpDialog::ShowGlobalNoteL(string) begin" );
    HBufC* text = StringLoader::LoadLC( aNote, aString );
    CAknGlobalNote* note = CAknGlobalNote::NewLC();
    note->SetSoftkeys( R_AVKON_SOFTKEYS_OK_EMPTY );
    note->ShowNoteL( EAknGlobalInformationNote, *text );
    CleanupStack::PopAndDestroy( 2, text );
    ACPLOG( "CAcpDialog::ShowGlobalNoteL(string) end" );
    }

// ---------------------------------------------------------------------------
// CAcpDialog::ShowSelectionDialogL
// ---------------------------------------------------------------------------
//
TInt CAcpDialog::ShowSelectionDialogL( TInt aDialog, MDesC16Array* aArray )
    {
    ACPLOG( "CAcpDialog::ShowSelectionDialogL begin" );
    TInt index( KErrNotFound );
    CAknListQueryDialog* dialog = new (ELeave) CAknListQueryDialog( &index );
    dialog->PrepareLC( aDialog );
    dialog->SetItemTextArray( aArray );
    dialog->SetOwnershipType( ELbmOwnsItemArray );
    dialog->RunLD();
    
    ACPLOG( "CAcpDialog::ShowSelectionDialogL end" );
    return index;
    }

// ---------------------------------------------------------------------------
// CAcpDialog::RunL
// From CActive.
// ---------------------------------------------------------------------------
//
void CAcpDialog::RunL()
    {
    ACPLOG2( "CAcpDialog::RunL: iStatus=%d", iStatus.Int() );
    
    TInt status = iStatus.Int();
    
    if ( iWaitNote )
        {
        ACPLOG( "CAcpDialog::RunL --> wait note" );
        
        iObserver.DialogDismissedL( iStatus.Int() );
        }
    else if ( iGlobalMsgQuery && 
        ( status == EAknSoftkeyYes || status == EAknSoftkeyOk ) )
        {
        ACPLOG( "CAcpDialog::RunL --> message query" );
        
        iGlobalMsgQuery->CancelMsgQuery();
        iObserver.DialogDismissedL( iStatus.Int() );
        }
    else if ( iGlobalMsgQuery && 
        ( status != EAknSoftkeyYes || status != EAknSoftkeyOk ) )
        {
        ACPLOG( "CAcpDialog::RunL --> waiting user to check message query" );
        
        // do nothing, wait user to press ok to message query.
        }
    else
        {        
        ACPLOG( "CAcpDialog::RunL --> cancel" );
        
        // in other cases cancel
        Cancel();
        }
    }

// ---------------------------------------------------------------------------
// CAcpDialog::DoCancel
// From CActive.
// ---------------------------------------------------------------------------
//
void CAcpDialog::DoCancel()
    {
    ACPLOG( "CAcpDialog::DoCancel - begin" );

    if ( iWaitNote )
        {
        TRAP_IGNORE( iWaitNote->CancelNoteL( iNoteId ) );
        delete iWaitNote;
        iWaitNote = NULL;
        }
    
    if ( iGlobalMsgQuery )
        {
        iGlobalMsgQuery->CancelMsgQuery();
        delete iGlobalMsgQuery;
        iGlobalMsgQuery = NULL;
        }
      
    ACPLOG( "CAcpDialog::DoCancel - end" );
    }

// End of file.