usbuis/imageprintui/src/imageprintuiappui.cpp
changeset 35 9d8b04ca6939
child 63 ef2686f7597e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/imageprintui/src/imageprintuiappui.cpp	Fri Jun 04 10:27:39 2010 +0100
@@ -0,0 +1,883 @@
+/*
+* Copyright (c) 2006, 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:  S60 AppUi class
+*
+*/
+
+
+#include <avkon.hrh>
+#include <avkon.rsg> 
+#include <AiwGenericParam.h>
+#include <GenericParamConsumer.h>
+#include <aknnavide.h>
+#include <imageprintui.rsg>
+#include <AknWaitDialog.h>
+#include <f32file.h>
+#include <s32file.h>
+// #include <d32usbc.h>
+
+#include <badesca.h>
+#include <bautils.h>
+#include <e32std.h>
+#include <pathinfo.h> 
+
+#include "imageprintui.hrh"
+#include "imageprintuiappui.h"
+#include "imageprintuidocument.h"
+#include "emptyview.h"
+#include "settingsview.h"
+#include "imageprintuidebug.h"
+#include "connectionmanager.h"
+#include "capabilitymanager.h"
+#include "requestmanager.h"
+#include "eventmanager.h"
+#include "notes.h"
+#include "notetimer.h"
+
+ 
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+//  ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::ConstructL()
+    {
+    
+    FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::ConstructL()"));
+    
+    BaseConstructL( EAknEnableSkin | EAknEnableMSK );
+    iEngine = static_cast<CImagePrintUiDocument*>(Document())->Engine();
+    
+    iImageFiles = new (ELeave) CDesCArrayFlat(KImageDefaultArray);
+    iNotes = CNotes::NewL(this);
+    iNoteShowed = EFalse;
+    LoadImagesL();
+    
+    CAknView* emptyview = CEmptyView::NewLC();
+    AddViewL(emptyview);
+    CleanupStack::Pop(emptyview); 
+
+    CAknView* settingsview = CSettingsView::NewLC();
+    AddViewL(settingsview);
+    CleanupStack::Pop(settingsview);
+    ActivateLocalViewL( emptyview->Id() ); 
+ 
+    iCableConnected = EFalse;
+    iActiveNote = EFalse;
+    iNumberOfUnSuppFiles = 0;
+    iCapabilityChanged = EFalse;
+    iPrintActive = EFalse;
+    iErrorState = EFalse;
+    iStartJobOK = EFalse;
+    iPaperEmpty = EFalse;
+    iNoteTimeOut = EFalse;
+    iCloseTimeOut = EFalse;
+    iCapabilityTimeOut = EFalse;
+    iRequestTimeOut = EFalse;
+    iNoteTimer = CNoteTimer::NewL(this);
+    ReadNumberOfUnSuppL();
+   
+    iConnectionManager = CConnectionManager::NewL(this, iEngine, iNotes);
+    iConnectionManager->StartSearchPrinter();
+      
+    FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::ConstructL() complete"));
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CImagePrintUiAppUi::~CImagePrintUiAppUi()
+    {
+    delete iNaviDecorator;
+    delete iCapabilityManager; 
+    delete iRequestManager; 
+    
+    delete iEventManager;
+    delete iConnectionManager; 
+       
+    delete iNoteTimer;    	
+    delete iNotes;
+    delete iImageFiles;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Handle global commands
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::HandleCommandL(TInt aCommand)
+    {
+
+    FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::HandleCommandL()"));
+
+    // Handle global events
+    switch ( aCommand )
+        {
+        case EAknSoftkeyExit: 
+        case EAknSoftkeyBack:
+        case EAknCmdExit:
+        case EEikCmdExit:
+            {
+            Exit(); 
+            break;
+            }
+        default:
+            break;
+        }
+
+    FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::HandleCommandL() complete"));
+    }
+
+
+// ---------------------------------------------------------------------------
+// Closes the application when the cable is disconnected or when some other
+// mode is selected. 
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::CloseApplication(TBool aDisconnect)
+	{
+    FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::CloseApplication"));
+    iNotes->SetDisconnectState(aDisconnect);
+    if(iPrintActive)
+    	{
+    	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::CloseApplication show note"));
+    	TRAP_IGNORE(iNotes->ShowErrorMsgL(R_ERROR_CONNECTION_LOST));
+    	if(!iNoteTimer->IsActive())
+    		iCloseTimeOut = ETrue;
+    		iNoteTimer->After(KRetryClose);
+    	}
+    else
+    	{
+    	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::CloseApplication just now"));
+    	TRAPD(err, ProcessCommandL(EAknCmdExit));  
+    	if(err)
+    		{
+    		FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::error when CloseApplication"));
+    		}
+    	}
+    
+	}
+
+// ---------------------------------------------------------------------------
+// Closes the application after showing note
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::CloseAfterNoteL()
+	{
+	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::CloseAfterNoteL "));
+	ProcessCommandL(EAknCmdExit);  
+	}
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//	
+void CImagePrintUiAppUi::NotifyPrintStatus(TInt aStatus)
+	{
+	FLOG(_L("[IMAGEPRINTUI]>>> CImagePrintUiAppUi::NotifyPrintStatus "));
+	FTRACE(FPrint(_L("[IMAGEPRINTUI] CImagePrintUiAppUi  aStatus is %x"), aStatus ));
+	FTRACE(FPrint(_L("[IMAGEPRINTUI] CImagePrintUiAppUi  aStatus is %d"), aStatus ));
+	if(aStatus == EDpsPrintServiceStatusPrinting || aStatus == EDpsPrintServiceStatusIdle)
+		{
+		FLOG(_L("[IMAGEPRINTUI]>>> CImagePrintUiAppUi::NotifyPrintStatus set flag false "));
+		iPaperEmpty = EFalse;
+		}
+	if(aStatus == EDpsPrintServiceStatusPrinting)
+		{
+		FLOG(_L("[IMAGEPRINTUI]>>> CImagePrintUiAppUi::Print status active "));
+	    iPrintActive = ETrue;	
+		}
+	if(aStatus == EDpsPrintServiceStatusIdle)
+		{
+		FLOG(_L("[IMAGEPRINTUI]>>> CImagePrintUiAppUi::Print status idle"));
+		iNotes->PrintProgress(KPrintFinishValue);   
+	    iPrintActive = EFalse;	
+		}
+	FLOG(_L("[IMAGEPRINTUI]>>> CImagePrintUiAppUi::NotifyPrintStatus "));
+	}
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::NotifyPrintProgress(TInt aImagesPrinted, TInt aProgress)
+	{
+	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::NotifyPrintProgress"));
+	FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi aImagesPrinted value is %d"), aImagesPrinted ));
+	FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi aProgress value is %d"), aProgress ));
+	FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi iNumberOfImages value is %d"), iNumberOfImages ));
+    TInt realProgress;
+    TUint currentlayout;
+    
+    currentlayout = iCapabilityManager->Layout();
+	
+	if(currentlayout == EDpsLayoutDefault || currentlayout == EDpsLayout1Up)
+		{
+		FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::NotifyPrintProgress progress print"));
+		if(iNumberOfImages == KImageNumber)
+			{
+			FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::NotifyPrintProgress layout case 1 image"));
+			aImagesPrinted = aImagesPrinted*KPrintFinishValue;
+			realProgress = aImagesPrinted/iNumberOfImages;
+			realProgress = (realProgress <= KPrintFinishValue) ? realProgress : KPrintFinishValue;
+		    
+			if(!iErrorState)	
+				{
+				FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::NotifyPrintProgress no error "));
+			    iNotes->PrintProgress(realProgress);	
+				}
+			}
+		
+		if(iNumberOfImages > KImageNumber)
+			{
+			FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::NotifyPrintProgress one print image several images"));
+			if(aProgress < KPrintFinishValue)
+				{
+				FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::NotifyPrintProgress one print image several images update"));
+			    if(!iErrorState)
+			    	{
+			    	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::NotifyPrintProgress no error state "));
+			        iNotes->PrintProgress(aProgress); 	
+			    	}
+				}
+		
+			}
+		}
+	else
+		{
+		FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::NotifyPrintProgress NumberOfImages print"));
+		aImagesPrinted = aImagesPrinted*KPrintFinishValue;
+		realProgress = aImagesPrinted/iNumberOfImages;
+		realProgress = (realProgress <= KPrintFinishValue) ? realProgress : KPrintFinishValue;
+		if(realProgress == KPrintFinishValue)
+			{
+			FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::NotifyPrintProgress printing done layout big"));
+			}
+	    
+		if(realProgress < KPrintFinishValue)
+			{
+			FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::NotifyPrintProgress show progress layout big"));
+			if(!iErrorState)
+				{
+				FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::NotifyPrintProgress no error state"));
+			    iNotes->PrintProgress(realProgress); 	
+				}
+		    else
+		    	{
+		    	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::NotifyPrintProgress error state"));
+		    	}
+			}
+		
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// To inform about info from eventmanager
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::NotifyEventL( TInt aEventNotifyType)
+	{
+	FLOG(_L("[IMAGEPRINTUI] CImagePrintUiAppUi NotifyEvent start"));
+	FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi aEventNotifyType is  %d"), aEventNotifyType ));
+	switch(aEventNotifyType)
+		{
+        case CEventManager::ENewJobOK:
+            FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi >>> New job OK"));
+            break;
+            
+        case CEventManager::ENewJobNOK: 
+        	 FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi >>> New job NOK"));
+             iNotes->ShowErrorMsgL(R_ERROR_PRINTER_BUSY);
+             break;    
+             
+        case CEventManager::ECapabilityChange:
+        	 FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi >>> Capability change"));
+             TRAPD(err, iCapabilityManager->AskCapabilitiesL(ETrue));
+             if(err)
+             	{
+             	iNotes->ShowErrorMsgL(R_ERROR_GENERAL);
+             	}
+             break; 
+             
+        case EDpsPaperJam: 
+        	 FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi Paper Jam"));	 	
+        	 iNotes->ShowErrorMsgL(R_ERROR_PAPER_JAM);
+             break;  
+             
+        case EDpsPaperEmpty: 
+        	 FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi Paper empty"));
+        	 iPaperEmpty = ETrue;
+        	 iNotes->ShowErrorMsgL(R_ERROR_OUT_OF_PAPER);
+             break;       
+             
+        case CEventManager::EInkEmpty:
+        	 FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi Ink empty"));
+        	 iNotes->PrintFinished();	
+        	 iNotes->ShowErrorMsgL(R_ERROR_OUT_OF_INK); 
+             break;
+             
+        case EDpsInkLow: 
+        	 FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi Ink low"));	
+        	 iNotes->ShowErrorMsgL(R_ERROR_INK_LOW);  
+             break;   
+                 
+		case EDpsJobStatusEndedOther: 
+			 FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi >>> User cancel from printer"));	
+			 if(iPrintActive )
+			 	{
+			 	iNotes->PrintFinished();
+				FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi >>> User cancel print active"));
+				iPrintActive = EFalse;
+			 	}
+			 break;	
+        case EDpsJobStatusEndedOk: 
+        	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi >>> Job eneded normally"));
+        	break;
+        	
+		case EDpsJobStatusEndedAbortImmediately: 
+			FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi  User aborted"));
+			break;
+			
+		case EDpsErrorStatusFatal: 
+		    FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi  Fatal error in printer side"));
+		    if(iPrintActive)
+		    	{
+		    	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi  Fatal error in printer side, stop progress note"));
+		    	iNotes->PrintFinished();
+		    	iPrintActive = EFalse;
+		    	}
+		    iNotes->ShowErrorMsgL(R_ERROR_CHECK_STATUS);
+            break;
+            
+        case CEventManager::EWarning:
+        	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi  Warning in printer side"));
+        	if(!iPaperEmpty)
+        		{
+        		if(iPrintActive)
+			    	{
+			    	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi  Warning in printer side, stop progress note"));
+			    	iNotes->PrintFinished();
+			    	iPrintActive = EFalse;
+			    	}
+			    	iNotes->ShowErrorMsgL(R_ERROR_CHECK_STATUS);
+        		}
+            break;
+            
+        case CEventManager::ENotErrorState:
+        	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi,  Not Error State"));
+        	iErrorState = EFalse;
+        	break;
+        
+        case CEventManager::EErrorState:  
+        	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi,  Error State"));
+        	iErrorState = ETrue;
+        	break;
+        
+        case CEventManager::EShowError:
+        	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi, EShowError"));
+        	if(iPrintActive)
+		    	{
+		    	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi  EShowError in printer side, stop progress note"));
+		    	iNotes->PrintFinished();
+		    	iPrintActive = EFalse;
+		    	}
+        	iNotes->ShowErrorMsgL(R_ERROR_GENERAL);
+        	break;
+        
+	// 	case KErrUsbInterfaceNotReady:
+		// 	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi, KErrUsbInterfaceNotReady"));
+			// break;
+        
+        default:
+        	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi  NotifyEvent::Default branch"));  		
+            break;   
+		}
+	}
+// ---------------------------------------------------------------------------
+// To inform about info from requestmanager
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::NotifyRequestL(TInt aNotifyType)
+	{
+	FLOG(_L("[IMAGEPRINTUI] CImagePrintUiAppUi NotifyRequest start"));
+	FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi aNotifyType is  %d"), aNotifyType ));
+	switch(aNotifyType)
+		{
+        case CRequestManager::EConfigurePrintServiceOK:
+            FLOG(_L("[IMAGEPRINTUI]<<< CImagePrintUiAppUi NotifyRequest; EConfigurePrintServiceOK "));
+            TRAPD(err, iCapabilityManager->AskCapabilitiesL(EFalse));
+            if(err)
+            	{
+            	iNotes->ShowErrorMsgL(R_ERROR_GENERAL);
+            	}
+            break;
+            
+                 
+        case CRequestManager::EConfigurePrintServiceNOK:
+             //printer does not support
+             FLOG(_L("[IMAGEPRINTUI]<<< CImagePrintUiAppUi NotifyRequest; EConfigurePrintServiceNOK "));
+             iNotes->ShowErrorMsgL(R_ERROR_UNABLE_TO_CONNECT); 
+             break;    
+             
+        case CRequestManager::EGetJobStatusOK:
+        	 FLOG(_L("[IMAGEPRINTUI]<<< CImagePrintUiAppUi NotifyRequest; EGetJobStatusOK "));	
+             break; 
+             
+        case CRequestManager::EGetJobStatusNOK:
+             FLOG(_L("[IMAGEPRINTUI]<<< CImagePrintUiAppUi NotifyRequest; EGetJobStatusNOK "));
+             iNotes->ShowErrorMsgL(R_ERROR_GENERAL);  
+             break;      
+             
+        case CRequestManager::EGetDeviceStatusOK:
+             FLOG(_L("[IMAGEPRINTUI]<<< CImagePrintUiAppUi NotifyRequest; EGetDeviceStatusOK, start print "));
+             break;
+             
+        case CRequestManager::EGetDeviceStatusNOK:
+             // printer is busy
+             FLOG(_L("[IMAGEPRINTUI]<<< CImagePrintUiAppUi NotifyRequest; EGetDeviceStatusNOK "));
+             iNotes->ShowErrorMsgL(R_ERROR_PRINTER_BUSY); 
+             break;  
+             
+        case CRequestManager::EStartJobOK:	
+             //printing start ok
+             FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::EStartJobOK"));
+             iPrintActive = ETrue;
+             iStartJobOK = ETrue;
+             FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi EStartJobOK  iPrintActiveis  %d"), iPrintActive ));
+             break;
+             
+        case CRequestManager::EStartJobNOK:
+             //printing start nok
+             FLOG(_L("[IMAGEPRINTUI]<<< CImagePrintUiAppUi NotifyRequest; EStartJobNOK "));
+             iNotes->ShowErrorMsgL(R_ERROR_GENERAL); 
+             break;     
+             
+        case CRequestManager::EAbortJobOK:
+             FLOG(_L("[IMAGEPRINTUI]<<< CImagePrintUiAppUi NotifyRequest; EAbortJobOK ")); 
+             break; 
+             
+        case CRequestManager::EAbortJobNOK:
+             iNotes->ShowErrorMsgL(R_ERROR_GENERAL); 
+             CloseApplication(EFalse);
+             FLOG(_L("[IMAGEPRINTUI]<<< CImagePrintUiAppUi NotifyRequest; EAbortJobNOK ")); 
+             break;
+             
+        case CRequestManager::EPicturesNotFound:  
+        	FLOG(_L("[IMAGEPRINTUI]<<< CImagePrintUiAppUi NotifyRequest; EPicturesNotFound ")); 
+        	iNotes->ShowErrorMsgL(R_ERROR_FILE_NOT_FOUND); 
+        	break;
+        		  
+        default:
+            FLOG(_L("[IMAGEPRINTUI]<<< CImagePrintUiAppUi NotifyRequest; Default branch")); 
+            break;   
+		
+		}
+	
+	FLOG(_L("[IMAGEPRINTUI] CImagePrintUiAppUi NotifyRequest; END "));
+	}
+
+
+// ---------------------------------------------------------------------------
+// To inform number of images
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::NumberOfImages(TInt aNumberOfImages)
+	{
+	FTRACE(FPrint(_L("[IMAGEPRINTUI]\t NumberOfImages iNumberOfImages  is %d"), iNumberOfImages));
+	iNumberOfImages = aNumberOfImages;
+	}
+	
+// ---------------------------------------------------------------------------
+// To handle timer timeout
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::HandleTimeOutL()
+	{
+	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi <<< HandleTimeOutL"));
+	if(iNoteTimeOut)
+		{
+		FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi <<< HandleTimeOutL, note"));
+		iNoteTimeOut = EFalse;
+		ShowNoteL(); 		
+		}
+	else if(iCloseTimeOut)
+		{
+		FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi <<< HandleTimeOutL, close"));
+		iCloseTimeOut = EFalse;
+		CloseAfterNoteL();
+		}
+	else if(iCapabilityTimeOut)
+		{
+		FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi <<< HandleTimeOutL, capability"));
+		iCapabilityTimeOut = EFalse;
+		iCapabilityManager->AskCapabilitiesL(EFalse);
+    	}
+	else if(iRequestTimeOut)
+		{
+		FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi <<< HandleTimeOutL, request"));
+		iRequestTimeOut = EFalse;
+		iRequestManager->ReIssueDoDpsRequestL();
+		}
+	
+	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi >>> HandleTimeOutL"));
+	}
+	
+// ---------------------------------------------------------------------------
+// To handle timer error
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::HandleTimeErrorL(TInt aError)
+	{
+	if(iNoteTimeOut)
+		{
+		FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi <<< HandleTimeErrorL, note"));
+		if(aError == KErrTimedOut)
+			{
+			iNoteTimeOut = EFalse;
+			ShowNoteL();
+			}
+		}
+	else if(iCloseTimeOut)
+		{
+		FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi <<< HandleTimeErrorL, close"));
+		if(aError == KErrTimedOut)
+			{
+		    iCloseTimeOut = EFalse;
+			CloseAfterNoteL(); 	
+			}
+		}
+	else if(iCapabilityTimeOut)
+		{
+		FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi <<< HandleTimeErrorL, capability"));
+		if(aError == KErrTimedOut)
+			{
+			iCapabilityTimeOut = EFalse;
+			iCapabilityManager->AskCapabilitiesL(EFalse);
+			}
+		}
+	else if(iRequestTimeOut)
+		{
+		FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi <<< HandleTimeErrorL, request"));
+		if(aError == KErrTimedOut)
+    		{
+			iRequestTimeOut = EFalse;
+			iRequestManager->ReIssueDoDpsRequestL();
+    		}
+		
+		}
+	
+	
+	}
+// ---------------------------------------------------------------------------
+// To handle request timeout
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::HandleRequestTime(TInt aTime)
+	{	
+	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi <<< HandleRequestTimeL"));
+	iRequestTimeOut = ETrue;
+	if(!iNoteTimer->IsActive())
+		{
+	    iNoteTimer->After(aTime); 	
+		}
+	}
+	
+// ---------------------------------------------------------------------------
+// To handle capability timeout
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::HandleCapabilityTime(TInt aTime)
+	{	
+	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi <<< HandleCapabilityTimeL"));
+	iCapabilityTimeOut = ETrue;
+	if(!iNoteTimer->IsActive())
+		{
+	    iNoteTimer->After(aTime);	
+		}
+	}
+		
+// ---------------------------------------------------------------------------
+// To inform when the cable is connected
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::CableConnectedL()
+	{
+    FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi <<< CableConnected"));
+      
+    iCableConnected = ETrue;
+    iEventManager = CEventManager::NewL(this, iEngine);
+    iCapabilityManager = CCapabilityManager::NewL(this, iEngine);
+    iRequestManager    = CRequestManager::NewL(iEngine, iCapabilityManager, this);
+    
+    FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi >>> CableConnected"));
+	}
+
+
+// ---------------------------------------------------------------------------
+// To inform when the cable is disconnected
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::NotifyError()
+	{
+	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::NotifyError"));
+	TRAP_IGNORE(iNotes->ShowErrorMsgL(R_ERROR_GENERAL));
+	}
+// ---------------------------------------------------------------------------
+// To inform when the cable is disconnected
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::CableDisConnected()
+	{
+	iCableConnected = EFalse;
+	}
+// ---------------------------------------------------------------------------
+// CapabilityManager informs here when capabilities are fetched from dps engine
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::CapabilitiesReady()
+{
+    FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::CapabilitiesReady, activate local view"));
+    TRAPD(err,ActivateLocalViewL(KImagePrintSettingsViewId));
+    if(err)
+    	{
+    	TRAP_IGNORE(iNotes->ShowErrorMsgL(R_ERROR_GENERAL));
+    	}
+    	
+    TRAPD(err2, SetNavipaneTextL()); 
+    if(err2)
+    	{
+    	FLOG(_L("[IMAGEPRINTUI] CImagePrintUiAppUi::Unable to show printer name"));
+    	}
+} 
+
+
+// ---------------------------------------------------------------------------
+// This is called when the user presses Options->Print
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::StartPrinting()
+	{
+    // get first device status, then if OK  dps type start job
+    FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi >>> StartPrinting called")); 
+    iCapabilityManager->CheckIfNewCapabilityDiffer();
+    if(iCableConnected)
+    	{
+        iNotes->SetCancelState(EFalse);
+    	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi >>> StartPrinting, cable connected")); 
+        TRAPD(err, iRequestManager->ChooseDpsRequestTypeL(CRequestManager::EGetDeviceStatus )); 
+        if(err)
+        	{
+        	TRAP_IGNORE(iNotes->ShowErrorMsgL(R_ERROR_GENERAL));
+        	}
+    	}
+    else
+    	{
+    	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi >>> StartPrinting, cable NOT connected")); 
+    	TRAP_IGNORE(iNotes->ShowNoteL(R_CONNECT_USB));
+    	iActiveNote = ETrue;
+    	}                                          
+    
+	}
+
+
+// ---------------------------------------------------------------------------
+// This is called when the user presses Options->Cancel Print
+// ---------------------------------------------------------------------------
+//
+
+void CImagePrintUiAppUi::CancelPrinting()
+	{
+	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi >>> CancelPrinting BEGIN"));
+	TBool cancel = ETrue;
+    iNotes->SetCancelState(cancel);
+	TRAPD(err, iRequestManager->ChooseDpsRequestTypeL(CRequestManager::EAbortJob ));
+	if(err)
+    	{
+        TRAP_IGNORE(iNotes->ShowErrorMsgL(R_ERROR_GENERAL));
+        }
+
+	
+	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi >>> CancelPrinting END"));
+	}
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CDesCArrayFlat* CImagePrintUiAppUi::ImagesToPrint()
+    {
+    FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::ImagesToPrint()"));
+    FTRACE(FPrint(_L("[IMAGEPRINTUI] ImagesToPrint; iImageFiles  is %x"), iImageFiles ));
+    return iImageFiles;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+
+void CImagePrintUiAppUi::ReadNumberOfUnSuppL()
+	{
+	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::ReadNumberOfUnSuppL start()"));
+    
+    TFileName unSuppFile( KResource ); 
+    unSuppFile = PathInfo::PhoneMemoryRootPath(); 
+    TBuf<KResource> lengthUn(KUnSuppFile);
+    unSuppFile.SetLength(KDriver + lengthUn.Length());
+    unSuppFile.Replace(KDriver, lengthUn.Length(), KUnSuppFile);
+    
+    
+    RFileReadStream readStream;
+    User::LeaveIfError( readStream.Open(CCoeEnv::Static()->FsSession(), unSuppFile, EFileRead) );
+    readStream.PushL();
+    iNumberOfUnSuppFiles = readStream.ReadInt16L();	
+    FTRACE(FPrint(_L("[IMAGEPRINTUI] CImagePrintUiAppUi iNumberOfUnSuppFiles  is %d"), iNumberOfUnSuppFiles ));
+    CleanupStack::PopAndDestroy(&readStream); 
+    
+    
+    if(iNumberOfUnSuppFiles < KNumberOfUnsupportedFiles)
+    	{
+    	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::ReadNumberOfUnSuppL none"));
+    	}
+    else if(iNumberOfUnSuppFiles == KNumberOfUnsupportedFiles ||
+            iNumberOfUnSuppFiles > KNumberOfUnsupportedFiles)
+    	{
+    	FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::ReadNumberOfUnSuppL one or more"));
+    	if(!iNoteTimer->IsActive())
+    	    iNoteTimeOut = ETrue;
+    		iNoteTimer->After(KRetryInterval);
+    	} 
+	}
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::LoadImagesL()
+    {
+    FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::LoadImagesL()"));
+    
+    TFileName printNameFile( KResource ); 
+    printNameFile = PathInfo::PhoneMemoryRootPath();  
+    TBuf<KResource> length(KParamFile);
+    printNameFile.SetLength(KDriver + length.Length());
+    printNameFile.Replace(KDriver, length.Length(), KParamFile);
+    
+  
+    RFileReadStream readStream;
+    CleanupClosePushL(readStream); //1
+    User::LeaveIfError( readStream.Open(CCoeEnv::Static()->FsSession(),
+                        printNameFile, EFileRead) );
+    CAiwGenericParamList* paramList = CAiwGenericParamList::NewLC(readStream); //2
+
+    TInt index( 0 ); 
+    const TAiwGenericParam* param = paramList->FindFirst(index,
+            EGenericParamFile,
+            EVariantTypeDesC);
+    while ( index != KErrNotFound )
+		{
+        TFileName filename( param->Value().AsDes() );
+        FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::LoadImagesL; append picture")); 
+        iImageFiles->AppendL( filename ); 	
+        	
+        param = paramList->FindNext(index,
+            EGenericParamFile,
+            EVariantTypeDesC);
+        }
+
+    CleanupStack::PopAndDestroy(paramList);
+    CleanupStack::PopAndDestroy(&readStream);
+  
+    FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::LoadImagesL() complete"));
+    }
+
+
+// ---------------------------------------------------------------------------
+// Set navi pane text
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::SetNavipaneTextL()
+    {
+    FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::SetNavipaneTextL Start"));
+    CEikStatusPane* sp =
+        iEikonEnv->AppUiFactory()->StatusPane();
+       
+    CAknNavigationControlContainer* np =
+        static_cast<CAknNavigationControlContainer*>(
+            sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+           
+    delete iNaviDecorator;
+    iNaviDecorator = NULL;
+    
+    TInt blank(1);
+    TBuf8<KMaxPrinterName> printername;
+    TBuf8<KMaxPrinterName> productname;
+    
+    iRequestManager->GetPrinterName(printername, productname); 
+    // convert to HBuf16 because CreateNavigationLabel needs TDesC16, not TDesC8
+    HBufC* temp = HBufC::NewLC(printername.Length() + productname.Length() + blank); 
+    HBufC* temp2 = HBufC::NewLC(productname.Length()); 
+    FTRACE(FPrint(_L("[IMAGEPRINTUI] CImagePrintUiAppUi printername  is %S"), &printername ));
+    FTRACE(FPrint(_L("[IMAGEPRINTUI] CImagePrintUiAppUi productname  is %S"), &productname ));
+    temp->Des().Copy(printername); 
+    temp->Des().Append(_L(" "));
+    temp2->Des().Copy(productname);
+    temp->Des().Append(temp2->Des());
+    
+    iNaviDecorator = np->CreateNavigationLabelL( *temp );
+    CleanupStack::PopAndDestroy(temp2);
+    CleanupStack::PopAndDestroy(temp);
+    np->PushL( *iNaviDecorator );
+    sp->DrawNow(); 
+    FLOG(_L("[IMAGEPRINTUI]\t CImagePrintUiAppUi::SetNavipaneText END"));
+    }
+
+CCapabilityManager* CImagePrintUiAppUi::CapabilityManager()
+	{
+	return iCapabilityManager;
+	}
+	
+CNotes* CImagePrintUiAppUi::Notes()
+	{
+	return iNotes;
+	}
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CImagePrintUiAppUi::PrintActive()
+	{
+	return iPrintActive;
+	}
+	
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CImagePrintUiAppUi::ShowNoteL()
+	{
+    iNoteShowed = ETrue;
+    if(iNumberOfUnSuppFiles == KNumberOfUnsupportedFiles)
+    	{
+        iNotes->ShowInfoNoteL(R_ERROR_FILE_NOT_SUPPORTED);	
+    	}
+    else if(iNumberOfUnSuppFiles > KNumberOfUnsupportedFiles)
+    	{
+    	iNotes->ShowInfoNoteL(R_ERROR_UNSUPPORTED_FILES_REMOVED);
+    	}	
+	}
+// end of file