1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: node.hxx,v $
10 * $Revision: 1.22.144.1 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
34 #include <tools/mempool.hxx>
35 #include <tools/gen.hxx>
41 #include <boost/shared_ptr.hpp>
43 // ---------------------
44 // forward Deklarationen
45 // ---------------------
72 class IDocumentSettingAccess
;
73 class IDocumentDeviceAccess
;
74 class IDocumentMarkAccess
;
75 class IDocumentRedlineAccess
;
76 class IDocumentStylePoolAccess
;
77 class IDocumentLineNumberAccess
;
78 class IDocumentLinksAdministration
;
79 class IDocumentFieldsAccess
;
80 class IDocumentContentOperations
;
81 // --> OD 2007-10-31 #i83479#
82 class IDocumentListItems
;
85 // --------------------
87 // --------------------
88 class SW_DLLPUBLIC SwNode
: private /* public*/ BigPtrEntry
100 // fuer Textnodes: Stufungslevel der Autoformatierung. Ist erstmal hier
101 // gelandet, weil noch Bits frei sind
102 BYTE nAFmtNumLvl
: 3;
103 BOOL bSetNumLSpace
: 1; // fuer Numerierung: TRUE Einzug setzen
104 BOOL bIgnoreDontExpand
: 1; // for Text Attributes - ignore the flag
107 SwStartNode
* pStartOfSection
;
109 SwNode( const SwNodeIndex
&rWhere
, const BYTE nNodeId
);
111 // fuer den initialen StartNode
112 SwNode( SwNodes
& rNodes
, ULONG nPos
, const BYTE nNodeId
);
118 long int GetSerial() const { return nMySerial
; }
121 USHORT
GetSectionLevel() const;
123 inline ULONG
StartOfSectionIndex() const;
124 inline const SwStartNode
* StartOfSectionNode() const { return pStartOfSection
; }
125 inline SwStartNode
* StartOfSectionNode() { return pStartOfSection
; }
127 inline ULONG
EndOfSectionIndex() const;
128 inline const SwEndNode
* EndOfSectionNode() const;
129 inline SwEndNode
* EndOfSectionNode();
131 inline BYTE
GetAutoFmtLvl() const { return nAFmtNumLvl
; }
132 inline void SetAutoFmtLvl( BYTE nVal
) { nAFmtNumLvl
= nVal
; }
134 inline BOOL
IsSetNumLSpace() const { return bSetNumLSpace
; }
135 inline void SetNumLSpace( BOOL bFlag
) { bSetNumLSpace
= bFlag
; }
137 inline BOOL
IsIgnoreDontExpand() const { return bIgnoreDontExpand
; }
138 inline void SetIgnoreDontExpand( BOOL bNew
) { bIgnoreDontExpand
= bNew
; }
140 BYTE
GetNodeType() const { return nNodeType
; }
142 inline SwStartNode
*GetStartNode();
143 inline const SwStartNode
*GetStartNode() const;
144 inline SwCntntNode
*GetCntntNode();
145 inline const SwCntntNode
*GetCntntNode() const;
146 inline SwEndNode
*GetEndNode();
147 inline const SwEndNode
*GetEndNode() const;
151 SwTxtNode
*GetTxtNode();
156 const SwTxtNode
*GetTxtNode() const;
157 inline SwOLENode
*GetOLENode();
158 inline const SwOLENode
*GetOLENode() const;
159 inline SwNoTxtNode
*GetNoTxtNode();
160 inline const SwNoTxtNode
*GetNoTxtNode() const;
161 inline SwGrfNode
*GetGrfNode();
162 inline const SwGrfNode
*GetGrfNode() const;
163 inline SwTableNode
*GetTableNode();
164 inline const SwTableNode
*GetTableNode() const;
165 inline SwSectionNode
*GetSectionNode();
166 inline const SwSectionNode
*GetSectionNode() const;
168 inline BOOL
IsStartNode() const;
169 inline BOOL
IsCntntNode() const;
170 inline BOOL
IsEndNode() const;
171 inline BOOL
IsTxtNode() const;
172 inline BOOL
IsTableNode() const;
173 inline BOOL
IsSectionNode() const;
174 inline BOOL
IsOLENode() const;
175 inline BOOL
IsNoTxtNode() const;
176 inline BOOL
IsGrfNode() const;
179 Checks if this node is in redlines.
181 @retval TRUE this node is in redlines
184 BOOL
IsInRedlines() const;
186 // suche den TabellenNode, in dem dieser steht. Wenn in keiner
187 // Tabelle wird 0 returnt.
188 SwTableNode
*FindTableNode();
189 inline const SwTableNode
*FindTableNode() const;
191 // suche den SectionNode, in dem dieser steht. Wenn es in keiner
192 // Section steht wird 0 returnt.
193 SwSectionNode
*FindSectionNode();
194 inline const SwSectionNode
*FindSectionNode() const;
196 SwStartNode
* FindSttNodeByType( SwStartNodeType eTyp
);
197 inline const SwStartNode
* FindSttNodeByType( SwStartNodeType eTyp
) const;
199 const SwStartNode
* FindTableBoxStartNode() const
200 { return FindSttNodeByType( SwTableBoxStartNode
); }
201 const SwStartNode
* FindFlyStartNode() const
202 { return FindSttNodeByType( SwFlyStartNode
); }
203 const SwStartNode
* FindFootnoteStartNode() const
204 { return FindSttNodeByType( SwFootnoteStartNode
); }
205 const SwStartNode
* FindHeaderStartNode() const
206 { return FindSttNodeByType( SwHeaderStartNode
); }
207 const SwStartNode
* FindFooterStartNode() const
208 { return FindSttNodeByType( SwFooterStartNode
); }
210 // in welchem Nodes-Array/Doc steht der Node ?
211 inline SwNodes
& GetNodes();
212 inline const SwNodes
& GetNodes() const;
213 inline SwDoc
* GetDoc();
214 inline const SwDoc
* GetDoc() const;
216 /** Provides access to the document setting interface
218 const IDocumentSettingAccess
* getIDocumentSettingAccess() const;
220 /** Provides access to the document device interface
222 const IDocumentDeviceAccess
* getIDocumentDeviceAccess() const;
224 /** Provides access to the document bookmark interface
226 const IDocumentMarkAccess
* getIDocumentMarkAccess() const;
228 /** Provides access to the document redline interface
230 const IDocumentRedlineAccess
* getIDocumentRedlineAccess() const;
232 /** Provides access to the document style pool interface
234 const IDocumentStylePoolAccess
* getIDocumentStylePoolAccess() const;
236 /** Provides access to the document line number information interface
238 const IDocumentLineNumberAccess
* getIDocumentLineNumberAccess() const;
240 /** Provides access to the document draw model interface
242 const IDocumentDrawModelAccess
* getIDocumentDrawModelAccess() const;
244 /** Provides access to the document layout interface
246 const IDocumentLayoutAccess
* getIDocumentLayoutAccess() const;
247 IDocumentLayoutAccess
* getIDocumentLayoutAccess();
249 /** Provides access to the document links administration interface
251 const IDocumentLinksAdministration
* getIDocumentLinksAdministration() const;
252 IDocumentLinksAdministration
* getIDocumentLinksAdministration();
254 /** Provides access to the document fields administration interface
256 const IDocumentFieldsAccess
* getIDocumentFieldsAccess() const;
257 IDocumentFieldsAccess
* getIDocumentFieldsAccess();
259 /** Provides access to the document content operations interface
261 IDocumentContentOperations
* getIDocumentContentOperations();
263 /** Provides access to the document automatic styles interface
265 IStyleAccess
& getIDocumentStyleAccess();
267 /** Provides access to the document's numbered items interface
269 OD 2007-10-31 #i83479#
273 IDocumentListItems
& getIDocumentListItems();
275 // liegt der Node im Sichtbarenbereich der Shell ?
276 BOOL
IsInVisibleArea( ViewShell
* pSh
= 0 ) const;
277 // befindet sich der Node in einem geschuetzten Bereich?
278 BOOL
IsInProtectSect() const;
279 // befindet sich der Node in irgendetwas geschuetzten ?
280 // (Bereich/Rahmen/Tabellenzellen/... incl. des Ankers bei
281 // Rahmen/Fussnoten/..)
282 BOOL
IsProtect() const;
283 // suche den PageDesc, mit dem dieser Node formatiert ist. Wenn das
284 // Layout vorhanden ist wird ueber das gesucht, ansonsten gibt es nur
285 // die harte Tour ueber die Nodes nach vorne suchen!!
286 // OD 18.03.2003 #106326#
287 const SwPageDesc
* FindPageDesc( BOOL bCalcLay
, sal_uInt32
* pPgDescNdIdx
= 0 ) const;
289 // falls der Node in einem Fly steht, dann wird das entsprechende Format
291 SwFrmFmt
* GetFlyFmt() const;
293 // falls der Node in einer Tabelle steht, dann wird die entsprechende
294 // TabellenBox returnt
295 SwTableBox
* GetTblBox() const;
297 inline ULONG
GetIndex() const { return GetPos(); }
299 const SwTxtNode
* FindOutlineNodeOfLevel( BYTE nLvl
) const;
301 BYTE
HasPrevNextLayNode() const;
304 // privater Constructor, weil nie kopiert werden darf !!
305 SwNode( const SwNode
& rNodes
);
306 SwNode
& operator= ( const SwNode
& rNodes
);
309 // --------------------
311 // --------------------
312 class SwStartNode
: public SwNode
315 friend class SwNodes
;
316 friend class SwEndNode
; // um theEndOfSection zu setzen !!
318 SwEndNode
* pEndOfSection
;
319 SwStartNodeType eSttNdTyp
;
321 // fuer den initialen StartNode
322 SwStartNode( SwNodes
& rNodes
, ULONG nPos
);
325 SwStartNode( const SwNodeIndex
&rWhere
,
326 const BYTE nNodeType
= ND_STARTNODE
,
327 SwStartNodeType
= SwNormalStartNode
);
329 DECL_FIXEDMEMPOOL_NEWDEL(SwStartNode
)
331 SwStartNodeType
GetStartNodeType() const { return eSttNdTyp
; }
333 // an alle ContentNodes der Section das ChkCondColl rufen
334 void CheckSectionCondColl() const;
337 // privater Constructor, weil nie kopiert werden darf !!
338 SwStartNode( const SwStartNode
& rNode
);
339 SwStartNode
& operator= ( const SwStartNode
& rNode
);
343 // --------------------
345 // --------------------
346 class SwEndNode
: public SwNode
348 friend class SwNodes
;
349 friend class SwTableNode
; // um seinen EndNode anlegen zukoennen
350 friend class SwSectionNode
; // um seinen EndNode anlegen zukoennen
352 // fuer den initialen StartNode
353 SwEndNode( SwNodes
& rNodes
, ULONG nPos
, SwStartNode
& rSttNd
);
356 SwEndNode( const SwNodeIndex
&rWhere
, SwStartNode
& rSttNd
);
358 DECL_FIXEDMEMPOOL_NEWDEL(SwEndNode
)
361 // privater Constructor, weil nie kopiert werden darf !!
362 SwEndNode( const SwEndNode
& rNode
);
363 SwEndNode
& operator= ( const SwEndNode
& rNode
);
367 // --------------------
369 // --------------------
370 class SW_DLLPUBLIC SwCntntNode
: public SwModify
, public SwNode
, public SwIndexReg
372 // Der Reader darf NewAttrSet() aufrufen!
373 // friend class SwSwgReader;
374 // friend class Sw3IoImp;
379 mutable bool mbSetModifyAtAttr
;
382 SwCntntNode( const SwNodeIndex
&rWhere
, const BYTE nNodeType
,
383 SwFmtColl
*pFmtColl
);
384 virtual ~SwCntntNode();
386 // Attribut-Set fuer alle AUTO-Attribute eines CntntNodes
387 // ( z.B: TxtNode oder NoTxtNode
388 boost::shared_ptr
<const SfxItemSet
> mpAttrSet
;
390 // lasse von den entsprechenden Nodes die spz. AttrSets anlegen
391 virtual void NewAttrSet( SwAttrPool
& ) = 0;
393 // There some functions that like to remove items from the internal
394 // SwAttrSet (handle):
395 USHORT
ClearItemsFromAttrSet( const std::vector
<USHORT
>& rWhichIds
);
398 TYPEINFO(); //Bereits in Basisklasse Client drin.
400 virtual void Modify( SfxPoolItem
*pOld
, SfxPoolItem
*pNew
);
402 virtual SwCntntFrm
*MakeFrm() = 0;
403 virtual SwCntntNode
*SplitCntntNode(const SwPosition
& ) = 0;
404 virtual SwCntntNode
*JoinNext();
405 virtual SwCntntNode
*JoinPrev();
406 // koennen 2 Nodes zusammengefasst werden ?
407 // in pIdx kann die 2. Position returnt werden.
408 int CanJoinNext( SwNodeIndex
* pIdx
=0 ) const;
409 int CanJoinPrev( SwNodeIndex
* pIdx
=0 ) const;
411 void MakeStartIndex( SwIndex
* pIdx
) { pIdx
->Assign( this, 0 ); }
412 void MakeEndIndex( SwIndex
* pIdx
) { pIdx
->Assign( this, Len() ); }
414 BOOL
GoNext(SwIndex
*, USHORT nMode
) const;
415 BOOL
GoPrevious(SwIndex
*, USHORT nMode
) const;
417 SwCntntFrm
*GetFrm( const Point
* pDocPos
= 0,
418 const SwPosition
*pPos
= 0,
419 const BOOL bCalcFrm
= TRUE
) const;
420 // Gibt die tatsaechlcheGroesse des Frames zurueck bzw. ein leeres
421 // Rechteck, wenn kein Layout existiert.
422 // Wird fuer die Export Filter benoetigt.
423 SwRect
FindLayoutRect( const BOOL bPrtArea
= FALSE
,
424 const Point
* pPoint
= 0,
425 const BOOL bCalcFrm
= FALSE
) const;
426 SwRect
FindPageFrmRect( const BOOL bPrtArea
= FALSE
,
427 const Point
* pPoint
= 0,
428 const BOOL bCalcFrm
= FALSE
) const;
430 * Methode erzeugt fuer den angegebenen Node alle Ansichten vom
431 * Dokument. Die erzeugten Contentframes werden in das entsprechende
434 void MakeFrms( SwCntntNode
& rNode
);
436 * Methode loescht fuer den Node alle Ansichten vom
437 * Dokument. Die Contentframes werden aus dem entsprechenden
438 * Layout ausgehaengt.
443 * liefert die Anzahl der Elemente des Inhalts des Nodes;
444 * Default ist 1, Unterschiede gibt es beim TextNode und beim
447 virtual xub_StrLen
Len() const;
449 virtual SwCntntNode
* MakeCopy( SwDoc
*, const SwNodeIndex
& ) const = 0;
450 // erfrage vom Client Informationen
451 virtual BOOL
GetInfo( SfxPoolItem
& ) const;
453 // SS fuer die PoolItems: (Harte-(Fmt)Attrbutierung)
455 // Ist bInParent FALSE, wird nur in diesem Node nach dem Attribut gesucht.
456 const SfxPoolItem
& GetAttr( USHORT nWhich
, BOOL bInParent
=TRUE
) const;
457 BOOL
GetAttr( SfxItemSet
& rSet
, BOOL bInParent
=TRUE
) const;
458 // --> OD 2008-03-13 #refactorlists#
460 virtual BOOL
SetAttr( const SfxPoolItem
& );
461 virtual BOOL
SetAttr( const SfxItemSet
& rSet
);
462 virtual BOOL
ResetAttr( USHORT nWhich1
, USHORT nWhich2
= 0 );
463 virtual BOOL
ResetAttr( const SvUShorts
& rWhichArr
);
464 virtual USHORT
ResetAllAttr();
467 // liefert das Attribut, das nicht ueber die bedingte Vorlage kommt!
468 const SfxPoolItem
* GetNoCondAttr( USHORT nWhich
, BOOL bInParents
) const;
470 // hat der Node schon eigene Auto-Attribute ?
471 // Zugriff auf SwAttrSet
472 inline const SwAttrSet
&GetSwAttrSet() const;
473 inline const SwAttrSet
*GetpSwAttrSet() const { return static_cast<const SwAttrSet
*>(mpAttrSet
.get()); }
474 inline BOOL
HasSwAttrSet() const { return mpAttrSet
? TRUE
: FALSE
; }
476 virtual SwFmtColl
* ChgFmtColl( SwFmtColl
* );
477 SwFmtColl
* GetFmtColl() const { return (SwFmtColl
*)GetRegisteredIn(); }
480 inline SwFmtColl
& GetAnyFmtColl() const;
481 void SetCondFmtColl( SwFmtColl
* );
482 inline SwFmtColl
* GetCondFmtColl() const;
484 BOOL
IsAnyCondition( SwCollCondition
& rTmp
) const;
488 // invalidiert die am Node gesetzte NumRule. Diese wird
489 // spaetestend in EndAction einer Shell geupdatet
490 BOOL
InvalidateNumRule();
492 // --> OD 2005-02-21 #i42921# - determines the text direction for a certain
493 // position. Return -1, if text direction could *not* be determined.
494 short GetTextDirection( const SwPosition
& rPos
,
495 const Point
* pPt
) const;
498 inline void SetModifyAtAttr( bool bSetModifyAtAttr
) const { mbSetModifyAtAttr
= bSetModifyAtAttr
; }
499 inline bool GetModifyAtAttr() const { return mbSetModifyAtAttr
; }
502 // privater Constructor, weil nie kopiert werden darf !!
503 SwCntntNode( const SwCntntNode
& rNode
);
504 SwCntntNode
& operator= ( const SwCntntNode
& rNode
);
513 class SW_DLLPUBLIC SwTableNode
: public SwStartNode
, public SwModify
515 friend class SwNodes
;
518 virtual ~SwTableNode();
521 SwTableNode( const SwNodeIndex
& );
523 const SwTable
& GetTable() const { return *pTable
; }
524 SwTable
& GetTable() { return *pTable
; }
527 //Legt die Frms fuer den TableNode (also die TabFrms) an.
528 void MakeFrms( SwNodeIndex
* pIdxBehind
);
530 //Methode loescht fuer den Node alle Ansichten vom
531 //Dokument. Die Contentframes werden aus dem entsprechenden
532 //Layout ausgehaengt.
535 //Methode erzeugt fuer den vorhergehenden Node alle Ansichten vom
536 //Dokument. Die erzeugten Contentframes werden in das entsprechende
538 void MakeFrms( const SwNodeIndex
& rIdx
);
540 SwTableNode
* MakeCopy( SwDoc
*, const SwNodeIndex
& ) const;
541 void SetNewTable( SwTable
* , BOOL bNewFrames
=TRUE
);
544 // privater Constructor, weil nie kopiert werden darf !!
545 SwTableNode( const SwTableNode
& rNode
);
546 SwTableNode
& operator= ( const SwTableNode
& rNode
);
553 class SwSectionNode
: public SwStartNode
555 friend class SwNodes
;
558 virtual ~SwSectionNode();
561 SwSectionNode( const SwNodeIndex
&, SwSectionFmt
& rFmt
);
563 const SwSection
& GetSection() const { return *pSection
; }
564 SwSection
& GetSection() { return *pSection
; }
566 // setze ein neues SectionObject. Erstmal nur gedacht fuer die
567 // neuen VerzeichnisSections. Der geht ueber in den Besitz des Nodes!
568 void SetNewSection( SwSection
* pNewSection
);
572 //Legt die Frms fuer den SectionNode (also die SectionFrms) an.
573 //Im Defaultfall wird bis die Frames bis zum Ende des Bereichs angelegt,
574 //uebergibt man einen weiteren NodeIndex pEnd, so wird bis zu diesem
575 //ein MakeFrms gerufen, genutzt wird dies von TableToText
576 void MakeFrms( SwNodeIndex
* pIdxBehind
, SwNodeIndex
* pEnd
= NULL
);
578 //Methode loescht fuer den Node alle Ansichten vom
579 //Dokument. Die Contentframes werden aus dem entsprechenden
580 //Layout ausgehaengt.
583 //Methode erzeugt fuer den vorhergehenden Node alle Ansichten vom
584 //Dokument. Die erzeugten Contentframes werden in das entsprechende
586 void MakeFrms( const SwNodeIndex
& rIdx
);
588 SwSectionNode
* MakeCopy( SwDoc
*, const SwNodeIndex
& ) const;
590 // setze den Verweis im Format der Section auf sich selbst
593 // ueberprueft bei _nicht_ versteckten Bereichen, ob es Inhalt gibt, der
594 // _nicht_ in einem versteckten (Unter-)Bereich liegt
595 BOOL
IsCntntHidden() const;
598 // privater Constructor, weil nie kopiert werden darf !!
599 SwSectionNode( const SwSection
& rNode
);
600 SwSectionNode
& operator= ( const SwSection
& rNode
);
605 // ---------------------- einige inline Methoden ----------------------
606 inline SwEndNode
*SwNode::GetEndNode()
608 return ND_ENDNODE
== nNodeType
? (SwEndNode
*)this : 0;
610 inline const SwEndNode
*SwNode::GetEndNode() const
612 return ND_ENDNODE
== nNodeType
? (const SwEndNode
*)this : 0;
614 inline SwStartNode
*SwNode::GetStartNode()
616 return ND_STARTNODE
& nNodeType
? (SwStartNode
*)this : 0;
618 inline const SwStartNode
*SwNode::GetStartNode() const
620 return ND_STARTNODE
& nNodeType
? (const SwStartNode
*)this : 0;
622 inline SwTableNode
*SwNode::GetTableNode()
624 return ND_TABLENODE
== nNodeType
? (SwTableNode
*)this : 0;
626 inline const SwTableNode
*SwNode::GetTableNode() const
628 return ND_TABLENODE
== nNodeType
? (const SwTableNode
*)this : 0;
630 inline SwSectionNode
*SwNode::GetSectionNode()
632 return ND_SECTIONNODE
== nNodeType
? (SwSectionNode
*)this : 0;
634 inline const SwSectionNode
*SwNode::GetSectionNode() const
636 return ND_SECTIONNODE
== nNodeType
? (const SwSectionNode
*)this : 0;
638 inline SwCntntNode
*SwNode::GetCntntNode()
640 return ND_CONTENTNODE
& nNodeType
? (SwCntntNode
*)this : 0;
642 inline const SwCntntNode
*SwNode::GetCntntNode() const
644 return ND_CONTENTNODE
& nNodeType
? (const SwCntntNode
*)this : 0;
648 inline BOOL
SwNode::IsStartNode() const
650 return ND_STARTNODE
& nNodeType
? TRUE
: FALSE
;
652 inline BOOL
SwNode::IsCntntNode() const
654 return ND_CONTENTNODE
& nNodeType
? TRUE
: FALSE
;
656 inline BOOL
SwNode::IsEndNode() const
658 return ND_ENDNODE
== nNodeType
? TRUE
: FALSE
;
660 inline BOOL
SwNode::IsTxtNode() const
662 return ND_TEXTNODE
== nNodeType
? TRUE
: FALSE
;
664 inline BOOL
SwNode::IsTableNode() const
666 return ND_TABLENODE
== nNodeType
? TRUE
: FALSE
;
668 inline BOOL
SwNode::IsSectionNode() const
670 return ND_SECTIONNODE
== nNodeType
? TRUE
: FALSE
;
672 inline BOOL
SwNode::IsNoTxtNode() const
674 return ND_NOTXTNODE
& nNodeType
? TRUE
: FALSE
;
676 inline BOOL
SwNode::IsOLENode() const
678 return ND_OLENODE
== nNodeType
? TRUE
: FALSE
;
680 inline BOOL
SwNode::IsGrfNode() const
682 return ND_GRFNODE
== nNodeType
? TRUE
: FALSE
;
685 inline const SwStartNode
* SwNode::FindSttNodeByType( SwStartNodeType eTyp
) const
687 return ((SwNode
*)this)->FindSttNodeByType( eTyp
);
689 inline const SwTableNode
* SwNode::FindTableNode() const
691 return ((SwNode
*)this)->FindTableNode();
693 inline const SwSectionNode
* SwNode::FindSectionNode() const
695 return ((SwNode
*)this)->FindSectionNode();
697 inline ULONG
SwNode::StartOfSectionIndex() const
699 return pStartOfSection
->GetIndex();
701 inline ULONG
SwNode::EndOfSectionIndex() const
703 const SwStartNode
* pStNd
= IsStartNode() ? (SwStartNode
*)this : pStartOfSection
;
704 return pStNd
->pEndOfSection
->GetIndex();
706 inline const SwEndNode
* SwNode::EndOfSectionNode() const
708 const SwStartNode
* pStNd
= IsStartNode() ? (SwStartNode
*)this : pStartOfSection
;
709 return pStNd
->pEndOfSection
;
711 inline SwEndNode
* SwNode::EndOfSectionNode()
713 SwStartNode
* pStNd
= IsStartNode() ? (SwStartNode
*)this : pStartOfSection
;
714 return pStNd
->pEndOfSection
;
717 inline SwNodes
& SwNode::GetNodes()
719 return (SwNodes
&)GetArray();
721 inline const SwNodes
& SwNode::GetNodes() const
723 return (SwNodes
&)GetArray();
726 inline SwDoc
* SwNode::GetDoc()
728 return GetNodes().GetDoc();
730 inline const SwDoc
* SwNode::GetDoc() const
732 return GetNodes().GetDoc();
735 inline SwFmtColl
* SwCntntNode::GetCondFmtColl() const
737 return pCondColl
? (SwFmtColl
*)pCondColl
->GetRegisteredIn() : 0;
741 inline SwFmtColl
& SwCntntNode::GetAnyFmtColl() const
743 return pCondColl
&& pCondColl
->GetRegisteredIn()
744 ? *(SwFmtColl
*)pCondColl
->GetRegisteredIn()
745 : *(SwFmtColl
*)GetRegisteredIn();
748 inline const SwAttrSet
& SwCntntNode::GetSwAttrSet() const
750 return mpAttrSet
? *GetpSwAttrSet() : GetAnyFmtColl().GetAttrSet();
755 inline const SfxPoolItem
& SwCntntNode::GetAttr( USHORT nWhich
,
756 BOOL bInParents
) const
758 return GetSwAttrSet().Get( nWhich
, bInParents
);