00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef COLUMN_H
00021 #define COLUMN_H
00022
00023 #ifdef FMT_TEST
00024 #include <stdio.h>
00025 #endif
00026
00027 #include "ut_misc.h"
00028 #include "ut_types.h"
00029 #include "ut_vector.h"
00030 #include "pt_Types.h"
00031 #include "fp_Page.h"
00032 #include "fl_DocLayout.h"
00033 #include "fp_ContainerObject.h"
00034 #define INITIAL_Y_POS -99999999
00035 class fl_EndnoteSectionLayout;
00036 class fl_HdrFtrSectionLayout;
00037 class fl_DocSectionLayout;
00038 class fl_SectionLayout;
00039 class fp_TOCContainer;
00040 class fl_HdrFtrShadow;
00041 class fp_Page;
00042 class PP_AttrProp;
00043 class GR_Graphics;
00044 class fp_TableContainer;
00045 struct dg_DrawArgs;
00046 struct fp_Sliver;
00047
00048 class ABI_EXPORT fp_VerticalContainer : public fp_Container
00049 {
00050 public:
00051 fp_VerticalContainer(FP_ContainerType iType, fl_SectionLayout* pSectionLayout);
00052 virtual ~fp_VerticalContainer();
00053
00054 virtual void setWidth(UT_sint32);
00055 void _setWidth(UT_sint32 iWidth) {m_iWidth = iWidth;}
00056 virtual void setHeight(UT_sint32);
00057 void _setHeight(UT_sint32 iHeight) {m_iHeight = iHeight;}
00058 virtual void setMaxHeight(UT_sint32);
00059 virtual void setX(UT_sint32, bool bDontClearIfNeeded=false);
00060 virtual void setY(UT_sint32);
00065 inline UT_sint32 getMaxHeight(void) const
00066 { return m_iMaxHeight; }
00067
00072 virtual UT_sint32 getWidth(void) const
00073 { return m_iWidth; }
00074
00075 virtual UT_sint32 getX(void) const;
00076
00077 void _setX( UT_sint32 iX) { m_iX = iX;}
00078
00079 virtual UT_sint32 getY(void) const;
00080 UT_sint32 getY(GR_Graphics * pG) const;
00081
00082 void _setY( UT_sint32 iY) { m_iY = iY;}
00087 virtual UT_sint32 getHeight(void) const
00088 { return m_iHeight; }
00089
00090 UT_sint32 getColumnGap(void) const;
00091
00096 bool getIntentionallyEmpty(void) const
00097 { return m_bIntentionallyEmpty; }
00101 void setIntentionallyEmpty(bool b)
00102 { m_bIntentionallyEmpty = b; }
00103
00104 fp_Container* getFirstContainer(void) const;
00105 fp_Container* getLastContainer(void) const;
00106 UT_sint32 getYoffsetFromTable(fp_Container * pT,
00107 fp_Container* pCell,
00108 fp_ContainerObject * pCon);
00109 bool insertContainerAfter(fp_Container* pNewContainer, fp_Container* pAfterContainer);
00110 bool insertContainer(fp_Container*);
00111 bool addContainer(fp_Container*);
00112 void removeContainer(fp_Container* pContainer, bool bClear = false);
00113
00114 virtual UT_uint32 distanceFromPoint(UT_sint32 x, UT_sint32 y);
00115
00116 virtual void mapXYToPosition(UT_sint32 xPos,
00117 UT_sint32 yPos,
00118 PT_DocPosition& pos,
00119 bool& bBOL, bool& bEOL, bool &isTOC);
00120
00121 void getOffsets(fp_ContainerObject* pContainer,
00122 UT_sint32& xoff,
00123 UT_sint32& yoff);
00124 fp_TableContainer * getCorrectBrokenTable(fp_Container * pLine);
00125 fp_TOCContainer * getCorrectBrokenTOC(fp_Container * pLine);
00126 void getScreenOffsets(fp_ContainerObject* pContainer,
00127 UT_sint32& xoff,
00128 UT_sint32& yoff);
00129
00130 virtual UT_Rect * getScreenRect();
00131 virtual void markDirtyOverlappingRuns(UT_Rect & recScreen);
00132
00133 virtual void draw(dg_DrawArgs*);
00134 virtual void draw(GR_Graphics*) {}
00135
00136 void clearScreen(void);
00137 void bumpContainers(fp_ContainerObject* pLastContainerToKeep);
00138 virtual bool isVBreakable(void) {return true;}
00139 virtual bool isHBreakable(void) {return false;}
00140 virtual UT_sint32 wantVBreakAt(UT_sint32) {return 0;}
00141 virtual UT_sint32 wantHBreakAt(UT_sint32) {return 0;}
00142 virtual fp_ContainerObject * VBreakAt(UT_sint32) {return NULL;}
00143 virtual fp_ContainerObject * HBreakAt(UT_sint32) {return NULL;}
00144 void recalcMaxWidth(bool bDontClearIfNeeded = false)
00145 {
00146 UT_UNUSED(bDontClearIfNeeded);
00147 }
00148 virtual UT_sint32 getMarginBefore(void) const { return 0;}
00149 virtual UT_sint32 getMarginAfter(void) const { return 0;}
00150 virtual void setAssignedScreenHeight(UT_sint32) {}
00151 virtual fp_Container * getNextContainerInSection(void) const
00152 {return NULL;}
00153 virtual fp_Container * getPrevContainerInSection(void) const
00154 {return NULL;}
00155 bool validate(void);
00156 FV_View* getView(void) const;
00157 UT_sint32 getNumWrapped(void) const
00158 { return m_vecWrappedLines.getItemCount();}
00159 void addWrappedLine(fp_Line * pLine)
00160 { m_vecWrappedLines.addItem(pLine);}
00161 void clearWrappedLines(void)
00162 { m_vecWrappedLines.clear();}
00163 fp_Line * getNthWrappedLine(UT_sint32 i)
00164 { return m_vecWrappedLines.getNthItem(i);}
00165 protected:
00166 void _setMaxContainerHeight(UT_sint32 iContainerHeight);
00167 UT_sint32 _getMaxContainerHeight(void) const;
00168
00169 virtual void _drawBoundaries(dg_DrawArgs* pDA);
00170 UT_sint32 m_iRedrawHeight;
00171 private:
00172
00176 UT_sint32 m_iWidth;
00177
00181 UT_sint32 m_iHeight;
00185 UT_sint32 m_iMaxHeight;
00186
00190 UT_sint32 m_iX;
00194 UT_sint32 m_iY;
00195
00204 bool m_bIntentionallyEmpty;
00205 UT_sint32 m_imaxContainerHeight;
00206 UT_GenericVector<fp_Line *> m_vecWrappedLines;
00207 };
00208
00209 class ABI_EXPORT fp_Column : public fp_VerticalContainer
00210 {
00211 public:
00212 fp_Column(fl_SectionLayout* pSectionLayout);
00213 ~fp_Column();
00214
00215 fl_DocSectionLayout* getDocSectionLayout(void) const;
00216
00217 void setLeader(fp_Column* p) { m_pLeader = p; }
00218 void setFollower(fp_Column* p) { m_pFollower = p; }
00219 fp_Column* getLeader(void) const { return m_pLeader; }
00220 fp_Column* getFollower(void) const { return m_pFollower; }
00226 void setPage(fp_Page* pPage);
00227 virtual fp_Page* getPage(void) const
00228 { return m_pPage; }
00233 UT_sint32 getMaxHeight(void) const;
00234
00235 void layout(void);
00236
00237 void collapseEndnotes(void);
00238 #ifdef FMT_TEST
00239 void __dump(FILE * fp) const;
00240 #endif
00241
00242 protected:
00243 UT_uint32 _getBottomOfLastContainer(void) const;
00244
00245 void _drawBoundaries(dg_DrawArgs* pDA);
00246
00247 private:
00248
00249 fp_Column* m_pLeader;
00250 fp_Column* m_pFollower;
00251 fp_Page* m_pPage;
00252 };
00253
00254 class ABI_EXPORT fp_ShadowContainer : public fp_VerticalContainer
00255 {
00256 public:
00257 fp_ShadowContainer(UT_sint32 iX, UT_sint32 iY,
00258 UT_sint32 iWidth, UT_sint32 iHeight,
00259 fl_SectionLayout* pSL);
00260 ~fp_ShadowContainer();
00261
00262 fl_HdrFtrSectionLayout* getHdrFtrSectionLayout(void) const;
00263 fl_HdrFtrShadow * getShadow();
00264 virtual void draw(dg_DrawArgs*);
00265 virtual void draw(GR_Graphics*) {};
00266 virtual void layout(void);
00267 void layout(bool bForce);
00268 virtual void clearScreen(void);
00269 void clearHdrFtrBoundaries(void);
00270 void setPage(fp_Page* pPage);
00271 virtual inline fp_Page* getPage(void) const
00272 { return m_pPage; }
00273 protected:
00274 void _drawHdrFtrBoundaries(dg_DrawArgs * pDA);
00275 private:
00276 bool m_bHdrFtrBoxDrawn;
00277 UT_sint32 m_ixoffBegin;
00278 UT_sint32 m_iyoffBegin;
00279 UT_sint32 m_ixoffEnd;
00280 UT_sint32 m_iyoffEnd;
00281 fp_Page* m_pPage;
00282
00283 };
00284
00285
00286 class ABI_EXPORT fp_HdrFtrContainer : public fp_VerticalContainer
00287 {
00288 public:
00289 fp_HdrFtrContainer( UT_sint32 iWidth,
00290 fl_SectionLayout* pSL);
00291 ~fp_HdrFtrContainer();
00292
00293 fl_HdrFtrSectionLayout* getHdrFtrSectionLayout(void) const;
00294 virtual void draw(dg_DrawArgs*);
00295 virtual void layout(void);
00296 virtual void clearScreen(void);
00297 void getScreenOffsets(fp_ContainerObject* pContainer, UT_sint32& xoff,
00298 UT_sint32& yoff);
00299
00300 protected:
00301 };
00302
00303 class ABI_EXPORT fp_EndnoteSectionContainer : public fp_VerticalContainer
00304 {
00305 public:
00306 fp_EndnoteSectionContainer(fl_SectionLayout* pSectionLayout);
00307 ~fp_EndnoteSectionContainer();
00308
00309 fl_EndnoteSectionLayout* getEndnoteSectionLayout(void) const;
00310
00311 virtual void draw(dg_DrawArgs*);
00312 virtual void layout(void);
00313 virtual void clearScreen(void);
00314 virtual inline fp_Page* getPage(void) const
00315 { return m_pPage; }
00316 protected:
00317 private:
00318 fp_Page* m_pPage;
00319 };
00320
00321 #endif