1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef SW_NODE_HXX 25 #define SW_NODE_HXX 26 27 #include <vector> 28 29 #include <boost/utility.hpp> 30 #include <boost/shared_ptr.hpp> 31 32 #include <tools/mempool.hxx> 33 #include <tools/gen.hxx> 34 35 #include "swdllapi.h" 36 #include <ndarr.hxx> 37 #include <ndtyp.hxx> 38 #include <index.hxx> 39 #include <fmtcol.hxx> 40 41 // --------------------- 42 // forward Deklarationen 43 // --------------------- 44 45 class SvUShorts; 46 class SwCntntFrm; 47 class SwCntntNode; 48 class SwDoc; 49 class SwEndNode; 50 class SwFrm; 51 class SwFrmFmt; 52 class SwGrfNode; 53 class SwNoTxtNode; 54 class SwNodeIndex; 55 class SwOLENode; 56 class SwRect; 57 class SwSection; 58 class SwSectionFmt; 59 class SwTOXBase; 60 class SwSectionNode; 61 class SwStartNode; 62 class SwTabFrm; 63 class SwRootFrm; 64 class SwTable; 65 class SwTableNode; 66 class SwTableBox; 67 class SwTxtNode; 68 class SwPageDesc; 69 class ViewShell; 70 struct SwPosition; 71 class IStyleAccess; 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 class IDocumentListItems; 82 class SwOLENodes; 83 84 // -------------------- 85 // class SwNode 86 // -------------------- 87 class SW_DLLPUBLIC SwNode : private /* public*/ BigPtrEntry 88 { 89 friend class SwNodes; 90 91 #ifdef DBG_UTIL 92 static long nSerial; 93 long nMySerial; 94 #endif 95 96 sal_uInt8 nNodeType; 97 98 // JP 28.03.96 99 // fuer Textnodes: Stufungslevel der Autoformatierung. Ist erstmal hier 100 // gelandet, weil noch Bits frei sind 101 sal_uInt8 nAFmtNumLvl : 3; 102 sal_Bool bSetNumLSpace : 1; // fuer Numerierung: sal_True Einzug setzen 103 sal_Bool bIgnoreDontExpand : 1; // for Text Attributes - ignore the flag 104 105 protected: 106 SwStartNode* pStartOfSection; 107 108 SwNode( const SwNodeIndex &rWhere, const sal_uInt8 nNodeId ); 109 110 // fuer den initialen StartNode 111 SwNode( SwNodes& rNodes, sal_uLong nPos, const sal_uInt8 nNodeId ); 112 113 public: 114 virtual ~SwNode(); 115 116 #ifdef DBG_UTIL 117 long int GetSerial() const { return nMySerial; } 118 #endif 119 120 sal_uInt16 GetSectionLevel() const; 121 122 inline sal_uLong StartOfSectionIndex() const; 123 inline const SwStartNode* StartOfSectionNode() const { return pStartOfSection; } 124 inline SwStartNode* StartOfSectionNode() { return pStartOfSection; } 125 126 inline sal_uLong EndOfSectionIndex() const; 127 inline const SwEndNode* EndOfSectionNode() const; 128 inline SwEndNode* EndOfSectionNode(); 129 130 inline sal_uInt8 GetAutoFmtLvl() const { return nAFmtNumLvl; } 131 inline void SetAutoFmtLvl( sal_uInt8 nVal ) { nAFmtNumLvl = nVal; } 132 133 inline sal_Bool IsSetNumLSpace() const { return bSetNumLSpace; } 134 inline void SetNumLSpace( sal_Bool bFlag ) { bSetNumLSpace = bFlag; } 135 136 inline sal_Bool IsIgnoreDontExpand() const { return bIgnoreDontExpand; } 137 inline void SetIgnoreDontExpand( sal_Bool bNew ) { bIgnoreDontExpand = bNew; } 138 139 sal_uInt8 GetNodeType() const { return nNodeType; } 140 141 inline SwStartNode *GetStartNode(); 142 inline const SwStartNode *GetStartNode() const; 143 inline SwCntntNode *GetCntntNode(); 144 inline const SwCntntNode *GetCntntNode() const; 145 inline SwEndNode *GetEndNode(); 146 inline const SwEndNode *GetEndNode() const; 147 #ifndef ICC 148 inline 149 #endif 150 SwTxtNode *GetTxtNode(); 151 152 #ifndef ICC 153 inline 154 #endif 155 const SwTxtNode *GetTxtNode() const; 156 inline SwOLENode *GetOLENode(); 157 inline const SwOLENode *GetOLENode() const; 158 inline SwNoTxtNode *GetNoTxtNode(); 159 inline const SwNoTxtNode *GetNoTxtNode() const; 160 inline SwGrfNode *GetGrfNode(); 161 inline const SwGrfNode *GetGrfNode() const; 162 inline SwTableNode *GetTableNode(); 163 inline const SwTableNode *GetTableNode() const; 164 inline SwSectionNode *GetSectionNode(); 165 inline const SwSectionNode *GetSectionNode() const; 166 167 inline sal_Bool IsStartNode() const; 168 inline sal_Bool IsCntntNode() const; 169 inline sal_Bool IsEndNode() const; 170 inline sal_Bool IsTxtNode() const; 171 inline sal_Bool IsTableNode() const; 172 inline sal_Bool IsSectionNode() const; 173 inline sal_Bool IsOLENode() const; 174 inline sal_Bool IsNoTxtNode() const; 175 inline sal_Bool IsGrfNode() const; 176 177 /** 178 Checks if this node is in redlines. 179 180 @retval sal_True this node is in redlines 181 @retval sal_False else 182 */ 183 sal_Bool IsInRedlines() const; 184 185 // suche den TabellenNode, in dem dieser steht. Wenn in keiner 186 // Tabelle wird 0 returnt. 187 SwTableNode *FindTableNode(); 188 inline const SwTableNode *FindTableNode() const; 189 190 // suche den SectionNode, in dem dieser steht. Wenn es in keiner 191 // Section steht wird 0 returnt. 192 SwSectionNode *FindSectionNode(); 193 inline const SwSectionNode *FindSectionNode() const; 194 195 SwStartNode* FindSttNodeByType( SwStartNodeType eTyp ); 196 inline const SwStartNode* FindSttNodeByType( SwStartNodeType eTyp ) const; 197 198 const SwStartNode* FindTableBoxStartNode() const 199 { return FindSttNodeByType( SwTableBoxStartNode ); } 200 const SwStartNode* FindFlyStartNode() const 201 { return FindSttNodeByType( SwFlyStartNode ); } 202 const SwStartNode* FindFootnoteStartNode() const 203 { return FindSttNodeByType( SwFootnoteStartNode ); } 204 const SwStartNode* FindHeaderStartNode() const 205 { return FindSttNodeByType( SwHeaderStartNode ); } 206 const SwStartNode* FindFooterStartNode() const 207 { return FindSttNodeByType( SwFooterStartNode ); } 208 209 // in welchem Nodes-Array/Doc steht der Node ? 210 inline SwNodes& GetNodes(); 211 inline const SwNodes& GetNodes() const; 212 inline SwDoc* GetDoc(); 213 inline const SwDoc* GetDoc() const; 214 215 /** Provides access to the document setting interface 216 */ 217 const IDocumentSettingAccess* getIDocumentSettingAccess() const; 218 219 /** Provides access to the document device interface 220 */ 221 const IDocumentDeviceAccess* getIDocumentDeviceAccess() const; 222 223 /** Provides access to the document bookmark interface 224 */ 225 const IDocumentMarkAccess* getIDocumentMarkAccess() const; 226 227 /** Provides access to the document redline interface 228 */ 229 const IDocumentRedlineAccess* getIDocumentRedlineAccess() const; 230 231 /** Provides access to the document style pool interface 232 */ 233 const IDocumentStylePoolAccess* getIDocumentStylePoolAccess() const; 234 235 /** Provides access to the document line number information interface 236 */ 237 const IDocumentLineNumberAccess* getIDocumentLineNumberAccess() const; 238 239 /** Provides access to the document draw model interface 240 */ 241 const IDocumentDrawModelAccess* getIDocumentDrawModelAccess() const; 242 243 /** Provides access to the document layout interface 244 */ 245 const IDocumentLayoutAccess* getIDocumentLayoutAccess() const; 246 IDocumentLayoutAccess* getIDocumentLayoutAccess(); 247 248 /** Provides access to the document links administration interface 249 */ 250 const IDocumentLinksAdministration* getIDocumentLinksAdministration() const; 251 IDocumentLinksAdministration* getIDocumentLinksAdministration(); 252 253 /** Provides access to the document fields administration interface 254 */ 255 const IDocumentFieldsAccess* getIDocumentFieldsAccess() const; 256 IDocumentFieldsAccess* getIDocumentFieldsAccess(); 257 258 /** Provides access to the document content operations interface 259 */ 260 IDocumentContentOperations* getIDocumentContentOperations(); 261 262 /** Provides access to the document automatic styles interface 263 */ 264 IStyleAccess& getIDocumentStyleAccess(); 265 266 /** Provides access to the document's numbered items interface 267 268 OD 2007-10-31 #i83479# 269 270 @author OD 271 */ 272 IDocumentListItems& getIDocumentListItems(); 273 274 // liegt der Node im Sichtbarenbereich der Shell ? 275 sal_Bool IsInVisibleArea( ViewShell* pSh = 0 ) const; 276 // befindet sich der Node in einem geschuetzten Bereich? 277 sal_Bool IsInProtectSect() const; 278 // befindet sich der Node in irgendetwas geschuetzten ? 279 // (Bereich/Rahmen/Tabellenzellen/... incl. des Ankers bei 280 // Rahmen/Fussnoten/..) 281 sal_Bool IsProtect() const; 282 // suche den PageDesc, mit dem dieser Node formatiert ist. Wenn das 283 // Layout vorhanden ist wird ueber das gesucht, ansonsten gibt es nur 284 // die harte Tour ueber die Nodes nach vorne suchen!! 285 // OD 18.03.2003 #106326# 286 const SwPageDesc* FindPageDesc( sal_Bool bCalcLay, sal_uInt32* pPgDescNdIdx = 0 ) const; 287 288 // falls der Node in einem Fly steht, dann wird das entsprechende Format 289 // returnt 290 SwFrmFmt* GetFlyFmt() const; 291 292 // falls der Node in einer Tabelle steht, dann wird die entsprechende 293 // TabellenBox returnt 294 SwTableBox* GetTblBox() const; 295 296 inline sal_uLong GetIndex() const { return GetPos(); } 297 298 const SwTxtNode* FindOutlineNodeOfLevel( sal_uInt8 nLvl ) const; 299 300 sal_uInt8 HasPrevNextLayNode() const; 301 302 private: 303 // privater Constructor, weil nie kopiert werden darf !! 304 SwNode( const SwNode & rNodes ); 305 SwNode & operator= ( const SwNode & rNodes ); 306 }; 307 308 // -------------------- 309 // class SwStartNode 310 // -------------------- 311 class SwStartNode: public SwNode 312 { 313 friend class SwNode; 314 friend class SwNodes; 315 friend class SwEndNode; // um theEndOfSection zu setzen !! 316 317 SwEndNode* pEndOfSection; 318 SwStartNodeType eSttNdTyp; 319 320 // fuer den initialen StartNode 321 SwStartNode( SwNodes& rNodes, sal_uLong nPos ); 322 323 protected: 324 SwStartNode( const SwNodeIndex &rWhere, 325 const sal_uInt8 nNodeType = ND_STARTNODE, 326 SwStartNodeType = SwNormalStartNode ); 327 public: 328 DECL_FIXEDMEMPOOL_NEWDEL(SwStartNode) 329 330 SwStartNodeType GetStartNodeType() const { return eSttNdTyp; } 331 332 // an alle ContentNodes der Section das ChkCondColl rufen 333 void CheckSectionCondColl() const; 334 335 private: 336 // privater Constructor, weil nie kopiert werden darf !! 337 SwStartNode( const SwStartNode & rNode ); 338 SwStartNode & operator= ( const SwStartNode & rNode ); 339 }; 340 341 342 // -------------------- 343 // class SwEndNode 344 // -------------------- 345 class SwEndNode : public SwNode 346 { 347 friend class SwNodes; 348 friend class SwTableNode; // um seinen EndNode anlegen zukoennen 349 friend class SwSectionNode; // um seinen EndNode anlegen zukoennen 350 351 // fuer den initialen StartNode 352 SwEndNode( SwNodes& rNodes, sal_uLong nPos, SwStartNode& rSttNd ); 353 354 protected: 355 SwEndNode( const SwNodeIndex &rWhere, SwStartNode& rSttNd ); 356 357 DECL_FIXEDMEMPOOL_NEWDEL(SwEndNode) 358 359 private: 360 // privater Constructor, weil nie kopiert werden darf !! 361 SwEndNode( const SwEndNode & rNode ); 362 SwEndNode & operator= ( const SwEndNode & rNode ); 363 }; 364 365 366 // -------------------- 367 // SwCntntNode 368 // -------------------- 369 class SW_DLLPUBLIC SwCntntNode: public SwModify, public SwNode, public SwIndexReg 370 { 371 // Der Reader darf NewAttrSet() aufrufen! 372 // friend class SwSwgReader; 373 // friend class Sw3IoImp; 374 375 //FEATURE::CONDCOLL 376 SwDepend* pCondColl; 377 //FEATURE::CONDCOLL 378 mutable bool mbSetModifyAtAttr; 379 380 protected: 381 SwCntntNode( const SwNodeIndex &rWhere, const sal_uInt8 nNodeType, 382 SwFmtColl *pFmtColl ); 383 virtual ~SwCntntNode(); 384 385 // Attribut-Set fuer alle AUTO-Attribute eines CntntNodes 386 // ( z.B: TxtNode oder NoTxtNode 387 boost::shared_ptr<const SfxItemSet> mpAttrSet; 388 389 // lasse von den entsprechenden Nodes die spz. AttrSets anlegen 390 virtual void NewAttrSet( SwAttrPool& ) = 0; 391 392 // There some functions that like to remove items from the internal 393 // SwAttrSet (handle): 394 sal_uInt16 ClearItemsFromAttrSet( const std::vector<sal_uInt16>& rWhichIds ); 395 396 virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew); 397 398 public: 399 TYPEINFO(); //Bereits in Basisklasse Client drin. 400 401 // MakeFrm will be called for a certain layout 402 // pSib is another SwFrm of the same layout (e.g. the SwRootFrm itself, a sibling, the parent) 403 virtual SwCntntFrm *MakeFrm( SwFrm* pSib ) = 0; 404 405 virtual SwCntntNode *SplitCntntNode(const SwPosition & ) = 0; 406 407 virtual SwCntntNode *JoinNext(); 408 virtual SwCntntNode *JoinPrev(); 409 // koennen 2 Nodes zusammengefasst werden ? 410 // in pIdx kann die 2. Position returnt werden. 411 int CanJoinNext( SwNodeIndex* pIdx =0 ) const; 412 int CanJoinPrev( SwNodeIndex* pIdx =0 ) const; 413 414 void MakeStartIndex( SwIndex * pIdx ) { pIdx->Assign( this, 0 ); } 415 void MakeEndIndex( SwIndex * pIdx ) { pIdx->Assign( this, Len() ); } 416 417 sal_Bool GoNext(SwIndex *, sal_uInt16 nMode ) const; 418 sal_Bool GoPrevious(SwIndex *, sal_uInt16 nMode ) const; 419 420 // Replacement for good old GetFrm(..): 421 SwCntntFrm *getLayoutFrm( const SwRootFrm*, 422 const Point* pDocPos = 0, 423 const SwPosition *pPos = 0, 424 const sal_Bool bCalcFrm = sal_True ) const; 425 // Gibt die tatsaechlcheGroesse des Frames zurueck bzw. ein leeres 426 // Rechteck, wenn kein Layout existiert. 427 // Wird fuer die Export Filter benoetigt. 428 SwRect FindLayoutRect( const sal_Bool bPrtArea = sal_False, 429 const Point* pPoint = 0, 430 const sal_Bool bCalcFrm = sal_False ) const; 431 SwRect FindPageFrmRect( const sal_Bool bPrtArea = sal_False, 432 const Point* pPoint = 0, 433 const sal_Bool bCalcFrm = sal_False ) const; 434 /* 435 * Methode erzeugt fuer den angegebenen Node alle Ansichten vom 436 * Dokument. Die erzeugten Contentframes werden in das entsprechende 437 * Layout gehaengt. 438 */ 439 void MakeFrms( SwCntntNode& rNode ); 440 /* 441 * Methode loescht fuer den Node alle Ansichten vom 442 * Dokument. Die Contentframes werden aus dem entsprechenden 443 * Layout ausgehaengt. 444 */ 445 void DelFrms(); 446 447 /* 448 * liefert die Anzahl der Elemente des Inhalts des Nodes; 449 * Default ist 1, Unterschiede gibt es beim TextNode und beim 450 * Formelnode. 451 */ 452 virtual xub_StrLen Len() const; 453 454 virtual SwCntntNode* MakeCopy( SwDoc*, const SwNodeIndex& ) const = 0; 455 // erfrage vom Client Informationen 456 virtual sal_Bool GetInfo( SfxPoolItem& ) const; 457 458 // SS fuer die PoolItems: (Harte-(Fmt)Attrbutierung) 459 460 // Ist bInParent sal_False, wird nur in diesem Node nach dem Attribut gesucht. 461 const SfxPoolItem& GetAttr( sal_uInt16 nWhich, sal_Bool bInParent=sal_True ) const; 462 sal_Bool GetAttr( SfxItemSet& rSet, sal_Bool bInParent=sal_True ) const; 463 // --> OD 2008-03-13 #refactorlists# 464 // made virtual 465 virtual sal_Bool SetAttr( const SfxPoolItem& ); 466 virtual sal_Bool SetAttr( const SfxItemSet& rSet ); 467 virtual sal_Bool ResetAttr( sal_uInt16 nWhich1, sal_uInt16 nWhich2 = 0 ); 468 virtual sal_Bool ResetAttr( const SvUShorts& rWhichArr ); 469 virtual sal_uInt16 ResetAllAttr(); 470 // <-- 471 472 // liefert das Attribut, das nicht ueber die bedingte Vorlage kommt! 473 const SfxPoolItem* GetNoCondAttr( sal_uInt16 nWhich, sal_Bool bInParents ) const; 474 475 // hat der Node schon eigene Auto-Attribute ? 476 // Zugriff auf SwAttrSet 477 inline const SwAttrSet &GetSwAttrSet() const; 478 inline const SwAttrSet *GetpSwAttrSet() const { return static_cast<const SwAttrSet*>(mpAttrSet.get()); } 479 inline sal_Bool HasSwAttrSet() const { return mpAttrSet ? sal_True : sal_False; } 480 481 virtual SwFmtColl* ChgFmtColl( SwFmtColl* ); 482 SwFmtColl* GetFmtColl() const { return (SwFmtColl*)GetRegisteredIn(); } 483 484 //FEATURE::CONDCOLL 485 inline SwFmtColl& GetAnyFmtColl() const; 486 void SetCondFmtColl( SwFmtColl* ); 487 inline SwFmtColl* GetCondFmtColl() const; 488 489 sal_Bool IsAnyCondition( SwCollCondition& rTmp ) const; 490 void ChkCondColl(); 491 //FEATURE::CONDCOLL 492 493 // invalidiert die am Node gesetzte NumRule. Diese wird 494 // spaetestend in EndAction einer Shell geupdatet 495 sal_Bool InvalidateNumRule(); 496 497 // --> OD 2005-02-21 #i42921# - determines the text direction for a certain 498 // position. Return -1, if text direction could *not* be determined. 499 short GetTextDirection( const SwPosition& rPos, 500 const Point* pPt ) const; 501 // <-- 502 503 inline void SetModifyAtAttr( bool bSetModifyAtAttr ) const { mbSetModifyAtAttr = bSetModifyAtAttr; } 504 inline bool GetModifyAtAttr() const { return mbSetModifyAtAttr; } 505 506 static SwOLENodes* CreateOLENodesArray( const SwFmtColl& rColl, bool bOnlyWithInvalidSize ); 507 508 private: 509 // privater Constructor, weil nie kopiert werden darf !! 510 SwCntntNode( const SwCntntNode & rNode ); 511 SwCntntNode & operator= ( const SwCntntNode & rNode ); 512 }; 513 514 515 516 //--------- 517 // SwTableNode 518 //--------- 519 class SW_DLLPUBLIC SwTableNode : public SwStartNode, public SwModify 520 { 521 friend class SwNodes; 522 SwTable* pTable; 523 protected: 524 virtual ~SwTableNode(); 525 526 public: 527 SwTableNode( const SwNodeIndex & ); 528 529 const SwTable& GetTable() const { return *pTable; } 530 SwTable& GetTable() { return *pTable; } 531 SwTabFrm *MakeFrm( SwFrm* ); 532 533 //Legt die Frms fuer den TableNode (also die TabFrms) an. 534 void MakeFrms( SwNodeIndex* pIdxBehind ); 535 536 //Methode loescht fuer den Node alle Ansichten vom 537 //Dokument. Die Contentframes werden aus dem entsprechenden 538 //Layout ausgehaengt. 539 void DelFrms(); 540 541 //Methode erzeugt fuer den vorhergehenden Node alle Ansichten vom 542 //Dokument. Die erzeugten Contentframes werden in das entsprechende 543 //Layout gehaengt. 544 void MakeFrms( const SwNodeIndex & rIdx ); 545 546 SwTableNode* MakeCopy( SwDoc*, const SwNodeIndex& ) const; 547 void SetNewTable( SwTable* , sal_Bool bNewFrames=sal_True ); 548 549 private: 550 // privater Constructor, weil nie kopiert werden darf !! 551 SwTableNode( const SwTableNode & rNode ); 552 SwTableNode & operator= ( const SwTableNode & rNode ); 553 }; 554 555 556 //--------- 557 // SwSectionNode 558 //--------- 559 class SwSectionNode 560 : public SwStartNode 561 , private ::boost::noncopyable 562 { 563 friend class SwNodes; 564 565 private: 566 ::std::auto_ptr<SwSection> const m_pSection; 567 568 protected: 569 virtual ~SwSectionNode(); 570 571 public: 572 SwSectionNode(SwNodeIndex const&, 573 SwSectionFmt & rFmt, SwTOXBase const*const pTOXBase); 574 575 const SwSection& GetSection() const { return *m_pSection; } 576 SwSection& GetSection() { return *m_pSection; } 577 578 SwFrm *MakeFrm( SwFrm* ); 579 580 //Legt die Frms fuer den SectionNode (also die SectionFrms) an. 581 //Im Defaultfall wird bis die Frames bis zum Ende des Bereichs angelegt, 582 //uebergibt man einen weiteren NodeIndex pEnd, so wird bis zu diesem 583 //ein MakeFrms gerufen, genutzt wird dies von TableToText 584 void MakeFrms( SwNodeIndex* pIdxBehind, SwNodeIndex* pEnd = NULL ); 585 586 //Methode loescht fuer den Node alle Ansichten vom 587 //Dokument. Die Contentframes werden aus dem entsprechenden 588 //Layout ausgehaengt. 589 void DelFrms(); 590 591 //Methode erzeugt fuer den vorhergehenden Node alle Ansichten vom 592 //Dokument. Die erzeugten Contentframes werden in das entsprechende 593 //Layout gehaengt. 594 void MakeFrms( const SwNodeIndex & rIdx ); 595 596 SwSectionNode* MakeCopy( SwDoc*, const SwNodeIndex& ) const; 597 598 // setze den Verweis im Format der Section auf sich selbst 599 void NodesArrChgd(); 600 601 // ueberprueft bei _nicht_ versteckten Bereichen, ob es Inhalt gibt, der 602 // _nicht_ in einem versteckten (Unter-)Bereich liegt 603 sal_Bool IsCntntHidden() const; 604 605 }; 606 607 608 609 // ---------------------- einige inline Methoden ---------------------- 610 inline SwEndNode *SwNode::GetEndNode() 611 { 612 return ND_ENDNODE == nNodeType ? (SwEndNode*)this : 0; 613 } 614 inline const SwEndNode *SwNode::GetEndNode() const 615 { 616 return ND_ENDNODE == nNodeType ? (const SwEndNode*)this : 0; 617 } 618 inline SwStartNode *SwNode::GetStartNode() 619 { 620 return ND_STARTNODE & nNodeType ? (SwStartNode*)this : 0; 621 } 622 inline const SwStartNode *SwNode::GetStartNode() const 623 { 624 return ND_STARTNODE & nNodeType ? (const SwStartNode*)this : 0; 625 } 626 inline SwTableNode *SwNode::GetTableNode() 627 { 628 return ND_TABLENODE == nNodeType ? (SwTableNode*)this : 0; 629 } 630 inline const SwTableNode *SwNode::GetTableNode() const 631 { 632 return ND_TABLENODE == nNodeType ? (const SwTableNode*)this : 0; 633 } 634 inline SwSectionNode *SwNode::GetSectionNode() 635 { 636 return ND_SECTIONNODE == nNodeType ? (SwSectionNode*)this : 0; 637 } 638 inline const SwSectionNode *SwNode::GetSectionNode() const 639 { 640 return ND_SECTIONNODE == nNodeType ? (const SwSectionNode*)this : 0; 641 } 642 inline SwCntntNode *SwNode::GetCntntNode() 643 { 644 return ND_CONTENTNODE & nNodeType ? (SwCntntNode*)this : 0; 645 } 646 inline const SwCntntNode *SwNode::GetCntntNode() const 647 { 648 return ND_CONTENTNODE & nNodeType ? (const SwCntntNode*)this : 0; 649 } 650 651 652 inline sal_Bool SwNode::IsStartNode() const 653 { 654 return ND_STARTNODE & nNodeType ? sal_True : sal_False; 655 } 656 inline sal_Bool SwNode::IsCntntNode() const 657 { 658 return ND_CONTENTNODE & nNodeType ? sal_True : sal_False; 659 } 660 inline sal_Bool SwNode::IsEndNode() const 661 { 662 return ND_ENDNODE == nNodeType ? sal_True : sal_False; 663 } 664 inline sal_Bool SwNode::IsTxtNode() const 665 { 666 return ND_TEXTNODE == nNodeType ? sal_True : sal_False; 667 } 668 inline sal_Bool SwNode::IsTableNode() const 669 { 670 return ND_TABLENODE == nNodeType ? sal_True : sal_False; 671 } 672 inline sal_Bool SwNode::IsSectionNode() const 673 { 674 return ND_SECTIONNODE == nNodeType ? sal_True : sal_False; 675 } 676 inline sal_Bool SwNode::IsNoTxtNode() const 677 { 678 return ND_NOTXTNODE & nNodeType ? sal_True : sal_False; 679 } 680 inline sal_Bool SwNode::IsOLENode() const 681 { 682 return ND_OLENODE == nNodeType ? sal_True : sal_False; 683 } 684 inline sal_Bool SwNode::IsGrfNode() const 685 { 686 return ND_GRFNODE == nNodeType ? sal_True : sal_False; 687 } 688 689 inline const SwStartNode* SwNode::FindSttNodeByType( SwStartNodeType eTyp ) const 690 { 691 return ((SwNode*)this)->FindSttNodeByType( eTyp ); 692 } 693 inline const SwTableNode* SwNode::FindTableNode() const 694 { 695 return ((SwNode*)this)->FindTableNode(); 696 } 697 inline const SwSectionNode* SwNode::FindSectionNode() const 698 { 699 return ((SwNode*)this)->FindSectionNode(); 700 } 701 inline sal_uLong SwNode::StartOfSectionIndex() const 702 { 703 return pStartOfSection->GetIndex(); 704 } 705 inline sal_uLong SwNode::EndOfSectionIndex() const 706 { 707 const SwStartNode* pStNd = IsStartNode() ? (SwStartNode*)this : pStartOfSection; 708 return pStNd->pEndOfSection->GetIndex(); 709 } 710 inline const SwEndNode* SwNode::EndOfSectionNode() const 711 { 712 const SwStartNode* pStNd = IsStartNode() ? (SwStartNode*)this : pStartOfSection; 713 return pStNd->pEndOfSection; 714 } 715 inline SwEndNode* SwNode::EndOfSectionNode() 716 { 717 SwStartNode* pStNd = IsStartNode() ? (SwStartNode*)this : pStartOfSection; 718 return pStNd->pEndOfSection; 719 } 720 721 inline SwNodes& SwNode::GetNodes() 722 { 723 return (SwNodes&)GetArray(); 724 } 725 inline const SwNodes& SwNode::GetNodes() const 726 { 727 return (SwNodes&)GetArray(); 728 } 729 730 inline SwDoc* SwNode::GetDoc() 731 { 732 return GetNodes().GetDoc(); 733 } 734 inline const SwDoc* SwNode::GetDoc() const 735 { 736 return GetNodes().GetDoc(); 737 } 738 739 inline SwFmtColl* SwCntntNode::GetCondFmtColl() const 740 { 741 return pCondColl ? (SwFmtColl*)pCondColl->GetRegisteredIn() : 0; 742 } 743 744 745 inline SwFmtColl& SwCntntNode::GetAnyFmtColl() const 746 { 747 return pCondColl && pCondColl->GetRegisteredIn() 748 ? *(SwFmtColl*)pCondColl->GetRegisteredIn() 749 : *(SwFmtColl*)GetRegisteredIn(); 750 } 751 752 inline const SwAttrSet& SwCntntNode::GetSwAttrSet() const 753 { 754 return mpAttrSet ? *GetpSwAttrSet() : GetAnyFmtColl().GetAttrSet(); 755 } 756 757 //FEATURE::CONDCOLL 758 759 inline const SfxPoolItem& SwCntntNode::GetAttr( sal_uInt16 nWhich, 760 sal_Bool bInParents ) const 761 { 762 return GetSwAttrSet().Get( nWhich, bInParents ); 763 } 764 #endif 765