--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ImagePrint/ImagePrintUI/imgpprintdll/src/cimgpprintdlgmanager.cpp Thu Dec 17 08:45:53 2009 +0200
@@ -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 <StringLoader.h>
+#include <AknWaitDialog.h>
+#include <aknstaticnotedialog.h>
+#include <eikprogi.h>
+#include <aknnotewrappers.h>
+#include <coecntrl.h>
+#include <eikmenup.h>
+#include <bautils.h>
+#include <bluetooth/hci/hcierrors.h>
+#include <f32file.h>
+#include <imageprintapp.rsg>
+
+#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<TDesC> 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