• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

fp_Run.h

Go to the documentation of this file.
00001 /* -*- mode: C++; tab-width: 4; c-basic-offset: 4; -*- */
00002 
00003 /* AbiWord
00004  * Copyright (C) 1998,1999 AbiSource, Inc.
00005  * Copyright (c) 2001,2002 Tomas Frydrych
00006  *
00007  * This program is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU General Public License
00009  * as published by the Free Software Foundation; either version 2
00010  * of the License, or (at your option) any later version.
00011  *
00012  * This program is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  * GNU General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU General Public License
00018  * along with this program; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
00020  * 02110-1301 USA.
00021  */
00022 
00023 
00024 
00025 #ifndef FP_RUN_H
00026 #define FP_RUN_H
00027 
00028 #ifdef FMT_TEST
00029 #include <stdio.h>
00030 #endif
00031 
00032 #include "ut_types.h"
00033 #include "ut_misc.h"
00034 #include "pt_Types.h"
00035 #include "ut_assert.h"
00036 #include "xap_Strings.h"
00037 #include "fl_BlockLayout.h"
00038 #include "pp_Revision.h"
00039 #include "ut_string_class.h"
00040 #include "fp_ContainerObject.h"
00041 
00042 class UT_GrowBuf;
00043 class fp_Line;
00044 class GR_Graphics;
00045 class GR_Font;
00046 class GR_Image;
00047 class PD_Document;
00048 class PP_AttrProp;
00049 struct dg_DrawArgs;
00050 class fl_CharWidths;
00051 class fd_Field;
00052 class fp_HyperlinkRun;
00053 class fp_AnnotationRun;
00054 class fp_RDFAnchorRun;
00055 
00056 struct fp_RunSplitInfo
00057 {
00058     UT_sint32 iLeftWidth;
00059     UT_sint32 iRightWidth;
00060     UT_sint32 iOffset;
00061 };
00062 
00063 // TODO The break type is not used. Is it put here looking forward,
00064 // TODO or is it left from some earlier experiments?
00065 enum FP_RUN_BREAK_TYPE
00066 {
00067     BREAK_AUTO          = 0,
00068     BREAK_AVOID         = 1,
00069     BREAK_ALWAYS        = 2
00070 };
00071 
00072 enum FP_RUN_TYPE
00073 {
00074     FPRUN__FIRST__                  = 1,
00075     FPRUN_TEXT                      = 1,
00076     FPRUN_IMAGE                     = 2,
00077     FPRUN_TAB                       = 3,
00078     FPRUN_FORCEDLINEBREAK           = 4,
00079     FPRUN_FORCEDCOLUMNBREAK         = 5,
00080     FPRUN_FORCEDPAGEBREAK           = 6,
00081     FPRUN_FIELD                     = 7,
00082     FPRUN_FMTMARK                   = 8,
00083     FPRUN_FIELDSTARTRUN             = 9,
00084     FPRUN_FIELDENDRUN               = 10,
00085     FPRUN_ENDOFPARAGRAPH            = 11,
00086     FPRUN_BOOKMARK                  = 12,
00087     FPRUN_HYPERLINK                 = 13,
00088     FPRUN_DIRECTIONMARKER           = 14,
00089     FPRUN_DUMMY                     = 15,
00090     FPRUN_MATH                      = 16,
00091     FPRUN_EMBED                      = 17,
00092     FPRUN__LAST__                   = 18
00093 };
00094 
00095 enum FP_HYPERLINK_TYPE
00096 {
00097     HYPERLINK_NORMAL =1,
00098     HYPERLINK_ANNOTATION = 2,
00099     HYPERLINK_RDFANCHOR = 3
00100 };
00101 
00102 // specifies how setX should handle screen clearing
00103 enum FPRUN_CLEAR_SCREEN
00104 {
00105     FP_CLEARSCREEN_AUTO,
00106     FP_CLEARSCREEN_FORCE,
00107     FP_CLEARSCREEN_NEVER
00108 };
00109 
00110 
00111 /*
00112     fp_Run represents a contiguous homogenous chunk on a single line.
00113     This file also defines the following subclasses:
00114 
00115         fp_TabRun
00116         fp_ForcedLineBreakRun
00117         fp_ForcedColumnBreakRun
00118         fp_ForcedPageBreakRun
00119         fp_ImageRun
00120         fp_FieldRun
00121         fp_FmtMarkRun
00122         fp_FieldStartRun
00123         fp_FieldEndRun
00124         fp_BookmarkRun
00125         fp_HyperlinkRun
00126         fp_AnnotationRun
00127         fp_RDFAnchorRun
00128         fp_DummyRun
00129 
00130     As far as the formatter's concerned, each subclass behaves somewhat
00131     differently, but they can all be treated like rectangular blocks to
00132     be arranged.
00133 
00134     Convention: _setFoo(bar) is just this.foo = bar;
00135                  setFoo(bar) sets this.foo to bar,
00136                                but may also do other processing to maintain
00137                                internal state.
00138 */
00139 class ABI_EXPORT fp_Run : fp_ContainerObject
00140 {
00141     friend class fg_FillType;
00142 public:
00143     fp_Run(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst,
00144            UT_uint32 iLen, FP_RUN_TYPE iType);
00145     virtual ~fp_Run();
00146 
00147     // inline getter member functions
00148 
00149     FP_RUN_TYPE             getType() const                 { return m_iType; }
00150     fp_Line*                getLine() const                 { return m_pLine; }
00151     fl_BlockLayout*         getBlock() const                { return m_pBL; }
00152     UT_sint32               getX() const                    { return m_iX; }
00153     UT_sint32               getY() const                    { return m_iY; }
00154 
00155     UT_sint32               getHeight() const;
00156     UT_sint32               getWidth() const;
00157     UT_uint32               getAscent() const;
00158     UT_uint32               getDescent() const;
00159     virtual UT_sint32       getDrawingWidth() const;
00160 
00161     fp_Run*                 getNextRun() const                  { return m_pNext; }
00162     fp_Run*                 getPrevRun() const                  { return m_pPrev; }
00163     bool                    isInSelectedTOC(void);
00164     virtual fp_ContainerObject * getNext(void) const { return NULL;}
00165     virtual fp_ContainerObject * getPrev(void) const { return NULL;}
00166     virtual fp_Container *       getNextContainerInSection(void) const { return NULL;}
00167     virtual fp_Container *       getPrevContainerInSection(void) const { return NULL;}
00168     virtual void                 setNext(fp_ContainerObject * /*pNull*/) {}
00169     virtual void                 setPrev(fp_ContainerObject * /*pNull*/) {}
00170     virtual void                 draw(GR_Graphics * /*pG*/) {}
00171 
00172     UT_uint32           getBlockOffset() const          { return m_iOffsetFirst; }
00173     UT_uint32           getLength() const               { return m_iLen; }
00174     GR_Graphics*        getGraphics() const;
00175     fp_HyperlinkRun *   getHyperlink() const            { return m_pHyperlink;}
00176 #if DEBUG
00177     virtual void        printText(void) {};
00178 #endif
00179 
00180     void                getSpanAP(const PP_AttrProp * &pSpanAP);
00181     const PP_AttrProp * getSpanAP(void);
00182 
00183 
00184     inline void         getBlockAP(const PP_AttrProp * &pBlockAP)
00185                                          {getBlock()->getAP(pBlockAP);}
00186 
00187 
00188     void                insertIntoRunListBeforeThis(fp_Run& newRun);
00189     void                insertIntoRunListAfterThis(fp_Run& newRun);
00190     fd_Field*           getField(void) const { return m_pField; }
00191     bool                isField(void) const { return (bool) (m_pField != NULL); }
00192     void                unlinkFromRunList();
00193 
00194     const UT_RGBColor   getFGColor(void) const;
00195 
00196     virtual bool        hasLayoutProperties(void) const;
00197 
00198     void                setLine(fp_Line*);
00199     void                setBlock(fl_BlockLayout * pBL) { _setBlock(pBL); }
00200     virtual void        setX(UT_sint32 x, bool bDontClearIfNeeded = false);
00201     void                Run_setX(UT_sint32, FPRUN_CLEAR_SCREEN eClearScreen = FP_CLEARSCREEN_AUTO);
00202     virtual void        setY(UT_sint32);
00203     void                setBlockOffset(UT_uint32);
00204     void                setLength(UT_uint32 iLen, bool bRefresh = true);
00205     void                setNextRun(fp_Run*, bool bRefresh = true);
00206     void                setPrevRun(fp_Run*, bool bRefresh = true);
00207     void                setHyperlink(fp_HyperlinkRun * pH);
00208     void                markWidthDirty() {m_bRecalcWidth = true;}
00209     bool                isFirstRunOnLine(void) const;
00210     bool                isLastRunOnLine(void) const;
00211     bool                isOnlyRunOnLine(void) const;
00212     bool                isFirstVisRunOnLine(void) const;
00213     bool                isLastVisRunOnLine(void) const;
00214     void                markDrawBufferDirty()
00215                             {m_eRefreshDrawBuffer = GRSR_Unknown;}
00216     void                orDrawBufferDirty(GRShapingResult eR)
00217                         {
00218                             m_eRefreshDrawBuffer = (GRShapingResult)((UT_uint32)m_eRefreshDrawBuffer
00219                                                                      |(UT_uint32)eR);
00220 }
00221     bool                isPrinting(void) const
00222     { return m_bPrinting;}
00223     virtual void        draw(dg_DrawArgs*);
00224     virtual void        clearScreen(void);
00225     void                Run_ClearScreen(bool bFullLineHeightRect = false);
00226     virtual void        setWidth(UT_sint32 /*iW*/) {}
00227     virtual void        setHeight(UT_sint32 /*iH*/) {}
00228     virtual bool        isVBreakable(void) {return false;}
00229     virtual bool        isHBreakable(void) {return false;}
00230     virtual UT_sint32   wantVBreakAt(UT_sint32 i) {return i;}
00231     virtual UT_sint32   wantHBreakAt(UT_sint32 i) {return i;}
00232     virtual fp_ContainerObject * VBreakAt(UT_sint32) { return NULL;}
00233     virtual fp_ContainerObject * HBreakAt(UT_sint32) { return NULL;}
00234 
00235     void                markAsDirty(void);
00236     void                setCleared(void);
00237     bool                isDirty(void) const { return m_bDirty; }
00238     bool                canContainPoint(void) const;
00239     bool                recalcWidth(void);
00240     virtual void        updateOnDelete(UT_uint32 offset, UT_uint32 iLen);
00241     virtual void        updateVerticalMetric();
00242 
00243     virtual UT_Option<UT_Rect>     getScreenRect() const;
00244     virtual void        markDirtyOverlappingRuns(const UT_Rect& recScreen);
00245 
00246     virtual void        _draw(dg_DrawArgs*) = 0;
00247     void                _drawTextLine(UT_sint32, UT_sint32, UT_uint32, UT_uint32, UT_UCSChar *);
00248     virtual void        _clearScreen(bool bFullLineHeightRect) = 0;
00249     virtual bool        canBreakAfter(void) const = 0;
00250     virtual bool        canBreakBefore(void) const = 0;
00251     bool                letPointPass(void) const;
00252     virtual bool        isForcedBreak(void) const { return false; }
00253     virtual bool        alwaysFits(void) const { return false; }
00254     virtual bool        findMaxLeftFitSplitPoint(UT_sint32 iMaxLeftWidth, fp_RunSplitInfo& si,
00255                                                  bool bForce=false);
00256     void                clearPrint(void);
00257     virtual UT_sint32   findTrailingSpaceDistance(void) const { return 0; }
00258     virtual bool        findFirstNonBlankSplitPoint(fp_RunSplitInfo& /*si*/) { return false; }
00259     virtual void        mapXYToPosition(UT_sint32 xPos, UT_sint32 yPos,
00260                                         PT_DocPosition& pos, bool& bBOL, bool& bEOL, bool & isTOC) = 0;
00261 
00262     virtual void        findPointCoords(UT_uint32 iOffset, UT_sint32& x, UT_sint32& y,
00263                                         UT_sint32& x2, UT_sint32& y2, UT_sint32& height,
00264                                         bool& bDirection) = 0;
00265 
00266     void                lookupProperties(GR_Graphics * pG=NULL);
00267     virtual bool        doesContainNonBlankData(void) const { return true; }    // Things like text whould return false if it is all spaces.
00268     void                drawDecors(UT_sint32 xoff, UT_sint32 yoff, GR_Graphics * pG);
00269     virtual bool        isSuperscript(void) const { return false; }
00270     virtual bool        isSubscript(void) const { return false; }
00271     bool                isUnderline(void) const ;
00272     bool                isOverline(void) const ;
00273     bool                isStrikethrough(void) const ;
00274     bool                isTopline(void) const ;
00275     bool                isBottomline(void) const ;
00276     void                setLinethickness(UT_sint32 max_linethickness);
00277     UT_sint32           getLinethickness(void) const;
00278     void                setUnderlineXoff(UT_sint32 xoff);
00279     UT_sint32           getUnderlineXoff(void) const;
00280     void                setOverlineXoff(UT_sint32 xoff) ;
00281     UT_sint32           getOverlineXoff(void) const;
00282     void                setMaxUnderline(UT_sint32 xoff) ;
00283     UT_sint32           getMaxUnderline(void) const;
00284     void                setMinOverline(UT_sint32 xoff) ;
00285     UT_sint32           getMinOverline(void) const;
00286     UT_sint32           getToplineThickness(void) const;
00287 
00288     virtual UT_BidiCharType getDirection() const { return m_iDirection; };
00289     UT_BidiCharType     getVisDirection() const;
00290     virtual void        setDirection(UT_BidiCharType iDirection = UT_BIDI_WS);
00291     void                setVisDirection(UT_BidiCharType iDir);
00292     UT_uint32           getVisPosition(UT_uint32 ilogPos) const;
00293     UT_uint32           getVisPosition(UT_uint32 iLogPos, UT_uint32 iLen) const;
00294     UT_uint32           getOffsetFirstVis() const;
00295     UT_uint32           getOffsetLog(UT_uint32 iVisOff) const;
00296     fp_Run *            getNextVisual(); // FIXME make const
00297     fp_Run *            getPrevVisual(); // FIXME make const
00298     UT_sint32           getAuthorNum(void) const
00299     { return m_iAuthorColor;};
00300     void                setAuthorNum(UT_sint32 i)
00301     { m_iAuthorColor=i;};
00302 
00303     virtual UT_uint32   adjustCaretPosition(UT_uint32 iDocumentPosition, bool /*bForward*/)
00304                                { return iDocumentPosition;}
00305 
00306     virtual void        adjustDeletePosition(UT_uint32 & /*pos1*/,
00307                                              UT_uint32 & /*count*/) {}
00308 
00309     bool                containsRevisions() const { return !!m_pRevisions; }
00310     // would prefer to make the return value const, but the
00311     // getLastRevision() and related functions use internal cache so
00312     // they could not be called
00313     const std::unique_ptr<PP_RevisionAttr>& getRevisions() const
00314         { return m_pRevisions; }
00315     FPVisibility        getVisibility() const {return m_eVisibility;}
00316     bool         isHidden() const {return _wouldBeHidden(m_eVisibility);}
00317     void                setVisibility(FPVisibility eVis);
00318     void                Fill(GR_Graphics * pG, UT_sint32 x, UT_sint32 y,
00319                              UT_sint32 width, UT_sint32 height);
00320 
00321     fg_FillType &       getFillType(void);
00322     const fg_FillType & getFillType(void) const;
00323     fp_Line *           getTmpLine(void) const
00324     { return m_pTmpLine;}
00325     void                setTmpLine(fp_Line * pLine)
00326     { m_pTmpLine = pLine;}
00327     UT_sint32           getTmpX(void) const
00328     { return m_iTmpX;}
00329     void                setTmpX(UT_sint32 iX)
00330     { m_iTmpX = iX;}
00331     UT_sint32           getTmpY(void) const
00332     { return m_iTmpY;}
00333     void                setTmpY(UT_sint32 iY)
00334     { m_iTmpY = iY;}
00335     UT_sint32           getTmpWidth(void) const
00336     { return m_iTmpWidth;}
00337     void                setTmpWidth(UT_sint32 iWidth)
00338     { m_iTmpWidth = iWidth;}
00339     bool                clearIfNeeded(void);
00340 
00341     // Indicates that if insertion point is placed at a position belonging to the run
00342     // and delete command is issued, it should apply to the following run (or previous
00343     // in case of backspace). This is used with invisible runs, such as hyperlinks,
00344     // bookmarks, and hidden hidden text, to ensure that these are not deleted behind
00345     // the users backs.
00346     bool        deleteFollowingIfAtInsPoint() const;
00347 
00348     bool        displayAnnotations(void) const;
00349     bool        displayRDFAnchors(void) const;
00350     // Methods for selection drawing
00351     void                 setSelectionMode(PT_DocPosition posLow, PT_DocPosition posHigh);
00352     void                 clearSelectionMode(void);
00353     bool                 isSelectionDraw(void) const;
00354     PT_DocPosition       posSelLow(void) const;
00355     PT_DocPosition       posSelHigh(void) const;
00356     UT_RGBColor         _getColorFG(void) const { return m_pColorFG; }
00357 
00358 #ifdef FMT_TEST
00359     virtual void        __dump(FILE * fp) const;
00360 #endif
00361     void               setMustClearScreen(void)
00362     { m_bMustClearScreen = true;}
00363     bool               getMustClearScreen(void)
00364     {return m_bMustClearScreen;}
00365 
00366 protected:
00367     virtual bool        _deleteFollowingIfAtInsPoint() const;
00368     void                _inheritProperties(void);
00369     fp_Run*             _findPrevPropertyRun(void) const;
00370 
00371     FV_View*            _getView(void) const { return getBlock()->getView(); }
00372     // By convention, _getFoo and _setFoo have no side effects.
00373     // They can easily be inlined by a smart compiler.
00374     UT_RGBColor         _getColorPG(void) const { return m_pColorPG; }
00375     UT_RGBColor         _getColorHL(void) const { return m_pColorHL; }
00376     void                _setColorFG(UT_RGBColor c) { m_pColorFG = c; }
00377     void                _setColorHL(UT_RGBColor c) { m_pColorHL = c; }
00378     void                _setColorHL(const char *pszColor)
00379         { m_pColorHL.setColor(pszColor); }
00380 
00381     void                _setLine(fp_Line* pLine) { m_pLine = pLine; }
00382     void                _setHeight(UT_sint32 iHeight)
00383                             { m_iHeight = iHeight;}
00384     virtual void        _setWidth(UT_sint32 iWidth)
00385                             { m_iWidth = iWidth; }
00386 
00387     // use these with great care -- most of the time we need to use
00388     // getWidth() and getHeight() which deal with
00389     // visibility/hiddenness issues
00390     UT_sint32           _getWidth() {return m_iWidth;}
00391     UT_sint32           _getHeight(){return m_iHeight;}
00392 
00393     void                _setBlock(fl_BlockLayout * pBL) { m_pBL = pBL; }
00394     void                _setAscent(int iAscent) { m_iAscent = iAscent; }
00395     void                _setDescent(int iDescent) {m_iDescent = iDescent;}
00396     void                _setX(int iX) { m_iX = iX; }
00397     void                _setY(int iY) { m_iY = iY; }
00398     void                _setDirection(UT_BidiCharType c) { m_iDirection = c; }
00399     UT_BidiCharType     _getDirection(void) const { return m_iDirection; }
00400     UT_BidiCharType     _getVisDirection(void) const { return m_iVisDirection; }
00401     const GR_Font *         _getFont(void) const;
00402     void                _setFont(const GR_Font * f);
00403     unsigned char       _getDecorations(void) const { return m_fDecorations; }
00404     void                _setDecorations(unsigned char d) {m_fDecorations = d;}
00405 
00406     void                _orDecorations(unsigned char d) { m_fDecorations |= d; }
00407     UT_sint32           _getLineWidth(void) { return m_iLineWidth; }
00408     bool                _setLineWidth(UT_sint32 w)
00409                              {
00410                                  UT_sint32 o = m_iLineWidth;
00411                                  m_iLineWidth = w;
00412                                  return o != w;
00413                              }
00414     void                _setLength(UT_uint32 l) { m_iLen = l; }
00415     void                _setRevisions(std::unique_ptr<PP_RevisionAttr>&& p)
00416         { m_pRevisions = std::move(p); }
00417     void                _setDirty(bool b);
00418     void                _setField(fd_Field * fd) { m_pField = fd; }
00419     void                _setHyperlink(fp_HyperlinkRun * pH) { m_pHyperlink = pH; }
00420     bool                _getRecalcWidth(void) const { return m_bRecalcWidth; }
00421     void                _setRecalcWidth(bool b) { m_bRecalcWidth = b; }
00422 
00423     GRShapingResult     _getRefreshDrawBuffer(void) const { return m_eRefreshDrawBuffer; }
00424     void                _setRefreshDrawBuffer(GRShapingResult eR)
00425                              { m_eRefreshDrawBuffer = eR; }
00426     virtual void        _lookupProperties(const PP_AttrProp * pSpanAP,
00427                                           const PP_AttrProp * pBlockAP,
00428                                           const PP_AttrProp * pSectionAP,
00429                                           GR_Graphics * pG = NULL) = 0;
00430 
00431     virtual bool        _canContainPoint(void) const;
00432     virtual bool        _letPointPass(void) const;
00433     virtual bool        _recalcWidth(void);
00434     bool         _wouldBeHidden(FPVisibility eVis) const;
00435 //
00436 // Variables to draw underlines for all runs
00437 //
00438     enum
00439     {
00440         TEXT_DECOR_UNDERLINE =      0x01,
00441         TEXT_DECOR_OVERLINE =       0x02,
00442         TEXT_DECOR_LINETHROUGH =    0x04,
00443         TEXT_DECOR_TOPLINE =        0x08,
00444         TEXT_DECOR_BOTTOMLINE =     0x10
00445     };
00446 
00447 private:
00448     fp_Run(const fp_Run&);          // no impl.
00449     void operator=(const fp_Run&);  // no impl.
00450 
00451     FP_RUN_TYPE             m_iType;
00452     fp_Line*                m_pLine;
00453     fl_BlockLayout*         m_pBL;
00454     fp_Run*                 m_pNext;
00455     fp_Run*                 m_pPrev;
00456     UT_sint32               m_iX;
00457     UT_sint32               m_iOldX;
00458     UT_sint32               m_iY;
00459     UT_sint32               m_iWidth;
00460     UT_sint32               m_iHeight;
00461     UT_uint32               m_iAscent;
00462     UT_uint32               m_iDescent;
00463 
00464     UT_uint32               m_iOffsetFirst;
00465     UT_uint32               m_iLen;
00466     bool                    m_bDirty;       // run erased @ old coords, needs to be redrawn
00467     fd_Field*               m_pField;
00468     UT_BidiCharType         m_iDirection;   //#TF direction of the run 0 for left-to-right, 1 for right-to-left
00469     UT_BidiCharType         m_iVisDirection;
00470     GRShapingResult         m_eRefreshDrawBuffer;
00471 
00472     // the run highlight color. If the property is transparent use the page color
00473     UT_RGBColor             m_pColorHL;
00474 
00475     const GR_Font *         m_pFont;
00476 
00477     bool                    m_bRecalcWidth;
00478 
00479     unsigned char           m_fDecorations;
00480     UT_sint32               m_iLineWidth;
00481     UT_sint32               m_iLinethickness;
00482     UT_sint32               m_iUnderlineXoff;
00483     UT_sint32               m_imaxUnderline;
00484     UT_sint32               m_iminOverline;
00485     UT_sint32               m_iOverlineXoff;
00486     fp_HyperlinkRun *       m_pHyperlink;
00487     std::unique_ptr<PP_RevisionAttr> m_pRevisions;
00488 
00489     // A local cache of the page color. This makes clearscreen() a bit faster
00490     UT_RGBColor             m_pColorPG;
00491     UT_RGBColor             m_pColorFG;
00492     FPVisibility            m_eVisibility;
00493     bool                    m_bIsCleared;
00494     fg_FillType             m_FillType;
00495     bool                    m_bPrinting;
00496     UT_sint32               m_iTmpX;
00497     UT_sint32               m_iTmpY;
00498     UT_sint32               m_iTmpWidth;
00499     fp_Line *               m_pTmpLine;
00500 
00501     // Variables for selection drawing
00502     bool                    m_bDrawSelection;
00503     PT_DocPosition          m_iSelLow;
00504     PT_DocPosition          m_iSelHigh;
00505     bool                    m_bMustClearScreen;
00506     UT_sint32               m_iAuthorColor;
00507 #ifdef DEBUG
00508     UT_uint32               m_iFontAllocNo;
00509 #endif
00510 };
00511 
00512 class ABI_EXPORT fp_TabRun : public fp_Run
00513 {
00514 public:
00515     fp_TabRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
00516     virtual void            mapXYToPosition(UT_sint32 xPos, UT_sint32 yPos, PT_DocPosition& pos, bool& bBOL, bool& bEOL, bool & isTOC);
00517     virtual void            findPointCoords(UT_uint32 iOffset, UT_sint32& x, UT_sint32& y, UT_sint32& x2, UT_sint32& y2, UT_sint32& height, bool& bDirection);
00518     virtual bool            canBreakAfter(void) const;
00519     virtual bool            canBreakBefore(void) const;
00520     virtual bool            hasLayoutProperties(void) const;
00521     void                    setTabWidth(UT_sint32);
00522     void                    setLeader(eTabLeader iTabType);
00523     eTabLeader              getLeader(void);
00524     void                    setTabType(eTabType iTabType);
00525     eTabType                getTabType(void) const;
00526     bool                    isTOCTab(void);
00527     void                    setTOCTab(void)
00528     { m_bIsTOC = true;}
00529     void                    setTOCTabListLabel(void);
00530     bool                    isTOCTabListLabel(void) const
00531     { return m_bIsTOCListLabel;}
00532 
00533 protected:
00534     virtual void            _drawArrow(UT_uint32 iLeft,UT_uint32 iTop,UT_uint32 iWidth, UT_uint32 iHeight);
00535     virtual void            _draw(dg_DrawArgs*);
00536     virtual void            _clearScreen(bool bFullLineHeightRect);
00537     virtual void            _lookupProperties(const PP_AttrProp * pSpanAP,
00538                                               const PP_AttrProp * pBlockAP,
00539                                               const PP_AttrProp * pSectionAP,
00540                                               GR_Graphics * pG = NULL);
00541 
00542     virtual bool            _letPointPass(void) const;
00543 
00544 private:
00545     //UT_RGBColor               m_colorFG;
00546 private:
00547     eTabLeader              m_leader;
00548     eTabType                m_TabType;
00549     bool                    m_bIsTOC;
00550     bool                    m_bIsTOCListLabel;
00551 };
00552 
00553 class ABI_EXPORT fp_ForcedLineBreakRun : public fp_Run
00554 {
00555 public:
00556     fp_ForcedLineBreakRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
00557     virtual void            mapXYToPosition(UT_sint32 xPos, UT_sint32 yPos, PT_DocPosition& pos, bool& bBOL, bool& bEOL, bool & isTOC);
00558     virtual void            findPointCoords(UT_uint32 iOffset, UT_sint32& x, UT_sint32& y, UT_sint32& x2, UT_sint32& y2, UT_sint32& height, bool& bDirection);
00559     virtual bool            canBreakAfter(void) const;
00560     virtual bool            canBreakBefore(void) const;
00561     virtual bool            isForcedBreak(void) const { return true; }
00562 protected:
00563     virtual void            _lookupProperties(const PP_AttrProp * pSpanAP,
00564                                               const PP_AttrProp * pBlockAP,
00565                                               const PP_AttrProp * pSectionAP,
00566                                               GR_Graphics * pG = NULL);
00567 
00568     virtual void            _draw(dg_DrawArgs*);
00569     virtual void            _clearScreen(bool bFullLineHeightRect);
00570     virtual bool            _letPointPass(void) const;
00571 };
00572 
00573 class ABI_EXPORT fp_FieldStartRun : public fp_Run
00574 {
00575 public:
00576     fp_FieldStartRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
00577     virtual void            mapXYToPosition(UT_sint32 xPos, UT_sint32 yPos, PT_DocPosition& pos, bool& bBOL, bool& bEOL, bool & isTOC);
00578     virtual void            findPointCoords(UT_uint32 iOffset, UT_sint32& x, UT_sint32& y, UT_sint32& x2, UT_sint32& y2, UT_sint32& height, bool& bDirection);
00579     virtual bool            canBreakAfter(void) const;
00580     virtual bool            canBreakBefore(void) const;
00581     virtual bool            isForcedBreak(void) const { return true; }
00582 protected:
00583     virtual void            _lookupProperties(const PP_AttrProp * pSpanAP,
00584                                               const PP_AttrProp * pBlockAP,
00585                                               const PP_AttrProp * pSectionAP,
00586                                               GR_Graphics * pG = NULL);
00587 
00588     virtual void            _draw(dg_DrawArgs*);
00589     virtual void            _clearScreen(bool bFullLineHeightRect);
00590     virtual bool            _letPointPass(void) const;
00591 };
00592 
00593 class ABI_EXPORT fp_FieldEndRun : public fp_Run
00594 {
00595 public:
00596     fp_FieldEndRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
00597     virtual void            mapXYToPosition(UT_sint32 xPos, UT_sint32 yPos, PT_DocPosition& pos, bool& bBOL, bool& bEOL, bool & isTOC);
00598     virtual void            findPointCoords(UT_uint32 iOffset, UT_sint32& x, UT_sint32& y, UT_sint32& x2, UT_sint32& y2, UT_sint32& height, bool& bDirection);
00599     virtual bool            canBreakAfter(void) const;
00600     virtual bool            canBreakBefore(void) const;
00601     virtual bool            isForcedBreak(void) const { return true; }
00602 protected:
00603     virtual void            _lookupProperties(const PP_AttrProp * pSpanAP,
00604                                               const PP_AttrProp * pBlockAP,
00605                                               const PP_AttrProp * pSectionAP,
00606                                               GR_Graphics * pG = NULL);
00607 
00608     virtual void            _draw(dg_DrawArgs*);
00609     virtual void            _clearScreen(bool bFullLineHeightRect);
00610     virtual bool            _letPointPass(void) const;
00611 };
00612 
00613 class ABI_EXPORT fp_ForcedColumnBreakRun : public fp_Run
00614 {
00615 public:
00616     fp_ForcedColumnBreakRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
00617 
00618     virtual void            mapXYToPosition(UT_sint32 xPos, UT_sint32 yPos, PT_DocPosition& pos, bool& bBOL, bool& bEOL, bool & isTOC);
00619     virtual void            findPointCoords(UT_uint32 iOffset, UT_sint32& x, UT_sint32& y, UT_sint32& x2, UT_sint32& y2, UT_sint32& height, bool& bDirection);
00620     virtual bool            canBreakAfter(void) const;
00621     virtual bool            canBreakBefore(void) const;
00622     virtual bool            isForcedBreak(void) const { return true; }
00623 protected:
00624     virtual void            _lookupProperties(const PP_AttrProp * pSpanAP,
00625                                               const PP_AttrProp * pBlockAP,
00626                                               const PP_AttrProp * pSectionAP,
00627                                               GR_Graphics * pG = NULL);
00628 
00629     virtual void            _draw(dg_DrawArgs*);
00630     virtual void            _clearScreen(bool bFullLineHeightRect);
00631     virtual bool            _letPointPass(void) const;
00632 };
00633 
00634 class ABI_EXPORT fp_ForcedPageBreakRun : public fp_Run
00635 {
00636 public:
00637     fp_ForcedPageBreakRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
00638     virtual void            mapXYToPosition(UT_sint32 xPos, UT_sint32 yPos, PT_DocPosition& pos, bool& bBOL, bool& bEOL, bool & isTOC);
00639     virtual void            findPointCoords(UT_uint32 iOffset, UT_sint32& x, UT_sint32& y, UT_sint32& x2, UT_sint32& y2, UT_sint32& height, bool& bDirection);
00640     virtual bool            canBreakAfter(void) const;
00641     virtual bool            canBreakBefore(void) const;
00642     virtual bool            isForcedBreak(void) const { return true; }
00643 
00644 protected:
00645     virtual void            _lookupProperties(const PP_AttrProp * pSpanAP,
00646                                               const PP_AttrProp * pBlockAP,
00647                                               const PP_AttrProp * pSectionAP,
00648                                               GR_Graphics * pG = NULL);
00649 
00650     virtual void            _draw(dg_DrawArgs*);
00651     virtual void            _clearScreen(bool bFullLineHeightRect);
00652     virtual bool            _letPointPass(void) const;
00653 };
00654 
00655 class ABI_EXPORT fp_EndOfParagraphRun : public fp_Run
00656 {
00657 public:
00658     fp_EndOfParagraphRun(fl_BlockLayout* pBL,  UT_uint32 iOffsetFirst, UT_uint32 iLen);
00659 
00660     virtual void            mapXYToPosition(UT_sint32 xPos, UT_sint32 yPos, PT_DocPosition& pos, bool& bBOL, bool& bEOL, bool &isToc);
00661     virtual void            findPointCoords(UT_uint32 iOffset, UT_sint32& x, UT_sint32& y, UT_sint32& x2, UT_sint32& y2, UT_sint32& height, bool& bDirection);
00662     virtual bool            canBreakAfter(void) const;
00663     virtual bool            canBreakBefore(void) const;
00664     virtual UT_sint32       getDrawingWidth() const { return static_cast<UT_sint32>(m_iDrawWidth);}
00665 
00666 //
00667 // Tomas this breaks line breaking....
00668 //  virtual bool            doesContainNonBlankData(void) const { return false; }   // Things like text whould return false if it is all spaces.
00669 
00670 protected:
00671     virtual void            _lookupProperties(const PP_AttrProp * pSpanAP,
00672                                               const PP_AttrProp * pBlockAP,
00673                                               const PP_AttrProp * pSectionAP,
00674                                               GR_Graphics * pG = NULL);
00675 
00676     virtual void            _draw(dg_DrawArgs*);
00677     virtual void            _clearScreen(bool bFullLineHeightRect);
00678     virtual bool            _letPointPass(void) const;
00679     virtual bool            _recalcWidth(void);
00680 
00681 private:
00682     UT_uint32               m_iXoffText;
00683     UT_uint32               m_iYoffText;
00684     UT_uint32               m_iDrawWidth;
00685 
00686 };
00687 
00688 class ABI_EXPORT fp_BookmarkRun : public fp_Run
00689 {
00690 public:
00691     fp_BookmarkRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
00692 
00693     bool                isStartOfBookmark() const {return m_bIsStart;};
00694     const gchar *   getName() const {return m_pName;};
00695     bool                isComrade(fp_BookmarkRun *pBR) const;
00696 
00697     virtual bool canBreakAfter(void) const;
00698     virtual bool canBreakBefore(void) const;
00699 
00700     virtual void mapXYToPosition(UT_sint32 x,
00701                                  UT_sint32 y,
00702                                  PT_DocPosition& pos,
00703                                  bool& bBOL,
00704                                  bool& bEOL,
00705                                  bool & isTOC);
00706 
00707     virtual void findPointCoords(UT_uint32 iOffset,
00708                                  UT_sint32& x,
00709                                  UT_sint32& y,
00710                                  UT_sint32& x2,
00711                                  UT_sint32& y2,
00712                                  UT_sint32& height,
00713                                  bool& bDirection);
00714     virtual bool hasLayoutProperties(void) const
00715     { return false; }
00716 
00717     // for the purposes of linebreaking, just whitespace
00718     virtual bool doesContainNonBlankData(void) const { return false; }
00719 
00720     UT_uint32 getBookmarkedDocPosition(bool bAfter) const;
00721 
00722 
00723 private:
00724     virtual void            _lookupProperties(const PP_AttrProp * pSpanAP,
00725                                               const PP_AttrProp * pBlockAP,
00726                                               const PP_AttrProp * pSectionAP,
00727                                               GR_Graphics * pG = NULL);
00728 
00729     virtual void _clearScreen(bool /* bFullLineHeightRect */);
00730     virtual void _draw(dg_DrawArgs* /*pDA */);
00731     virtual bool _letPointPass(void) const;
00732     virtual bool _canContainPoint(void) const;
00733     virtual bool _deleteFollowingIfAtInsPoint() const;
00734 
00735     bool m_bIsStart;
00736     #define BOOKMARK_NAME_SIZE 30
00737     gchar       m_pName[BOOKMARK_NAME_SIZE + 1];
00738     po_Bookmark     * m_pBookmark;
00739 };
00740 
00741 class ABI_EXPORT fp_HyperlinkRun : public fp_Run
00742 {
00743 public:
00744     fp_HyperlinkRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
00745     virtual ~fp_HyperlinkRun();
00746     virtual FP_HYPERLINK_TYPE getHyperlinkType(void) const { return HYPERLINK_NORMAL;}
00747     bool                isStartOfHyperlink() const {return m_bIsStart;};
00748     const gchar *   getTarget() const {return static_cast<const gchar *>(m_pTarget);};
00749     const gchar *   getTitle() const {return static_cast<const gchar *>(m_pTitle);};
00750     
00751     virtual bool canBreakAfter(void) const;
00752     virtual bool canBreakBefore(void) const;
00753 
00754     virtual void mapXYToPosition(UT_sint32 x,
00755                                  UT_sint32 y,
00756                                  PT_DocPosition& pos,
00757                                  bool& bBOL,
00758                                  bool& bEOL,
00759                                  bool &isTOC);
00760 
00761     virtual void findPointCoords(UT_uint32 iOffset,
00762                                  UT_sint32& x,
00763                                  UT_sint32& y,
00764                                  UT_sint32& x2,
00765                                  UT_sint32& y2,
00766                                  UT_sint32& height,
00767                                  bool& bDirection);
00768 
00769     virtual bool hasLayoutProperties(void) const
00770     { return false; }
00771 
00772     // for the purposes of linebreaking, just whitespace
00773     virtual bool doesContainNonBlankData(void) const { return false; }
00774 
00775 protected:
00776     virtual void            _lookupProperties(const PP_AttrProp * pSpanAP,
00777                                               const PP_AttrProp * pBlockAP,
00778                                               const PP_AttrProp * pSectionAP,
00779                                               GR_Graphics * pG = NULL);
00780 
00781     virtual void _clearScreen(bool /* bFullLineHeightRect */);
00782     virtual void _draw(dg_DrawArgs* /*pDA */);
00783     virtual bool _letPointPass(void) const;
00784     virtual bool _canContainPoint(void) const;
00785     virtual bool _deleteFollowingIfAtInsPoint() const;
00786     void _setTarget( const gchar * pTarget );
00787     void _setTitle( const gchar * pTitle );
00788     void _setTargetFromAPAttribute( const gchar* pAttrName );
00789     void _setTitleFromAPAttribute( const gchar* pAttrName );
00790     bool m_bIsStart;
00791     gchar *     m_pTarget;
00792     gchar *     m_pTitle;
00793 };
00794 
00795 
00796 
00797 class ABI_EXPORT fp_AnnotationRun : public fp_HyperlinkRun
00798 {
00799 public:
00800     fp_AnnotationRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
00801     virtual ~fp_AnnotationRun();
00802     virtual FP_HYPERLINK_TYPE getHyperlinkType(void) const { return HYPERLINK_ANNOTATION; }
00803     UT_uint32 getPID(void) { return m_iPID;}
00804     const char * getValue(void);
00805     void         recalcValue(void);
00806     virtual bool canBreakAfter(void) const;
00807     virtual bool canBreakBefore(void) const;
00808     UT_sint32    getRealWidth(void) const {return m_iRealWidth;}
00809     void         cleanDraw(dg_DrawArgs*);
00810     UT_sint32    calcWidth(void);
00811 
00812  protected:
00813     virtual void            _draw(dg_DrawArgs*);
00814     virtual void            _clearScreen(bool bFullLineHeightRect);
00815     virtual bool            _recalcWidth(void);
00816     bool                    _setValue(void);
00817     virtual void            _setWidth(UT_sint32 iWidth);
00818     virtual bool _letPointPass(void) const;
00819     virtual bool _canContainPoint(void) const;
00820     virtual void _lookupProperties(const PP_AttrProp * pSpanAP,
00821                                     const PP_AttrProp * pBlockAP,
00822                                     const PP_AttrProp * pSectionAP,
00823                                    GR_Graphics * pG);
00824  private:
00825     UT_uint32               m_iPID;
00826     UT_UTF8String           m_sValue;
00827     UT_sint32               m_iRealWidth;
00828 };
00829 
00830 class ABI_EXPORT fp_RDFAnchorRun : public fp_HyperlinkRun
00831 {
00832 public:
00833     fp_RDFAnchorRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
00834     virtual ~fp_RDFAnchorRun();
00835     virtual FP_HYPERLINK_TYPE getHyperlinkType(void) const { return HYPERLINK_RDFANCHOR; }
00836     UT_uint32 getPID(void) { return m_iPID;}
00837     const char * getValue(void);
00838     void         recalcValue(void);
00839     virtual bool canBreakAfter(void) const;
00840     virtual bool canBreakBefore(void) const;
00841     UT_sint32    getRealWidth(void) const {return m_iRealWidth;}
00842     void         cleanDraw(dg_DrawArgs*);
00843     UT_sint32    calcWidth(void);
00844 
00845     std::string  getXMLID();
00846 
00847  protected:
00848     virtual void            _draw(dg_DrawArgs*);
00849     virtual void            _clearScreen(bool bFullLineHeightRect);
00850     virtual bool            _recalcWidth(void);
00851     bool                    _setValue(void);
00852     virtual void            _setWidth(UT_sint32 iWidth);
00853     virtual bool _letPointPass(void) const;
00854     virtual bool _canContainPoint(void) const;
00855     virtual void _lookupProperties(const PP_AttrProp * pSpanAP,
00856                                     const PP_AttrProp * pBlockAP,
00857                                     const PP_AttrProp * pSectionAP,
00858                                    GR_Graphics * pG);
00859  private:
00860     UT_uint32               m_iPID;
00861     UT_UTF8String           m_sValue;
00862     UT_sint32               m_iRealWidth;
00863 };
00864 
00865 class ABI_EXPORT fp_ImageRun : public fp_Run
00866 {
00867 public:
00868     fp_ImageRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen, FG_GraphicPtr && pGraphic,  pf_Frag_Object* oh);
00869     virtual ~fp_ImageRun();
00870 
00871     virtual void            mapXYToPosition(UT_sint32 xPos, UT_sint32 yPos, PT_DocPosition& pos, bool& bBOL, bool& bEOL, bool & isTOC);
00872     virtual void            findPointCoords(UT_uint32 iOffset, UT_sint32& x, UT_sint32& y, UT_sint32& x2, UT_sint32& y2, UT_sint32& height, bool& bDirection);
00873     virtual bool            canBreakAfter(void) const;
00874     virtual bool            canBreakBefore(void) const;
00875     const char *            getDataId(void) const;
00876     virtual bool            hasLayoutProperties(void) const;
00877     virtual GR_Image *              getImage();
00878     void                     regenerateImage(GR_Graphics * pG);
00879     UT_sint32               getPointHeight(void)
00880     { return m_iPointHeight;}
00881 protected:
00882     virtual void            _lookupProperties(const PP_AttrProp * pSpanAP,
00883                                               const PP_AttrProp * pBlockAP,
00884                                               const PP_AttrProp * pSectionAP,
00885                                               GR_Graphics * pG = NULL);
00886 
00887     virtual void            _draw(dg_DrawArgs*);
00888     virtual void            _clearScreen(bool bFullLineHeightRect);
00889     virtual bool            _letPointPass(void) const;
00890 
00891 private:
00892     FG_GraphicPtr           m_pFGraphic;
00893     GR_Image*               m_pImage;
00894     UT_sint32               m_iImageWidth;
00895     UT_sint32               m_iImageHeight;
00896     UT_String               m_sCachedWidthProp;
00897     UT_String               m_sCachedHeightProp;
00898     UT_sint32               m_iPointHeight;
00899     const PP_AttrProp *     m_pSpanAP;
00900     UT_uint32               m_iGraphicTick;
00901     bool                    m_bImageForPrinter;
00902     pf_Frag_Object*         m_OH;
00903 };
00904 
00905 #define FPFIELD_MAX_LENGTH  127
00906 
00907 #define  _FIELD(type,desc,tag)  /*nothing*/
00908 #define  _FIELDTYPE(type,desc)  FPFIELDTYPE_##type,
00909 
00910 enum fp_FieldTypesEnum { FPFIELDTYPE_START,
00911 
00912 #include "fp_Fields.h"
00913 
00914                          FPFIELDTYPE_END };
00915 
00916 #undef  _FIELD
00917 #undef  _FIELDTYPE
00918 
00919 #define  _FIELD(type,desc,tag)  FPFIELD_##tag,
00920 #define  _FIELDTYPE(type,desc)  /*nothing*/
00921 
00922 enum fp_FieldsEnum { FPFIELD_start,
00923 
00924 #include "fp_Fields.h"
00925 
00926                      FPFIELD_end };
00927 
00928 #undef  _FIELD
00929 #undef  _FIELDTYPE
00930 
00931 
00932 struct fp_FieldTypeData
00933 {
00934     fp_FieldTypesEnum   m_Type;
00935     const char*         m_Desc;
00936     XAP_String_Id       m_DescId;
00937 };
00938 
00939 struct fp_FieldData
00940 {
00941     fp_FieldTypesEnum   m_Type;
00942     fp_FieldsEnum       m_Num;
00943     const char*         m_Desc;
00944     const char*         m_Tag;
00945     XAP_String_Id       m_DescId;
00946 };
00947 
00948 
00949 extern fp_FieldTypeData fp_FieldTypes[];
00950 extern fp_FieldData fp_FieldFmts[];
00951 
00952 // these constants define how frequently our fields get updated
00953 // (in 1/2 seconds)
00954 // you know, we should be able to not have to scan for endnote changes;
00955 // they should be told to us.
00956 #define FIELD_UPDATE_ENDNOTE       3
00957 #define FIELD_UPDATE_TIME          1
00958 #define FIELD_UPDATE_DATE        240
00959 #define FIELD_UPDATE_PAGE         20
00960 #define FIELD_UPDATE_LINE_COUNT   10
00961 #define FIELD_UPDATE_WORD_COUNT    4
00962 #define FIELD_UPDATE_PARA_COUNT   20
00963 #define FIELD_UPDATE_META         10
00964 #define FIELD_UPDATE_MAILMERGE    10
00965 
00966 class ABI_EXPORT fp_FieldRun : public fp_Run
00967 {
00968 public:
00969     fp_FieldRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
00970     virtual ~fp_FieldRun();
00971 
00972     virtual void            mapXYToPosition(UT_sint32 xPos, UT_sint32 yPos, PT_DocPosition& pos, bool& bBOL, bool& bEOL, bool &isTOC);
00973     virtual void            findPointCoords(UT_uint32 iOffset, UT_sint32& x, UT_sint32& y, UT_sint32& x2, UT_sint32& y2, UT_sint32& height, bool& bDirection);
00974     virtual bool            canBreakAfter(void) const;
00975     virtual fp_FieldsEnum   getFieldType(void) const;
00976     virtual bool            canBreakBefore(void) const;
00977     virtual bool            hasLayoutProperties(void) const;
00978 
00979     virtual bool            isSuperscript(void) const;
00980     virtual bool            isSubscript(void) const;
00981 
00982     bool                    _setValue(const UT_UCSChar *p_new_value);
00983 
00984     virtual bool            calculateValue(void);
00985     virtual const UT_UCSChar *    getValue(void) const { return reinterpret_cast<const UT_UCS4Char *>(m_sFieldValue);}
00986     virtual UT_uint32       needsFrequentUpdates() {return 0;}
00987 
00988 protected:
00989     virtual void            _lookupProperties(const PP_AttrProp * pSpanAP,
00990                                               const PP_AttrProp * pBlockAP,
00991                                               const PP_AttrProp * pSectionAP,
00992                                               GR_Graphics * pG = NULL);
00993 
00994     virtual void            _draw(dg_DrawArgs*) {};
00995     virtual void            _defaultDraw(dg_DrawArgs*);
00996     virtual void            _clearScreen(bool bFullLineHeightRect);
00997     const gchar *       _getParameter() const { return m_pParameter; }
00998     virtual bool            _letPointPass(void) const;
00999     virtual bool            _recalcWidth(void);
01000 
01001 private:
01002 
01003     //UT_RGBColor               m_colorFG;
01004     UT_RGBColor             m_colorBG;
01005     UT_UCS4Char             m_sFieldValue[FPFIELD_MAX_LENGTH];
01006     fp_FieldsEnum           m_iFieldType;
01007     const gchar *       m_pParameter;
01008     enum
01009     {
01010         TEXT_POSITION_NORMAL,
01011         TEXT_POSITION_SUPERSCRIPT,
01012         TEXT_POSITION_SUBSCRIPT
01013     };
01014     UT_Byte                 m_fPosition;
01015 };
01016 
01017 
01018 class ABI_EXPORT fp_FieldEndnoteRefRun : public fp_FieldRun
01019 {
01020 public:
01021 
01022     fp_FieldEndnoteRefRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01023 
01024     virtual ~fp_FieldEndnoteRefRun(){}
01025 
01026     virtual bool            calculateValue(void);
01027     virtual bool            canBreakBefore(void) const;
01028     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01029     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_ENDNOTE;};
01030     UT_uint32               getPID() const {return m_iPID;}
01031 
01032 private:
01033     UT_uint32 m_iPID;
01034 };
01035 
01036 
01037 class ABI_EXPORT fp_FieldEndnoteAnchorRun : public fp_FieldRun
01038 {
01039 public:
01040 
01041     fp_FieldEndnoteAnchorRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01042 
01043     virtual ~fp_FieldEndnoteAnchorRun() {}
01044 
01045     virtual bool            calculateValue(void);
01046     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01047     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_ENDNOTE;};
01048     UT_uint32               getPID() const {return m_iPID;}
01049 
01050 private:
01051     UT_uint32 m_iPID;
01052 };
01053 
01054 class ABI_EXPORT fp_FieldFootnoteRefRun : public fp_FieldRun
01055 {
01056 public:
01057 
01058     fp_FieldFootnoteRefRun(fl_BlockLayout* pBL,UT_uint32 iOffsetFirst, UT_uint32 iLen);
01059 
01060     virtual ~fp_FieldFootnoteRefRun(){}
01061 
01062     virtual bool            calculateValue(void);
01063     virtual bool            canBreakBefore(void) const;
01064     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01065     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_ENDNOTE;};
01066     UT_uint32               getPID() const {return m_iPID;}
01067 
01068 private:
01069     UT_uint32 m_iPID;
01070 };
01071 
01072 class ABI_EXPORT fp_FieldFootnoteAnchorRun : public fp_FieldRun
01073 {
01074 public:
01075 
01076     fp_FieldFootnoteAnchorRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01077 
01078     virtual ~fp_FieldFootnoteAnchorRun() {}
01079 
01080     virtual bool            calculateValue(void);
01081     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01082     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_ENDNOTE;};
01083     UT_uint32               getPID() const {return m_iPID;}
01084 
01085 private:
01086     UT_uint32 m_iPID;
01087 };
01088 
01089 class ABI_EXPORT fp_FieldTimeRun : public fp_FieldRun
01090 {
01091 public:
01092 
01093     fp_FieldTimeRun(fl_BlockLayout* pBL,  UT_uint32 iOffsetFirst, UT_uint32 iLen);
01094 
01095     virtual ~fp_FieldTimeRun(){}
01096 
01097     virtual bool            calculateValue(void);
01098     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01099     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_TIME;};
01100 };
01101 
01102 class ABI_EXPORT fp_FieldPageNumberRun : public fp_FieldRun
01103 {
01104 public:
01105 
01106     fp_FieldPageNumberRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01107 
01108     virtual ~fp_FieldPageNumberRun() {}
01109 
01110     virtual bool            calculateValue(void);
01111     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01112     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_PAGE;};
01113 };
01114 
01115 class ABI_EXPORT fp_FieldPageReferenceRun : public fp_FieldRun
01116 {
01117 public:
01118 
01119     fp_FieldPageReferenceRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01120 
01121     virtual ~fp_FieldPageReferenceRun() {}
01122 
01123     virtual bool            calculateValue(void);
01124     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01125     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_PAGE;};
01126 };
01127 
01128 class ABI_EXPORT fp_FieldPageCountRun : public fp_FieldRun
01129 {
01130 public:
01131 
01132     fp_FieldPageCountRun(fl_BlockLayout* pBL,  UT_uint32 iOffsetFirst, UT_uint32 iLen);
01133 
01134     virtual ~fp_FieldPageCountRun() {}
01135 
01136     virtual bool            calculateValue(void);
01137     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01138     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_PAGE;};
01139 };
01140 
01141 class ABI_EXPORT fp_FieldDateRun : public fp_FieldRun
01142 {
01143 public:
01144     fp_FieldDateRun(fl_BlockLayout* pBL,  UT_uint32 iOffsetFirst, UT_uint32 iLen);
01145 
01146     virtual ~fp_FieldDateRun() {}
01147 
01148     virtual bool            calculateValue(void);
01149     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01150     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_DATE;};
01151 };
01152 
01153 
01154 class ABI_EXPORT fp_FieldFileNameRun : public fp_FieldRun
01155 {
01156 public:
01157     fp_FieldFileNameRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01158 
01159     virtual ~fp_FieldFileNameRun() {}
01160 
01161     virtual bool            calculateValue(void);
01162     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01163 };
01164 
01165 class ABI_EXPORT fp_FieldShortFileNameRun : public fp_FieldRun
01166 {
01167 public:
01168     fp_FieldShortFileNameRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01169 
01170     virtual ~fp_FieldShortFileNameRun() {}
01171 
01172     virtual bool            calculateValue(void);
01173     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01174 };
01175 
01176 // BEGIN DOM
01177 
01178 // document-related information fields
01179 
01180 // count of characters in the document
01181 // including white spaces
01182 class ABI_EXPORT fp_FieldCharCountRun : public fp_FieldRun
01183 {
01184 public:
01185     fp_FieldCharCountRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01186 
01187     virtual ~fp_FieldCharCountRun() {}
01188 
01189     virtual bool            calculateValue(void);
01190     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01191     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_TIME;};
01192 };
01193 
01194 // count of the non-blank characters
01195 // in the document
01196 class ABI_EXPORT fp_FieldNonBlankCharCountRun : public fp_FieldRun
01197 {
01198 public:
01199     fp_FieldNonBlankCharCountRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01200 
01201     virtual ~fp_FieldNonBlankCharCountRun(){}
01202 
01203     virtual bool            calculateValue(void);
01204     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01205     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_TIME;};
01206 };
01207 
01208 // count of the #lines in the document
01209 class ABI_EXPORT fp_FieldLineCountRun : public fp_FieldRun
01210 {
01211 public:
01212     fp_FieldLineCountRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01213 
01214     virtual ~fp_FieldLineCountRun(){}
01215 
01216     virtual bool            calculateValue(void);
01217     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01218     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_LINE_COUNT;};
01219 };
01220 
01221 
01222 // Sum the contents of the row of a table
01223 class ABI_EXPORT fp_FieldTableSumRows : public fp_FieldRun
01224 {
01225 public:
01226     fp_FieldTableSumRows(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01227 
01228     virtual ~fp_FieldTableSumRows(){}
01229 
01230     virtual bool            calculateValue(void);
01231     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01232     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_WORD_COUNT;};
01233 };
01234 
01235 
01236 // Sum the contents of the row of a table
01237 class ABI_EXPORT fp_FieldTableSumCols : public fp_FieldRun
01238 {
01239 public:
01240     fp_FieldTableSumCols(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01241 
01242     virtual ~fp_FieldTableSumCols(){}
01243 
01244     virtual bool            calculateValue(void);
01245     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01246     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_WORD_COUNT;};
01247 };
01248 
01249 // count of the #para in the document
01250 class ABI_EXPORT fp_FieldParaCountRun : public fp_FieldRun
01251 {
01252 public:
01253     fp_FieldParaCountRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01254 
01255     virtual ~fp_FieldParaCountRun(){}
01256 
01257     virtual bool            calculateValue(void);
01258     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01259     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_PARA_COUNT;};
01260 };
01261 
01262 // count of #words in the document
01263 class ABI_EXPORT fp_FieldWordCountRun : public fp_FieldRun
01264 {
01265 public:
01266     fp_FieldWordCountRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01267 
01268     virtual ~fp_FieldWordCountRun(){}
01269 
01270     virtual bool            calculateValue(void);
01271     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01272     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_WORD_COUNT;};
01273 };
01274 
01275 
01276 // date-releated fields
01277 
01278 // Americans - mm/dd/yy
01279 class ABI_EXPORT fp_FieldMMDDYYRun : public fp_FieldRun
01280 {
01281 public:
01282     fp_FieldMMDDYYRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01283 
01284     virtual ~fp_FieldMMDDYYRun(){}
01285 
01286     virtual bool            calculateValue(void);
01287     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01288     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_DATE;};
01289 };
01290 
01291 // most of the world - dd/mm/yy
01292 class ABI_EXPORT fp_FieldDDMMYYRun : public fp_FieldRun
01293 {
01294 public:
01295     fp_FieldDDMMYYRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01296 
01297     virtual ~fp_FieldDDMMYYRun(){}
01298 
01299     virtual bool            calculateValue(void);
01300     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01301     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_DATE;};
01302 };
01303 
01304 // April 18, 1979
01305 class ABI_EXPORT fp_FieldMonthDayYearRun : public fp_FieldRun
01306 {
01307 public:
01308     fp_FieldMonthDayYearRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01309 
01310     virtual ~fp_FieldMonthDayYearRun(){}
01311 
01312     virtual bool            calculateValue(void);
01313     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01314     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_DATE;};
01315 };
01316 
01317 // Apr. 18, 1979
01318 class ABI_EXPORT fp_FieldMthDayYearRun : public fp_FieldRun
01319 {
01320 public:
01321     fp_FieldMthDayYearRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01322 
01323     virtual ~fp_FieldMthDayYearRun (){}
01324 
01325     virtual bool            calculateValue(void);
01326     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01327     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_DATE;};
01328 };
01329 
01330 // default representation for your locale. includes time too
01331 class ABI_EXPORT fp_FieldDefaultDateRun : public fp_FieldRun
01332 {
01333 public:
01334     fp_FieldDefaultDateRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01335 
01336     virtual ~fp_FieldDefaultDateRun(){}
01337 
01338     virtual bool            calculateValue(void);
01339     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01340     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_TIME;};
01341 };
01342 
01343 // default for your locale, not appending the time
01344 class ABI_EXPORT fp_FieldDefaultDateNoTimeRun : public fp_FieldRun
01345 {
01346 public:
01347     fp_FieldDefaultDateNoTimeRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01348 
01349     virtual ~fp_FieldDefaultDateNoTimeRun(){}
01350 
01351     virtual bool            calculateValue(void);
01352     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01353     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_DATE;};
01354 };
01355 
01356 // day of the week (Wednesday)
01357 class ABI_EXPORT fp_FieldWkdayRun : public fp_FieldRun
01358 {
01359 public:
01360     fp_FieldWkdayRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01361 
01362     virtual ~fp_FieldWkdayRun(){}
01363 
01364     virtual bool            calculateValue(void);
01365     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01366     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_DATE;};
01367 };
01368 
01369 // day of year (i.e. 72)
01370 class ABI_EXPORT fp_FieldDOYRun : public fp_FieldRun
01371 {
01372 public:
01373     fp_FieldDOYRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01374 
01375     virtual ~fp_FieldDOYRun(){}
01376 
01377     virtual bool            calculateValue(void);
01378     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01379     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_DATE;};
01380 };
01381 
01382 // military (zulu) time
01383 class ABI_EXPORT fp_FieldMilTimeRun : public fp_FieldRun
01384 {
01385 public:
01386     fp_FieldMilTimeRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01387 
01388     virtual ~fp_FieldMilTimeRun(){}
01389 
01390     virtual bool            calculateValue(void);
01391     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01392     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_TIME;};
01393 };
01394 
01395 // prints am or pm
01396 class ABI_EXPORT fp_FieldAMPMRun : public fp_FieldRun
01397 {
01398 public:
01399     fp_FieldAMPMRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01400 
01401     virtual ~fp_FieldAMPMRun(){}
01402 
01403     virtual bool            calculateValue(void);
01404     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01405     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_DATE;};
01406 };
01407 
01408 // milliseconds since the epoch, for you geeks out there :-)
01409 class ABI_EXPORT fp_FieldTimeEpochRun : public fp_FieldRun
01410 {
01411 public:
01412     fp_FieldTimeEpochRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01413 
01414     virtual ~fp_FieldTimeEpochRun(){}
01415 
01416     virtual bool            calculateValue(void);
01417     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01418     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_TIME;};
01419 };
01420 
01421 class ABI_EXPORT fp_FieldDateTimeCustomRun : public fp_FieldRun
01422 {
01423 public:
01424     fp_FieldDateTimeCustomRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01425 
01426     virtual ~fp_FieldDateTimeCustomRun(){}
01427 
01428     virtual bool            calculateValue(void);
01429     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01430     virtual UT_uint32       needsFrequentUpdates(){return FIELD_UPDATE_TIME;};
01431 };
01432 
01433 // your time zone (EST, for example)
01434 class ABI_EXPORT fp_FieldTimeZoneRun : public fp_FieldRun
01435 {
01436 public:
01437     fp_FieldTimeZoneRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01438 
01439     virtual ~fp_FieldTimeZoneRun(){}
01440 
01441     virtual bool            calculateValue(void);
01442     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01443 };
01444 
01445 // application runs
01446 
01447 // build id
01448 class ABI_EXPORT fp_FieldBuildIdRun : public fp_FieldRun
01449 {
01450 public:
01451     fp_FieldBuildIdRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01452 
01453     virtual ~fp_FieldBuildIdRun(){}
01454 
01455     virtual bool            calculateValue(void);
01456     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01457 };
01458 
01459 // build version (i.e. 0.7.13)
01460 class ABI_EXPORT fp_FieldBuildVersionRun : public fp_FieldRun
01461 {
01462 public:
01463     fp_FieldBuildVersionRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01464 
01465     virtual ~fp_FieldBuildVersionRun(){}
01466 
01467     virtual bool            calculateValue(void);
01468     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01469 };
01470 
01471 class ABI_EXPORT fp_FieldBuildOptionsRun : public fp_FieldRun
01472 {
01473 public:
01474     fp_FieldBuildOptionsRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01475 
01476     virtual ~fp_FieldBuildOptionsRun(){}
01477 
01478     virtual bool            calculateValue(void);
01479     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01480 };
01481 
01482 class ABI_EXPORT fp_FieldBuildTargetRun : public fp_FieldRun
01483 {
01484 public:
01485     fp_FieldBuildTargetRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01486 
01487     virtual ~fp_FieldBuildTargetRun(){}
01488 
01489     virtual bool            calculateValue(void);
01490     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01491 };
01492 
01493 class ABI_EXPORT fp_FieldBuildCompileDateRun : public fp_FieldRun
01494 {
01495 public:
01496     fp_FieldBuildCompileDateRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01497 
01498     virtual ~fp_FieldBuildCompileDateRun (){}
01499 
01500     virtual bool            calculateValue(void);
01501     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01502 };
01503 
01504 class ABI_EXPORT fp_FieldBuildCompileTimeRun : public fp_FieldRun
01505 {
01506 public:
01507     fp_FieldBuildCompileTimeRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01508 
01509     virtual ~fp_FieldBuildCompileTimeRun(){}
01510 
01511     virtual bool            calculateValue(void);
01512     virtual void            _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01513 };
01514 
01515 class ABI_EXPORT fp_FieldMailMergeRun : public fp_FieldRun
01516 {
01517  public:
01518   fp_FieldMailMergeRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01519 
01520   virtual ~fp_FieldMailMergeRun(){}
01521 
01522   virtual bool          calculateValue(void);
01523   virtual void          _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01524 
01525   virtual UT_uint32     needsFrequentUpdates(){ return FIELD_UPDATE_MAILMERGE; }
01526 };
01527 
01528 class ABI_EXPORT fp_FieldMetaRun : public fp_FieldRun
01529 {
01530  public:
01531   fp_FieldMetaRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen, const char * which);
01532 
01533   virtual ~fp_FieldMetaRun(){}
01534 
01535   virtual bool          calculateValue(void);
01536   virtual void          _draw(dg_DrawArgs* pDA) { _defaultDraw(pDA); }
01537 
01538   virtual UT_uint32     needsFrequentUpdates(){ return FIELD_UPDATE_META;}
01539 
01540  private:
01541   std::string m_which;
01542 };
01543 
01544 class ABI_EXPORT fp_FieldMetaTitleRun : public fp_FieldMetaRun
01545 {
01546  public:
01547   fp_FieldMetaTitleRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01548   virtual ~fp_FieldMetaTitleRun(){}
01549 };
01550 
01551 class ABI_EXPORT fp_FieldMetaCreatorRun : public fp_FieldMetaRun
01552 {
01553  public:
01554   fp_FieldMetaCreatorRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01555   virtual ~fp_FieldMetaCreatorRun(){}
01556 };
01557 
01558 class ABI_EXPORT fp_FieldMetaSubjectRun : public fp_FieldMetaRun
01559 {
01560  public:
01561   fp_FieldMetaSubjectRun(fl_BlockLayout* pBL,  UT_uint32 iOffsetFirst, UT_uint32 iLen);
01562   virtual ~fp_FieldMetaSubjectRun(){}
01563 };
01564 
01565 class ABI_EXPORT fp_FieldMetaPublisherRun : public fp_FieldMetaRun
01566 {
01567  public:
01568   fp_FieldMetaPublisherRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01569   virtual ~fp_FieldMetaPublisherRun(){}
01570 };
01571 
01572 class ABI_EXPORT fp_FieldMetaDateRun : public fp_FieldMetaRun
01573 {
01574  public:
01575   fp_FieldMetaDateRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01576   virtual ~fp_FieldMetaDateRun(){}
01577 };
01578 
01579 class ABI_EXPORT fp_FieldMetaDateLastChangedRun : public fp_FieldMetaRun
01580 {
01581  public:
01582   fp_FieldMetaDateLastChangedRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01583   virtual ~fp_FieldMetaDateLastChangedRun(){}
01584 };
01585 
01586 class ABI_EXPORT fp_FieldMetaTypeRun : public fp_FieldMetaRun
01587 {
01588  public:
01589   fp_FieldMetaTypeRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01590   virtual ~fp_FieldMetaTypeRun(){}
01591 };
01592 
01593 class ABI_EXPORT fp_FieldMetaLanguageRun : public fp_FieldMetaRun
01594 {
01595  public:
01596   fp_FieldMetaLanguageRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01597   virtual ~fp_FieldMetaLanguageRun(){}
01598 };
01599 
01600 class ABI_EXPORT fp_FieldMetaRightsRun : public fp_FieldMetaRun
01601 {
01602  public:
01603   fp_FieldMetaRightsRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01604   virtual ~fp_FieldMetaRightsRun(){}
01605 };
01606 
01607 class ABI_EXPORT fp_FieldMetaKeywordsRun : public fp_FieldMetaRun
01608 {
01609  public:
01610   fp_FieldMetaKeywordsRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01611   virtual ~fp_FieldMetaKeywordsRun(){}
01612 };
01613 
01614 class ABI_EXPORT fp_FieldMetaContributorRun : public fp_FieldMetaRun
01615 {
01616  public:
01617   fp_FieldMetaContributorRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01618   virtual ~fp_FieldMetaContributorRun(){}
01619 };
01620 
01621 class ABI_EXPORT fp_FieldMetaCoverageRun : public fp_FieldMetaRun
01622 {
01623  public:
01624   fp_FieldMetaCoverageRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01625   virtual ~fp_FieldMetaCoverageRun(){}
01626 };
01627 
01628 class ABI_EXPORT fp_FieldMetaDescriptionRun : public fp_FieldMetaRun
01629 {
01630  public:
01631   fp_FieldMetaDescriptionRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst, UT_uint32 iLen);
01632   virtual ~fp_FieldMetaDescriptionRun(){}
01633 };
01634 
01635 // END DOM
01636 
01637 class ABI_EXPORT fp_FmtMarkRun : public fp_Run
01638 {
01639 public:
01640     fp_FmtMarkRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst);
01641 
01642     virtual void            mapXYToPosition(UT_sint32 xPos, UT_sint32 yPos, PT_DocPosition& pos, bool& bBOL, bool& bEOL, bool & isTOC);
01643     virtual void            findPointCoords(UT_uint32 iOffset, UT_sint32& x, UT_sint32& y, UT_sint32& x2, UT_sint32& y2, UT_sint32& height, bool& bDirection);
01644     virtual bool            canBreakAfter(void) const;
01645     virtual bool            canBreakBefore(void) const;
01646     virtual bool            isSuperscript(void) const ;
01647     virtual bool            isSubscript(void)  const;
01648     virtual bool            hasLayoutProperties(void) const {return true;}
01649 
01650 protected:
01651     virtual void            _lookupProperties(const PP_AttrProp * pSpanAP,
01652                                               const PP_AttrProp * pBlockAP,
01653                                               const PP_AttrProp * pSectionAP,
01654                                               GR_Graphics * pG = NULL);
01655 
01656     virtual void            _draw(dg_DrawArgs*);
01657     virtual void            _clearScreen(bool bFullLineHeightRect);
01658     virtual bool            _letPointPass(void) const;
01659 
01660 private:
01661     enum
01662     {
01663         TEXT_POSITION_NORMAL,
01664         TEXT_POSITION_SUPERSCRIPT,
01665         TEXT_POSITION_SUBSCRIPT
01666     };
01667     UT_Byte                 m_fPosition;
01668 };
01669 
01670 
01671 class ABI_EXPORT fp_DummyRun : public fp_Run
01672 {
01673 public:
01674     fp_DummyRun(fl_BlockLayout* pBL, UT_uint32 iOffsetFirst);
01675 
01676     virtual void            mapXYToPosition(UT_sint32 xPos, UT_sint32 yPos, PT_DocPosition& pos, bool& bBOL, bool& bEOL, bool &isTOC);
01677     virtual void            findPointCoords(UT_uint32 iOffset, UT_sint32& x, UT_sint32& y, UT_sint32& x2, UT_sint32& y2, UT_sint32& height, bool& bDirection);
01678     virtual bool            canBreakAfter(void) const;
01679     virtual bool            canBreakBefore(void) const;
01680     virtual bool            isSuperscript(void) const ;
01681     virtual bool            isSubscript(void)  const;
01682     virtual bool            hasLayoutProperties(void) const {return false;}
01683 
01684 protected:
01685     virtual void            _lookupProperties(const PP_AttrProp * pSpanAP,
01686                                               const PP_AttrProp * pBlockAP,
01687                                               const PP_AttrProp * pSectionAP,
01688                                               GR_Graphics * pG = NULL);
01689 
01690     virtual void            _draw(dg_DrawArgs*);
01691     virtual void            _clearScreen(bool bFullLineHeightRect);
01692     virtual bool            _letPointPass(void) const;
01693 };
01694 
01695 #endif /* FP_RUN_H */
01696 
01697 
01698 
01699 
01700 
01701 
01702 
01703 
01704 
01705 

Generated on Sun Feb 14 2021 for AbiWord by  doxygen 1.7.1