diff options
author | Michael Stahl <mstahl@redhat.com> | 2016-05-30 23:01:04 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2016-05-30 23:20:24 +0200 |
commit | 7b042d2865c5bb2c2dde1dd47de124bc0df61ae8 (patch) | |
tree | b409bf7c5e0ffcc97667bbfd67f6012c6b4475f0 /sw | |
parent | ee8c883d8d65f77ec0dbd27948cbc49f30986cc6 (diff) |
tdf#98226: fix undo of table AutoFormat
The new call to SwTable::SetTableStyleName() was not recorded in
SwUndoTableAutoFormat and hence persisted even after Undo.
(regression from 73f4a06c0bce51c7c8b9ae9adfdc7ffac27d06b4)
Change-Id: Ia7f769dafa62f02ff8e4b0596b48266190c7a69b
Diffstat (limited to 'sw')
-rw-r--r-- | sw/inc/doc.hxx | 2 | ||||
-rw-r--r-- | sw/inc/fesh.hxx | 3 | ||||
-rw-r--r-- | sw/source/core/docnode/ndtbl.cxx | 7 | ||||
-rw-r--r-- | sw/source/core/frmedt/fetab.cxx | 13 | ||||
-rw-r--r-- | sw/source/core/inc/UndoTable.hxx | 1 | ||||
-rw-r--r-- | sw/source/core/undo/untbl.cxx | 13 |
6 files changed, 28 insertions, 11 deletions
diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx index afed50ad5089..e9b3be56b8dc 100644 --- a/sw/inc/doc.hxx +++ b/sw/inc/doc.hxx @@ -1246,7 +1246,7 @@ public: /// AutoFormat for table/table selection. /// @param bResetDirect Reset direct formatting that might be applied to the cells. - bool SetTableAutoFormat(const SwSelBoxes& rBoxes, const SwTableAutoFormat& rNew, bool bResetDirect = false); + bool SetTableAutoFormat(const SwSelBoxes& rBoxes, const SwTableAutoFormat& rNew, bool bResetDirect = false, bool isSetStyleName = false); // Query attributes. bool GetTableAutoFormat( const SwSelBoxes& rBoxes, SwTableAutoFormat& rGet ); diff --git a/sw/inc/fesh.hxx b/sw/inc/fesh.hxx index edb6ff5d01ae..c66cb9a7da42 100644 --- a/sw/inc/fesh.hxx +++ b/sw/inc/fesh.hxx @@ -727,7 +727,8 @@ public: /// Update the direct formatting according to the current table style. /// @param pTableNode Table node to update. When nullptr, current cursor position is used. /// @param bResetDirect Reset direct formatting that might be applied to the cells. - bool UpdateTableStyleFormatting(SwTableNode *pTableNode = nullptr, bool bResetDirect = false); + /// @param pStyleName new style to apply + bool UpdateTableStyleFormatting(SwTableNode *pTableNode = nullptr, bool bResetDirect = false, OUString const* pStyleName = nullptr); bool GetTableAutoFormat( SwTableAutoFormat& rGet ); diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx index 2b92de276c45..01752deb6de6 100644 --- a/sw/source/core/docnode/ndtbl.cxx +++ b/sw/source/core/docnode/ndtbl.cxx @@ -3742,7 +3742,7 @@ static bool lcl_SetAFormatBox(FndBox_ & rBox, SetAFormatTabPara *pSetPara, bool return true; } -bool SwDoc::SetTableAutoFormat(const SwSelBoxes& rBoxes, const SwTableAutoFormat& rNew, bool bResetDirect) +bool SwDoc::SetTableAutoFormat(const SwSelBoxes& rBoxes, const SwTableAutoFormat& rNew, bool bResetDirect, bool const isSetStyleName) { OSL_ENSURE( !rBoxes.empty(), "No valid Box list" ); SwTableNode* pTableNd = const_cast<SwTableNode*>(rBoxes[0]->GetSttNd()->FindTableNode()); @@ -3781,6 +3781,11 @@ bool SwDoc::SetTableAutoFormat(const SwSelBoxes& rBoxes, const SwTableAutoFormat GetIDocumentUndoRedo().DoUndo(false); } + if (isSetStyleName) + { // tdf#98226 do this here where undo can record it + pTableNd->GetTable().SetTableStyleName(rNew.GetName()); + } + rNew.RestoreTableProperties(table); SetAFormatTabPara aPara( rNew ); diff --git a/sw/source/core/frmedt/fetab.cxx b/sw/source/core/frmedt/fetab.cxx index d0fd94d7282b..fc6108bb6ad9 100644 --- a/sw/source/core/frmedt/fetab.cxx +++ b/sw/source/core/frmedt/fetab.cxx @@ -1186,11 +1186,11 @@ bool SwFEShell::SetTableStyle(const SwTableAutoFormat& rStyle) return false; // set the name & update - pTableNode->GetTable().SetTableStyleName(rStyle.GetName()); - return UpdateTableStyleFormatting(pTableNode); + return UpdateTableStyleFormatting(pTableNode, false, &rStyle.GetName()); } -bool SwFEShell::UpdateTableStyleFormatting(SwTableNode *pTableNode, bool bResetDirect) +bool SwFEShell::UpdateTableStyleFormatting(SwTableNode *pTableNode, + bool bResetDirect, OUString const*const pStyleName) { if (!pTableNode) { @@ -1199,7 +1199,9 @@ bool SwFEShell::UpdateTableStyleFormatting(SwTableNode *pTableNode, bool bResetD return false; } - OUString aTableStyleName(pTableNode->GetTable().GetTableStyleName()); + OUString const aTableStyleName((pStyleName) + ? *pStyleName + : pTableNode->GetTable().GetTableStyleName()); SwTableAutoFormat* pTableStyle = GetDoc()->GetTableStyles().FindAutoFormat(aTableStyleName); if (!pTableStyle) return false; @@ -1227,7 +1229,8 @@ bool SwFEShell::UpdateTableStyleFormatting(SwTableNode *pTableNode, bool bResetD { SET_CURR_SHELL( this ); StartAllAction(); - bRet = GetDoc()->SetTableAutoFormat(aBoxes, *pTableStyle, bResetDirect); + bRet = GetDoc()->SetTableAutoFormat( + aBoxes, *pTableStyle, bResetDirect, pStyleName != nullptr); DELETEZ( pLastCols ); DELETEZ( pLastRows ); EndAllActionAndCall(); diff --git a/sw/source/core/inc/UndoTable.hxx b/sw/source/core/inc/UndoTable.hxx index 427e4896dafd..7266ca92168e 100644 --- a/sw/source/core/inc/UndoTable.hxx +++ b/sw/source/core/inc/UndoTable.hxx @@ -142,6 +142,7 @@ class SwUndoTableNumFormat; class SwUndoTableAutoFormat : public SwUndo { + OUString m_TableStyleName; sal_uLong nSttNode; SaveTable* pSaveTable; std::vector< std::shared_ptr<SwUndoTableNumFormat> > m_Undos; diff --git a/sw/source/core/undo/untbl.cxx b/sw/source/core/undo/untbl.cxx index c6c1e695c002..e270b8c4cd42 100644 --- a/sw/source/core/undo/untbl.cxx +++ b/sw/source/core/undo/untbl.cxx @@ -1409,9 +1409,10 @@ void SwUndoAttrTable::RedoImpl(::sw::UndoRedoContext & rContext) // UndoObject for AutoFormat on Table SwUndoTableAutoFormat::SwUndoTableAutoFormat( const SwTableNode& rTableNd, const SwTableAutoFormat& rAFormat ) - : SwUndo( UNDO_TABLE_AUTOFMT ), - nSttNode( rTableNd.GetIndex() ), - bSaveContentAttr( false ) + : SwUndo( UNDO_TABLE_AUTOFMT ) + , m_TableStyleName(rTableNd.GetTable().GetTableStyleName()) + , nSttNode( rTableNd.GetIndex() ) + , bSaveContentAttr( false ) , m_nRepeatHeading(rTableNd.GetTable().GetRowsToRepeat()) { pSaveTable = new SaveTable( rTableNd.GetTable() ); @@ -1444,6 +1445,12 @@ SwUndoTableAutoFormat::UndoRedo(bool const bUndo, ::sw::UndoRedoContext & rConte OSL_ENSURE( pTableNd, "no TableNode" ); SwTable& table = pTableNd->GetTable(); + if (table.GetTableStyleName() != m_TableStyleName) + { + OUString const temp(table.GetTableStyleName()); + table.SetTableStyleName(m_TableStyleName); + m_TableStyleName = temp; + } SaveTable* pOrig = new SaveTable( table ); // than go also over the ContentNodes of the EndBoxes and collect // all paragraph attributes |