sw/source/core/doc/swtblfmt.cxx | 2 +- sw/source/core/doc/tblafmt.cxx | 4 ++-- sw/source/core/inc/UndoTable.hxx | 3 ++- sw/source/core/undo/untbl.cxx | 38 ++++++++++++++++++++++++++++++++++---- 4 files changed, 39 insertions(+), 8 deletions(-)
New commits: commit bef91df4dc67cb0af0f57c323f1c8339dbf5a329 Author: Alex Ivan <[email protected]> Date: Mon Aug 12 20:59:41 2013 +0300 Fix undo resize table causing lose of table style _SaveTable class now memorizes the name of the table style applied to the table and it is reapplied after undoing. Not the most elegant solution, but given how the _Save* classes currently store data on the table, this solution avoids modifying too much and possibly breaking other things. Change-Id: I5c2afb0cdd5eb447f548249e9afa1dd6d648e3a9 diff --git a/sw/source/core/undo/untbl.cxx b/sw/source/core/undo/untbl.cxx index 6aca5e7..9a89ab1 100644 --- a/sw/source/core/undo/untbl.cxx +++ b/sw/source/core/undo/untbl.cxx @@ -116,6 +116,7 @@ class _SaveTable SfxItemSet aTblSet; _SaveLine* pLine; const SwTable* pSwTable; + String sSaveFmtName; SfxItemSets aSets; SwFrmFmts aFrmFmts; sal_uInt16 nLineCount; @@ -874,6 +875,11 @@ _SaveTable::_SaveTable( const SwTable& rTbl, sal_uInt16 nLnCnt, bool bSaveFml ) bModifyBox = false; bNewModel = rTbl.IsNewModel(); aTblSet.Put( rTbl.GetFrmFmt()->GetAttrSet() ); + + SwTableFmt* pSaveFmt = (SwTableFmt*)rTbl.GetTableFmt()->GetRegisteredIn(); + if( pSaveFmt ) + sSaveFmtName = pSaveFmt->GetName(); + pLine = new _SaveLine( 0, *rTbl.GetTabLines()[ 0 ], *this ); _SaveLine* pLn = pLine; @@ -931,6 +937,7 @@ void _SaveTable::RestoreAttr( SwTable& rTbl, bool bMdfyBox ) // first, get back attributes of TableFrmFormat SwFrmFmt* pFmt = rTbl.GetFrmFmt(); + SwDoc* pDoc = pFmt->GetDoc(); SfxItemSet& rFmtSet = (SfxItemSet&)pFmt->GetAttrSet(); rFmtSet.ClearItem(); rFmtSet.Put( aTblSet ); @@ -971,6 +978,14 @@ void _SaveTable::RestoreAttr( SwTable& rTbl, bool bMdfyBox ) pLn->RestoreAttr( *rTbl.GetTabLines()[ n ], *this ); } + if( !sSaveFmtName.Len() ) + SwTableFmt::RestoreTableProperties( NULL, rTbl ); + else + { + SwTableFmt* pStyle = pDoc->FindTblFmtByName( sSaveFmtName, sal_True ); + SwTableFmt::RestoreTableProperties( pStyle, rTbl ); + } + aFrmFmts.clear(); bModifyBox = false; } commit 6538a97573635fe9d8cfa595963d7d18394a25c6 Author: Alex Ivan <[email protected]> Date: Mon Aug 12 20:02:17 2013 +0300 Store table style in Undo by name Undo object no longer stores a pointer to the style, but rather the name of the respective table style. Change-Id: I1f6f196569d33353a9075489d136df9e5075d36b diff --git a/sw/source/core/doc/swtblfmt.cxx b/sw/source/core/doc/swtblfmt.cxx index 276c37a..965f3e8 100644 --- a/sw/source/core/doc/swtblfmt.cxx +++ b/sw/source/core/doc/swtblfmt.cxx @@ -250,7 +250,7 @@ void SwTableFmt::RestoreTableProperties( SwTableFmt* pSrcFmt, SwTable &rTable ) bRowSplit = pSrcFmt->GetRowSplit(); nRepeatHeading = pSrcFmt->GetRepeatHeading(); } - else + else if( pTableStyle ) pTableStyle->Remove( pHardFmt ); AssignFormatParents( pSrcFmt, rTable ); diff --git a/sw/source/core/doc/tblafmt.cxx b/sw/source/core/doc/tblafmt.cxx index 8881553..976aa0a 100644 --- a/sw/source/core/doc/tblafmt.cxx +++ b/sw/source/core/doc/tblafmt.cxx @@ -846,7 +846,7 @@ SwTableAutoFmt* SwTableAutoFmt::Load( SvStream& rStream, const SwAfVersions& rVe // ideal, the table styles are created with the document SwTableFmt* pStyle = pDoc->FindTblFmtByName(aName); if ( !pStyle ) - pStyle = pDoc->MakeTblFrmFmt(aName, NULL); + pStyle = pDoc->MakeTblFrmFmt( aName, pDoc->GetDfltFrmFmt() ); pRet = new SwTableAutoFmt( aName, pStyle ); pRet->nStrResId = nStrResId; @@ -967,7 +967,7 @@ SwTableAutoFmtTbl::SwTableAutoFmtTbl(SwDoc* pDoc) sNm = SwStyleNameMapper::GetUIName( RES_POOLCOLL_STANDARD, sNm ); SwTableFmt* pStyle = pDoc->FindTblFmtByName(sNm); if ( !pStyle ) - pStyle = pDoc->MakeTblFrmFmt(sNm, NULL); + pStyle = pDoc->MakeTblFrmFmt( sNm, pDoc->GetDfltFrmFmt() ); SwTableAutoFmt* pNewTableAutoFmt = new SwTableAutoFmt( sNm, pStyle ); SwTableBoxFmt* pNewBoxFmt = pDoc->MakeTableBoxFmt(); diff --git a/sw/source/core/inc/UndoTable.hxx b/sw/source/core/inc/UndoTable.hxx index 09bed01..4170c21 100644 --- a/sw/source/core/inc/UndoTable.hxx +++ b/sw/source/core/inc/UndoTable.hxx @@ -147,7 +147,8 @@ class SwUndoTblNumFmt; class SwUndoTblAutoFmt : public SwUndo { sal_uLong nSttNode; - SwTableFmt* pSaveFmt; + String sSaveFmtName; + //String sEmptyStr; sal_uInt16 m_nRepeatHeading; void UndoRedo(bool const bUndo, ::sw::UndoRedoContext & rContext); diff --git a/sw/source/core/undo/untbl.cxx b/sw/source/core/undo/untbl.cxx index 5ddb001..6aca5e7 100644 --- a/sw/source/core/undo/untbl.cxx +++ b/sw/source/core/undo/untbl.cxx @@ -1411,7 +1411,9 @@ SwUndoTblAutoFmt::SwUndoTblAutoFmt( const SwTableNode& rTblNd ) nSttNode( rTblNd.GetIndex() ), m_nRepeatHeading(rTblNd.GetTable().GetRowsToRepeat()) { - pSaveFmt = (SwTableFmt*)rTblNd.GetTable().GetTableFmt()->GetRegisteredIn(); + SwTableFmt* pSaveFmt = (SwTableFmt*)rTblNd.GetTable().GetTableFmt()->GetRegisteredIn(); + if( pSaveFmt ) + sSaveFmtName = pSaveFmt->GetName(); } void @@ -1422,13 +1424,26 @@ SwUndoTblAutoFmt::UndoRedo(bool const bUndo, ::sw::UndoRedoContext & rContext) OSL_ENSURE( pTblNd, "no TableNode" ); SwTable& table = pTblNd->GetTable(); - SwTableFmt* pOrig = (SwTableFmt*)table.GetTableFmt()->GetRegisteredIn(); + String sOrigFmtName; + SwTableFmt* pStyle; + SwTableFmt* pSaveFmt = (SwTableFmt*)pTblNd->GetTable().GetTableFmt()->GetRegisteredIn(); + if( pSaveFmt ) + sOrigFmtName = pSaveFmt->GetName(); + else + sOrigFmtName = UniString::EmptyString(); if( bUndo ) table.SetRowsToRepeat( m_nRepeatHeading ); - SwTableFmt::RestoreTableProperties( pSaveFmt, table ); - pSaveFmt = pOrig; + if( !sSaveFmtName.Len() ) + SwTableFmt::RestoreTableProperties( NULL, table ); + else + { + pStyle = rDoc.FindTblFmtByName( sSaveFmtName, sal_True ); + SwTableFmt::RestoreTableProperties( pStyle, table ); + } + + sSaveFmtName = sOrigFmtName; } void SwUndoTblAutoFmt::UndoImpl(::sw::UndoRedoContext & rContext) _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
