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