00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef CONTAINERLAYOUT_H
00022 #define CONTAINERLAYOUT_H
00023
00024 #ifdef FMT_TEST
00025 #include <stdio.h>
00026 #endif
00027
00028 typedef enum _fl_ContainerType
00029 {
00030 FL_CONTAINER_BLOCK,
00031 FL_CONTAINER_DOCSECTION,
00032 FL_CONTAINER_HDRFTR,
00033 FL_CONTAINER_SHADOW,
00034 FL_CONTAINER_FOOTNOTE,
00035 FL_CONTAINER_ENDNOTE,
00036 FL_CONTAINER_MARGINNOTE,
00037 FL_CONTAINER_TABLE,
00038 FL_CONTAINER_CELL,
00039 FL_CONTAINER_FRAME,
00040 FL_CONTAINER_TOC,
00041 FL_CONTAINER_ANNOTATION
00042 } fl_ContainerType;
00043
00044
00045
00046 typedef enum {FP_VISIBLE = 0,
00047 FP_HIDDEN_TEXT,
00048 FP_HIDDEN_REVISION,
00049 FP_HIDDEN_REVISION_AND_TEXT,
00050 FP_HIDDEN_FOLDED
00051 } FPVisibility;
00052
00053
00054 #include "ut_types.h"
00055 #include "ut_vector.h"
00056 #include "pt_Types.h"
00057 #include "fl_Layout.h"
00058 #include "ut_debugmsg.h"
00059 #include "ut_misc.h"
00060 #include "gr_Image.h"
00061 #include "gr_Graphics.h"
00062
00063 class FL_DocLayout;
00064 class PD_Document;
00065 class PP_AttrProp;
00066 class fl_Layout;
00067 class fl_HdrFtrSectionLayout;
00068 class fl_SectionLayout;
00069 class fp_ContainerObject;
00070 class fp_Container;
00071 class fp_Run;
00072 class fl_DocSectionLayout;
00073 class UT_GrowBuf;
00074 class fl_FrameLayout;
00075 class fp_FrameContainer;
00076 class fl_BlockLayout;
00077
00078 class ABI_EXPORT fl_ContainerLayout : public fl_Layout
00079 {
00080 friend class fl_BlockLayout;
00081 public:
00082 fl_ContainerLayout(fl_ContainerLayout* pLayout, PL_StruxDocHandle sdh, PT_AttrPropIndex ap, PTStruxType iStrux,fl_ContainerType iType);
00083 virtual ~fl_ContainerLayout();
00084
00085 fl_ContainerType getContainerType(void) const { return m_iConType; }
00086 const char * getContainerString(void);
00087 const char * getAttribute(const char * pKey) const;
00088 virtual fp_Container* getFirstContainer() const;
00089 virtual fp_Container* getLastContainer() const;
00090 virtual void setFirstContainer(fp_Container * pCon);
00091 virtual void setLastContainer(fp_Container * pCon);
00092
00093 virtual bool recalculateFields(UT_uint32 iUpdateCount) =0;
00094
00095 virtual fp_Container* getNewContainer(fp_Container * pFirstContainer = NULL) = 0;
00096 virtual FL_DocLayout * getDocLayout(void) const;
00097 UT_sint32 getLevelInList(void);
00098 virtual void format(void) = 0;
00099 virtual void appendTextToBuf(UT_GrowBuf & buf);
00100 virtual void updateLayout(bool bDoAll) = 0;
00101 virtual void markAllRunsDirty(void) =0;
00102 virtual void collapse(void) = 0;
00103 virtual void redrawUpdate(void) = 0;
00104 virtual void setNeedsReformat(fl_ContainerLayout * pCL, UT_uint32 offset = 0) = 0;
00105 virtual void setNeedsRedraw(void) = 0;
00106 virtual bool isCollapsed(void) const = 0;
00107 virtual bool needsReformat(void) const = 0;
00108 virtual bool needsRedraw(void) const = 0;
00109 virtual fl_DocSectionLayout * getDocSectionLayout(void) const;
00110 virtual fl_SectionLayout * getSectionLayout() const = 0;
00111 virtual fl_HdrFtrSectionLayout * getHdrFtrSectionLayout(void) const;
00112 void setContainingLayout(fl_ContainerLayout*);
00113 fl_ContainerLayout * myContainingLayout(void) const;
00114 fl_HdrFtrSectionLayout * getHdrFtrLayout(void);
00115 void setPrev(fl_ContainerLayout*);
00116 void setNext(fl_ContainerLayout*);
00117 fl_ContainerLayout * getPrev(void) const;
00118 fl_ContainerLayout * getNext(void) const;
00119 fl_ContainerLayout * getFirstLayout(void) const;
00120 fl_ContainerLayout * getLastLayout(void) const;
00121 void setLastLayout(fl_ContainerLayout *pL);
00122 void setFirstLayout(fl_ContainerLayout *pL);
00123 fl_ContainerLayout * append(PL_StruxDocHandle sdh, PT_AttrPropIndex indexAP,fl_ContainerType iType);
00124 void add(fl_ContainerLayout* pL);
00125 fl_ContainerLayout * insert(PL_StruxDocHandle sdh, fl_ContainerLayout * pPrev, PT_AttrPropIndex indexAP,fl_ContainerType iType);
00126 void remove(fl_ContainerLayout * pL);
00127 virtual fp_Run * getFirstRun(void) const;
00128 virtual PT_DocPosition getPosition(bool bActualBlockPosition = false) const;
00129 bool canContainPoint() const;
00130 FPVisibility isHidden() const {return m_eHidden;}
00131 void setVisibility(FPVisibility eVis) {m_eHidden = eVis;}
00132 bool isOnScreen() const;
00133
00134
00135 UT_sint32 getNumFrames(void) const;
00136 fl_FrameLayout * getNthFrameLayout(UT_sint32 i) const;
00137 fp_FrameContainer * getNthFrameContainer(UT_sint32 i) const;
00138 void addFrame(fl_FrameLayout * pFrame);
00139 void removeFrame(fl_FrameLayout * pFrame);
00140
00141
00142
00143 UT_sint32 getFoldedLevel(void);
00144 UT_uint32 getFoldedID(void);
00145 void lookupFoldedLevel(void);
00146
00147 void lookupProperties(void);
00148 void lookupMarginProperties(void);
00149
00150 fl_BlockLayout* getNextBlockInDocument(void) const;
00151 fl_BlockLayout* getPrevBlockInDocument(void) const;
00152
00153 FPVisibility getAP(const PP_AttrProp *& pAP)const;
00154 void getSpanAP(UT_uint32 blockPos, bool bLeft, const PP_AttrProp * &pSpanAP) const;
00155
00156 #ifdef FMT_TEST
00157 virtual void __dump(FILE * fp) const;
00158 #endif
00159 protected:
00160
00161 void _insertIntoList(fl_ContainerLayout * pL);
00162
00163 private:
00164 bool _getPropertiesAP(const PP_AttrProp *& pAP);
00165 virtual void _lookupProperties(const PP_AttrProp* pAP) = 0;
00166
00167
00168
00169 virtual void _lookupMarginProperties(const PP_AttrProp* ){}
00170
00171 virtual bool _canContainPoint() const {return true;}
00172 void _insertFirst(fl_ContainerLayout * pL);
00173
00174 fl_ContainerType m_iConType;
00175 fl_ContainerLayout* m_pMyLayout;
00176
00177 fl_ContainerLayout* m_pPrev;
00178 fl_ContainerLayout* m_pNext;
00179
00180 fl_ContainerLayout* m_pFirstL;
00181 fl_ContainerLayout* m_pLastL;
00182 fp_Container * m_pFirstContainer;
00183 fp_Container * m_pLastContainer;
00184 FPVisibility m_eHidden;
00185 UT_GenericVector<fl_FrameLayout *> m_vecFrames;
00186 UT_sint32 m_iFoldedLevel;
00187 UT_uint32 m_iFoldedID;
00188 };
00189
00190 #endif
00191
00192
00193
00194