epoc32/include/prnprev.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
permissions -rw-r--r--
Final list of Symbian^2 public API header files
     1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // 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
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 //
    15 
    16 #if !defined (__PRNPREV_H__)
    17 #define __PRNPREV_H__
    18 
    19 #if !defined(__E32STD_H__)
    20 #include  <e32std.h>
    21 #endif
    22 #if !defined(__E32BASE_H__)
    23 #include  <e32base.h>
    24 #endif
    25 #if !defined(__PRNSETUP_H__)
    26 #include <prnsetup.h>
    27 #endif
    28 
    29 // classes defined:
    30 class TPrintPreviewFormat;
    31 class TPreviewPanel;
    32 class CPrintPreviewImage;
    33 //
    34 
    35 // forward references:
    36 class RWsSession;
    37 class RWindow;
    38 class CPrintPreviewDevice;
    39 //
    40 
    41 
    42 class TPrintPreviewFormat
    43 /** Print preview format information.
    44 
    45 The print preview format information is accessed via its public data members. 
    46 Typically there is a system wide TPrintPreviewFormat supplied by the GUI framework. 
    47 
    48 Preview information includes:
    49 
    50 - panel settings: multiple pages can be previewed at once; the display area 
    51 for each page is termed a panel.
    52 
    53 - label settings: each panel can have an associated label, which specifies the 
    54 corresponding document page number 
    55 
    56 @publishedAll 
    57 @released */
    58 	{
    59 public:
    60 	/** The minimum panel gutter size, in pixels. */
    61 	TSize iMinPanelGutterInPixels;
    62 	/** The width of the panel shadow, in pixels. */
    63 	TInt iPanelShadowWidthInPixels;
    64 	/** The colour of the panel shadow. */
    65 	TRgb iPanelShadowColor;
    66 	/** The panel margin colour. */
    67 	TRgb iPanelMarginColor;
    68 	/** The color of both the paper and the window background. */
    69 	TRgb iPreviewBackgroundColor;
    70 	/** X pixel offset of the label text from the panel edge. */
    71 	TInt iLabelOffsetInPixels;
    72 	/** Font specification for the label text. */
    73 	TFontSpec iLabelFontSpecInPixels;
    74 	};
    75 
    76 
    77 class CPrintPreviewImage : public CBase, private MPrintProcessObserver, private MPageRegionPrinter
    78 /** Print preview image.
    79 
    80 This class provides a standard print preview image. An object of this type 
    81 should be owned by a control, which is in turn owned by the print preview 
    82 dialog. The control's window provides the region into which this object draws 
    83 the preview image.
    84 
    85 The class provides a callback to the application code that draws the preview 
    86 pages. 
    87 
    88 @publishedAll 
    89 @released */
    90 	{
    91 public:
    92 	/** Margin display state flags. */
    93 	enum TMarginState {
    94 		/** Show margins in print preview image. */
    95 		EShowMargins,
    96 		/** Hide margins in print preview image. */
    97 		EHideMargins
    98 		};
    99 public:
   100 	IMPORT_C static CPrintPreviewImage* NewL(CPrintSetup& aPrintSetup,MPageRegionPrinter& aBodyPrinter,
   101 											RWsSession& aWsSession,RWindow& aWindow,const TSize& aMaxWindowSize,
   102 											const TPrintPreviewFormat& aStaticFormat);
   103 	IMPORT_C virtual ~CPrintPreviewImage();
   104 	IMPORT_C void SetMargins(TMarginState aState); // whether  or not to show margins
   105 	IMPORT_C void SetObserver(MPrintProcessObserver& aObserver);
   106 	IMPORT_C void SetNumBands(TInt aNum);
   107 	IMPORT_C void FormatL(TInt aNumPagesInDoc,TInt aFirstPageToDisplay,TInt aNumPagesToView); // call when scrolling or changing num pages to view
   108 	IMPORT_C void DrawL(const TPoint& aOrigin,const TRect& aInvalidRegion); // aOrigin is the point in the window I will treat as the origin (ie offset)
   109 	//
   110 private:
   111 	class TPreviewPanel;
   112 	class TRange
   113 		{
   114 	public:
   115 		TInt iFrom;
   116 		TInt iTo;
   117 		};
   118 private:
   119 	CPrintPreviewImage(CPrintSetup& aPrintSetup,MPageRegionPrinter& aBodyPrinter,RWsSession& aWsSession,
   120 						RWindow& aWindow,const TSize& aMaxWindowSize,const TPrintPreviewFormat& aStaticFormat);
   121 	void ConstructL();
   122 	void CalculateHeaderFooterRects(TRect& aHeaderRectInPixels,TRect& aFooterRectInPixels);
   123 	TInt SetPanelArrayL(const TInt aFirstPage,const TInt aNumPagesToView); 
   124 	void SetLabelWidth();
   125 	void ScrollPanels();
   126 	void DrawBorder(CGraphicsContext* aGc); // and shadow
   127 	void DrawMargins(CGraphicsContext* aGc); // including header/footer lines
   128 	void DrawLabel(CGraphicsContext* aGc,TInt aPageNo);
   129 	void DrawToGutter(CGraphicsContext* aGc,TInt aPageNo); // blanks all the gutter areas associated to a particular panel
   130 	void DrawExtremities(CGraphicsContext* aGc); // blanks very left and right of the window
   131 	inline TBool IsFirstPanel(TInt aPageNum);
   132 	inline TBool IsLastPanel(TInt aPageNum);
   133 	// from MPrintProcessObserver
   134 	virtual void NotifyPrintStarted(TPrintParameters aPrintParams);
   135 	virtual void NotifyBandPrinted(TInt aPercentageOfPagePrinted, TInt aCurrentPageNum, TInt aCurrentCopyNum);
   136 	virtual void NotifyPrintEnded(TInt anErrorCode);
   137 	// from MPageRegionPrinter
   138 	virtual void PrintBandL(CGraphicsDevice* aDevice,TInt aPageNo,const TBandAttributes& aBand);
   139 private:
   140 	CPrintPreviewDevice* iDevice;
   141 	CPrintSetup* iPrintSetup;
   142 	MPageRegionPrinter* iAppBodyPrinter;
   143 	MPrintProcessObserver* iObserver; // may be null
   144 	RWsSession* iWsSession;
   145 	RWindow* iWindow;
   146 	CFont* iLabelFont;
   147 	CArrayFix<TPreviewPanel>* iPanelArray;
   148 	//
   149 	TPrintPreviewFormat iFormat;
   150 	TPrintParameters iPrintParams; // current preview range
   151 	TMarginState iMarginState; // whether the margins are on or not
   152 	TSize iPanelSizeInPixels;
   153 	TSize iWinSize; // size of the window (for layout purposes)
   154 	TPoint iOrigin; // origin in the window to use for drawing
   155 	TSize iLabelSize;
   156 	TSize iActualGutter; // gap from the edge of the panel to either screen edge or adjacent panel
   157 	TInt iNumPagesInDoc; 
   158 	TInt iNumBands;
   159 	TSize iRndError; // rounding error from calculation of iActualGutter
   160 	TRange iDrawRange; // the pages that actually require drawing - ie have not been scrolled 
   161 	};
   162 
   163 
   164 /** Internalises the margin state from a read stream.
   165 
   166 @param aThing The margin state to be internalised - on or off.
   167 @param aStream The read stream from which the margin state is to be internalised. 
   168 
   169 @publishedAll 
   170 @released */
   171 IMPORT_C void InternalizeL(CPrintPreviewImage::TMarginState& aThing,RReadStream& aStream);
   172 
   173 inline RWriteStream& operator<<(RWriteStream& aStream,const CPrintPreviewImage::TMarginState& aThing) 
   174 /**
   175 @publishedAll 
   176 @released 
   177 */
   178 	{aStream.WriteUint8L(aThing);return aStream;}
   179 
   180 inline RReadStream& operator>>(RReadStream& aStream,CPrintPreviewImage::TMarginState& aThing) 
   181 /**
   182 @publishedAll 
   183 @released 
   184 */
   185 	{InternalizeL(aThing,aStream);return aStream;}
   186 
   187 //
   188 // inlines
   189 //
   190 
   191 // move to private source...
   192 
   193 inline TBool CPrintPreviewImage::IsFirstPanel(TInt aPageNum) 
   194 	{ return aPageNum==iPrintParams.iFirstPage; }
   195 
   196 inline TBool CPrintPreviewImage::IsLastPanel(TInt aPageNum) 
   197 	{ return aPageNum==iPrintParams.iLastPage; }
   198 
   199 
   200 #endif