00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef kwviewmode_h
00021 #define kwviewmode_h
00022
00023 #include <qrect.h>
00024 class KWDocument;
00025 class QPainter;
00026 class QRegion;
00027 class KWTextFrameSet;
00028 class KWFrameSet;
00029 class KWCanvas;
00030 class KoRuler;
00031 class KoPageLayout;
00032 class KWPage;
00033
00047 class KWViewMode
00048 {
00049 protected:
00050 KWViewMode( KWDocument * doc, KWCanvas* canvas, bool drawFrameBorders )
00051 : m_doc( doc ), m_canvas( canvas ), m_drawFrameBorders( drawFrameBorders )
00052 {}
00053 public:
00054 virtual ~KWViewMode() {}
00055
00057 virtual QPoint normalToView( const QPoint & nPoint ) = 0;
00058
00060 QRect normalToView( const QRect & nRect )
00061 { return QRect( normalToView( nRect.topLeft() ), nRect.size() ); }
00062
00064 virtual QPoint viewToNormal( const QPoint & vPoint ) = 0;
00065
00067 QRect viewToNormal( const QRect & nRect )
00068 { return QRect( viewToNormal( nRect.topLeft() ), viewToNormal( nRect.bottomRight() ) ); }
00069
00071 virtual QRect viewPageRect( int pgNum ) = 0;
00072
00074 virtual QSize contentsSize() = 0;
00075
00079 virtual QSize availableSizeForText( KWTextFrameSet* textfs );
00080
00084 virtual QPoint pageCorner();
00087 virtual QRect rulerFrameRect();
00090 virtual void setPageLayout( KoRuler* hRuler, KoRuler* vRuler, const KoPageLayout& layout );
00091
00092 virtual void drawPageBorders( QPainter * painter, const QRect & crect, const QRegion & emptySpaceRegion ) = 0;
00093
00095 virtual void setPagesPerRow(int) {}
00096 virtual int pagesPerRow() { return 0; }
00097
00099 virtual bool drawSelections() { return true; }
00100
00102 virtual bool drawFrameBackground() { return true; }
00103
00105 bool drawFrameBorders() const { return m_drawFrameBorders; }
00106 void setDrawFrameBorders(bool b) { m_drawFrameBorders = b; }
00107
00109 virtual bool isFrameSetVisible( const KWFrameSet* ) { return true; }
00110
00112
00113 virtual bool shouldFormatVertically() { return true; }
00114
00116 virtual bool shouldAdjustMargins() { return true; }
00117
00119 virtual bool hasFrames() { return true; }
00120
00122 virtual bool hasPages() { return true; }
00123
00125 virtual const QString type() const = 0;
00126
00129 virtual bool isTextModeFrameset(KWFrameSet *) const { return false; }
00130
00131 static KWViewMode *create( const QString& viewModeType, KWDocument* doc, KWCanvas* canvas );
00132
00133 KWCanvas * canvas() const { return m_canvas; }
00134
00135 protected:
00143 void drawOnePageBorder( QPainter * painter, const QRect & crect, const QRect & pageRect,
00144 const QRegion & emptySpaceRegion );
00145 QRect drawRightShadow( QPainter * painter, const QRect & crect, const QRect & pageRect, int topOffset );
00146 QRect drawBottomShadow( QPainter * painter, const QRect & crect, const QRect & pageRect, int leftOffset );
00147 static const unsigned short s_shadowOffset;
00148
00149 KWDocument * m_doc;
00150 KWCanvas * m_canvas;
00151 bool m_drawFrameBorders;
00152 };
00153
00155 class KWViewModeNormal : public KWViewMode
00156 {
00157 public:
00158 KWViewModeNormal( KWDocument * doc, KWCanvas* canvas, bool drawFrameBorders )
00159 : KWViewMode( doc, canvas, drawFrameBorders ) {}
00160 virtual ~KWViewModeNormal() {}
00161
00162 virtual QPoint normalToView( const QPoint & nPoint );
00163 virtual QPoint viewToNormal( const QPoint & vPoint );
00164 virtual QRect viewPageRect( int pgNum );
00165 virtual QSize contentsSize();
00166
00167 virtual const QString type() const { return "ModeNormal"; }
00168
00169 virtual void drawPageBorders( QPainter * painter, const QRect & crect, const QRegion & emptySpaceRegion );
00170
00171 protected:
00172 virtual int xOffset(KWPage *page, int canvasWidth = -1);
00173 };
00174
00176 class KWViewModePrint : public KWViewModeNormal
00177 {
00178 public:
00179 KWViewModePrint( KWDocument * doc, KWCanvas* canvas )
00180 : KWViewModeNormal( doc, canvas, false ) {}
00181 virtual ~KWViewModePrint() {}
00182 virtual bool drawSelections() { return false; }
00183 protected:
00184 virtual int xOffset(KWPage *page, int canvasWidth = -1);
00185 };
00186
00188 class KWViewModeEmbedded : public KWViewMode
00189 {
00190 public:
00191 KWViewModeEmbedded ( KWDocument * doc, KWCanvas* canvas )
00192 : KWViewMode( doc, canvas, false ),
00193 mDrawFrameBackground( true ),
00194 mDrawSelections( true )
00195 {}
00196 virtual ~ KWViewModeEmbedded() {}
00197
00198 void setDrawFrameBackground( bool b ) { mDrawFrameBackground = b; }
00199 void setDrawSelections( bool b ) { mDrawSelections = b; }
00200
00201
00202 virtual QPoint normalToView( const QPoint & nPoint ) { return nPoint; }
00203 virtual QPoint viewToNormal( const QPoint & vPoint ) { return vPoint; }
00204 virtual QRect viewPageRect( int pgNum );
00205 virtual QSize contentsSize() { return QSize(); }
00206 virtual bool hasPages() { return false; }
00207
00208 virtual void drawPageBorders( QPainter *, const QRect &, const QRegion & ){}
00209 virtual bool drawSelections() { return mDrawSelections; }
00210
00211 virtual const QString type() const { return "ModeEmbedded"; }
00212 virtual bool drawFrameBackground() { return mDrawFrameBackground; }
00213
00214 private:
00215 bool mDrawFrameBackground;
00216 bool mDrawSelections;
00217 };
00218
00219
00222 class KWViewModePreview : public KWViewMode
00223 {
00224 public:
00225 KWViewModePreview( KWDocument * doc, KWCanvas* canvas, bool drawFrameBorders, int _nbPagePerRow );
00226 virtual ~KWViewModePreview() {}
00227
00228 virtual QPoint normalToView( const QPoint & nPoint );
00229 virtual QPoint viewToNormal( const QPoint & vPoint );
00230 virtual QRect viewPageRect( int pgNum );
00231 virtual QSize contentsSize();
00232 virtual void drawPageBorders( QPainter * painter, const QRect & crect, const QRegion & emptySpaceRegion );
00233
00234 virtual void setPagesPerRow(int _nb) {m_pagesPerRow=_nb;}
00235 virtual int pagesPerRow() {return m_pagesPerRow;}
00236 virtual const QString type() const { return "ModePreview"; }
00237
00238 int numRows() const;
00239
00240
00242 int leftSpacing();
00244 int topSpacing();
00245
00246 private:
00247 int m_pagesPerRow;
00248 int m_spacing;
00249 };
00250
00252 class KWViewModeText : public KWViewMode
00253 {
00254 public:
00255
00256 KWViewModeText( KWDocument * doc, KWCanvas* canvas, KWTextFrameSet* fs );
00257 virtual ~KWViewModeText() {}
00258
00259 KWTextFrameSet *textFrameSet() const;
00266 static KWTextFrameSet *determineTextFrameSet( KWDocument* doc );
00267
00268 virtual QPoint normalToView( const QPoint & nPoint );
00269 virtual QPoint viewToNormal( const QPoint & vPoint );
00270 virtual QSize contentsSize();
00271 virtual QRect viewPageRect( int ) { return QRect(); }
00272 virtual QSize availableSizeForText( KWTextFrameSet* textfs );
00273
00274 virtual QPoint pageCorner() { return QPoint( 0, 0 ); }
00275 virtual QRect rulerFrameRect();
00276 virtual void setPageLayout( KoRuler* hRuler, KoRuler* vRuler, const KoPageLayout& layout );
00277
00278 virtual void drawPageBorders( QPainter * painter, const QRect & crect, const QRegion & emptySpaceRegion );
00279 virtual const QString type() const { return "ModeText"; }
00280 virtual bool shouldFormatVertically() { return false; }
00281 virtual bool shouldAdjustMargins() { return false; }
00282 virtual bool hasFrames() { return false; }
00283 virtual bool hasPages() { return false; }
00284
00285 virtual bool isFrameSetVisible( const KWFrameSet* fs );
00286
00287 virtual bool isTextModeFrameset(KWFrameSet *fs) const;
00288
00290 static const int OFFSET = 10;
00291
00292
00293 private:
00294 mutable KWTextFrameSet *m_textFrameSet;
00295 };
00296
00297 #endif