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

fl_SectionLayout.h

Go to the documentation of this file.
00001 /* -*- mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: t -*- */
00002 /* AbiWord
00003  * Copyright (C) 1998 AbiSource, Inc.
00004  *
00005  * This program is free software; you can redistribute it and/or
00006  * modify it under the terms of the GNU General Public License
00007  * as published by the Free Software Foundation; either version 2
00008  * of the License, or (at your option) any later version.
00009  *
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program; if not, write to the Free Software
00017  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
00018  * 02110-1301 USA.
00019  */
00020 
00021 #ifndef SECTIONLAYOUT_H
00022 #define SECTIONLAYOUT_H
00023 
00024 #ifdef FMT_TEST
00025 #include <stdio.h>
00026 #endif
00027 
00028 #include <string>
00029 
00030 typedef enum _SectionType
00031 {
00032     FL_SECTION_DOC,
00033     FL_SECTION_HDRFTR,
00034     FL_SECTION_SHADOW,
00035     FL_SECTION_ENDNOTE,
00036     FL_SECTION_TABLE,
00037     FL_SECTION_CELL,
00038     FL_SECTION_FOOTNOTE,
00039     FL_SECTION_MARGINNOTE,
00040     FL_SECTION_FRAME,
00041     FL_SECTION_TOC,
00042     FL_SECTION_ANNOTATION
00043 } SectionType;
00044 
00045 
00046 typedef enum _HdrFtrType
00047 {
00048     FL_HDRFTR_HEADER,
00049     FL_HDRFTR_HEADER_EVEN,
00050     FL_HDRFTR_HEADER_FIRST,
00051     FL_HDRFTR_HEADER_LAST,
00052     FL_HDRFTR_FOOTER,
00053     FL_HDRFTR_FOOTER_EVEN,
00054     FL_HDRFTR_FOOTER_FIRST,
00055     FL_HDRFTR_FOOTER_LAST,
00056     FL_HDRFTR_NONE
00057 } HdrFtrType;
00058 
00059 
00060 #include "ut_types.h"
00061 #include "ut_vector.h"
00062 #include "pt_Types.h"
00063 #include "fl_Layout.h"
00064 #include "fl_ContainerLayout.h"
00065 #include "pl_Listener.h"
00066 #include "ut_debugmsg.h"
00067 #include "ut_misc.h" // for UT_RGBColor
00068 #include "fg_Graphic.h"
00069 #include "fb_ColumnBreaker.h"
00070 
00071 class fp_Page;
00072 class FL_DocLayout;
00073 class fl_Layout;
00074 class fl_ContainerLayout;
00075 class fl_BlockLayout;
00076 class fl_HdrFtrSectionLayout;
00077 class fl_HdrFtrShadow;
00078 class fl_FootnoteLayout;
00079 class fl_AnnotationLayout;
00080 class fb_LineBreaker;
00081 class fp_ShadowContainer;
00082 class fp_Column;
00083 class fp_Run;
00084 class fp_Line;
00085 class fp_Container;
00086 class fp_HdrFtrContainer;
00087 class PD_Document;
00088 class PP_AttrProp;
00089 class pf_Frag_Strux;
00090 class PX_ChangeRecord_FmtMark;
00091 class PX_ChangeRecord_FmtMarkChange;
00092 class PX_ChangeRecord_Object;
00093 class PX_ChangeRecord_ObjectChange;
00094 class PX_ChangeRecord_Span;
00095 class PX_ChangeRecord_SpanChange;
00096 class PX_ChangeRecord_Strux;
00097 class PX_ChangeRecord_StruxChange;
00098 class fb_ColumnBreaker;
00099 class fp_EndnoteContainer;
00100 class fl_TableLayout;
00101 class fl_CellLayout;
00102 class UT_Worker;
00103 class ABI_EXPORT fl_SectionLayout : public fl_ContainerLayout
00104 {
00105     friend class fl_DocListener;
00106 
00107 public:
00108     fl_SectionLayout(FL_DocLayout* pLayout, pf_Frag_Strux* sdh, PT_AttrPropIndex ap, SectionType iType, fl_ContainerType iCType, PTStruxType ptType, fl_ContainerLayout * pMyContainerLayout);
00109     virtual ~fl_SectionLayout();
00110 
00111     SectionType         getType(void) const { return m_iType; }
00112 
00113     virtual bool        recalculateFields(UT_uint32 iUpdateCount);
00114     fl_BlockLayout *        getFirstBlock(void) const;
00115     virtual fp_Container*       getNewContainer(fp_Container * pFirstContainer = NULL) = 0;
00116     virtual FL_DocLayout*       getDocLayout(void) const;
00117     virtual void                markAllRunsDirty(void) =0;
00118     virtual bool                isCollapsed(void) const
00119         {return m_bIsCollapsed;}
00120     virtual void                setNeedsReformat(fl_ContainerLayout * pCL, UT_uint32 offset = 0);
00121             void                clearNeedsReformat(fl_ContainerLayout * pCL);
00122     virtual void                setNeedsRedraw(void);
00123     virtual void                removeFromUpdate(fl_ContainerLayout * pL);
00124     virtual bool                needsReformat(void) const
00125         {return m_bNeedsReformat;}
00126     virtual bool                needsRedraw(void) const
00127         {return m_bNeedsRedraw;}
00128     virtual void                clearNeedsRedraw(void)
00129         {m_bNeedsRedraw = false;}
00130 
00131     virtual bool    doclistener_changeStrux(const PX_ChangeRecord_StruxChange * pcrxc) = 0;
00132     void                        checkAndAdjustCellSize(void);
00133     virtual bool bl_doclistener_populateSpan(fl_ContainerLayout*, const PX_ChangeRecord_Span * pcrs, PT_BlockOffset blockOffset, UT_uint32 len);
00134     virtual bool bl_doclistener_populateObject(fl_ContainerLayout*, PT_BlockOffset blockOffset, const PX_ChangeRecord_Object * pcro);
00135     virtual bool bl_doclistener_insertSpan(fl_ContainerLayout*, const PX_ChangeRecord_Span * pcrs);
00136     virtual bool bl_doclistener_deleteSpan(fl_ContainerLayout*, const PX_ChangeRecord_Span * pcrs);
00137     virtual bool bl_doclistener_changeSpan(fl_ContainerLayout*, const PX_ChangeRecord_SpanChange * pcrsc);
00138     virtual bool bl_doclistener_deleteStrux(fl_ContainerLayout*, const PX_ChangeRecord_Strux * pcrx);
00139     virtual bool bl_doclistener_changeStrux(fl_ContainerLayout*, const PX_ChangeRecord_StruxChange * pcrxc);
00140     virtual bool bl_doclistener_insertBlock(fl_ContainerLayout*, const PX_ChangeRecord_Strux * pcrx,
00141                                             pf_Frag_Strux* sdh,
00142                                             PL_ListenerId lid,
00143                                             void (* pfnBindHandles)(pf_Frag_Strux* sdhNew,
00144                                                                     PL_ListenerId lid,
00145                                                                     fl_ContainerLayout* sfhNew));
00146     virtual bool bl_doclistener_insertSection(fl_ContainerLayout*,
00147                                               SectionType iType,
00148                                               const PX_ChangeRecord_Strux * pcrx,
00149                                               pf_Frag_Strux* sdh,
00150                                               PL_ListenerId lid,
00151                                               void (* pfnBindHandles)(pf_Frag_Strux* sdhNew,
00152                                                                       PL_ListenerId lid,
00153                                                                       fl_ContainerLayout* sfhNew));
00154     virtual fl_SectionLayout * bl_doclistener_insertTable(fl_ContainerLayout*,
00155                                               SectionType iType,
00156                                               const PX_ChangeRecord_Strux * pcrx,
00157                                               pf_Frag_Strux* sdh,
00158                                               PL_ListenerId lid,
00159                                               void (* pfnBindHandles)(pf_Frag_Strux* sdhNew,
00160                                                                       PL_ListenerId lid,
00161                                                                       fl_ContainerLayout* sfhNew));
00162     virtual fl_SectionLayout * bl_doclistener_insertTable(SectionType iType,
00163                                               const PX_ChangeRecord_Strux * pcrx,
00164                                               pf_Frag_Strux* sdh,
00165                                               PL_ListenerId lid,
00166                                               void (* pfnBindHandles)(pf_Frag_Strux* sdhNew,
00167                                                                       PL_ListenerId lid,
00168                                                                       fl_ContainerLayout* sfhNew));
00169     virtual fl_SectionLayout * bl_doclistener_insertFrame(fl_ContainerLayout*,
00170                                               SectionType iType,
00171                                               const PX_ChangeRecord_Strux * pcrx,
00172                                               pf_Frag_Strux* sdh,
00173                                               PL_ListenerId lid,
00174                                               void (* pfnBindHandles)(pf_Frag_Strux* sdhNew,
00175                                                                       PL_ListenerId lid,
00176                                                                       fl_ContainerLayout* sfhNew));
00177 
00178     virtual bool bl_doclistener_insertObject(fl_ContainerLayout*, const PX_ChangeRecord_Object * pcro);
00179     virtual bool bl_doclistener_deleteObject(fl_ContainerLayout*, const PX_ChangeRecord_Object * pcro);
00180     virtual bool bl_doclistener_changeObject(fl_ContainerLayout*, const PX_ChangeRecord_ObjectChange * pcroc);
00181 
00182     virtual bool bl_doclistener_insertFmtMark(fl_ContainerLayout*, const PX_ChangeRecord_FmtMark * pcrfm);
00183     virtual bool bl_doclistener_deleteFmtMark(fl_ContainerLayout*, const PX_ChangeRecord_FmtMark * pcrfm);
00184     virtual bool bl_doclistener_changeFmtMark(fl_ContainerLayout*, const PX_ChangeRecord_FmtMarkChange * pcrfmc);
00185 
00186     virtual void         checkGraphicTick(GR_Graphics * pG);
00187     virtual void         setImageWidth(UT_sint32 iWidth);
00188     virtual void         setImageHeight(UT_sint32 iHeight);
00189     GR_Image *           getBackgroundImage(void)
00190       { return m_pImageImage;}
00191 
00192 #ifdef FMT_TEST
00193     virtual void        __dump(FILE * fp) const;
00194 #endif
00195 
00196 protected:
00197 
00198     void                _purgeLayout();
00199 
00200     SectionType         m_iType;
00201 
00202     FL_DocLayout*       m_pLayout;
00203     bool                m_bIsCollapsed;
00204     bool                m_bNeedsReformat;
00205     bool                m_bNeedsRedraw;
00206     FG_SharedGraphicPtr m_pGraphicImage;
00207     GR_Image *          m_pImageImage;
00208     UT_uint32           m_iGraphicTick;
00209     UT_sint32           m_iDocImageWidth;
00210     UT_sint32           m_iDocImageHeight;
00211     UT_GenericVector<fl_ContainerLayout *> m_vecFormatLayout;
00212 };
00213 
00214 class ABI_EXPORT fl_DocSectionLayout : public fl_SectionLayout
00215 {
00216     friend class fl_DocListener;
00217 
00218 public:
00219     fl_DocSectionLayout(FL_DocLayout* pLayout, pf_Frag_Strux* sdh, PT_AttrPropIndex ap, SectionType iType);
00220     virtual ~fl_DocSectionLayout();
00221 
00222     fl_DocSectionLayout* getNextDocSection(void) const;
00223     fl_DocSectionLayout* getPrevDocSection(void) const;
00224 
00225     virtual void        format(void);
00226     virtual void        updateLayout(bool bDoFull);
00227     void                updateDocSection(void);
00228     virtual void        collapse(void);
00229     virtual fp_Container * getFirstContainer(void) const;
00230     virtual fp_Container * getLastContainer(void) const;
00231     virtual void        setFirstContainer(fp_Container * pCon);
00232     virtual void        setLastContainer(fp_Container * pCon);
00233 
00234     fl_FootnoteLayout  *       getFootnoteLayout(UT_uint32 footnotePID);
00235     fl_AnnotationLayout  *       getAnnotationLayout(UT_uint32 footnotePID);
00236 
00237 
00238     virtual void        markAllRunsDirty(void);
00239     virtual fl_SectionLayout *  getSectionLayout(void) const
00240         { return NULL; }
00241 
00242     virtual void        redrawUpdate(void);
00243     virtual fp_Container*       getNewContainer(fp_Container * pFirstContainer = NULL);
00244 
00245     inline UT_sint32            getLeftMargin(void) const { return m_iLeftMargin; }
00246     inline UT_sint32            getRightMargin(void) const { return m_iRightMargin; }
00247     UT_sint32                   getTopMargin(void) const;
00248     UT_sint32                   getBottomMargin(void) const;
00249     inline UT_sint32            getFooterMargin(void) const { return m_iFooterMargin; }
00250     inline UT_sint32            getHeaderMargin(void) const { return m_iHeaderMargin; }
00251     inline UT_sint32            getSpaceAfter(void) const { return m_iSpaceAfter; }
00252     inline UT_sint32            getMaxSectionColumnHeight(void) const { return m_iMaxSectionColumnHeight;}
00253     UT_sint32                   getColumnGap(void) const;
00254     UT_uint32                   getFootnoteLineThickness(void) const
00255         { return m_iFootnoteLineThickness;}
00256     UT_uint32                   getFootnoteYoff(void) const
00257         { return m_iFootnoteYoff;}
00258 
00259     void                completeBreakSection(void);
00260     bool                arePageNumbersRestarted (void) const { return m_bRestart;}
00261     UT_sint32           getRestartedPageNumber(void) const { return m_iRestartValue;}
00262     UT_uint32           getNumColumns(void) const;
00263     bool                getColumnLineBetween(void) const {return m_bColumnLineBetween;}
00264     UT_uint32           getColumnOrder(void) const;
00265     void                setPaperColor();
00266     void                deleteEmptyColumns(void);
00267     virtual bool        doclistener_changeStrux(const PX_ChangeRecord_StruxChange * pcrxc);
00268     bool                doclistener_deleteStrux(const PX_ChangeRecord_Strux * pcrx);
00269 
00270     virtual bool        bl_doclistener_insertFootnote(fl_ContainerLayout*, const PX_ChangeRecord_Strux * pcrx,
00271                                               pf_Frag_Strux* sdh,
00272                                               PL_ListenerId lid,
00273                                               void (* pfnBindHandles)(pf_Frag_Strux* sdhNew,
00274                                                                       PL_ListenerId lid,
00275                                                                       fl_ContainerLayout* sfhNew));
00276 
00277 
00278     virtual bool        bl_doclistener_insertAnnotation(fl_ContainerLayout*, const PX_ChangeRecord_Strux * pcrx,
00279                                               pf_Frag_Strux* sdh,
00280                                               PL_ListenerId lid,
00281                                               void (* pfnBindHandles)(pf_Frag_Strux* sdhNew,
00282                                                                       PL_ListenerId lid,
00283                                                                       fl_ContainerLayout* sfhNew));
00284 
00285     void                setHdrFtr(HdrFtrType iType, fl_HdrFtrSectionLayout* pHFSL);
00286 
00287     fl_HdrFtrSectionLayout*         getHeader(void) const;
00288     fl_HdrFtrSectionLayout*         getFooter(void) const;
00289     fl_HdrFtrSectionLayout*         getHeaderEven(void) const;
00290     fl_HdrFtrSectionLayout*         getFooterEven(void) const;
00291     fl_HdrFtrSectionLayout*         getHeaderFirst(void) const;
00292     fl_HdrFtrSectionLayout*         getFooterFirst(void) const;
00293     fl_HdrFtrSectionLayout*         getHeaderLast(void) const;
00294     fl_HdrFtrSectionLayout*         getFooterLast(void) const;
00295 
00296     bool                            setHdrFtrHeightChange(bool bDoHdr, UT_sint32 newHeight);
00297     static void         _HdrFtrChangeCallback(UT_Worker * pWorker);
00298 
00299     void                addOwnedPage(fp_Page*);
00300     void                            prependOwnedHeaderPage(fp_Page * p_Page);
00301     void                            prependOwnedFooterPage(fp_Page * p_Page);
00302     void                deleteOwnedPage(fp_Page*, bool bReallyDeleteIT=true);
00303     fp_Page *                       getFirstOwnedPage(void) const {return m_pFirstOwnedPage;}
00304     void                markForRebuild(void) { m_bNeedsRebuild = true;}
00305     void                clearRebuild(void) { m_bNeedsRebuild = false;}
00306     bool                needsRebuild(void) const { return m_bNeedsRebuild;}
00307     void                checkAndAdjustColumnGap(UT_sint32 iLayoutWidth);
00308     void                markForReformat(void) { m_bNeedsFormat = true;}
00309     bool                needsReFormat(void) const { return m_bNeedsFormat;}
00310     bool                isThisPageValid(HdrFtrType hfType, fp_Page * pThisPage) const;
00311     bool                isFirstPageValid(void) const;
00312     void                getVecOfHdrFtrs(UT_GenericVector<fl_HdrFtrSectionLayout *> * vecHdrFtr) const;
00313     void                formatAllHdrFtr(void);
00314     void                doMarginChangeOnly(void);
00315     void                checkAndRemovePages(void);
00316     void                addValidPages(void);
00317     UT_sint32           getPageCount(void) const {return m_iPageCount;}
00318     void                setNeedsSectionBreak(bool bSet, fp_Page * pPage );
00319     bool                needsSectionBreak(void) const { return m_bNeedsSectionBreak;}
00320     void                setFirstEndnoteContainer(fp_EndnoteContainer * pECon);
00321     void                setLastEndnoteContainer(fp_EndnoteContainer * pECon);
00322     fp_Container *      getFirstEndnoteContainer(void) const;
00323     fp_Container *      getLastEndnoteContainer(void) const;
00324     void                deleteBrokenTablesFromHere(fl_ContainerLayout * pTL);
00325     UT_sint32           getWidth(void) const;
00326     UT_sint32           getActualColumnHeight(void) const;
00327     UT_sint32           getActualColumnWidth(void) const;
00328     bool                isCollapsing(void) const
00329         { return m_bDoingCollapse;}
00330 private:
00331     virtual void        _lookupProperties(const PP_AttrProp* pAP);
00332     virtual void        _lookupMarginProperties(const PP_AttrProp* pAP);
00333     fb_ColumnBreaker    m_ColumnBreaker;
00334     /*
00335       TODO support special case header/footer for first page of section
00336     */
00337     fl_HdrFtrSectionLayout*     m_pHeaderSL;
00338     fl_HdrFtrSectionLayout*     m_pFooterSL;
00339     fl_HdrFtrSectionLayout*     m_pHeaderEvenSL;
00340     fl_HdrFtrSectionLayout*     m_pFooterEvenSL;
00341     fl_HdrFtrSectionLayout*     m_pHeaderFirstSL;
00342     fl_HdrFtrSectionLayout*     m_pFooterFirstSL;
00343     fl_HdrFtrSectionLayout*     m_pHeaderLastSL;
00344     fl_HdrFtrSectionLayout*     m_pFooterLastSL;
00345 
00346     UT_uint32           m_iNumColumns;
00347     UT_sint32           m_iColumnGap;
00348     bool                m_bColumnLineBetween;
00349     UT_uint32           m_iColumnOrder;
00350 
00351     UT_sint32           m_iSpaceAfter;
00352     bool                m_bRestart;
00353     UT_sint32           m_iRestartValue;
00354     UT_sint32           m_iLeftMargin;
00355     double              m_dLeftMarginUserUnits;
00356     UT_sint32           m_iRightMargin;
00357     double              m_dRightMarginUserUnits;
00358     UT_sint32           m_iTopMargin;
00359     double              m_dTopMarginUserUnits;
00360     UT_sint32           m_iBottomMargin;
00361     double              m_dBottomMarginUserUnits;
00362     UT_sint32           m_iFooterMargin;
00363     double              m_dFooterMarginUserUnits;
00364     UT_sint32           m_iHeaderMargin;
00365     double              m_dHeaderMarginUserUnits;
00366     UT_sint32           m_iMaxSectionColumnHeight;
00367     double              m_dMaxSectionColumnHeight;
00368     UT_sint32           m_iFootnoteLineThickness;
00369     UT_sint32           m_iFootnoteYoff;
00370 
00372     fp_Column*          m_pFirstColumn;
00374     fp_Column*          m_pLastColumn;
00375     fp_Page *           m_pFirstOwnedPage;
00376     UT_sint32           m_iPageCount;
00377     bool                m_bNeedsFormat;
00378     bool                m_bNeedsRebuild;
00379     bool                m_bNeedsSectionBreak;
00380     fp_EndnoteContainer * m_pFirstEndnoteContainer;
00381     fp_EndnoteContainer * m_pLastEndnoteContainer;
00382     bool                m_bDeleteingBrokenContainers;
00383     std::string         m_sPaperColor;
00384     std::string         m_sScreenColor;
00385     UT_sint32           m_iNewHdrHeight;
00386     UT_sint32           m_iNewFtrHeight;
00387     UT_Worker *         m_pHdrFtrChangeTimer;
00388     std::string         m_sHdrFtrChangeProps;
00389     bool                m_bDoingCollapse;
00390 };
00391 
00392 class _PageHdrFtrShadowPair;
00393 
00394 
00395 class ABI_EXPORT fl_HdrFtrSectionLayout : public fl_SectionLayout
00396 {
00397     friend class fl_DocListener;
00398 
00399 public:
00400     fl_HdrFtrSectionLayout(HdrFtrType iHFType, FL_DocLayout* pLayout, fl_DocSectionLayout* pDocSL, pf_Frag_Strux* sdh, PT_AttrPropIndex ap);
00401     virtual ~fl_HdrFtrSectionLayout();
00402 
00403     inline fl_DocSectionLayout* getDocSectionLayout(void) const { return m_pDocSL; }
00404     HdrFtrType                  getHFType(void) const { return m_iHFType; }
00405     void                        setDocSectionLayout(fl_DocSectionLayout * pDSL) { m_pDocSL = pDSL;}
00406     void                        setHdrFtr(HdrFtrType iHFType) {     m_iHFType = iHFType;}
00407     virtual bool                recalculateFields(UT_uint32 iUpdateCount);
00408     bool                        doclistener_deleteStrux(const PX_ChangeRecord * pcr);
00409     void                        checkAndAdjustCellSize(fl_ContainerLayout * pCL);
00410     void                        localFormat(void);
00411     virtual void                markAllRunsDirty(void);
00412     void                        checkAndRemovePages(void);
00413     void                        addValidPages(void);
00414     bool                        isPageHere( fp_Page *pPage);
00415     bool                        isPointInHere(PT_DocPosition pos);
00416     void                        collapseBlock(fl_ContainerLayout * pBlock);
00417     virtual void                format(void);
00418     virtual fl_SectionLayout *  getSectionLayout(void) const
00419         { return static_cast<fl_SectionLayout *>(m_pDocSL);}
00420     virtual void                updateLayout(bool bDoFull);
00421     void                        layout(void);
00422     fl_ContainerLayout *        findMatchingContainer( fl_ContainerLayout * pBL);
00423     virtual void                redrawUpdate(void);
00424     virtual fp_Container*       getNewContainer(fp_Container * pFirstContainer = NULL);
00425     virtual fp_Container*       getFirstContainer() const;
00426     virtual fp_Container*       getLastContainer() const;
00427     fl_HdrFtrShadow *               getFirstShadow(void);
00428     fl_HdrFtrShadow *               findShadow( fp_Page * pPage);
00429     virtual bool            doclistener_changeStrux(const PX_ChangeRecord_StruxChange * pcrxc);
00430     void                                    changeIntoHdrFtrSection( fl_DocSectionLayout * pSL);
00431     void                    addPage(fp_Page*);
00432     void                    deletePage(fp_Page*);
00433     void                    clearScreen(void);
00434     virtual void            collapse(void);
00435     bool                    bl_doclistener_insertCell(fl_ContainerLayout* pCell,
00436                                                       const PX_ChangeRecord_Strux * pcrx,
00437                                                       pf_Frag_Strux* sdh,
00438                                                       PL_ListenerId lid,
00439                                                       fl_TableLayout * pTL);
00440     bool                    bl_doclistener_insertEndTable(fl_ContainerLayout* pTab,
00441                                                       const PX_ChangeRecord_Strux * pcrx,
00442                                                       pf_Frag_Strux* sdh,
00443                                                       PL_ListenerId lid);
00444     virtual bool bl_doclistener_populateSpan(fl_ContainerLayout*, const PX_ChangeRecord_Span * pcrs, PT_BlockOffset blockOffset, UT_uint32 len);
00445     virtual bool bl_doclistener_populateObject(fl_ContainerLayout*, PT_BlockOffset blockOffset, const PX_ChangeRecord_Object * pcro);
00446     virtual bool bl_doclistener_insertSpan(fl_ContainerLayout*, const PX_ChangeRecord_Span * pcrs);
00447     virtual bool bl_doclistener_deleteSpan(fl_ContainerLayout*, const PX_ChangeRecord_Span * pcrs);
00448     virtual bool bl_doclistener_changeSpan(fl_ContainerLayout*, const PX_ChangeRecord_SpanChange * pcrsc);
00449     virtual bool bl_doclistener_deleteStrux(fl_ContainerLayout*, const PX_ChangeRecord_Strux * pcrx);
00450     bool bl_doclistener_deleteCellStrux(fl_ContainerLayout*, const PX_ChangeRecord_Strux * pcrx);
00451     bool bl_doclistener_deleteTableStrux(fl_ContainerLayout*, const PX_ChangeRecord_Strux * pcrx);
00452     virtual bool bl_doclistener_changeStrux(fl_ContainerLayout*, const PX_ChangeRecord_StruxChange * pcrxc);
00453     virtual fl_SectionLayout * bl_doclistener_insertTable(fl_ContainerLayout*,
00454                                               SectionType iType,
00455                                               const PX_ChangeRecord_Strux * pcrx,
00456                                               pf_Frag_Strux* sdh,
00457                                               PL_ListenerId lid,
00458                                               void (* pfnBindHandles)(pf_Frag_Strux* sdhNew,
00459                                                                       PL_ListenerId lid,
00460                                                                       fl_ContainerLayout* sfhNew));
00461     virtual fl_SectionLayout * bl_doclistener_insertTable(SectionType iType,
00462                                               const PX_ChangeRecord_Strux * pcrx,
00463                                               pf_Frag_Strux* sdh,
00464                                               PL_ListenerId lid,
00465                                               void (* pfnBindHandles)(pf_Frag_Strux* sdhNew,
00466                                                                       PL_ListenerId lid,
00467                                                                       fl_ContainerLayout* sfhNew));
00468     bool         bl_doclistener_insertFirstBlock(fl_ContainerLayout* pCL, const PX_ChangeRecord_Strux * pcrx,pf_Frag_Strux* sdh,PL_ListenerId lid);
00469     virtual bool bl_doclistener_insertBlock(fl_ContainerLayout*, const PX_ChangeRecord_Strux * pcrx,
00470                                             pf_Frag_Strux* sdh,
00471                                             PL_ListenerId lid,
00472                                             void (* pfnBindHandles)(pf_Frag_Strux* sdhNew,
00473                                                                     PL_ListenerId lid,
00474                                                                     fl_ContainerLayout* sfhNew));
00475     virtual bool bl_doclistener_insertSection(fl_ContainerLayout*, const PX_ChangeRecord_Strux * pcrx,
00476                                               pf_Frag_Strux* sdh,
00477                                               PL_ListenerId lid,
00478                                               void (* pfnBindHandles)(pf_Frag_Strux* sdhNew,
00479                                                                       PL_ListenerId lid,
00480                                                                       fl_ContainerLayout* sfhNew));
00481     virtual bool bl_doclistener_insertObject(fl_ContainerLayout*, const PX_ChangeRecord_Object * pcro);
00482     virtual bool bl_doclistener_deleteObject(fl_ContainerLayout*, const PX_ChangeRecord_Object * pcro);
00483     virtual bool bl_doclistener_changeObject(fl_ContainerLayout*, const PX_ChangeRecord_ObjectChange * pcroc);
00484 
00485     virtual bool bl_doclistener_insertFmtMark(fl_ContainerLayout*, const PX_ChangeRecord_FmtMark * pcrfm);
00486     virtual bool bl_doclistener_deleteFmtMark(fl_ContainerLayout*, const PX_ChangeRecord_FmtMark * pcrfm);
00487     virtual bool bl_doclistener_changeFmtMark(fl_ContainerLayout*, const PX_ChangeRecord_FmtMarkChange * pcrfmc);
00488 
00489 private:
00490     UT_sint32                   _findShadow(fp_Page * pPage);
00491     virtual void                _lookupProperties(const PP_AttrProp* pAP);
00492     virtual void                _lookupMarginProperties(const PP_AttrProp* pAP);
00493     void                        _localCollapse(void);
00494 
00495     fl_DocSectionLayout*        m_pDocSL;
00496     HdrFtrType                  m_iHFType;
00497     UT_GenericVector<_PageHdrFtrShadowPair*> m_vecPages;
00498     fp_Container *              m_pHdrFtrContainer;
00499 };
00500 
00501 
00502 class ABI_EXPORT fl_HdrFtrShadow : public fl_SectionLayout
00503 {
00504     friend class fl_DocListener;
00505 
00506 public:
00507     fl_HdrFtrShadow(FL_DocLayout* pLayout, fp_Page* pPage, fl_HdrFtrSectionLayout* pDocSL, pf_Frag_Strux* sdh, PT_AttrPropIndex ap);
00508     virtual ~fl_HdrFtrShadow();
00509 
00510 virtual fl_HdrFtrSectionLayout* getHdrFtrSectionLayout(void) const { return m_pHdrFtrSL; }
00511     fl_ContainerLayout *        findMatchingContainer(fl_ContainerLayout * pBL);
00512     fl_ContainerLayout *        findBlockAtPosition(PT_DocPosition pos);
00513     virtual void                format(void);
00514     virtual void                updateLayout(bool bDoFull);
00515     virtual void                redrawUpdate(void);
00516     fp_Page *                       getPage(void) const { return m_pPage;}
00517     virtual fp_Container*       getNewContainer(fp_Container *pFirstContainer = NULL);
00518     virtual fp_Container*       getFirstContainer() const;
00519     virtual fp_Container*       getLastContainer() const;
00520     void                        layout(void);
00521     void                        clearScreen(void);
00522     virtual bool                doclistener_changeStrux(const PX_ChangeRecord_StruxChange * pcrxc);
00523     virtual void                collapse(void) {}
00524     virtual void                markAllRunsDirty(void) {}
00525     virtual fl_SectionLayout *  getSectionLayout(void) const
00526         { return getHdrFtrSectionLayout()->getSectionLayout(); }
00527 
00528 
00529 private:
00530     virtual void                _lookupProperties(const PP_AttrProp* pAP);
00531     virtual void                _lookupMarginProperties(const PP_AttrProp* pAP);
00532     void                        _createContainer(void);
00533 
00534     fp_ShadowContainer*         m_pContainer;
00535     fp_Page*                    m_pPage;
00536     fl_HdrFtrSectionLayout * m_pHdrFtrSL;
00537 };
00538 
00539 class ABI_EXPORT fl_ShadowListener : public PL_Listener
00540 {
00541 public:
00542     fl_ShadowListener(fl_HdrFtrSectionLayout* pHFSL, fl_HdrFtrShadow* pShadow);
00543     virtual ~fl_ShadowListener();
00544 
00545     virtual bool                populate(fl_ContainerLayout* sfh,
00546                                          const PX_ChangeRecord * pcr);
00547 
00548     virtual bool                populateStrux(pf_Frag_Strux* sdh,
00549                                               const PX_ChangeRecord * pcr,
00550                                               fl_ContainerLayout* * psfh);
00551 
00552     virtual bool                change(fl_ContainerLayout* sfh,
00553                                        const PX_ChangeRecord * pcr);
00554 
00555     virtual bool                insertStrux(fl_ContainerLayout* sfh,
00556                                             const PX_ChangeRecord * pcr,
00557                                             pf_Frag_Strux* sdh,
00558                                             PL_ListenerId lid,
00559                                             void (* pfnBindHandles)(pf_Frag_Strux* sdhNew,
00560                                                                     PL_ListenerId lid,
00561                                                                     fl_ContainerLayout* sfhNew));
00562 
00563     virtual bool                signal(UT_uint32 iSignal);
00564 
00565 private:
00566     PD_Document*                m_pDoc;
00567     fl_HdrFtrShadow*            m_pShadow;
00568     bool                        m_bListening;
00569     fl_ContainerLayout*         m_pCurrentBL;
00570     fl_HdrFtrSectionLayout *    m_pHFSL;
00571     fl_TableLayout *            m_pCurrentTL;
00572     fl_CellLayout *             m_pCurrentCell;
00573 };
00574 
00575 #endif /* SECTIONLAYOUT_H */

Generated on Sun Feb 14 2021 for AbiWord by  doxygen 1.7.1