diff -r 159fc2f68139 -r d59c248c9d36 ImagePrint/ImagePrintUI/imageprinteng/src/cidleprinteventcatcher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ImagePrint/ImagePrintUI/imageprinteng/src/cidleprinteventcatcher.cpp Wed Sep 01 12:30:38 2010 +0100 @@ -0,0 +1,195 @@ +/* +* 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 "tidleevent.h" +#include "cidleprinteventcatcher.h" +#include "crealfactory.h" +#include "midleprinteventobserver.h" +#include "cprinteventcatcher.h" +#include "mprintsettings.h" +#include "clog.h" +#include "mdiscoveryobserver.h" +#include "midleprinteventregisterif.h" +#include "mdiscoveryobserver.h" + +CIdlePrintEventCatcher* CIdlePrintEventCatcher::NewL( + CRealFactory* aFactory /*, + MIdlePrintEventObserver* aIdleUIObserver*/ ) + { + CIdlePrintEventCatcher* self = CIdlePrintEventCatcher::NewLC( aFactory/*, aIdleUIObserver*/ ); + CleanupStack::Pop(); // self + return self; + } + +CIdlePrintEventCatcher* CIdlePrintEventCatcher::NewLC( + CRealFactory* aFactory/*, + MIdlePrintEventObserver* aIdleUIObserver*/ ) + { + CIdlePrintEventCatcher* self = + new ( ELeave ) CIdlePrintEventCatcher( aFactory/*, aIdleUIObserver*/ ); + CleanupStack::PushL( self ); + self->ConstructL(); + + return self; + } + +// Constructor +CIdlePrintEventCatcher::CIdlePrintEventCatcher( + CRealFactory* aFactory/*, + MIdlePrintEventObserver* aIdleUIObserver*/ ) : + iFactory( aFactory )/*, + iIdleUIObserver( aIdleUIObserver )*/ + { + } + +// Destructor +CIdlePrintEventCatcher::~CIdlePrintEventCatcher() + { + iObservers.Reset();//)AndDestroy(); + } + +// 2nd phase constructor +void CIdlePrintEventCatcher::ConstructL() + { + } + +void CIdlePrintEventCatcher::StatusEvent( const TEvent &aEvent, + TInt aError, + TInt aMsgCode ) + { + LOG1("CIdlePrintEventCatcher::StatusEvent, aEventType: %d", aEvent.iEventType); + LOG2("CIdlePrintEventCatcher::StatusEvent, aError: %d, aMsgCode: %d", aError, aMsgCode ); + TInt obsCount = iObservers.Count(); + switch ( aEvent.iEventType ) + { + ///The protocol has made a connection to the printer, device or transport + case EConnect: + { + LOG( "CIdlePrintEventCatcher::StatusEvent CONNECT " ); + if ( (TUint)aEvent.iProtocol == KImagePrint_PrinterProtocol_PictBridge ) + { + for( TInt i=0; iUsbPrinterConnected(); + } + iFactory->SettingsIF()->SetUsbState( ETrue ); + } + break; + } + ///The protocol has been disconnected from the printer, device or transport + case EDisconnect: + { + if ( (TUint)aEvent.iProtocol == KImagePrint_PrinterProtocol_PictBridge ) + { + // If idle print event is called while usb printing is still ongoing, + // printing is cancelled. + if ( iFactory->IsPrinting() && + ( iFactory->SettingsIF()->GetCurrentPrinterProtocol() == + MDiscoveryObserver::EUSB ) && aError != KErrDisconnected) + { + LOG2("printing pictbridge, aError = %d, aMsgCode = %d", aError, aMsgCode ); + iFactory->PrintEventObserverIF()->PrintJobErrorEvent( KErrDisconnected, KErrNone ); + iFactory->SettingsIF()->SetUsbState( EFalse ); + } + else + { + LOG2("not printing or not pictbridge, aError = %d, aMsgCode = %d", aError, aMsgCode ); + if ( ( aError == KErrDisconnected) && + ( iFactory->SettingsIF()->GetCurrentPrinterProtocol() == + MDiscoveryObserver::EUSB ) ) + { + LOG( "CIdlePrintEventCatcher::StatusEvent 'Connection to printer lost' " ); + + TInt error ( KErrNone ); + TRAP( error, iBuf = StringLoader::LoadL( R_NOTE_DISCONNECT_PRINT_ERROR )); + CAknErrorNote* errornote = new CAknErrorNote( ETrue ); + TInt err ( KErrNone ); + TRAP( err, errornote->ExecuteLD( *iBuf )); + + } + for( TInt i=0; iUsbPrinterDisconnected(); + } + if ( iBuf ) + { + delete iBuf; + iBuf = NULL; + } + + } + } + break; + } + + ///The event is notifying a change in the device status, + ///or is reporting an error sent from the device + case EPrinterStatus: + { + if ( EWarning==aEvent.iSeverity || EFatal==aEvent.iSeverity ) + { + for( TInt i=0; iUsbStateChanged( ENOUSBEvent, aMsgCode ); + } + } + break; + } + + ///The event is notifying that an asynchronous leave has occurred + ///in server and user should be notified in some way + case EAsynchronousLeave: + { + LOG( "CIdlePrintEventCatcher::StatusEvent EAsynchronousLeave!"); + LOG2( "CIdlePrintEventCatcher::StatusEvent protocol: %d, error: %d", + aEvent.iProtocol, aError ); + for( TInt i=0; iAsynchronousServerLeave( aError ); + } + CCoeEnv::Static()->HandleError( aError ); + break; + } + default: + { + // Should not be never called + break; + } + } + LOG("CIdlePrintEventCatcher::StatusEvent END"); + } + +void CIdlePrintEventCatcher::RegisterObserver( MIdlePrintEventObserver* aIdleObserver ) + { + iObservers.Append( aIdleObserver ); + } + +void CIdlePrintEventCatcher::UnRegisterObserver( MIdlePrintEventObserver* aIdleObserver ) + { + TInt observerPosition = iObservers.Find( aIdleObserver ); + if( observerPosition != KErrNotFound ) + { + iObservers.Remove( observerPosition ); + } + } + +// End of File