1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/epoc32/include/mw/prnprev.h Wed Mar 31 12:27:01 2010 +0100
1.3 @@ -0,0 +1,200 @@
1.4 +// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// 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
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +//
1.18 +
1.19 +#if !defined (__PRNPREV_H__)
1.20 +#define __PRNPREV_H__
1.21 +
1.22 +#if !defined(__E32STD_H__)
1.23 +#include <e32std.h>
1.24 +#endif
1.25 +#if !defined(__E32BASE_H__)
1.26 +#include <e32base.h>
1.27 +#endif
1.28 +#if !defined(__PRNSETUP_H__)
1.29 +#include <prnsetup.h>
1.30 +#endif
1.31 +
1.32 +// classes defined:
1.33 +class TPrintPreviewFormat;
1.34 +class TPreviewPanel;
1.35 +class CPrintPreviewImage;
1.36 +//
1.37 +
1.38 +// forward references:
1.39 +class RWsSession;
1.40 +class RWindow;
1.41 +class CPrintPreviewDevice;
1.42 +//
1.43 +
1.44 +
1.45 +class TPrintPreviewFormat
1.46 +/** Print preview format information.
1.47 +
1.48 +The print preview format information is accessed via its public data members.
1.49 +Typically there is a system wide TPrintPreviewFormat supplied by the GUI framework.
1.50 +
1.51 +Preview information includes:
1.52 +
1.53 +- panel settings: multiple pages can be previewed at once; the display area
1.54 +for each page is termed a panel.
1.55 +
1.56 +- label settings: each panel can have an associated label, which specifies the
1.57 +corresponding document page number
1.58 +
1.59 +@publishedAll
1.60 +@released */
1.61 + {
1.62 +public:
1.63 + /** The minimum panel gutter size, in pixels. */
1.64 + TSize iMinPanelGutterInPixels;
1.65 + /** The width of the panel shadow, in pixels. */
1.66 + TInt iPanelShadowWidthInPixels;
1.67 + /** The colour of the panel shadow. */
1.68 + TRgb iPanelShadowColor;
1.69 + /** The panel margin colour. */
1.70 + TRgb iPanelMarginColor;
1.71 + /** The color of both the paper and the window background. */
1.72 + TRgb iPreviewBackgroundColor;
1.73 + /** X pixel offset of the label text from the panel edge. */
1.74 + TInt iLabelOffsetInPixels;
1.75 + /** Font specification for the label text. */
1.76 + TFontSpec iLabelFontSpecInPixels;
1.77 + };
1.78 +
1.79 +
1.80 +class CPrintPreviewImage : public CBase, private MPrintProcessObserver, private MPageRegionPrinter
1.81 +/** Print preview image.
1.82 +
1.83 +This class provides a standard print preview image. An object of this type
1.84 +should be owned by a control, which is in turn owned by the print preview
1.85 +dialog. The control's window provides the region into which this object draws
1.86 +the preview image.
1.87 +
1.88 +The class provides a callback to the application code that draws the preview
1.89 +pages.
1.90 +
1.91 +@publishedAll
1.92 +@released */
1.93 + {
1.94 +public:
1.95 + /** Margin display state flags. */
1.96 + enum TMarginState {
1.97 + /** Show margins in print preview image. */
1.98 + EShowMargins,
1.99 + /** Hide margins in print preview image. */
1.100 + EHideMargins
1.101 + };
1.102 +public:
1.103 + IMPORT_C static CPrintPreviewImage* NewL(CPrintSetup& aPrintSetup,MPageRegionPrinter& aBodyPrinter,
1.104 + RWsSession& aWsSession,RWindow& aWindow,const TSize& aMaxWindowSize,
1.105 + const TPrintPreviewFormat& aStaticFormat);
1.106 + IMPORT_C virtual ~CPrintPreviewImage();
1.107 + IMPORT_C void SetMargins(TMarginState aState); // whether or not to show margins
1.108 + IMPORT_C void SetObserver(MPrintProcessObserver& aObserver);
1.109 + IMPORT_C void SetNumBands(TInt aNum);
1.110 + IMPORT_C void FormatL(TInt aNumPagesInDoc,TInt aFirstPageToDisplay,TInt aNumPagesToView); // call when scrolling or changing num pages to view
1.111 + 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)
1.112 + //
1.113 +private:
1.114 + class TPreviewPanel;
1.115 + class TRange
1.116 + {
1.117 + public:
1.118 + TInt iFrom;
1.119 + TInt iTo;
1.120 + };
1.121 +private:
1.122 + CPrintPreviewImage(CPrintSetup& aPrintSetup,MPageRegionPrinter& aBodyPrinter,RWsSession& aWsSession,
1.123 + RWindow& aWindow,const TSize& aMaxWindowSize,const TPrintPreviewFormat& aStaticFormat);
1.124 + void ConstructL();
1.125 + void CalculateHeaderFooterRects(TRect& aHeaderRectInPixels,TRect& aFooterRectInPixels);
1.126 + TInt SetPanelArrayL(const TInt aFirstPage,const TInt aNumPagesToView);
1.127 + void SetLabelWidth();
1.128 + void ScrollPanels();
1.129 + void DrawBorder(CGraphicsContext* aGc); // and shadow
1.130 + void DrawMargins(CGraphicsContext* aGc); // including header/footer lines
1.131 + void DrawLabel(CGraphicsContext* aGc,TInt aPageNo);
1.132 + void DrawToGutter(CGraphicsContext* aGc,TInt aPageNo); // blanks all the gutter areas associated to a particular panel
1.133 + void DrawExtremities(CGraphicsContext* aGc); // blanks very left and right of the window
1.134 + inline TBool IsFirstPanel(TInt aPageNum);
1.135 + inline TBool IsLastPanel(TInt aPageNum);
1.136 + // from MPrintProcessObserver
1.137 + virtual void NotifyPrintStarted(TPrintParameters aPrintParams);
1.138 + virtual void NotifyBandPrinted(TInt aPercentageOfPagePrinted, TInt aCurrentPageNum, TInt aCurrentCopyNum);
1.139 + virtual void NotifyPrintEnded(TInt anErrorCode);
1.140 + // from MPageRegionPrinter
1.141 + virtual void PrintBandL(CGraphicsDevice* aDevice,TInt aPageNo,const TBandAttributes& aBand);
1.142 +private:
1.143 + CPrintPreviewDevice* iDevice;
1.144 + CPrintSetup* iPrintSetup;
1.145 + MPageRegionPrinter* iAppBodyPrinter;
1.146 + MPrintProcessObserver* iObserver; // may be null
1.147 + RWsSession* iWsSession;
1.148 + RWindow* iWindow;
1.149 + CFont* iLabelFont;
1.150 + CArrayFix<TPreviewPanel>* iPanelArray;
1.151 + //
1.152 + TPrintPreviewFormat iFormat;
1.153 + TPrintParameters iPrintParams; // current preview range
1.154 + TMarginState iMarginState; // whether the margins are on or not
1.155 + TSize iPanelSizeInPixels;
1.156 + TSize iWinSize; // size of the window (for layout purposes)
1.157 + TPoint iOrigin; // origin in the window to use for drawing
1.158 + TSize iLabelSize;
1.159 + TSize iActualGutter; // gap from the edge of the panel to either screen edge or adjacent panel
1.160 + TInt iNumPagesInDoc;
1.161 + TInt iNumBands;
1.162 + TSize iRndError; // rounding error from calculation of iActualGutter
1.163 + TRange iDrawRange; // the pages that actually require drawing - ie have not been scrolled
1.164 + };
1.165 +
1.166 +
1.167 +/** Internalises the margin state from a read stream.
1.168 +
1.169 +@param aThing The margin state to be internalised - on or off.
1.170 +@param aStream The read stream from which the margin state is to be internalised.
1.171 +
1.172 +@publishedAll
1.173 +@released */
1.174 +IMPORT_C void InternalizeL(CPrintPreviewImage::TMarginState& aThing,RReadStream& aStream);
1.175 +
1.176 +inline RWriteStream& operator<<(RWriteStream& aStream,const CPrintPreviewImage::TMarginState& aThing)
1.177 +/**
1.178 +@publishedAll
1.179 +@released
1.180 +*/
1.181 + {aStream.WriteUint8L(aThing);return aStream;}
1.182 +
1.183 +inline RReadStream& operator>>(RReadStream& aStream,CPrintPreviewImage::TMarginState& aThing)
1.184 +/**
1.185 +@publishedAll
1.186 +@released
1.187 +*/
1.188 + {InternalizeL(aThing,aStream);return aStream;}
1.189 +
1.190 +//
1.191 +// inlines
1.192 +//
1.193 +
1.194 +// move to private source...
1.195 +
1.196 +inline TBool CPrintPreviewImage::IsFirstPanel(TInt aPageNum)
1.197 + { return aPageNum==iPrintParams.iFirstPage; }
1.198 +
1.199 +inline TBool CPrintPreviewImage::IsLastPanel(TInt aPageNum)
1.200 + { return aPageNum==iPrintParams.iLastPage; }
1.201 +
1.202 +
1.203 +#endif