DirectPrint/DirectPrintServer/inc/directprintbody.h
branchRCL_3
changeset 12 613a5ff70823
child 15 2275db202402
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/inc/directprintbody.h	Wed Mar 31 00:04:55 2010 +0900
@@ -0,0 +1,294 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  Contains the CDirectPrintBody class definition.
+*
+*/
+
+
+// Protection against nested includes
+#ifndef CDIRECTPRINTBODY_H
+#define CDIRECTPRINTBODY_H
+
+// System includes
+#include <e32base.h>
+
+// User includes
+#include "imageprint.h"
+#include "directprintprotocolsloader.h"
+#include "directprintscheduler.h"
+#include "mprotprintingdevice.h"
+
+// Forward declarations
+class TDpMessage;
+
+/**
+ *
+ *	This class is in charge of discoverying devices across the protocols available, of creating
+ *	a print job in the right printer and right protocol, etc. It can be considered a controller. 
+ *	Implements the MProtPrintingDevice observers (MProtDiscoveryObserver, MProtPrintEventObserver) so it can act
+ *	accordingly when the protocols report or need something.
+ */
+class CDirectPrintBody : public CBase, public MProtDiscoveryObserver, public MProtPrintEventObserver, public MProtIdleObserver
+	{
+	public:
+	
+		/**
+         *	2-phase constructor
+         *
+         *	@return new object      
+         */
+		static CDirectPrintBody* NewL();
+		
+		/**
+         *	Destructor         
+         */
+		~CDirectPrintBody();
+
+		/**
+         *	Start discovery for one or several protocols
+         *
+         *	@param aObserver observer for notifications about discovery events
+         *	@param aProtocols OR:ed protocol ids
+         *	@return error code     
+         */
+		TInt StartDiscovery(MPrinterDiscoveryObserver& aObserver, TUint aProtocols = 0);
+		
+		/**
+         *	Cancel discovery        
+         */
+		void CancelDiscovery();
+		
+		/**
+         *	Creates print job
+         *
+         *	@param aPrinterID printer id
+         *	@param aImages array of image file names to be printed
+         *	@param aObserver observer for notifications about print job events
+         *	@return error code     
+         */
+		TInt CreatePrintJobL(TInt aPrinterID, RPointerArray<TDesC>& aImages, MPrintEventObserver& aObserver);
+		
+		/**
+         *	Start actual printing of previously created print job
+         */
+		void SubmitPrintJobL();
+		
+		/**
+         *	Cancel print job
+         *
+         *	@return error code      
+         */
+		TInt CancelPrintJob();
+		
+		/**
+         *	Continue print job
+         *
+         *	@return error code      
+         */
+		TInt ContinuePrintJobL();
+		
+		/**
+         *	Print pages amount getter
+         *
+         *	@return amount of print pages with current settings for current print job    
+         */
+		TInt GetNumPrintPages();
+		
+		/**
+         *	Job status getter
+         *
+         *	@return job status code    
+         */
+		TInt GetJobStatus();
+		
+		/**
+         *	Printer status getter
+         *
+         *	@param aPrinterID printer id
+         *	@return printer status code    
+         */
+		TInt GetPrinterStatus(TInt aPrinterID);
+		
+		/**
+         *	Printer capability id getter
+         *
+         *	@param aPrinterID printer id
+         *	@param aCapabilityIDs place holder for capability ids supported by printer
+         *	@return error code    
+         */
+		TInt GetPrinterCapabilityIDsL(TInt aPrinterID, RArray<TInt>& aCapabilityIDs);
+		
+		/**
+         *	Printer capability getter
+         *
+         *	@param aPrinterID printer id
+         *	@param aCapabilityID capability id
+         *	@param aCapability place holder for capability
+         *	@return error code    
+         */
+		TInt GetPrinterCapabilityL(TInt aPrinterID, TInt aCapabilityID, TDirectPrintCapability& aCapability);
+		
+		/**
+         *	Printer setting getter
+         *
+         *	@param aCapabilityID capability id
+         *	@param aValue place holder for capability value
+         *	@return error code    
+         */
+		TInt GetJobSetting(TInt aCapabilityID, TInt& aValue);
+		
+		/**
+         *	Printer setting setter
+         *
+         *	@param aCapabilityID capability id
+         *	@param aValue capability value
+         *	@param aAffectedCapability affected capability id
+         *	@return error code    
+         */
+		TInt SetJobSettingL(TInt aCapabilityID, TInt aValue, TInt& aAffectedCapability);
+		
+		/**
+         *	Preview pages amount getter for current protocol
+         *
+         *	@return preview pages amount      
+         */
+		TInt GetNumPreviewPages();
+		
+		/**
+         *	Template icon getter
+         *
+         *	@param aTemplateID template id
+         *	@param aFbsBitmapHandle place holder for template bitmap handle
+         *	@return error code    
+         */
+		TInt GetJobTemplateIconL(TInt aTemplateID, TInt& aFbsBitmapHandle);
+		
+		/**
+         *Creates a preview image
+         *
+         *	@param aPageNumber Page number to create preview image of
+         *	@return error code    
+         */
+		TInt CreatePreviewImage(TInt aPageNumber);
+		
+		/**
+         *	Remove cached printer
+         *
+         *	@param aPrinterID printer id
+         *	@return error code    
+         */
+		TInt RemoveCachedPrinterL(TInt aPrinterID);
+		
+		/**
+         *	Supported protocols getter
+         *
+         *	@return OR:ed protocol ids      
+         */
+		TUint SupportedProtocols();
+
+		/**
+         *	Register observer for idle events receiving
+         *
+         *	@param aObserver observer      
+         */
+		void RegisterIdleObserver(MIdleObserver* aObserver);
+
+		/**
+         *	Number of copies setter for current print job
+         *
+         *	@param aNumsOfCopies number of copies array
+         *	@param aErr place holder for error code      
+         */
+		void SetNumsOfCopiesL(const RArray<TInt>& aNumsOfCopies, TInt& aErr);
+
+		/**
+         *	Handle session disconnection
+         *
+         *	@param aIdleObserver idle observer object of that session
+         *	@param aDiscoveryObserver discovery observer object of that session     
+         *	@param aEventObserver print job observer object of that session
+         */
+		void HandleSessionDisconnect( const MIdleObserver* aIdleObserver,
+									const MPrinterDiscoveryObserver* aDiscoveryObserver,
+									const MPrintEventObserver* aEventObserver );
+
+		/**
+         *	Number of protocols getter
+         *
+         *	@return number of protocols
+         */
+		TInt ProtocolCount();
+
+		/**
+         *	Protocol name getter
+         *
+         *	@param aMessage message completed upon event arrival
+         *	@return error code
+         */
+		TInt GetProtocolNameL(TDpMessage& aMessage);
+
+
+	private: // from MProtDiscoveryObserver
+		void FoundDeviceL(TPrinter& aDeviceInfo);
+		void DiscoveryStatusL(TInt aStatus, TInt aErrorCode, TInt aErrorStringCode);
+		void RemoveDeviceL(TPrinter& aDeviceInfo);
+
+	private: // from MProtPrintEventObserver
+		void PrintJobProgressEvent(TInt aStatus, TInt aPercent, TInt aJobStateCode);
+		void PrintJobErrorEvent(TInt aErrorCode, TInt aErrorStringCode);
+		void PrinterStatusEvent(TInt aErrorCode, TInt aErrorStringCode);
+		void PreviewImageEvent(TInt aFsBitmapHandle);
+		void ShowMessageL(TInt aMsgLine1Code, TInt aMsgLine2Code);
+		TBool AskYesNoQuestionL(TInt aMsgLine1Code, TInt aMsgLine2Code);
+		const TDesC& AskForInputL(TInt aMsgLine1Code, TInt aMsgLine2Code);
+
+	private: // from MProtIdleObserver
+		void StatusEvent(const TEvent &aEvent, TInt aError, TInt aMsgCode);
+	
+	private:
+		CDirectPrintBody();
+		void ConstructL();
+		TInt FindInternalDeviceReference(TInt aExternalDeviceID, TInt& aInternalDeviceID, MProtPrintingDevice*& aProtToUse);
+		TInt ValidateImagesL(const RPointerArray<HBufC>& aImageList, TInt &aInvalidCount);
+		CDirectPrintScheduler& ActiveScheduler() const;
+		void TryNextDiscovery();
+		static TInt TryNextDiscoveryL(TAny* aObj);
+		void DoTryNextDiscoveryL();
+
+	private:
+		/// Class loader and manager.
+		CDirectPrintProtocolsLoader* iClassLoader;
+		/// Pointer to store the current protocol in use for discovery.
+		MProtPrintingDevice* iCurrentProtocol;
+		/// Pointer to store the current protocol in use for creating a print job.
+		MProtPrintingDevice* iCurrentPrintJobProtocol;
+		/// DirectPrint Observer.
+		MPrinterDiscoveryObserver* iPrinterDiscoveryObserver;
+		/// DirectPrint Observer.
+		MPrintEventObserver* iPrinterPrintEventObserver;
+		/// DirectPrint Idle Observer.
+		MIdleObserver* iPrinterIdleObserver;							
+		/// Used to store the requested protocols.
+		TUint iProtocolsRequested;
+		/// Array of the image filenames to print.
+		RPointerArray<HBufC> iImageFileNames;
+		/// Enables async discovery
+		CIdle* iIdleDiscovery;
+		
+		TBool iDiscoveryCancelled;
+	};
+
+#endif // CDIRECTPRINTBODY_H
+
+//  End of File