1 /* AbiWord 2 * Copyright (C) 1998 AbiSource, Inc. 3 * Copyright (C) 2002 Martin Sevior 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License 7 * as published by the Free Software Foundation; either version 2 8 * of the License, or (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 18 * 02110-1301 USA. 19 */ 20 21 #ifndef CONTAINERLAYOUT_H 22 #define CONTAINERLAYOUT_H 23 24 #ifdef FMT_TEST 25 #include <stdio.h> 26 #endif 27 28 typedef enum _fl_ContainerType 29 { 30 FL_CONTAINER_BLOCK, 31 FL_CONTAINER_DOCSECTION, 32 FL_CONTAINER_HDRFTR, 33 FL_CONTAINER_SHADOW, 34 FL_CONTAINER_FOOTNOTE, 35 FL_CONTAINER_ENDNOTE, 36 FL_CONTAINER_MARGINNOTE, 37 FL_CONTAINER_TABLE, 38 FL_CONTAINER_CELL, 39 FL_CONTAINER_FRAME, 40 FL_CONTAINER_TOC, 41 FL_CONTAINER_ANNOTATION, 42 FL_CONTAINER_RDFANCHOR 43 } fl_ContainerType; 44 45 // this enum is used here and by the run classes 46 // I had to move it here from fp_Run to avoid circular dependency 47 typedef enum {FP_VISIBLE = 0, 48 FP_HIDDEN_TEXT, 49 FP_HIDDEN_REVISION, 50 FP_HIDDEN_REVISION_AND_TEXT, 51 FP_HIDDEN_FOLDED 52 } FPVisibility; 53 54 55 #include "ut_types.h" 56 #include "ut_vector.h" 57 #include "pt_Types.h" 58 #include "fl_Layout.h" 59 #include "ut_debugmsg.h" 60 #include "ut_misc.h" // for UT_RGBColor 61 #include "gr_Image.h" 62 #include "gr_Graphics.h" 63 64 class FL_DocLayout; 65 class PD_Document; 66 class PP_AttrProp; 67 class fl_Layout; 68 class fl_HdrFtrSectionLayout; 69 class fl_SectionLayout; 70 class fp_ContainerObject; 71 class fp_Container; 72 class fp_Run; 73 class fl_DocSectionLayout; 74 class UT_GrowBuf; 75 class fl_FrameLayout; 76 class fp_FrameContainer; 77 class fl_BlockLayout; 78 class pf_Frag_Strux; 79 80 class ABI_EXPORT fl_ContainerLayout : public fl_Layout 81 { 82 friend class fl_BlockLayout; 83 public: 84 fl_ContainerLayout(fl_ContainerLayout* pLayout, pf_Frag_Strux* sdh, PT_AttrPropIndex ap, PTStruxType iStrux,fl_ContainerType iType); 85 virtual ~fl_ContainerLayout(); 86 getContainerType(void)87 fl_ContainerType getContainerType(void) const { return m_iConType; } 88 const char * getContainerString(void); 89 const char * getAttribute(const char * pKey) const; 90 virtual fp_Container* getFirstContainer() const; 91 virtual fp_Container* getLastContainer() const; 92 virtual void setFirstContainer(fp_Container * pCon); 93 virtual void setLastContainer(fp_Container * pCon); 94 95 virtual bool recalculateFields(UT_uint32 iUpdateCount) =0; 96 97 virtual fp_Container* getNewContainer(fp_Container * pFirstContainer = NULL) = 0; 98 virtual FL_DocLayout * getDocLayout(void) const; 99 UT_sint32 getLevelInList(void); 100 virtual void format(void) = 0; 101 virtual void appendTextToBuf(UT_GrowBuf & buf) const; 102 virtual void updateLayout(bool bDoAll) = 0; 103 virtual void markAllRunsDirty(void) =0; 104 virtual void collapse(void) = 0; 105 virtual void redrawUpdate(void) = 0; 106 virtual void setNeedsReformat(fl_ContainerLayout * pCL, UT_uint32 offset = 0) = 0; 107 virtual void setNeedsRedraw(void) = 0; 108 virtual bool isCollapsed(void) const = 0; 109 virtual bool needsReformat(void) const = 0; 110 virtual bool needsRedraw(void) const = 0; 111 virtual fl_DocSectionLayout * getDocSectionLayout(void) const; 112 virtual fl_SectionLayout * getSectionLayout() const = 0; 113 virtual fl_HdrFtrSectionLayout * getHdrFtrSectionLayout(void) const; 114 void setContainingLayout(fl_ContainerLayout*); 115 fl_ContainerLayout * myContainingLayout(void) const; 116 fl_HdrFtrSectionLayout * getHdrFtrLayout(void); 117 void setPrev(fl_ContainerLayout*); 118 void setNext(fl_ContainerLayout*); 119 fl_ContainerLayout * getPrev(void) const; 120 fl_ContainerLayout * getNext(void) const; 121 fl_ContainerLayout * getFirstLayout(void) const; 122 fl_ContainerLayout * getLastLayout(void) const; 123 void setLastLayout(fl_ContainerLayout *pL); 124 void setFirstLayout(fl_ContainerLayout *pL); 125 fl_ContainerLayout * append(pf_Frag_Strux* sdh, PT_AttrPropIndex indexAP,fl_ContainerType iType); 126 void add(fl_ContainerLayout* pL); 127 fl_ContainerLayout * insert(pf_Frag_Strux* sdh, fl_ContainerLayout * pPrev, PT_AttrPropIndex indexAP,fl_ContainerType iType); 128 void remove(fl_ContainerLayout * pL); 129 virtual fp_Run * getFirstRun(void) const; 130 virtual PT_DocPosition getPosition(bool bActualBlockPosition = false) const; 131 bool canContainPoint() const; isHidden()132 FPVisibility isHidden() const {return m_eHidden;} setVisibility(FPVisibility eVis)133 void setVisibility(FPVisibility eVis) {m_eHidden = eVis;} 134 bool isOnScreen() const; 135 136 // Frames stuff 137 UT_sint32 getNumFrames(void) const; 138 fl_FrameLayout * getNthFrameLayout(UT_sint32 i) const; 139 fp_FrameContainer * getNthFrameContainer(UT_sint32 i) const; 140 void addFrame(fl_FrameLayout * pFrame); 141 bool removeFrame(fl_FrameLayout * pFrame); 142 143 // For Folded Text 144 145 UT_sint32 getFoldedLevel(void); 146 UT_uint32 getFoldedID(void); 147 void lookupFoldedLevel(void); 148 149 void lookupProperties(void); 150 void lookupMarginProperties(void); 151 152 fl_BlockLayout* getNextBlockInDocument(void) const; 153 fl_BlockLayout* getPrevBlockInDocument(void) const; 154 155 FPVisibility getAP(const PP_AttrProp *& pAP)const; 156 void getSpanAP(UT_uint32 blockPos, bool bLeft, const PP_AttrProp * &pSpanAP) const; 157 158 // Embedded structures 159 bool containsFootnoteLayouts(void) const; 160 bool containsAnnotationLayouts(void) const; 161 162 #ifdef FMT_TEST 163 virtual void __dump(FILE * fp) const; 164 #endif 165 protected: 166 // need this to be protected, so fl_BlockLayout can call it 167 void _insertIntoList(fl_ContainerLayout * pL); 168 169 private: 170 bool _getPropertiesAP(const PP_AttrProp *& pAP); 171 virtual void _lookupProperties(const PP_AttrProp* pAP) = 0; 172 173 // This function must be overriden by any derrived class that can endup positioned 174 // outside of the normal printable area on page _lookupMarginProperties(const PP_AttrProp *)175 virtual void _lookupMarginProperties(const PP_AttrProp* /*pAP*/){} 176 _canContainPoint()177 virtual bool _canContainPoint() const {return true;} 178 void _insertFirst(fl_ContainerLayout * pL); 179 180 fl_ContainerType m_iConType; 181 fl_ContainerLayout* m_pMyLayout; 182 183 fl_ContainerLayout* m_pPrev; 184 fl_ContainerLayout* m_pNext; 185 186 fl_ContainerLayout* m_pFirstL; 187 fl_ContainerLayout* m_pLastL; 188 fp_Container * m_pFirstContainer; 189 fp_Container * m_pLastContainer; 190 FPVisibility m_eHidden; 191 UT_GenericVector<fl_FrameLayout *> m_vecFrames; 192 UT_sint32 m_iFoldedLevel; 193 UT_uint32 m_iFoldedID; 194 }; 195 196 #endif /* CONTAINERLAYOUT_H */ 197 198 199 200 201