williamr@2: // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef __PRNSETUP_H__ williamr@2: #define __PRNSETUP_H__ williamr@2: williamr@2: #if !defined(__E32STD_H__) williamr@2: #include williamr@2: #endif williamr@2: #if !defined(__E32BASE_H__) williamr@2: #include williamr@2: #endif williamr@2: #if !defined(__FLDBLTIN_H__) williamr@2: #include williamr@2: #endif williamr@2: #if !defined(__PRNINF_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: /** @publishedPartner */ williamr@2: const TInt KErrMorePages=4747; // Leave with this error code to print extra pages in PrintBandL williamr@2: williamr@2: /** @internalTechnology */ williamr@2: _LIT( KDefaultPrinterDriverPath, "\\resource\\printers\\" ); williamr@2: williamr@2: // Classes defined // williamr@2: class CPrintSetup; williamr@2: // williamr@2: williamr@2: // Forward Reference williamr@2: class CPreviewProcess; williamr@2: class CPrintProcess; williamr@2: class CPdrModelList; williamr@2: class CPdrDevice; williamr@2: class CHeaderFooter; williamr@2: class TPageSpec; williamr@2: class RReadStream; williamr@2: class RWriteStream; williamr@2: class MPageRegionPrinter; williamr@2: class RFs; williamr@2: class CPrinterDriver; williamr@2: class CPrinterDriverUI; williamr@2: // williamr@2: williamr@2: class CPrintSetup : public CBase, private MFieldPageNumInfo williamr@2: /** Print setup information. williamr@2: williamr@2: This class stores the information needed to set up, start and stop a print williamr@2: job. This includes the target printer device, the page margins and williamr@2: the header and footer. The page specification, (page orientation and page williamr@2: dimensions) can be set via the printer device. williamr@2: williamr@2: Print setup information is associated with a document and is stored as part williamr@2: of the persistent form of the document. Print parameters on the other hand, williamr@2: (class TPrintParameters) are associated with a particular print request, williamr@2: not with the document itself, so are not part of the print setup information. williamr@2: williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CPrintSetup* NewL(); williamr@2: IMPORT_C virtual ~CPrintSetup(); williamr@2: // williamr@2: // printer model selection/control functions williamr@2: IMPORT_C void AddPrinterDriverDirL(const TDesC& aDriverDir); williamr@2: IMPORT_C CPrinterModelList* ModelNameListL(RFs& aFs); williamr@2: IMPORT_C void FreeModelList(); williamr@2: IMPORT_C void CreatePrinterDeviceL(TInt aModelIndex); // requires ModelList to exist williamr@2: IMPORT_C void CreatePrinterDeviceL(TUid aModelUid,RFs& aFs); williamr@2: IMPORT_C CPrinterDevice* PrinterDevice()const; williamr@2: IMPORT_C CPrinterDriverUI* CreatePrinterDriverUIL(); // ownership is transfered to the caller williamr@2: // williamr@2: // print functions williamr@2: IMPORT_C void EndPrint(); williamr@2: IMPORT_C TInt StartPrintL(const TPrintParameters& aPrintParams,MPageRegionPrinter& aBodyPrinter, williamr@2: CPrinterPort* aPort,MPrintProcessObserver* anObserver); williamr@2: IMPORT_C TInt StartPreviewPrintL(const TPrintParameters& aPrintParams,MPageRegionPrinter& aBodyPrinter, williamr@2: MPrintProcessObserver* anObserver,CGraphicsDevice& aPreviewDev,const TRect& aHeaderRectInPixels, williamr@2: const TRect& aFooterRectInPixels,TInt aNumBands); williamr@2: // williamr@2: // accessors williamr@2: inline CHeaderFooter* Header()const; williamr@2: inline CHeaderFooter* Footer()const; williamr@2: // williamr@2: // persistence williamr@2: IMPORT_C TStreamId StoreL(CStreamStore& aStore)const; williamr@2: IMPORT_C void RestoreL(const CStreamStore& aStore,TStreamId aStreamId,const MFieldFileNameInfo* aFileNameInfo=NULL,const MFieldNumPagesInfo* aNumPagesInfo=NULL,MPictureFactory* aFactory=NULL); williamr@2: IMPORT_C void StoreComponentsL(CStreamStore& aStore,CStoreMap& aMap)const; williamr@2: IMPORT_C void RestoreComponentsL(const CStreamStore& aStore,const MFieldFileNameInfo* aFileNameInfo=NULL,const MFieldNumPagesInfo* aNumPagesInfo=NULL,MPictureFactory* aFactory=NULL); williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream) const; williamr@2: IMPORT_C void InternalizeL(RReadStream& aStream); williamr@2: // williamr@2: private: williamr@2: CPrintSetup(); williamr@2: void ConstructL(); williamr@2: void DoStartPrintL(const TPrintParameters& aPrintParams,MPageRegionPrinter& aBodyPrinter,MPrintProcessObserver* aObserver,CPrinterPort* aPort); williamr@2: void InitializePrintingL(CGraphicsDevice* aPrinterDev,const TPrintParameters& aPrintParams,MPrintProcessObserver* aObserver); williamr@2: void InitializePrintingL(const TPrintParameters& aPrintParams,MPrintProcessObserver* aObserver, williamr@2: const TRect& aHeaderRectInPixels,const TRect& aFooterRectInPixels); williamr@2: // from MFieldPageNumInfo williamr@2: TInt UpdateFieldPageNum()const; williamr@2: public: williamr@2: // Info regarding print setup etc. williamr@2: /** The header and footer offset and the width of the four margins. williamr@2: williamr@2: All measurements are in twips. williamr@2: williamr@2: @see TPageMargins */ williamr@2: TPageMargins iPageMarginsInTwips; williamr@2: /** The number of the first page in the document. williamr@2: williamr@2: This value is used for printing or displaying page numbering. Note that all williamr@2: other page numbering is zero indexed, to preserve independence from user-defined williamr@2: page numbering. */ williamr@2: TInt iNumOfFirstPage; // value to start page numbering at williamr@2: private: williamr@2: enum { williamr@2: ENumberFirstPage = 0x0001, williamr@2: }; williamr@2: private: williamr@2: CHeaderFooter* iHeader; williamr@2: CHeaderFooter* iFooter; williamr@2: CPrinterDriver* iPrinterDriver; // the target printer driver williamr@2: CPreviewProcess* iPrintProcess; williamr@2: CPdrModelList* iModelList; williamr@2: MPrintProcessObserver* iPrintObserver; williamr@2: TPrintParameters iPrintParams; // not persisted williamr@2: CArrayFixSeg* iDriverDirList; williamr@2: }; williamr@2: williamr@2: williamr@2: // williamr@2: // inlines williamr@2: // williamr@2: williamr@2: inline CHeaderFooter* CPrintSetup::Header()const williamr@2: /** Gets the header. williamr@2: williamr@2: The CPrintSetup object owns the header and footer. CPrintSetup implements williamr@2: the MFieldPageNumInfo interface, which allows page numbering to be easily williamr@2: added to fields. williamr@2: williamr@2: @return The header. */ williamr@2: { return iHeader; } williamr@2: williamr@2: inline CHeaderFooter* CPrintSetup::Footer()const williamr@2: /** Gets the footer. williamr@2: williamr@2: @return The footer. */ williamr@2: { return iFooter; } williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: #endif