00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef FOOTNOTELAYOUT_H
00022 #define FOOTNOTELAYOUT_H
00023
00024 #include "ut_types.h"
00025 #include "ut_vector.h"
00026 #include "pt_Types.h"
00027 #include "fl_Layout.h"
00028 #include "fl_ContainerLayout.h"
00029 #include "fl_SectionLayout.h"
00030 #include "pl_Listener.h"
00031 #include "ut_debugmsg.h"
00032
00033 class fl_BlockLayout;
00034
00035
00036
00037
00038
00039
00040
00041
00042 class fp_AnnotationRun;
00043
00044 class ABI_EXPORT fl_EmbedLayout : public fl_SectionLayout
00045 {
00046 friend class fl_DocListener;
00047 friend class fp_FootnoteContainer;
00048
00049 public:
00050 fl_EmbedLayout(FL_DocLayout* pLayout,
00051 fl_DocSectionLayout * pDocSL,
00052 PL_StruxDocHandle sdh,
00053 PT_AttrPropIndex ap,
00054 fl_ContainerLayout * pMyContainerLayout,
00055 SectionType iSecType,
00056 fl_ContainerType myType,
00057 PTStruxType myStruxType);
00058 virtual ~fl_EmbedLayout();
00059 virtual void setNeedsReformat(fl_ContainerLayout * pCL, UT_uint32 offset = 0);
00060 virtual void updateLayout(bool bDoAll);
00061
00062 virtual bool doclistener_changeStrux(const PX_ChangeRecord_StruxChange * pcrxc);
00063 virtual bool doclistener_deleteStrux(const PX_ChangeRecord_Strux * pcrx);
00064 virtual bool doclistener_deleteEndEmbed(const PX_ChangeRecord_Strux * pcrx);
00065 virtual bool bl_doclistener_insertEndEmbed(fl_ContainerLayout*,
00066 const PX_ChangeRecord_Strux * pcrx,
00067 PL_StruxDocHandle sdh,
00068 PL_ListenerId lid,
00069 void (* pfnBindHandles)(PL_StruxDocHandle sdhNew,
00070 PL_ListenerId lid,
00071 PL_StruxFmtHandle sfhNew));
00072
00073 virtual void format(void) = 0;
00074 virtual void updateLayout(void);
00075 virtual void collapse(void) = 0;
00076 virtual void markAllRunsDirty(void);
00077 virtual fl_SectionLayout * getSectionLayout(void) const;
00078 bool recalculateFields(UT_uint32 iUpdateCount);
00079 fl_BlockLayout * getContainingBlock(void);
00080 virtual void redrawUpdate(void);
00081 virtual fp_Container* getNewContainer(fp_Container* = NULL) =0;
00082 fl_DocSectionLayout* getDocSectionLayout(void) const { return m_pDocSL; }
00083 void setDocSectionLayout(fl_DocSectionLayout * pDSL)
00084 { m_pDocSL = pDSL;}
00085 bool isEndFootnoteIn(void) const
00086 {return m_bHasEndFootnote;}
00087 void setFootnoteEndIn(void)
00088 { m_bHasEndFootnote = true;}
00089 PT_DocPosition getDocPosition(void);
00090 UT_uint32 getLength(void);
00091 UT_sint32 getOldSize(void) const
00092 { return m_iOldSize;}
00093 void setOldSize(UT_sint32 i)
00094 { m_iOldSize = i;}
00095 protected:
00096 virtual void _purgeLayout(void);
00097 bool m_bNeedsRebuild;
00098 bool m_bNeedsFormat;
00099 bool m_bIsOnPage;
00100 private:
00101
00102 fl_DocSectionLayout* m_pDocSL;
00103 bool m_bHasEndFootnote;
00104 UT_sint32 m_iOldSize;
00105 };
00106
00107 class ABI_EXPORT fl_FootnoteLayout : public fl_EmbedLayout
00108 {
00109 friend class fl_DocListener;
00110 friend class fp_FootnoteContainer;
00111
00112 public:
00113 fl_FootnoteLayout(FL_DocLayout* pLayout,
00114 fl_DocSectionLayout * pDocSL,
00115 PL_StruxDocHandle sdh,
00116 PT_AttrPropIndex ap,
00117 fl_ContainerLayout * pMyContainerLayout);
00118 virtual ~fl_FootnoteLayout();
00119
00120 virtual void format(void);
00121 virtual void collapse(void);
00122 virtual fp_Container* getNewContainer(fp_Container* = NULL);
00123 UT_uint32 getFootnotePID(void) const
00124 {return m_iFootnotePID;}
00125 protected:
00126 virtual void _lookupProperties(const PP_AttrProp* pAP);
00127 private:
00128 void _createFootnoteContainer(void);
00129 void _insertFootnoteContainer(fp_Container * pNewFC);
00130 void _localCollapse();
00131 UT_uint32 m_iFootnotePID;
00132 };
00133
00134
00135 class ABI_EXPORT fl_EndnoteLayout : public fl_EmbedLayout
00136 {
00137 friend class fl_DocListener;
00138 friend class fp_EndnoteContainer;
00139
00140 public:
00141 fl_EndnoteLayout(FL_DocLayout* pLayout, fl_DocSectionLayout * pDocSL, PL_StruxDocHandle sdh, PT_AttrPropIndex ap, fl_ContainerLayout * pMyContainerLayout);
00142 virtual ~fl_EndnoteLayout();
00143
00144 virtual void format(void);
00145 virtual void collapse(void);
00146 virtual fp_Container* getNewContainer(fp_Container* = NULL);
00147 UT_uint32 getEndnotePID(void) const
00148 {return m_iEndnotePID;}
00149 protected:
00150 virtual void _lookupProperties(const PP_AttrProp* pAP);
00151 private:
00152 void _createEndnoteContainer(void);
00153 void _insertEndnoteContainer(fp_Container * pNewFC);
00154 void _localCollapse();
00155
00156 UT_uint32 m_iEndnotePID;
00157 };
00158
00159
00160 class ABI_EXPORT fl_AnnotationLayout : public fl_EmbedLayout
00161 {
00162 friend class fl_DocListener;
00163 friend class fp_AnnotationContainer;
00164
00165 public:
00166 fl_AnnotationLayout(FL_DocLayout* pLayout,
00167 fl_DocSectionLayout * pDocSL,
00168 PL_StruxDocHandle sdh,
00169 PT_AttrPropIndex ap,
00170 fl_ContainerLayout * pMyContainerLayout);
00171 virtual ~fl_AnnotationLayout();
00172 fp_AnnotationRun * getAnnotationRun(void);
00173 virtual void format(void);
00174 virtual void collapse(void);
00175 virtual fp_Container* getNewContainer(fp_Container* = NULL);
00176 UT_uint32 getAnnotationPID(void) const
00177 {return m_iAnnotationPID;}
00178 const char * getAuthor(void) const
00179 { return m_sAuthor.utf8_str();}
00180 const char * getDate(void) const
00181 { return m_sDate.utf8_str();}
00182 const char * getTitle(void) const
00183 { return m_sTitle.utf8_str();}
00184 protected:
00185 virtual void _lookupProperties(const PP_AttrProp* pAP);
00186 private:
00187 void _createAnnotationContainer(void);
00188 void _insertAnnotationContainer(fp_Container * pNewFC);
00189 void _localCollapse();
00190 UT_uint32 m_iAnnotationPID;
00191 UT_UTF8String m_sAuthor;
00192 UT_UTF8String m_sDate;
00193 UT_UTF8String m_sTitle;
00194 };
00195
00196
00197 #endif