diff -r 000000000000 -r ff3acec5bc43 mpxplugins/viewplugins/plugins/waitnotedialogplugin/src/mpxwaitnoteplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpxplugins/viewplugins/plugins/waitnotedialogplugin/src/mpxwaitnoteplugin.cpp Thu Dec 17 08:45:05 2009 +0200 @@ -0,0 +1,243 @@ +/* +* Copyright (c) 2006 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: Wait Note Plugin +* +*/ + +#include +#include +#include +#include +#include +#include "mpxwaitnotedialog.h" +#include "mpxwaitnoteconstructor.h" +#include "mpxwaitnoteplugin.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Default Constructor +// --------------------------------------------------------------------------- +// +CMPXWaitNoteDialogPlugin::CMPXWaitNoteDialogPlugin() + { + iWaitNote = NULL; + iOldWaitNote = NULL; + iNoteDialog = NULL; + } + +// --------------------------------------------------------------------------- +// Virtual destructor +// --------------------------------------------------------------------------- +// +CMPXWaitNoteDialogPlugin::~CMPXWaitNoteDialogPlugin() + { + if (iIdle) + { + iIdle->Cancel(); + delete iIdle; + iIdle = NULL; + } + if( iOldWaitNote ) + { + delete iOldWaitNote; + iOldWaitNote = NULL; + } + if( iWaitNote ) + { + delete iWaitNote; + iWaitNote = NULL; + } + } + +// --------------------------------------------------------------------------- +// Second Phased Constructor +// --------------------------------------------------------------------------- +// +void CMPXWaitNoteDialogPlugin::ConstructL() + { + iIdle = CIdle::NewL(CActive::EPriorityIdle); + } + +// --------------------------------------------------------------------------- +// Destroy previous wait note when callback from CIdle +// --------------------------------------------------------------------------- +// +TInt CMPXWaitNoteDialogPlugin::DestroyOldWaiteNote( TAny* aPtr ) + { + MPX_DEBUG1("CMPXWaitNoteDialogPlugin::DestroyOldWaiteNote()"); + TBool cont = EFalse; + + CMPXWaitNoteDialogPlugin* waitNotePlugin = + static_cast(aPtr); + + if( waitNotePlugin->iOldWaitNote->ReadyToDestroy() ) + { + TRAP_IGNORE( waitNotePlugin->iOldWaitNote->CancelNoteL() ); + delete waitNotePlugin->iOldWaitNote; + waitNotePlugin->iOldWaitNote = NULL; + cont = EFalse; + } + else + { + cont = ETrue; + } + return cont; + } + +// --------------------------------------------------------------------------- +// Two-Phased Constructor +// --------------------------------------------------------------------------- +// +CMPXWaitNoteDialogPlugin* CMPXWaitNoteDialogPlugin::NewL() + { + CMPXWaitNoteDialogPlugin* self = new( ELeave ) CMPXWaitNoteDialogPlugin; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } +// --------------------------------------------------------------------------- +// Get NoteDialog resource +// --------------------------------------------------------------------------- +// +void CMPXWaitNoteDialogPlugin::NoteDialogL( CAknNoteDialog*& aNoteDialog, + TInt aDlgRsc, CAknNoteDialog::TTone aTone ) + { + MPX_DEBUG1("CMPXWaitNoteDialogPlugin::NoteDialogL()"); + + if ( !iNoteDialog ) + { + iNoteDialog = new ( ELeave ) CAknNoteDialog( + (CEikDialog**)( &iNoteDialog ), + CAknNoteDialog::ENoTone, + CAknNoteDialog::ENoTimeout ); + iNoteDialog->PrepareLC( aDlgRsc ); + iNoteDialog->SetTone( aTone ); + iNoteDialog->RunLD(); + } + aNoteDialog = iNoteDialog; + } + +// --------------------------------------------------------------------------- +// Create the view +// --------------------------------------------------------------------------- +// +void CMPXWaitNoteDialogPlugin::CreateViewL() + { + // Do nothing + } + +// --------------------------------------------------------------------------- +// Destroy the view +// --------------------------------------------------------------------------- +// +void CMPXWaitNoteDialogPlugin::DestroyView() + { + MPX_DEBUG1("CMPXWaitNoteDialogPlugin::DestroyView()"); + if( iWaitNote ) + { + TRAP_IGNORE( iWaitNote->CancelNoteL() ); + } + } + +// --------------------------------------------------------------------------- +// Activate the view +// --------------------------------------------------------------------------- +// +void CMPXWaitNoteDialogPlugin::ActivateViewL( const TDesC* aParam ) + { + MPX_DEBUG1("CMPXWaitNoteDialogPlugin::ActivateViewL()"); + // Delete old instance + if( iWaitNote ) + { + // delete old will callback and destroy second time, need to use a + // old variable, and avoid using old address + MPX_DEBUG1("CMPXWaitNoteDialogPlugin::ActivateViewL()"); + if( iOldWaitNote ) + { + TRAP_IGNORE( iOldWaitNote->CancelNoteL() ); + delete iOldWaitNote; + iOldWaitNote = NULL; + } + iOldWaitNote = iWaitNote; + iWaitNote = NULL; + } + + // Start the note + iWaitNote = CMPXWaitNoteConstructor::ConstructWaitNoteL( *aParam, this ); + iWaitNote->ExecuteLD(); + if( iOldWaitNote ) + { + iOldWaitNote->CancelNoteL(); + TCallBack callBack( CMPXWaitNoteDialogPlugin::DestroyOldWaiteNote, + this ); + if( iIdle->IsActive() ) + { + iIdle->Cancel(); + } + iIdle->Start(callBack); + } + } + +// --------------------------------------------------------------------------- +// From CMPXViewPlugin +// Interface method to activate as default view, will not bring to foreground +// --------------------------------------------------------------------------- +// +void CMPXWaitNoteDialogPlugin::SetAsDefaultViewL() + { + User::Leave( KErrNotSupported ); + } + +// --------------------------------------------------------------------------- +// Deactivate the view +// --------------------------------------------------------------------------- +// +void CMPXWaitNoteDialogPlugin::DeactivateView() + { + // Cancel the note if we deactivate the view. + if (iWaitNote) // Fix for ESLU-7CFEPF + { + TRAP_IGNORE( iWaitNote->CancelNoteL() ); + } + + if ( iCommandObserver ) + { + TPckgC selfPtr( reinterpret_cast( this ) ); + iCommandObserver->HandleCustomCommand( + TUid::Uid( KMPXViewUtilityCustomCommand ), + EMPXViewUtilCmdViewDeActivated, + selfPtr ); + } + } + +// --------------------------------------------------------------------------- +// Handling when the wait note is dismissed +// --------------------------------------------------------------------------- +// +void CMPXWaitNoteDialogPlugin::HandleWaitNoteDismissedL() + { + // Tell view framework that progress note has been dismissed + // + MPX_DEBUG1("CMPXWaitNoteDialogPlugin::HandleWaitNoteDismissedL()"); + if ( iCommandObserver ) + { + TPckgC selfPtr( reinterpret_cast( this ) ); + iCommandObserver->HandleCustomCommand( + TUid::Uid( KMPXViewUtilityCustomCommand ), + EMPXViewUtilCmdViewDeActivated, + selfPtr ); + } + }