kword

KWViewMode.h

00001 /* This file is part of the KDE project
00002    Copyright (C) 2001 David Faure <faure@kde.org>
00003 
00004    This library is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Library General Public
00006    License as published by the Free Software Foundation; either
00007    version 2 of the License, or (at your option) any later version.
00008 
00009    This library is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012    Library General Public License for more details.
00013 
00014    You should have received a copy of the GNU Library General Public License
00015    along with this library; see the file COPYING.LIB.  If not, write to
00016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017  * Boston, MA 02110-1301, USA.
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* /*frameset*/ ) { return true; }
00110 
00112     // TODO: maybe this should be more fine-grained.
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 // we inherit the "normal" viewmode
00177 {
00178 public:
00179     KWViewModePrint( KWDocument * doc, KWCanvas* canvas )
00180         : KWViewModeNormal( doc, canvas, false /*drawFrameBorders*/ ) {}
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 /*drawFrameBorders*/ ),
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     // This view mode is very easy to implement ;-P
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 //protected:
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     // There is no page concept. Keep everything relative to (0,0)
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     KWTextFrameSet *m_textFrameSet;
00295 };
00296 
00297 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys