sw/inc/swtblfmt.hxx | 9 ++++++ sw/inc/tblafmt.hxx | 2 - sw/source/core/doc/swtblfmt.cxx | 34 ++++++++++++++++++++-- sw/source/core/docnode/ndtbl.cxx | 58 +++++++++++++++++++++++++++------------ 4 files changed, 81 insertions(+), 22 deletions(-)
New commits: commit b60730b1768f19cdddf738d23712786853e839c6 Author: Alex Ivan <alexni...@yahoo.com> Date: Mon Jul 8 20:54:39 2013 +0300 Use SwTableFmt in InsertTable method Partially replaced the role of SwTableAutoFormat in insertTable method with SwTableFmt. Change-Id: Icfe402d711bda17acd1aa8c2a5ac819a438c7d74 diff --git a/sw/inc/swtblfmt.hxx b/sw/inc/swtblfmt.hxx index d49396a..03c3974 100644 --- a/sw/inc/swtblfmt.hxx +++ b/sw/inc/swtblfmt.hxx @@ -40,9 +40,12 @@ #include <editeng/formatbreakitem.hxx> #include <editeng/keepitem.hxx> #include <editeng/lineitem.hxx> +#include <editeng/lrspitem.hxx> #include <editeng/frmdiritem.hxx> #include <editeng/shaditem.hxx> #include <editsh.hxx> +#include <fmtfordr.hxx> +#include <fmtfsize.hxx> #include <fmtpdsc.hxx> #include <fmtlsplt.hxx> #include <fmtornt.hxx> @@ -114,6 +117,10 @@ public: void SetRowSplit( const sal_Bool& rNew ); void SetRepeatHeading( const sal_uInt16& rNew ); void SetShadow( const SvxShadowItem& rNew ); + void SetFrameDir( const SvxFrameDirectionItem& rNew ); + void SetHoriOrient( const SwFmtHoriOrient& rNew ); + void SetLRSpace( const SvxLRSpaceItem& rNew ); + void SetFmtFrmSize( const SwFmtFrmSize& rNew ); const SvxFmtKeepItem& GetKeepWithNextPara() const; sal_Bool GetLayoutSplit() const; @@ -164,6 +171,8 @@ public: SwTableBoxFmt* GetOddBoxFmt() { return m_pOddBoxFmt.get(); } SwTableBoxFmt* GetEvenBoxFmt() { return m_pEvnBoxFmt.get(); } + void SetFillOrder( const SwFmtFillOrder& rNew ); + TYPEINFO(); // Already in base class Content. DECL_FIXEDMEMPOOL_NEWDEL(SwTableLineFmt) diff --git a/sw/inc/tblafmt.hxx b/sw/inc/tblafmt.hxx index a1e59b3..b095765 100644 --- a/sw/inc/tblafmt.hxx +++ b/sw/inc/tblafmt.hxx @@ -128,7 +128,7 @@ public: SwTableAutoFmt& operator=( const SwTableAutoFmt& rNew ); - SwTableFmt* GetTableStyle() { return m_pTableStyle; } + SwTableFmt* GetTableStyle() const { return m_pTableStyle; } void SetBoxFmt( const SwTableBoxFmt& rNew, sal_uInt8 nPos ); SwTableBoxFmt* GetBoxFmt( sal_uInt8 nPos ) const; diff --git a/sw/source/core/doc/swtblfmt.cxx b/sw/source/core/doc/swtblfmt.cxx index 5e348e7..393218c 100644 --- a/sw/source/core/doc/swtblfmt.cxx +++ b/sw/source/core/doc/swtblfmt.cxx @@ -117,9 +117,9 @@ void SwTableFmt::SetBoxFmt( const SwTableBoxFmt& rNew, sal_uInt8 nPos ) case 0: pLine = m_pFstLineFmt.get(); break; case 1: - pLine = m_pOddLineFmt.get(); break; - case 2: pLine = m_pEvnLineFmt.get(); break; + case 2: + pLine = m_pOddLineFmt.get(); break; case 3: pLine = m_pLstLineFmt.get(); break; // TODO Extend for columns @@ -130,9 +130,9 @@ void SwTableFmt::SetBoxFmt( const SwTableBoxFmt& rNew, sal_uInt8 nPos ) case 0: pLine->SetFirstBoxFmt( new SwTableBoxFmt( rNew ) ); break; case 1: - pLine->SetOddBoxFmt( new SwTableBoxFmt( rNew ) ); break; - case 2: pLine->SetEvenBoxFmt( new SwTableBoxFmt( rNew ) ); break; + case 2: + pLine->SetOddBoxFmt( new SwTableBoxFmt( rNew ) ); break; case 3: pLine->SetLastBoxFmt( new SwTableBoxFmt( rNew ) ); break; } @@ -216,6 +216,27 @@ void SwTableFmt::SetShadow( const SvxShadowItem& rNew ) SetFmtAttr( rNew ); } +void SwTableFmt::SetFrameDir( const SvxFrameDirectionItem& rNew ) +{ + SetFmtAttr( rNew ); +} + + +void SwTableFmt::SetHoriOrient( const SwFmtHoriOrient& rNew ) +{ + SetFmtAttr( rNew ); +} + +void SwTableFmt::SetLRSpace( const SvxLRSpaceItem& rNew ) +{ + SetFmtAttr( rNew ); +} + +void SwTableFmt::SetFmtFrmSize( const SwFmtFrmSize& rNew ) +{ + SetFmtAttr( rNew ); +} + const SvxFmtKeepItem& SwTableFmt::GetKeepWithNextPara() const { return SwFmt::GetKeep(); @@ -342,6 +363,11 @@ SwTableLineFmt& SwTableLineFmt::operator=( const SwTableLineFmt& rNew ) return *this; } +void SwTableLineFmt::SetFillOrder( const SwFmtFillOrder& rNew ) +{ + SetFmtAttr( rNew ); +} + SwTableBoxFmt::SwTableBoxFmt( SwAttrPool& rPool, const sal_Char* pFmtNm, SwFrmFmt *pDrvdFrm ) : SwFrmFmt( rPool, pFmtNm, pDrvdFrm, RES_FRMFMT, aTableBoxSetRange ) diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx index f8b224f..1f556c3 100644 --- a/sw/source/core/docnode/ndtbl.cxx +++ b/sw/source/core/docnode/ndtbl.cxx @@ -389,8 +389,11 @@ const SwTable* SwDoc::InsertTable( const SwInsertTableOptions& rInsTblOpts, bCalledFromShell ? &pCntntNd->GetSwAttrSet() : 0 ); // Create the Box/Line/Table construct - SwTableLineFmt* pLineFmt = MakeTableLineFmt(); - SwTableFmt* pTableFmt = MakeTblFrmFmt( aTblName, GetDfltFrmFmt() ); + SwTableFmt* pTableFmt; + if( pTAFmt ) + pTableFmt = pTAFmt->GetTableStyle(); + else + pTableFmt = MakeTblFrmFmt( aTblName, GetDfltFrmFmt() ); /* If the node to insert the table at is a context node and has a non-default FRAMEDIR propagate it to the table. */ @@ -402,14 +405,17 @@ const SwTable* SwDoc::InsertTable( const SwInsertTableOptions& rInsTblOpts, if (SFX_ITEM_SET == aNdSet.GetItemState( RES_FRAMEDIR, sal_True, &pItem ) && pItem != NULL) { - pTableFmt->SetFmtAttr( *pItem ); + pTableFmt->SetFrameDir( *static_cast<const SvxFrameDirectionItem *>( pItem ) ); } } // Set Orientation at the Table's Fmt - pTableFmt->SetFmtAttr( SwFmtHoriOrient( 0, eAdjust ) ); + pTableFmt->SetHoriOrient( SwFmtHoriOrient( 0, eAdjust ) ); // All lines use the left-to-right Fill-Order! - pLineFmt->SetFmtAttr( SwFmtFillOrder( ATT_LEFT_TO_RIGHT )); + pTableFmt->GetFirstLineFmt()->SetFillOrder( SwFmtFillOrder( ATT_LEFT_TO_RIGHT ) ); + pTableFmt->GetLastLineFmt()->SetFillOrder( SwFmtFillOrder( ATT_LEFT_TO_RIGHT ) ); + pTableFmt->GetOddLineFmt()->SetFillOrder( SwFmtFillOrder( ATT_LEFT_TO_RIGHT ) ); + pTableFmt->GetEvenLineFmt()->SetFillOrder( SwFmtFillOrder( ATT_LEFT_TO_RIGHT ) ); // Set USHRT_MAX as the Table's default SSize SwTwips nWidth = USHRT_MAX; @@ -421,7 +427,7 @@ const SwTable* SwDoc::InsertTable( const SwInsertTableOptions& rInsTblOpts, { sal_uInt16 nFrmWidth = nLastPos; nLastPos = (*pColArr)[ pColArr->size()-2 ]; - pTableFmt->SetFmtAttr( SvxLRSpaceItem( nSttPos, nFrmWidth - nLastPos, 0, 0, RES_LR_SPACE ) ); + pTableFmt->SetLRSpace( SvxLRSpaceItem( nSttPos, nFrmWidth - nLastPos, 0, 0, RES_LR_SPACE ) ); } nWidth = nLastPos - nSttPos; } @@ -430,9 +436,9 @@ const SwTable* SwDoc::InsertTable( const SwInsertTableOptions& rInsTblOpts, nWidth /= nCols; nWidth *= nCols; // to avoid rounding problems } - pTableFmt->SetFmtAttr( SwFmtFrmSize( ATT_VAR_SIZE, nWidth )); + pTableFmt->SetFmtFrmSize( SwFmtFrmSize( ATT_VAR_SIZE, nWidth )); if( !(rInsTblOpts.mnInsMode & tabopts::SPLIT_LAYOUT) ) - pTableFmt->SetFmtAttr( SwFmtLayoutSplit( sal_False )); + pTableFmt->SetLayoutSplit( sal_False ); // Move the hard PageDesc/PageBreak Attributes if needed SwCntntNode* pNextNd = GetNodes()[ pTblNd->EndOfSectionIndex()+1 ] @@ -444,14 +450,14 @@ const SwTable* SwDoc::InsertTable( const SwInsertTableOptions& rInsTblOpts, if( SFX_ITEM_SET == pNdSet->GetItemState( RES_PAGEDESC, sal_False, &pItem ) ) { - pTableFmt->SetFmtAttr( *pItem ); + pTableFmt->SetPageDesc( *static_cast<const SwFmtPageDesc *>( pItem ) ); pNextNd->ResetAttr( RES_PAGEDESC ); pNdSet = pNextNd->GetpSwAttrSet(); } if( pNdSet && SFX_ITEM_SET == pNdSet->GetItemState( RES_BREAK, sal_False, &pItem ) ) { - pTableFmt->SetFmtAttr( *pItem ); + pTableFmt->SetBreak( *static_cast<const SvxFmtBreakItem *>( pItem ) ); pNextNd->ResetAttr( RES_BREAK ); } } @@ -471,8 +477,7 @@ const SwTable* SwDoc::InsertTable( const SwInsertTableOptions& rInsTblOpts, } else { - const sal_uInt16 nBoxArrLen = pTAFmt ? 16 : 4; - aBoxFmtArr.resize( nBoxArrLen, NULL ); + aBoxFmtArr.resize( 4, NULL ); } SfxItemSet aCharSet( GetAttrPool(), RES_CHRATR_BEGIN, RES_PARATR_LIST_END-1 ); @@ -480,7 +485,29 @@ const SwTable* SwDoc::InsertTable( const SwInsertTableOptions& rInsTblOpts, SwTableLines& rLines = pNdTbl->GetTabLines(); for( sal_uInt16 n = 0; n < nRows; ++n ) { - SwTableLine* pLine = new SwTableLine( pLineFmt, nCols, 0 ); + SwTableLine* pLine; + sal_uInt8 nId; + if( !n ) + { + pLine = new SwTableLine( pTableFmt->GetFirstLineFmt(), nCols, 0 ); + nId = 0; + } + else if( n == nRows - 1 ) + { + pLine = new SwTableLine( pTableFmt->GetLastLineFmt(), nCols, 0 ); + nId = 12; + } + else if( n % 2 ) // considering the user starts counting at 1, not 0 + { + pLine = new SwTableLine( pTableFmt->GetEvenLineFmt(), nCols, 0 ); + nId = 4; + } + else + { + pLine = new SwTableLine( pTableFmt->GetOddLineFmt(), nCols, 0 ); + nId = 8; + } + rLines.insert( rLines.begin() + n, pLine ); SwTableBoxes& rBoxes = pLine->GetTabBoxes(); for( sal_uInt16 i = 0; i < nCols; ++i ) @@ -488,12 +515,9 @@ const SwTable* SwDoc::InsertTable( const SwInsertTableOptions& rInsTblOpts, SwTableBoxFmt *pBoxF; if( pTAFmt ) { - sal_uInt8 nId = static_cast<sal_uInt8>(!n ? 0 : (( n+1 == nRows ) - ? 12 : (4 * (1 + ((n-1) & 1 ))))); nId = nId + static_cast<sal_uInt8>( !i ? 0 : ( i+1 == nCols ? 3 : (1 + ((i-1) & 1)))); - pBoxF = ::lcl_CreateAFmtBoxFmt( *this, aBoxFmtArr, *pTAFmt, - nCols, nId ); + pBoxF = pTableFmt->GetBoxFmt( nId ); // Set the Paragraph/Character Attributes if needed if( pTAFmt->IsFont() || pTAFmt->IsJustify() ) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits