diff -r 159fc2f68139 -r d59c248c9d36 ImagePrint/ImagePrintUI/imgpprintdll/src/cimgpprintdlgmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ImagePrint/ImagePrintUI/imgpprintdll/src/cimgpprintdlgmanager.cpp Wed Sep 01 12:30:38 2010 +0100 @@ -0,0 +1,463 @@ +/* +* Copyright (c) 2004-2007 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: +* +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cimgpprintdlgmanager.h" +#include "imgpprintapputil.h" +#include "cimgpprintprogressdlg.h" +#include "clog.h" +#include "cimgpprintutils.h" +#include "mprintingobserver.h" +#include "tprinter.h" +#include "printmessagecodes.h" +#include "imageprintconsts.h" + +_LIT(KPlain, "%S"); + +const TUint KProgressFinalValue = 100; + +// Timeout for MMC InformationNote ( timeout = 5 000 000 ms -> 5 s ) +const TInt KTimeOut = 5000000; + + +// CONSTRUCTION +EXPORT_C CIMGPPrintDlgManager* CIMGPPrintDlgManager::NewL( + TInt aNoc, + MPrintJob* aPrintJob, + TUint aNumOfPages, + TBool aMMCPrinting, + TUint aVendor, + CIMGPPrintUtils* aPrintUtils, + MPrintingObserver* aPrintingObserver ) + { + CIMGPPrintDlgManager* self = + CIMGPPrintDlgManager::NewLC( aNoc, + aPrintJob, + aNumOfPages, + aMMCPrinting, + aVendor, + aPrintUtils, + aPrintingObserver ); + CleanupStack::Pop( self ); + return self; + } + +CIMGPPrintDlgManager* CIMGPPrintDlgManager::NewLC( + TInt aNoc, + MPrintJob* aPrintJob, + TUint aNumOfPages, + TBool aMMCPrinting, + TUint aVendor, + CIMGPPrintUtils* aPrintUtils, + MPrintingObserver* aPrintingObserver ) + { + CIMGPPrintDlgManager* self = + new ( ELeave ) CIMGPPrintDlgManager( aNoc, + aPrintJob, + aNumOfPages, + aMMCPrinting, + aVendor, + aPrintUtils, + aPrintingObserver ); + self->ConstructL(); + CleanupStack::PushL( self ); + + return self; + } + + +// Second class constructor +void CIMGPPrintDlgManager::ConstructL() + { + + } + +// Default constructor +CIMGPPrintDlgManager::CIMGPPrintDlgManager( + TInt aNoc, + MPrintJob* aPrintJob, + TUint aNumOfPages, + TBool aMMCPrinting, + TUint aVendor, + CIMGPPrintUtils* aPrintUtils, + MPrintingObserver* aPrintingObserver ) : + iPrintJob( aPrintJob ), + iNumOfPages( aNumOfPages ), + iMMCPrinting( aMMCPrinting ), + iVendor( aVendor ) + { + iCancellingDialog = 0; + // Used only in aiw printing + if( aPrintUtils ) + { + iPrintUtils = aPrintUtils; + } + if( aPrintingObserver ) + { + iPrintingObserver = aPrintingObserver; + } + iNoc = aNoc; + } + +// Destructor +CIMGPPrintDlgManager::~CIMGPPrintDlgManager() + { + LOG("CIMGPPrintDlgManager::~CIMGPPrintDlgManager BEGIN"); + if ( iDialog ) + { + delete iDialog; + iDialog = 0; + } + LOG("CIMGPPrintDlgManager::~CIMGPPrintDlgManager END"); + } + +// Starts the print job +EXPORT_C void CIMGPPrintDlgManager::StartPrintingL() + { + LOG("CIMGPPrintDlgManager::StartPrintingL BEGIN"); + + iFirstNote = ETrue; + + TRAPD( err, iPrintJob->PrintL( this )); + if ( err == KErrNone ) + { + LOG("CIMGPPrintDlgManager::StartPrintingL printing..."); + PrepareProgressDialogL(); + iCancelling = EFalse; + iPrintingCancelled = EFalse; + iDialog->RunLD(); + } + else + { + LOG("CIMGPPrintDlgManager::StartPrintingL failed"); + if ( iDialog ) + { + delete iDialog; + iDialog = 0; + } + if( iPrintUtils ) + { + iPrintUtils->JobFinished(); + } + if( iPrintingObserver ) + { + TRAP_IGNORE( iPrintingObserver->PrintingCompletedL( EFalse )); + } + // Don't leave for KErrNotFound, as there's another note for it + if ( err != KErrNotFound ) + { + TRAP_IGNORE( IMGPPrintAppUtil::ShowErrorMsgL( err )); + } + } + LOG("CIMGPPrintDlgManager::StartPrintingL END"); + } + +void CIMGPPrintDlgManager::PrepareProgressDialogL() + { + LOG("CIMGPPrintDlgManager::PrepareProgressDialogL START"); + HBufC* txt; + if ( !iMMCPrinting ) + { + txt = StringLoader::LoadLC( + R_QTN_PRINT_PROGRESS_NOTE_TITLE ); + } + else + { + txt = StringLoader::LoadLC( + R_QTN_COPY_PROGRESS_NOTE_TITLE); + } + + TBuf<128> buf; + buf.Format( KPlain, txt ); + CleanupStack::PopAndDestroy( txt ); + + iDialog = new ( ELeave ) CAknProgressDialog( + (REINTERPRET_CAST( CEikDialog**, &iDialog )), EFalse ); + iDialog->PrepareLC( R_PRINT_PROGRESS_PLAIN_PROG_NOTE ); + + CEikProgressInfo* info = iDialog->GetProgressInfoL(); + info->SetFinalValue( KProgressFinalValue ); + iDialog->SetTextL( buf ); + iDialog->SetCallback( this ); + LOG("CIMGPPrintDlgManager::PrepareProgressDialogL END"); + } + + +// Called to update the print progress +void CIMGPPrintDlgManager::PrintProgress( + TUint aComplete ) + { + TInt err = KErrNone; + TRAP( err, PrintProgressL( aComplete ) ); + if ( err != KErrNone ) + { + TRAP_IGNORE( IMGPPrintAppUtil::ShowErrorMsgL( err ) ); + } + } + +// Called to update the print progress +void CIMGPPrintDlgManager::PrintProgressL( + TUint aComplete ) + { + LOG1( "CIMGPPrintDlgManager::PrintProgressL START with: %d", aComplete ); + if( !iCancelling ) + { + if ( !iDialog ) + { + LOG("CIMGPPrintDlgManager::PrintProgressL: creating dialog again"); + PrepareProgressDialogL(); + iDialog->RunLD(); + } + CEikProgressInfo* info = iDialog->GetProgressInfoL(); + info->SetAndDraw( aComplete ); + } + LOG("CIMGPPrintDlgManager::PrintProgressL END"); + } + +// Called when the print job is finished +void CIMGPPrintDlgManager::JobFinished() + { + + LOG("CIMGPPrintDlgManager::JobFinished BEGIN"); + if ( iDialog ) + { + delete iDialog; + iDialog = 0; + } + if ( iMMCPrinting && !iCancelling ) + { + LOG("CIMGPPrintDlgManager::JobFinished mmc note"); + TRAP_IGNORE( ShowMMCPrintingCompletedDlgL() ); + LOG("CIMGPPrintDlgManager::JobFinished mmc note done"); + } + if ( iCancelling ) + { + if(iCancellingDialog) + { + TRAP_IGNORE( iCancellingDialog->ProcessFinishedL() ); + iCancellingDialog = 0; + iCancelling = EFalse; + } + } + else + { + if( iPrintUtils ) + { + LOG("CIMGPPrintDlgManager::JobFinished iPrintUtils"); + iPrintUtils->JobFinished(); + LOG("CIMGPPrintDlgManager::JobFinished iPrintUtils done"); + } + if( iPrintingObserver ) + { + TRAP_IGNORE( iPrintingObserver->PrintingCompletedL( EFalse )); + } + } + LOG("CIMGPPrintDlgManager::JobFinished END"); + } + +// Manages print job errors +void CIMGPPrintDlgManager::JobError( + TInt aErrCode, TInt aErrorStringCode ) + { + LOG2("CIMGPPrintDlgManager::JobError BEGIN, error = %d, stringcode = %d", aErrCode, aErrorStringCode ); + + if( iMMCPrinting && aErrCode == ECancellingNoMessage ) + { + if ( iDialog ) + { + delete iDialog; + iDialog = 0; + } + return; + } + + if ( iMMCPrinting && !iCancelling ) + { + TRAP_IGNORE( IMGPPrintAppUtil::ShowErrorNoteL( R_NOTE_IMAGEPRINT_MMCCOPYFAIL ) ); + // Nothing to do if the displaying of error note fails + // Just need to make sure that this method never leaves + } + if ( iCancelling ) + { + LOG( "CIMGPPrintDlgManager::JobError ---> iCancellingDialog->ProcessFinishedL()" ); + TRAP_IGNORE( iCancellingDialog->ProcessFinishedL() ); + iCancellingDialog = 0; + iCancelling = EFalse; + } + else + { + // Delete dialog + if ( iDialog ) + { + delete iDialog; + iDialog = 0; + } + if( iPrintUtils && + aErrCode != KHCIErrorBase-EPageTimedOut && + aErrorStringCode != EObexConnectError ) + { + iPrintUtils->JobFinished(); + } + if( iPrintingObserver ) + { + TRAP_IGNORE( iPrintingObserver->PrintingCompletedL( EFalse )); + } + } + + /* Error note is shown to user in normal cases, but not when + * printing is done to MMC, canceled, done via quickprint, or + * BT timeout happens, as these cases are handled in other parts + * of code + */ + if ( !iMMCPrinting && + aErrCode != ECancelling && + ( !iPrintUtils || + ( aErrCode != KHCIErrorBase-EPageTimedOut && + aErrorStringCode != EObexConnectError ))) + { + TRAP_IGNORE( IMGPPrintAppUtil::ShowErrorMsgL( aErrCode, aErrorStringCode )); + // Nothing to do to handle err + } + LOG("CIMGPPrintDlgManager::JobError END"); + } + +// Manages print job status events +void CIMGPPrintDlgManager::JobStatusEvent( TInt aErrCode, TInt aErrorStringCode ) + { + LOG2("CIMGPPrintDlgManager::JobStatusEvent = %d, stringcode = %d", aErrCode, aErrorStringCode ); + // If printer is disconnected cancel printing else + // just show the error message + if ( aErrCode == KErrDisconnected ) + { + TRAP_IGNORE( IMGPPrintAppUtil::ShowErrorMsgL( KErrDisconnected, aErrorStringCode )); + if ( iDialog ) + { + // This ends the printing + delete iDialog; + iDialog = 0; + } + } + else + { + TRAP_IGNORE( IMGPPrintAppUtil::ShowErrorMsgL( aErrCode, aErrorStringCode )); + } + LOG("CIMGPPrintDlgManager::JobStatusEvent END"); + } + +// Shows printing completed dlg +void CIMGPPrintDlgManager::ShowMMCPrintingCompletedDlgL() + { + LOG("CIMGPPrintDlgManager::ShowMMCPrintingCompletedDlgL BEGIN"); + + RPointerArray allImages; + CleanupClosePushL( allImages ); + iPrintJob->GetPrintJobL( allImages ); + TInt imagesCount = allImages.Count(); + CleanupStack::PopAndDestroy( &allImages ); + HBufC* buf = NULL; + + // Blocks possibility to show note when exiting image print. + if (iFirstNote) + { + if ( iNoc == 1 && imagesCount == 1 ) + { + buf = StringLoader::LoadLC( R_SETTINGS_IMAGEPRINT_MMC_PRINT_NOTE_ONE_PICTURE ); //r_settings_imageprint_mmc_print_note_one_picture + } + else + { + buf = StringLoader::LoadLC( R_SETTINGS_IMAGEPRINT_MMC_PRINT_NOTE ); + } + + CAknInformationNote* dlg = new ( ELeave ) CAknInformationNote( ETrue ); + dlg->SetTimeout( (CAknNoteDialog::TTimeout) KTimeOut ); + dlg->ExecuteLD( *buf ); + CleanupStack::PopAndDestroy( buf ); + + iFirstNote = EFalse; + + } + + LOG("CIMGPPrintDlgManager::ShowMMCPrintingCompletedDlgL END"); + } + +// Called when dialog gets dismissed +void CIMGPPrintDlgManager::DialogDismissedL( + TInt aButtonId ) + { + LOG("CIMGPPrintDlgManager::DialogDismissedL BEGIN"); + // If user pressed cancel, cancel printing + LOG1( "CIMGPPrintDlgManager::DialogDismissedL iPrintingCancelled: %d", iPrintingCancelled ); + if ( ( aButtonId == EAknSoftkeyCancel ) && ( iPrintingCancelled == EFalse ) ) + { + LOG("CIMGPPrintDlgManager::DialogDismissedL aButtonId == EAknSoftkeyCancel"); + iDialog = 0; + iCancelling = ETrue; + + // Printing cancelled + iPrintingCancelled = ETrue; + + TRAPD( err, iPrintJob->CancelL() ); + if( err == KErrNone ) + { + ShowCancelWaitNoteL(); + } + else + { + iCancelling = EFalse; + } + } + + LOG("CIMGPPrintDlgManager::DialogDismissedL END"); + } + +// Displays the cancel wait note +void CIMGPPrintDlgManager::ShowCancelWaitNoteL() + { + iCancellingDialog = + new ( ELeave ) CAknWaitDialog( + (REINTERPRET_CAST(CEikDialog**,&iCancellingDialog))); + iCancellingDialog->PrepareLC(R_CANCEL_PRINTING_DIALOG); + HBufC* text = StringLoader::LoadLC( R_QTN_PRINT_PROGRESS_PROMPT_CANCEL ); + iCancellingDialog->SetTextL( *text ); + CleanupStack::PopAndDestroy(text); + + iCancellingDialog->SetTone( CAknNoteDialog::ENoTone ); + iCancellingDialog->RunLD(); + + if( iPrintUtils ) + { + iPrintUtils->JobFinished(); + } + if( iPrintingObserver ) + { + iPrintingObserver->PrintingCompletedL( ETrue ); + } + } + +// End of File