usbuis/imageprintui/src/imageprintuiappui.cpp
author hgs
Mon, 17 May 2010 11:03:15 +0300
changeset 52 831068540b07
parent 3 47c263f7e521
child 63 ef2686f7597e
permissions -rw-r--r--
201019_1

/*
* 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