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 #ifndef _SWTABLE_HXX 24 #define _SWTABLE_HXX 25 #include <tools/mempool.hxx> 26 #include <tools/ref.hxx> 27 #include <svl/svarray.hxx> 28 #include <tblenum.hxx> 29 #include <swtypes.hxx> 30 #include <calbck.hxx> 31 #include <swrect.hxx> 32 #ifndef DBG_UTIL 33 #include <node.hxx> // fuer StartNode->GetMyIndex 34 #else 35 class SwStartNode; 36 #include <memory> 37 #include <boost/noncopyable.hpp> 38 #endif 39 40 class SwFmt; 41 class Color; 42 class SwFrmFmt; 43 class SwTableFmt; 44 class SwTableLineFmt; 45 class SwTableBoxFmt; 46 class SwHTMLTableLayout; 47 class SwTableLine; 48 class SwTableBox; 49 class SwTableNode; 50 class SwTabCols; 51 class SwDoc; 52 class SwSelBoxes; 53 class SwTblCalcPara; 54 class SwChartLines; 55 struct SwPosition; 56 class SwNodeIndex; 57 class SwNode; 58 class SfxPoolItem; 59 class SwUndoTblMerge; 60 class SwUndo; 61 class SwPaM; 62 class SwTableBox_Impl; 63 class SwUndoTblCpyTbl; 64 class SwBoxSelection; 65 struct SwSaveRowSpan; 66 struct Parm; 67 68 #ifndef SW_DECL_SWSERVEROBJECT_DEFINED 69 #define SW_DECL_SWSERVEROBJECT_DEFINED 70 SV_DECL_REF( SwServerObject ) 71 #endif 72 73 SV_DECL_PTRARR_DEL(SwTableLines, SwTableLine*, 10, 20) 74 SV_DECL_PTRARR_DEL(SwTableBoxes, SwTableBox*, 25, 50) 75 76 // speicher die Inhaltstragenden Box-Pointer zusaetzlich in einem 77 // sortierten Array (fuers rechnen in der Tabelle) 78 typedef SwTableBox* SwTableBoxPtr; 79 SV_DECL_PTRARR_SORT( SwTableSortBoxes, SwTableBoxPtr, 25, 50 ) 80 typedef SwTableLine* SwTableLinePtr; 81 82 class SW_DLLPUBLIC SwTable: public SwClient //Client vom FrmFmt 83 { 84 85 86 protected: 87 SwTableLines aLines; 88 SwTableSortBoxes aSortCntBoxes; 89 SwServerObjectRef refObj; // falls DataServer -> Pointer gesetzt 90 91 SwHTMLTableLayout *pHTMLLayout; 92 93 // Usually, the table node of a SwTable can be accessed by getting a box 94 // out of aSortCntBoxes, which know their SwStartNode. But in some rare 95 // cases, we need to know the table node of a SwTable, before the table 96 // boxes have been build (SwTableNode::MakeCopy with tables in tables). 97 SwTableNode* pTableNode; 98 99 //SOLL das fuer jede Tabelle einstellbar sein? 100 TblChgMode eTblChgMode; 101 102 sal_uInt16 nGrfsThatResize; // Anzahl der Grfs, die beim HTML-Import 103 // noch ein Resize der Tbl. anstossen 104 sal_uInt16 nRowsToRepeat; // number of rows to repeat on every page 105 106 sal_Bool bModifyLocked :1; 107 sal_Bool bNewModel :1; // sal_False: old SubTableModel; sal_True: new RowSpanModel 108 #ifdef DBG_UTIL 109 bool bDontChangeModel; // This is set by functions (like Merge()) to forbid a laet model change 110 #endif 111 IsModifyLocked()112 sal_Bool IsModifyLocked(){ return bModifyLocked;} 113 114 virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew ); 115 116 public: 117 enum SearchType 118 { 119 SEARCH_NONE, // Default: expand to rectangle 120 SEARCH_ROW, // row selection 121 SEARCH_COL // column selection 122 }; 123 124 TYPEINFO(); 125 126 // single argument ctors shall be explicit. 127 explicit SwTable( SwTableFmt* ); 128 virtual ~SwTable(); 129 130 // @@@ public copy ctor, but no copy assignment? 131 SwTable( const SwTable& rTable ); // kein Copy der Lines !! 132 private: 133 // @@@ public copy ctor, but no copy assignment? 134 SwTable & operator= (const SwTable &); 135 // no default ctor. 136 SwTable(); 137 sal_Bool OldMerge( SwDoc*, const SwSelBoxes&, SwTableBox*, SwUndoTblMerge* ); 138 sal_Bool OldSplitRow( SwDoc*, const SwSelBoxes&, sal_uInt16, sal_Bool ); 139 sal_Bool NewMerge( SwDoc*, const SwSelBoxes&, const SwSelBoxes& rMerged, 140 SwTableBox*, SwUndoTblMerge* ); 141 sal_Bool NewSplitRow( SwDoc*, const SwSelBoxes&, sal_uInt16, sal_Bool ); 142 SwBoxSelection* CollectBoxSelection( const SwPaM& rPam ) const; 143 void InsertSpannedRow( SwDoc* pDoc, sal_uInt16 nIdx, sal_uInt16 nCnt ); 144 sal_Bool _InsertRow( SwDoc*, const SwSelBoxes&, sal_uInt16 nCnt, sal_Bool bBehind ); 145 sal_Bool NewInsertCol( SwDoc*, const SwSelBoxes& rBoxes, sal_uInt16 nCnt, sal_Bool ); 146 void _FindSuperfluousRows( SwSelBoxes& rBoxes, SwTableLine*, SwTableLine* ); 147 void AdjustWidths( const long nOld, const long nNew ); 148 void NewSetTabCols( Parm &rP, const SwTabCols &rNew, const SwTabCols &rOld, 149 const SwTableBox *pStart, sal_Bool bCurRowOnly ); 150 151 public: 152 GetHTMLTableLayout()153 SwHTMLTableLayout *GetHTMLTableLayout() { return pHTMLLayout; } GetHTMLTableLayout() const154 const SwHTMLTableLayout *GetHTMLTableLayout() const { return pHTMLLayout; } 155 void SetHTMLTableLayout( SwHTMLTableLayout *p ); //Eigentumsuebergang! 156 IncGrfsThatResize()157 sal_uInt16 IncGrfsThatResize() { return ++nGrfsThatResize; } DecGrfsThatResize()158 sal_uInt16 DecGrfsThatResize() { return nGrfsThatResize ? --nGrfsThatResize : 0; } 159 LockModify()160 void LockModify() { bModifyLocked = sal_True; } //Muessen _immer_ paarig UnlockModify()161 void UnlockModify() { bModifyLocked = sal_False;} //benutzt werden! 162 SetTableModel(sal_Bool bNew)163 void SetTableModel( sal_Bool bNew ){ bNewModel = bNew; } IsNewModel() const164 sal_Bool IsNewModel() const { return bNewModel; } 165 GetRowsToRepeat() const166 sal_uInt16 GetRowsToRepeat() const { return Min( GetTabLines().Count(), nRowsToRepeat ); } _GetRowsToRepeat() const167 sal_uInt16 _GetRowsToRepeat() const { return nRowsToRepeat; } SetRowsToRepeat(sal_uInt16 nNumOfRows)168 void SetRowsToRepeat( sal_uInt16 nNumOfRows ) { nRowsToRepeat = nNumOfRows; } 169 170 bool IsHeadline( const SwTableLine& rLine ) const; 171 GetTabLines()172 SwTableLines &GetTabLines() { return aLines; } GetTabLines() const173 const SwTableLines &GetTabLines() const { return aLines; } 174 GetFrmFmt()175 SwFrmFmt* GetFrmFmt() { return (SwFrmFmt*)GetRegisteredIn(); } GetFrmFmt() const176 SwFrmFmt* GetFrmFmt() const { return (SwFrmFmt*)GetRegisteredIn(); } GetTableFmt() const177 SwTableFmt* GetTableFmt() const { return (SwTableFmt*)GetRegisteredIn(); } 178 179 void GetTabCols( SwTabCols &rToFill, const SwTableBox *pStart, 180 sal_Bool bHidden = sal_False, sal_Bool bCurRowOnly = sal_False ) const; 181 void SetTabCols( const SwTabCols &rNew, const SwTabCols &rOld, 182 const SwTableBox *pStart, sal_Bool bCurRowOnly ); 183 184 // The following functions are for new table model only... 185 void CreateSelection( const SwPaM& rPam, SwSelBoxes& rBoxes, 186 const SearchType eSearchType, bool bProtect ) const; 187 void CreateSelection( const SwNode* pStart, const SwNode* pEnd, 188 SwSelBoxes& rBoxes, const SearchType eSearchType, bool bProtect ) const; 189 void ExpandSelection( SwSelBoxes& rBoxes ) const; 190 // When a table is splitted into two tables, the row spans which overlaps 191 // the split have to be corrected and stored for undo 192 // SwSavRowSpan is the structure needed by Undo to undo the split operation 193 // CleanUpRowSpan corrects the (top of the) second table and delviers the structure 194 // for Undo 195 SwSaveRowSpan* CleanUpTopRowSpan( sal_uInt16 nSplitLine ); 196 // RestoreRowSpan is called by Undo to restore the old row span values 197 void RestoreRowSpan( const SwSaveRowSpan& ); 198 // CleanUpBottomRowSpan corrects the overhanging row spans at the end of the first table 199 void CleanUpBottomRowSpan( sal_uInt16 nDelLines ); 200 201 202 // The following functions are "pseudo-virtual", i.e. they are different for old and new table model 203 // It's not allowed to change the table model after the first call of one of these functions. 204 Merge(SwDoc * pDoc,const SwSelBoxes & rBoxes,const SwSelBoxes & rMerged,SwTableBox * pMergeBox,SwUndoTblMerge * pUndo=0)205 sal_Bool Merge( SwDoc* pDoc, const SwSelBoxes& rBoxes, const SwSelBoxes& rMerged, 206 SwTableBox* pMergeBox, SwUndoTblMerge* pUndo = 0 ) 207 { 208 #ifdef DBG_UTIL 209 bDontChangeModel = true; 210 #endif 211 return bNewModel ? NewMerge( pDoc, rBoxes, rMerged, pMergeBox, pUndo ) : 212 OldMerge( pDoc, rBoxes, pMergeBox, pUndo ); 213 } SplitRow(SwDoc * pDoc,const SwSelBoxes & rBoxes,sal_uInt16 nCnt=1,sal_Bool bSameHeight=sal_False)214 sal_Bool SplitRow( SwDoc* pDoc, const SwSelBoxes& rBoxes, sal_uInt16 nCnt=1, 215 sal_Bool bSameHeight = sal_False ) 216 { 217 #ifdef DBG_UTIL 218 bDontChangeModel = true; 219 #endif 220 return bNewModel ? NewSplitRow( pDoc, rBoxes, nCnt, bSameHeight ) : 221 OldSplitRow( pDoc, rBoxes, nCnt, bSameHeight ); 222 } 223 bool PrepareMerge( const SwPaM& rPam, SwSelBoxes& rBoxes, 224 SwSelBoxes& rMerged, SwTableBox** ppMergeBox, SwUndoTblMerge* pUndo ); 225 void ExpandColumnSelection( SwSelBoxes& rBoxes, long &rMin, long &rMax ) const; 226 void PrepareDeleteCol( long nMin, long nMax ); 227 228 sal_Bool InsertCol( SwDoc*, const SwSelBoxes& rBoxes, 229 sal_uInt16 nCnt = 1, sal_Bool bBehind = sal_True ); 230 sal_Bool InsertRow( SwDoc*, const SwSelBoxes& rBoxes, 231 sal_uInt16 nCnt = 1, sal_Bool bBehind = sal_True ); 232 sal_Bool AppendRow( SwDoc* pDoc, sal_uInt16 nCnt = 1 ); 233 void PrepareDelBoxes( const SwSelBoxes& rBoxes ); 234 sal_Bool DeleteSel( SwDoc*, const SwSelBoxes& rBoxes, const SwSelBoxes* pMerged, 235 SwUndo* pUndo, const sal_Bool bDelMakeFrms, const sal_Bool bCorrBorder ); 236 sal_Bool SplitCol( SwDoc* pDoc, const SwSelBoxes& rBoxes, sal_uInt16 nCnt=1 ); 237 sal_Bool Merge( const SwSelBoxes& rBoxes, 238 SwTableBox* pMergeBox, SwUndoTblMerge* = 0 ); 239 FindSuperfluousRows(SwSelBoxes & rBoxes)240 void FindSuperfluousRows( SwSelBoxes& rBoxes ) 241 { _FindSuperfluousRows( rBoxes, 0, 0 ); } 242 void CheckRowSpan( SwTableLinePtr &rpLine, bool bUp ) const; 243 GetTabSortBoxes()244 SwTableSortBoxes& GetTabSortBoxes() { return aSortCntBoxes; } GetTabSortBoxes() const245 const SwTableSortBoxes& GetTabSortBoxes() const { return aSortCntBoxes; } 246 247 // lese die 1. Nummer und loesche sie aus dem String 248 // (wird von GetTblBox und SwTblFld benutzt) 249 // --> OD 2007-08-03 #i80314# 250 // add 3rd parameter in order to control validation check on <rStr> 251 static sal_uInt16 _GetBoxNum( String& rStr, 252 sal_Bool bFirst = sal_False, 253 const bool bPerformValidCheck = false ); 254 // <-- 255 // suche die Inhaltstragende Box mit dem Namen 256 // --> OD 2007-08-03 #i80314# 257 // add 2nd parameter in order to control validation check in called method 258 // <_GetBoxNum(..)> 259 const SwTableBox* GetTblBox( const String& rName, 260 const bool bPerformValidCheck = false ) const; 261 // <-- 262 // kopiere die selektierten Boxen in ein anderes Dokument. 263 sal_Bool MakeCopy( SwDoc*, const SwPosition&, const SwSelBoxes&, 264 sal_Bool bCpyNds = sal_True, sal_Bool bCpyName = sal_False ) const; 265 // kopiere die Tabelle in diese. (die Logik steht im TBLRWCL.CXX) 266 sal_Bool InsTable( const SwTable& rCpyTbl, const SwNodeIndex&, 267 SwUndoTblCpyTbl* pUndo = 0 ); 268 sal_Bool InsTable( const SwTable& rCpyTbl, const SwSelBoxes&, 269 SwUndoTblCpyTbl* pUndo = 0 ); 270 sal_Bool InsNewTable( const SwTable& rCpyTbl, const SwSelBoxes&, 271 SwUndoTblCpyTbl* pUndo ); 272 // kopiere die Headline (mit Inhalt!) der Tabelle in eine andere 273 sal_Bool CopyHeadlineIntoTable( SwTableNode& rTblNd ); 274 275 // erfrage die Box, dessen Start-Index auf nBoxStt steht 276 SwTableBox* GetTblBox( sal_uLong nSttIdx ); GetTblBox(sal_uLong nSttIdx) const277 const SwTableBox* GetTblBox( sal_uLong nSttIdx ) const 278 { return ((SwTable*)this)->GetTblBox( nSttIdx ); } 279 280 // returnt sal_True wenn sich in der Tabelle Verschachtelungen befinden 281 sal_Bool IsTblComplex() const; 282 283 //returnt sal_True wenn die Tabelle oder Selektion ausgeglichen ist 284 sal_Bool IsTblComplexForChart( const String& rSel, 285 SwChartLines* pGetCLines = 0 ) const; 286 287 // suche alle Inhaltstragenden-Boxen der Grundline in der diese Box 288 // steht. rBoxes auch als Return-Wert, um es gleich weiter zu benutzen 289 //JP 31.01.97: bToTop = sal_True -> hoch bis zur Grundline, 290 // sal_False-> sonst nur die Line der Box 291 SwSelBoxes& SelLineFromBox( const SwTableBox* pBox, 292 SwSelBoxes& rBoxes, sal_Bool bToTop = sal_True ) const; 293 // erfrage vom Client Informationen 294 virtual sal_Bool GetInfo( SfxPoolItem& ) const; 295 296 // suche im Format nach der angemeldeten Tabelle 297 static SwTable * FindTable( SwFrmFmt const*const pFmt ); 298 299 // Struktur ein wenig aufraeumen 300 void GCLines(); 301 302 // returns the table node via aSortCntBoxes or pTableNode 303 SwTableNode* GetTableNode() const; SetTableNode(SwTableNode * pNode)304 void SetTableNode( SwTableNode* pNode ) { pTableNode = pNode; } 305 306 // Daten Server-Methoden 307 void SetRefObject( SwServerObject* ); GetObject() const308 const SwServerObject* GetObject() const { return &refObj; } GetObject()309 SwServerObject* GetObject() { return &refObj; } 310 311 //Daten fuer das Chart fuellen. 312 void UpdateCharts() const; 313 GetTblChgMode() const314 TblChgMode GetTblChgMode() const { return eTblChgMode; } SetTblChgMode(TblChgMode eMode)315 void SetTblChgMode( TblChgMode eMode ) { eTblChgMode = eMode; } 316 317 sal_Bool SetColWidth( SwTableBox& rAktBox, sal_uInt16 eType, 318 SwTwips nAbsDiff, SwTwips nRelDiff, SwUndo** ppUndo ); 319 sal_Bool SetRowHeight( SwTableBox& rAktBox, sal_uInt16 eType, 320 SwTwips nAbsDiff, SwTwips nRelDiff, SwUndo** ppUndo ); 321 void RegisterToFormat( SwFmt& rFmt ); 322 #ifdef DBG_UTIL 323 void CheckConsistency() const; 324 #endif 325 }; 326 327 class SW_DLLPUBLIC SwTableLine: public SwClient // Client vom FrmFmt 328 { 329 SwTableBoxes aBoxes; 330 SwTableBox *pUpper; 331 332 public: 333 TYPEINFO(); 334 SwTableLine()335 SwTableLine() : pUpper(0) {} 336 337 SwTableLine( SwTableLineFmt*, sal_uInt16 nBoxes, SwTableBox *pUp ); 338 virtual ~SwTableLine(); 339 GetTabBoxes()340 SwTableBoxes &GetTabBoxes() { return aBoxes; } GetTabBoxes() const341 const SwTableBoxes &GetTabBoxes() const { return aBoxes; } 342 GetUpper()343 SwTableBox *GetUpper() { return pUpper; } GetUpper() const344 const SwTableBox *GetUpper() const { return pUpper; } SetUpper(SwTableBox * pNew)345 void SetUpper( SwTableBox *pNew ) { pUpper = pNew; } 346 347 GetFrmFmt()348 SwFrmFmt* GetFrmFmt() { return (SwFrmFmt*)GetRegisteredIn(); } GetFrmFmt() const349 SwFrmFmt* GetFrmFmt() const { return (SwFrmFmt*)GetRegisteredIn(); } 350 351 //Macht ein eingenes FrmFmt wenn noch mehr Lines von ihm abhaengen. 352 SwFrmFmt* ClaimFrmFmt(); 353 void ChgFrmFmt( SwTableLineFmt* pNewFmt ); 354 355 // suche nach der naechsten/vorherigen Box mit Inhalt 356 SwTableBox* FindNextBox( const SwTable&, const SwTableBox* =0, 357 sal_Bool bOvrTblLns=sal_True ) const; 358 SwTableBox* FindPreviousBox( const SwTable&, const SwTableBox* =0, 359 sal_Bool bOvrTblLns=sal_True ) const; 360 361 SwTwips GetTableLineHeight( bool& bLayoutAvailable ) const; 362 363 bool hasSoftPageBreak() const; 364 void RegisterToFormat( SwFmt& rFmt ); 365 }; 366 367 class SW_DLLPUBLIC SwTableBox: public SwClient //Client vom FrmFmt 368 { 369 friend class SwNodes; // um den Index umzusetzen ! 370 friend void DelBoxNode(SwTableSortBoxes&); // um den StartNode* zu loeschen ! 371 friend class SwXMLTableContext; 372 373 //nicht (mehr) implementiert. 374 SwTableBox( const SwTableBox & ); 375 SwTableBox &operator=( const SwTableBox &); //gibts nicht. 376 377 SwTableLines aLines; 378 const SwStartNode * pSttNd; 379 SwTableLine *pUpper; 380 SwTableBox_Impl* pImpl; 381 382 // falls das Format schon Formeln/Values enthaelt, muss ein neues 383 // fuer die neue Box erzeugt werden. 384 SwTableBoxFmt* CheckBoxFmt( SwTableBoxFmt* ); 385 386 public: 387 TYPEINFO(); 388 SwTableBox()389 SwTableBox() : pSttNd(0), pUpper(0), pImpl(0) {} 390 391 SwTableBox( SwTableBoxFmt*, sal_uInt16 nLines, SwTableLine *pUp = 0 ); 392 SwTableBox( SwTableBoxFmt*, const SwStartNode&, SwTableLine *pUp = 0 ); 393 SwTableBox( SwTableBoxFmt*, const SwNodeIndex&, SwTableLine *pUp = 0 ); 394 virtual ~SwTableBox(); 395 GetTabLines()396 SwTableLines &GetTabLines() { return aLines; } GetTabLines() const397 const SwTableLines &GetTabLines() const { return aLines; } 398 GetUpper()399 SwTableLine *GetUpper() { return pUpper; } GetUpper() const400 const SwTableLine *GetUpper() const { return pUpper; } SetUpper(SwTableLine * pNew)401 void SetUpper( SwTableLine *pNew ) { pUpper = pNew; } 402 GetFrmFmt()403 SwFrmFmt* GetFrmFmt() { return (SwFrmFmt*)GetRegisteredIn(); } GetFrmFmt() const404 SwFrmFmt* GetFrmFmt() const { return (SwFrmFmt*)GetRegisteredIn(); } 405 406 //Macht ein eingenes FrmFmt wenn noch mehr Boxen von ihm abhaengen. 407 SwFrmFmt* ClaimFrmFmt(); 408 void ChgFrmFmt( SwTableBoxFmt *pNewFmt ); 409 GetSttNd() const410 const SwStartNode *GetSttNd() const { return pSttNd; } GetSttIdx() const411 sal_uLong GetSttIdx() const 412 #ifndef DBG_UTIL 413 { return pSttNd ? pSttNd->GetIndex() : 0; } 414 #else 415 ; 416 #endif 417 418 // suche nach der naechsten/vorherigen Box mit Inhalt 419 SwTableBox* FindNextBox( const SwTable&, const SwTableBox* =0, 420 sal_Bool bOvrTblLns=sal_True ) const; 421 SwTableBox* FindPreviousBox( const SwTable&, const SwTableBox* =0, 422 sal_Bool bOvrTblLns=sal_True ) const; 423 // gebe den Namen dieser Box zurueck. Dieser wird dynamisch bestimmt 424 // und ergibt sich aus der Position in den Lines/Boxen/Tabelle 425 String GetName() const; 426 // gebe den "Wert" der Box zurueck (fuers rechnen in der Tabelle) 427 double GetValue( SwTblCalcPara& rPara ) const; 428 429 sal_Bool IsInHeadline( const SwTable* pTbl = 0 ) const; 430 431 // enthaelt die Box Inhalt, der als Nummer formatiert werden kann? 432 sal_Bool HasNumCntnt( double& rNum, sal_uInt32& rFmtIndex, 433 sal_Bool& rIsEmptyTxtNd ) const; 434 sal_uLong IsValidNumTxtNd( sal_Bool bCheckAttr = sal_True ) const; 435 // teste ob der BoxInhalt mit der Nummer uebereinstimmt, wenn eine 436 // Tabellenformel gesetzt ist. (fuers Redo des Change vom NumFormat!) 437 sal_Bool IsNumberChanged() const; 438 439 // ist das eine FormelBox oder eine Box mit numerischen Inhalt (AutoSum) 440 // Was es ist, besagt der ReturnWert - die WhichId des Attributes 441 // Leere Boxen haben den ReturnWert USHRT_MAX !! 442 sal_uInt16 IsFormulaOrValueBox() const; 443 444 // Loading of a document requires an actualisation of cells with values 445 void ActualiseValueBox(); 446 447 DECL_FIXEDMEMPOOL_NEWDEL(SwTableBox) 448 449 // zugriff auf interne Daten - z.Z. benutzt fuer den NumFormatter 450 inline const Color* GetSaveUserColor() const; 451 inline const Color* GetSaveNumFmtColor() const; 452 inline void SetSaveUserColor(const Color* p ); 453 inline void SetSaveNumFmtColor( const Color* p ); 454 455 long getRowSpan() const; 456 void setRowSpan( long nNewRowSpan ); 457 bool getDummyFlag() const; 458 void setDummyFlag( bool bDummy ); 459 460 SwTableBox& FindStartOfRowSpan( const SwTable&, sal_uInt16 nMaxStep = USHRT_MAX ); FindStartOfRowSpan(const SwTable & rTable,sal_uInt16 nMaxStep=USHRT_MAX) const461 const SwTableBox& FindStartOfRowSpan( const SwTable& rTable, 462 sal_uInt16 nMaxStep = USHRT_MAX ) const 463 { return const_cast<SwTableBox*>(this)->FindStartOfRowSpan( rTable, nMaxStep ); } 464 465 SwTableBox& FindEndOfRowSpan( const SwTable&, sal_uInt16 nMaxStep = USHRT_MAX ); FindEndOfRowSpan(const SwTable & rTable,sal_uInt16 nMaxStep=USHRT_MAX) const466 const SwTableBox& FindEndOfRowSpan( const SwTable& rTable, 467 sal_uInt16 nMaxStep = USHRT_MAX ) const 468 { return const_cast<SwTableBox*>(this)->FindEndOfRowSpan( rTable, nMaxStep ); } 469 void RegisterToFormat( SwFmt& rFmt ) ; 470 void ForgetFrmFmt(); 471 }; 472 473 class SwCellFrm; 474 class SW_DLLPUBLIC SwTableCellInfo : public ::boost::noncopyable 475 { 476 struct Impl; 477 ::std::auto_ptr<Impl> m_pImpl; 478 479 const SwCellFrm * getCellFrm() const ; 480 481 public: 482 SwTableCellInfo(const SwTable * pTable); 483 ~SwTableCellInfo(); 484 485 bool getNext(); 486 SwRect getRect() const; 487 const SwTableBox * getTableBox() const; 488 }; 489 490 #endif //_SWTABLE_HXX 491