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

fl_DocLayout.h

Go to the documentation of this file.
00001 /* AbiWord
00002  * Copyright (C) 1998 AbiSource, Inc.
00003  *
00004  * This program is free software; you can redistribute it and/or
00005  * modify it under the terms of the GNU General Public License
00006  * as published by the Free Software Foundation; either version 2
00007  * of the License, or (at your option) any later version.
00008  *
00009  * This program is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  * GNU General Public License for more details.
00013  *
00014  * You should have received a copy of the GNU General Public License
00015  * along with this program; if not, write to the Free Software
00016  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
00017  * 02111-1307, USA.
00018  */
00019 
00020 #ifndef DOCLAYOUT_H
00021 #define DOCLAYOUT_H
00022 
00023 #ifdef HAVE_CONFIG_H
00024 #include "config.h"
00025 #endif
00026 
00027 #include <stdio.h>
00028 #include "ut_types.h"
00029 #include "ut_vector.h"
00030 #include "ut_hash.h"
00031 #include "pt_Types.h"
00032 #include "fp_PageSize.h"
00033 #include "fl_Layout.h"
00034 #include "ut_units.h"
00035 #include "xav_Listener.h"
00036 
00037 
00038 typedef enum _FootnoteType
00039 {
00040     FOOTNOTE_TYPE_NUMERIC = 0,
00041     FOOTNOTE_TYPE_NUMERIC_SQUARE_BRACKETS,
00042     FOOTNOTE_TYPE_NUMERIC_PAREN,
00043     FOOTNOTE_TYPE_NUMERIC_OPEN_PAREN,
00044     FOOTNOTE_TYPE_LOWER,
00045     FOOTNOTE_TYPE_LOWER_PAREN,
00046     FOOTNOTE_TYPE_LOWER_OPEN_PAREN,
00047     FOOTNOTE_TYPE_UPPER,
00048     FOOTNOTE_TYPE_UPPER_PAREN,
00049     FOOTNOTE_TYPE_UPPER_OPEN_PAREN,
00050     FOOTNOTE_TYPE_LOWER_ROMAN,
00051     FOOTNOTE_TYPE_LOWER_ROMAN_PAREN,
00052     FOOTNOTE_TYPE_UPPER_ROMAN,
00053     FOOTNOTE_TYPE_UPPER_ROMAN_PAREN,
00054     _FOOTNOTE_TYPE_INVALID = 10000
00055 } FootnoteType;
00056 
00058 typedef struct {
00059     FootnoteType n;        
00060     const char * label;    
00061     const char * prop;     
00062 } FootnoteTypeDesc;
00063 
00064 extern const FootnoteTypeDesc s_FootnoteTypeDesc[];
00065 
00066 class FV_View;
00067 class fl_DocListener;
00068 class fl_SectionLayout;
00069 class fl_DocSectionLayout;
00070 class fl_BlockLayout;
00071 class fl_TOCLayout;
00072 class fp_Page;
00073 class PD_Document;
00074 class PP_AttrProp;
00075 class GR_Graphics;
00076 class GR_Font;
00077 class UT_Timer;
00078 class UT_Worker;
00079 class fl_PartOfBlock;
00080 class fl_AutoNum;
00081 class PX_ChangeRecord_StruxChange;
00082 class fl_FootnoteLayout;
00083 class fl_AnnotationLayout;
00084 class fl_EndnoteLayout;
00085 class fp_EndnoteContainer;
00086 class GR_EmbedManager;
00087 class fl_FrameLayout;
00088 class fp_FrameContainer;
00089 class fp_Container;
00090 
00091 // the following get used by view and layout code,
00092 // since they're private to the formatter, we stick 'em here
00093 #define fl_PAGEVIEW_PAGE_SEP    m_pG->tlu(20)       // must be <= MARGIN_Y
00094 #define fl_PAGEVIEW_MARGIN_X    m_pG->tlu(25)
00095 #define fl_PAGEVIEW_MARGIN_Y    m_pG->tlu(25)
00096 
00097 // ----------------------------------------------------------------
00098 
00099 // Note: Here used to be an overview of the classes in this
00100 // directory. That has been moved to README.TXT since a newcomer would
00101 // not know which source file to look in for that
00102 // information. README.TXT on the other hand stands clearly out from
00103 // the rest of the files.                           jskov 2000.12.29
00104 
00105 class ABI_EXPORT FL_DocLayout
00106 {
00107     friend class fl_DocListener;
00108     friend class fl_BlockLayout;
00109 public:
00110     FL_DocLayout(PD_Document* doc, GR_Graphics* pG);
00111     ~FL_DocLayout();
00112 
00113     void fillLayouts(void);
00114     bool loadPendingObjects(void);
00115     bool AnchoredObjectHelper(double x, double y, UT_sint32 iPage, UT_UTF8String & allProps, PT_DocPosition & pos, fp_Page *& pPage);
00116     void setView(FV_View*);
00117 
00118     inline FV_View * getView(void) const { return m_pView; }
00119     inline GR_Graphics* getGraphics(void) const { return m_pG; }
00120     void setGraphics(GR_Graphics * pG);
00121     UT_uint32           getGraphicTick(void) const { return m_iGraphicTick;}
00122     void                incrementGraphicTick(void) { m_iGraphicTick++;}
00123     inline PD_Document* getDocument(void) const { return m_pDoc; }
00124 #ifdef ENABLE_SPELL
00125     inline const fl_BlockLayout* getPendingBlockForSpell(void) const { return m_pPendingBlockForSpell; };
00126     inline fl_PartOfBlock* getPendingWordForSpell(void) const { return m_pPendingWordForSpell; };
00127 #endif
00128 
00129     // The smart quote stuff works by listening for insertions (typing
00130     // and paste) and motion.  It needs one character of type-ahead
00131     // before working the algorithm, so a single quote character going
00132     // by is remembered as "pending".  After the type-ahead (or
00133     // motion) occurs, the pending quote is considered for promotion.
00134     // For an insertion of multiple characters (which probably just
00135     // means a paste), all smart quote consideration can be done
00136     // immediately except for a quote occuring in the very last
00137     // character of the stuff being inserted.
00138     inline fl_BlockLayout* getPendingBlockForSmartQuote(void) const { return m_pPendingBlockForSmartQuote; };
00139     inline UT_uint32 getOffsetForSmartQuote(void) const { return m_uOffsetForSmartQuote; };
00140     void setPendingSmartQuote(fl_BlockLayout *block, UT_uint32 offset);
00141     void considerSmartQuoteCandidateAt(fl_BlockLayout *block, UT_uint32 offset);
00142     inline void considerPendingSmartQuoteCandidate() {considerSmartQuoteCandidateAt(m_pPendingBlockForSmartQuote, m_uOffsetForSmartQuote); }
00143 
00144     void            notifyBlockIsBeingDeleted(fl_BlockLayout *pBlock);
00145     void            setSkipUpdates(UT_uint32 numSkips) {m_iSkipUpdates = numSkips;}
00146     UT_uint32       getSkipUpdates(void) { return m_iSkipUpdates;}
00147     void            setNeedsRedraw(void);
00148     UT_sint32       getHeight() const;
00149     UT_sint32       getWidth() const;
00150     void            refreshRunProperties(void);
00151     const GR_Font*  findFont(const PP_AttrProp * pSpanAP,
00152                              const PP_AttrProp * pBlockAP,
00153                              const PP_AttrProp * pSectionAP,
00154                              bool isField = false
00155         ) const;
00156 
00157     const GR_Font*  findFont(const PP_AttrProp * pSpanAP,
00158                  const PP_AttrProp * pBlockAP,
00159                  const PP_AttrProp * pSectionAP,
00160                  GR_Graphics * pG,
00161                  bool isField = false
00162         ) const;
00163 
00164     void        changeDocSections(const PX_ChangeRecord_StruxChange * pcrx, fl_DocSectionLayout * pDSL);
00165     fp_Page*    addNewPage(fl_DocSectionLayout* pOwner, bool bNoUpdate=false);
00166     fp_Page*    getFirstPage() const;
00167     fp_Page*    getLastPage() const;
00168     fp_Page*    getNthPage(int n) const;
00169     UT_sint32   countPages() const;
00170     UT_sint32   findPage(fp_Page * pPage) const; // FIXME figure out how to pass a const fp_Page *
00171     void            setFramePageNumbers(UT_sint32 iStartPage);
00172     fl_FrameLayout* relocateFrame(fl_FrameLayout * pFL, fl_BlockLayout * newBlock,
00173                       const gchar** attributes = NULL, const gchar **properties = NULL);
00174     void            clearAllCountWraps(void);
00175     bool addFramesToBeInserted(fp_FrameContainer * pFrame);
00176     bool removeFramesToBeInserted(fp_FrameContainer * pFrame);
00177     fp_FrameContainer * findFramesToBeInserted(fp_Page * pPage);
00178 
00179     UT_sint32   getPercentFilled(void) const
00180         { return m_iFilled;}
00181     void         setPercentFilled(UT_sint32 iFill)
00182         { m_iFilled = iFill;}
00183     void        setLayoutIsFilling(bool bisFill) { m_bisLayoutFilling = bisFill;}
00184     bool        isLayoutFilling(void) const { return m_bisLayoutFilling;}
00185     fl_BlockLayout* findBlockAtPosition(PT_DocPosition pos, bool bLookOnlyBefore = false) const;
00186     fl_BlockLayout* findBlockAtPositionReverse(PT_DocPosition pos) const;
00187     void        deletePage(fp_Page* pPage, bool bDontNotify);
00188 
00189     void        formatAll();
00190     void        updateLayout();
00191     void        updateOnViewModeChange();
00192     void        rebuildFromHere(fl_DocSectionLayout * pDSL);
00193     void        updateColor();
00194 
00195 #ifdef ENABLE_SPELL
00196     bool        isPendingWordForSpell(void) const;
00197     bool        touchesPendingWordForSpell(fl_BlockLayout *pBlock,
00198                                            UT_sint32 iOffset,
00199                                            UT_sint32 chg) const;
00200     void        setPendingWordForSpell(const fl_BlockLayout *pBlock, fl_PartOfBlock* pWord);
00201     bool        checkPendingWordForSpell(void);
00202     void        dequeueAll(void);
00203     void        queueAll(UT_uint32 iReason);
00204     void        queueBlockForBackgroundCheck(UT_uint32 reason, fl_BlockLayout *pBlock, bool bHead=false);
00205     bool        dequeueBlockForBackgroundCheck(fl_BlockLayout *pBlock);
00206 
00207     fl_BlockLayout *spellQueueHead(void) const
00208         {
00209             return m_toSpellCheckHead;
00210         }
00211     void        setSpellQueueHead(fl_BlockLayout *h)
00212         {
00213             m_toSpellCheckHead = h;
00214         }
00215     fl_BlockLayout *spellQueueTail(void) const
00216         {
00217             return m_toSpellCheckTail;
00218         }
00219     void        setSpellQueueTail(fl_BlockLayout *t)
00220         {
00221             m_toSpellCheckTail = t;
00222         }
00223 #endif
00224     void        addSection(fl_DocSectionLayout*);
00225     void        removeSection(fl_DocSectionLayout*);
00226     void        insertSectionAfter(fl_DocSectionLayout* pAfter, fl_DocSectionLayout* pNewSL);
00227     void        addHdrFtrSection(fl_SectionLayout* pHdrFtrSL);
00228     void        removeHdrFtrSection(fl_SectionLayout* pHdrFtrSL);
00229 
00230     inline      fl_DocSectionLayout* getFirstSection(void) const { return m_pFirstSection; }
00231     inline      fl_DocSectionLayout* getLastSection(void) const { return m_pLastSection; }
00232 
00233     fl_DocSectionLayout*    findSectionForHdrFtr(const char* pszHdrFtrID) const;
00234     void                deleteEmptyColumnsAndPages(void);
00235     void                deleteEmptyPages( bool bDontNotify = false);
00236     GR_EmbedManager * getEmbedManager(const char * szEmbedType);
00237 // --------------------------------------------------------------------
00238 // Footnote Methods
00239 // fl_DocLAyout stores this Vector of footnotes to speed things up and
00240 // to provide convience routines for other classes and methods
00241 //
00242     UT_uint32           countFootnotes(void) const;
00243     void                addFootnote(fl_FootnoteLayout *);
00244     void                removeFootnote(fl_FootnoteLayout *);
00245     fl_FootnoteLayout * getNthFootnote(UT_sint32 i) const;
00246     UT_sint32           getFootnoteVal(UT_uint32 footpid) const;
00247     fl_FootnoteLayout * findFootnoteLayout(UT_uint32 footpid) const;
00248     FootnoteType        getFootnoteType(void) const;
00249     void                getStringFromFootnoteVal(UT_String & sVal, UT_sint32 iVal, FootnoteType iFootType) const;
00250 
00251     UT_sint32           getInitialFootVal(void) const
00252         { return m_iFootnoteVal;}
00253     bool                getRestartFootOnSection(void) const
00254         { return m_bRestartFootSection;}
00255     bool                getRestartFootOnPage(void) const
00256         { return m_bRestartFootPage;}
00257     FootnoteType        FootnoteTypeFromString( const gchar * pszStr);
00258 // EndNotes
00259     void                insertEndnoteContainer(fp_EndnoteContainer * pECon);
00260     void                removeEndnoteContainer(fp_EndnoteContainer * pECon);
00261     fl_DocSectionLayout * getDocSecForEndnote(fp_EndnoteContainer * pECon  ) const;
00262     UT_uint32           countEndnotes(void) const;
00263     void                addEndnote(fl_EndnoteLayout *);
00264     void                removeEndnote(fl_EndnoteLayout *);
00265     fl_EndnoteLayout *  getNthEndnote(UT_sint32 i) const;
00266     UT_sint32           getEndnoteVal(UT_uint32 endpid) const;
00267     fl_EndnoteLayout * findEndnoteLayout(UT_uint32 endpid) const;
00268 
00269     FootnoteType        getEndnoteType(void) const
00270         { return m_EndnoteType; }
00271     UT_sint32           getInitialEndVal(void) const
00272         { return m_iEndnoteVal;}
00273     bool                getRestartEndOnSection(void) const
00274         { return m_bRestartEndSection;}
00275     bool                getPlaceEndAtDocEnd(void) const
00276         { return m_bPlaceAtDocEnd;}
00277     bool                getPlaceEndAtSecEnd(void) const
00278         { return m_bPlaceAtSecEnd;}
00279 // --------------------------------------------------------------------
00280 // Annotation Methods
00281 // fl_DocLAyout stores this Vector of Anntations to speed things up and
00282 // to provide convience routines for other classes and methods
00283 //
00284     UT_uint32           countAnnotations(void) const;
00285     void                addAnnotation(fl_AnnotationLayout * pAL);
00286     void                removeAnnotation(fl_AnnotationLayout * pAL);
00287     fl_AnnotationLayout * getNthAnnotation(UT_sint32 i) const;
00288     UT_sint32           getAnnotationVal(UT_uint32 footpid) const;
00289     fl_AnnotationLayout * findAnnotationLayout(UT_uint32 footpid) const;
00290     bool                displayAnnotations(void) const;
00291     void                setDisplayAnnotations(bool bDisplayAnnotations);
00292     bool                collapseAnnotations(void);
00293 
00294 // --------------------------------------------------------------------
00295 // RDF Anchor Methods
00296     bool                displayRDFAnchors(void) const;
00297     void                setDisplayRDFAnchors(bool v);
00298 
00299 // ---------------------------------------------------
00300 // Table of contents
00301 //----------------------------------------------------
00302     UT_sint32           getNumTOCs(void) const;
00303     fl_TOCLayout *      getNthTOC(UT_sint32 i) const;
00304     bool                addOrRemoveBlockFromTOC(fl_BlockLayout * pBlock);
00305     bool                removeBlockFromTOC(fl_BlockLayout * pBlock);
00306     bool                isBlockInTOC(fl_BlockLayout * pBlock) const;
00307     bool                getMatchingBlocksFromTOCs(fl_BlockLayout * pBlock,  UT_GenericVector<fl_BlockLayout*>* pVecBlock) const;
00308     bool                addTOC(fl_TOCLayout * pTOC);
00309     bool                removeTOC(fl_TOCLayout * pTOC);
00310     void                recalculateTOCFields(void);
00311     bool                updateTOCsOnBookmarkChange(const gchar * pBookmark);
00312 // --------------------------------------------------------------------
00313 #ifdef ENABLE_SPELL
00314     bool        getAutoSpellCheck(void) const { return (hasBackgroundCheckReason(bgcrSpelling)); }
00315     bool        getAutoGrammarCheck(void) const { return (hasBackgroundCheckReason(bgcrGrammar)); }
00316     bool        getSpellCheckCaps(void) const { return m_bSpellCheckCaps; }
00317     bool        getSpellCheckNumbers(void) const { return m_bSpellCheckNumbers; }
00318     bool        getSpellCheckInternet(void) const { return m_bSpellCheckInternet; }
00319     void        recheckIgnoredWords();
00320 #endif
00321 // --------------------------------------------------------------------
00322     bool        getSmartQuotes(void) const { return (hasBackgroundCheckReason(bgcrSmartQuotes)); }
00323 // --------------------------------------------------------------------
00324 
00325     inline void         addBackgroundCheckReason(UT_uint32 reason) {m_uDocBackgroundCheckReasons |= reason;}
00326     inline void         removeBackgroundCheckReason(UT_uint32 reason) {m_uDocBackgroundCheckReasons &= ~reason;}
00327     inline bool     hasBackgroundCheckReason(UT_uint32 reason) const {return ((m_uDocBackgroundCheckReasons & reason) ? true : false);}
00328     inline UT_uint32    getBackgroundCheckReasons() const {return (m_uDocBackgroundCheckReasons);}
00329 
00330 #ifdef ENABLE_SPELL
00331     fl_BlockLayout *        getPendingBlockForGrammar(void) const
00332       {
00333         return m_PendingBlockForGrammar;
00334       }
00335     void        setPendingBlockForGrammar(fl_BlockLayout * pBL);
00336 #endif
00337     void        triggerPendingBlock(fl_BlockLayout * pBL);
00338 
00339     // These are used as bit flags in a UT_uint32.  The enum is here just
00340     // to get the namespace protection.
00341     enum backgroundCheckReason
00342     {
00343         bgcrNone         = 0,
00344         bgcrDebugFlash   = (1 <<  0),
00345         bgcrSpelling     = (1 <<  1),
00346         bgcrSmartQuotes  = (1 <<  2),   // ha!  we're not using background checks for this after all
00347         bgcrGrammar     = (1 <<  3)
00348     };
00349 
00350     // New List Guts
00351     inline fl_AutoNum *     getListByID(UT_uint32 id) const;
00352     inline fl_AutoNum * getNthList(UT_uint32 i) const; // { return m_vecLists[i]; }
00353     inline UT_uint32    getListsCount(void) const; // { return m_vecLists.getItemCount(); }
00354     inline void     addList(fl_AutoNum * pAutoNum);
00355     bool            isLayoutDeleting(void) const {return m_bDeletingLayout;}
00356     UT_uint32       getRedrawCount() const {return m_iRedrawCount;}
00357 
00358 
00359     void            updatePropsNoRebuild(void);
00360     void            updatePropsRebuild(void);
00361     PT_DocPosition  getDocSize(void) const
00362         { return m_iDocSize;}
00363     UT_uint32       getLID(void) const
00364         { return m_lid;}
00365     void            notifyListeners(AV_ChangeMask mask);
00366     void            setQuickPrint(GR_Graphics * pGraphics);
00367     GR_Graphics *   getQuickPrintGraphics(void) const;
00368     bool            isQuickPrint(void) const
00369     { return m_bIsQuickPrint;}
00370     GR_EmbedManager * getQuickPrintEmbedManager(const char * szEmbedType);
00371     fp_PageSize m_docViewPageSize;
00372     bool            setDocViewPageSize(const PP_AttrProp * pAP);
00373         void            setSaveContainerPointer( fp_Container * pContainer);
00374     void            setRebuiltBlock(fl_BlockLayout *pBlock);
00375     fl_BlockLayout* getRebuiltBlock(void) const;
00376     fp_Container *  getSavedContainerPointer(void) const;
00377 
00378 #ifdef FMT_TEST
00379 
00380     static      FL_DocLayout* m_pDocLayout;
00381 
00382     void        __dump(FILE * fp) const;
00383 #endif
00384 
00385 protected:
00386     static void         _backgroundCheck(UT_Worker * pTimer);
00387 #ifdef ENABLE_SPELL
00388     void                _toggleAutoSpell(bool bSpell);
00389     void                _toggleAutoGrammar(bool bGrammar);
00390 #endif
00391     void                _toggleAutoSmartQuotes(bool bSQ);
00392 
00393     static void         _prefsListener(class XAP_Prefs *,
00394                                        UT_StringPtrMap *, void *);
00395 
00396 
00397     static void         _redrawUpdate(UT_Worker * pTimer);
00398 
00399 private:
00400     void                _lookupProperties(void);
00401     GR_Graphics*        m_pG;
00402     PD_Document*        m_pDoc;
00403     FV_View*            m_pView;
00404     fl_DocListener*     m_pDocListener;
00405     PL_ListenerId       m_lid;
00406 
00407     UT_GenericVector<fp_Page *> m_vecPages;
00408     fl_DocSectionLayout*m_pFirstSection;
00409     fl_DocSectionLayout*m_pLastSection;
00410 
00411     // spell check stuff
00412     // UT_GenericVector<fl_BlockLayout *> m_vecUncheckedBlocks;
00413     fl_BlockLayout      *m_toSpellCheckHead;
00414     fl_BlockLayout      *m_toSpellCheckTail;
00415     const fl_BlockLayout*       m_pPendingBlockForSpell;    // if NULL, then ignore m_pPendingWordForSpell
00416     fl_PartOfBlock*     m_pPendingWordForSpell;
00417     bool                m_bSpellCheckCaps;
00418     bool                m_bSpellCheckNumbers;
00419     bool                m_bSpellCheckInternet;
00420     bool                m_bAutoSpellCheck;
00421     UT_uint32                       m_uDocBackgroundCheckReasons;
00422     bool                         m_bStopSpellChecking; // Handshaking
00423     bool                         m_bImSpellCheckingNow; // Variables
00424     // smart quote latent instance
00425     fl_BlockLayout*     m_pPendingBlockForSmartQuote;  // if NULL, ignore m_uOffsetForSmartQuote
00426     UT_uint32           m_uOffsetForSmartQuote;
00427     char                m_szCurrentTransparentColor[10];
00428     UT_Worker*          m_pBackgroundCheckTimer;
00429 
00430     XAP_Prefs *         m_pPrefs;
00431 
00432     UT_Timer*           m_pRedrawUpdateTimer;
00433     UT_uint32           m_iSkipUpdates;
00434     bool                m_bDeletingLayout;
00435     bool                m_bisLayoutFilling;
00436     UT_uint32           m_iRedrawCount;
00437     UT_GenericVector<fl_FootnoteLayout *> m_vecFootnotes;
00438     UT_GenericVector<fl_AnnotationLayout *> m_vecAnnotations;
00439     UT_GenericVector<fl_EndnoteLayout *> m_vecEndnotes;
00440     FootnoteType        m_FootnoteType;
00441     UT_sint32           m_iFootnoteVal;
00442     bool                m_bRestartFootSection;
00443     bool                m_bRestartFootPage;
00444     UT_sint32           m_iEndnoteVal;
00445     FootnoteType        m_EndnoteType;
00446     bool                m_bRestartEndSection;
00447     bool                m_bPlaceAtDocEnd;
00448     bool                m_bPlaceAtSecEnd;
00449     UT_uint32           m_iGraphicTick;
00450     UT_GenericVector<fl_TOCLayout *> m_vecTOC;
00451     PT_DocPosition      m_iDocSize;
00452     UT_sint32           m_iFilled;
00453     bool                m_bSpellCheckInProgress;
00454     std::map<std::string, GR_EmbedManager *> m_mapEmbedManager;
00455     bool                m_bAutoGrammarCheck;
00456     fl_BlockLayout  *   m_PendingBlockForGrammar;
00457     UT_sint32           m_iGrammarCount;
00458     bool                m_bFinishedInitialCheck;
00459     PT_DocPosition      m_iPrevPos;
00460     std::map<std::string, GR_EmbedManager *> m_mapQuickPrintEmbedManager;
00461     GR_Graphics *       m_pQuickPrintGraphics;
00462     bool                m_bIsQuickPrint;
00463     bool                m_bDisplayAnnotations;
00464     bool                m_bDisplayRDFAnchors;
00465         fp_Container *      m_pSavedContainer;
00466     fl_BlockLayout *    m_pRebuiltBlockLayout;
00467     UT_GenericVector<fp_FrameContainer *> m_vecFramesToBeInserted;
00468 };
00469 
00470 #endif /* DOCLAYOUT_H */
00471 
00472 

Generated on Sun May 27 2012 for AbiWord by  doxygen 1.7.1