From 8cce20756857cc3c42a2f9393afe6886c4abc1ea Mon Sep 17 00:00:00 2001
From: Mike Kaganski <mike.kaganski@collabora.com>
Date: Sun, 17 Mar 2024 17:49:25 +0500
Subject: Move undo info creation logic into ScUndoConditionalFormat

So it is near the code that applies the undo data. This makes it easier
to synchronize the logic.

Change-Id: If3d41ae6b0afafc81e149756cb327f1fca6f2bb0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164943
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
---
 sc/source/ui/docshell/docfunc.cxx | 22 ++++++----------------
 sc/source/ui/inc/undoblk.hxx      |  8 +++++---
 sc/source/ui/undo/undoblk.cxx     | 18 +++++++++++++-----
 3 files changed, 24 insertions(+), 24 deletions(-)

(limited to 'sc')

diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx
index 153182419306..ec174d9c1248 100644
--- a/sc/source/ui/docshell/docfunc.cxx
+++ b/sc/source/ui/docshell/docfunc.cxx
@@ -5629,16 +5629,10 @@ void ScDocFunc::ReplaceConditionalFormat( sal_uLong nOldFormat, std::unique_ptr<
     if(rDoc.IsTabProtected(nTab))
         return;
 
-    bool bUndo = rDoc.IsUndoEnabled();
-    ScDocumentUniquePtr pUndoDoc;
     ScRange aCombinedRange = rRanges.Combine();
-    if(bUndo)
-    {
-        pUndoDoc.reset(new ScDocument(SCDOCMODE_UNDO));
-        pUndoDoc->InitUndo( rDoc, nTab, nTab );
-        if (const auto* pList = rDoc.GetCondFormList(nTab))
-            pUndoDoc->SetCondFormList(new ScConditionalFormatList(*pUndoDoc, *pList), nTab);
-    }
+    std::unique_ptr<ScUndoConditionalFormat> pUndo;
+    if (rDoc.IsUndoEnabled())
+        pUndo.reset(new ScUndoConditionalFormat(&rDocShell, nTab));
 
     std::unique_ptr<ScRange> pRepaintRange;
     if(nOldFormat)
@@ -5666,14 +5660,10 @@ void ScDocFunc::ReplaceConditionalFormat( sal_uLong nOldFormat, std::unique_ptr<
         rDoc.SetStreamValid(nTab, false);
     }
 
-    if(bUndo)
+    if (pUndo)
     {
-        ScDocumentUniquePtr pRedoDoc(new ScDocument(SCDOCMODE_UNDO));
-        pRedoDoc->InitUndo( rDoc, nTab, nTab );
-        if (const auto* pList = rDoc.GetCondFormList(nTab))
-            pRedoDoc->SetCondFormList(new ScConditionalFormatList(*pRedoDoc, *pList), nTab);
-        rDocShell.GetUndoManager()->AddUndoAction(
-                std::make_unique<ScUndoConditionalFormat>(&rDocShell, std::move(pUndoDoc), std::move(pRedoDoc), nTab));
+        pUndo->setRedoData();
+        rDocShell.GetUndoManager()->AddUndoAction(std::move(pUndo));
     }
 
     if(pRepaintRange)
diff --git a/sc/source/ui/inc/undoblk.hxx b/sc/source/ui/inc/undoblk.hxx
index d002b248d7ce..6a52ef059b0c 100644
--- a/sc/source/ui/inc/undoblk.hxx
+++ b/sc/source/ui/inc/undoblk.hxx
@@ -619,10 +619,11 @@ private:
 class ScUndoConditionalFormat : public ScSimpleUndo
 {
 public:
-    ScUndoConditionalFormat( ScDocShell* pNewDocShell,
-            ScDocumentUniquePtr pUndoDoc, ScDocumentUniquePtr pRedoDoc, SCTAB nTab);
+    ScUndoConditionalFormat( ScDocShell* pNewDocShell, SCTAB nTab);
     virtual         ~ScUndoConditionalFormat() override;
 
+    void setRedoData() { mpRedoDoc = createUndoRedoData(); }
+
     virtual void    Undo() override;
     virtual void    Redo() override;
     virtual void    Repeat(SfxRepeatTarget& rTarget) override;
@@ -631,10 +632,11 @@ public:
     virtual OUString GetComment() const override;
 
 private:
+    ScDocumentUniquePtr createUndoRedoData();
     void DoChange(ScDocument* pDoc);
+    SCTAB mnTab;
     ScDocumentUniquePtr mpUndoDoc;
     ScDocumentUniquePtr mpRedoDoc;
-    SCTAB mnTab;
 };
 
 class ScUndoConditionalFormatList : public ScSimpleUndo
diff --git a/sc/source/ui/undo/undoblk.cxx b/sc/source/ui/undo/undoblk.cxx
index f07cfd88c46b..33fe76b5baaa 100644
--- a/sc/source/ui/undo/undoblk.cxx
+++ b/sc/source/ui/undo/undoblk.cxx
@@ -1605,12 +1605,10 @@ bool ScUndoListNames::CanRepeat(SfxRepeatTarget& rTarget) const
     return dynamic_cast<const ScTabViewTarget*>( &rTarget) !=  nullptr;
 }
 
-ScUndoConditionalFormat::ScUndoConditionalFormat(ScDocShell* pNewDocShell,
-        ScDocumentUniquePtr pUndoDoc, ScDocumentUniquePtr pRedoDoc, SCTAB nTab):
+ScUndoConditionalFormat::ScUndoConditionalFormat(ScDocShell* pNewDocShell, SCTAB nTab):
     ScSimpleUndo( pNewDocShell ),
-    mpUndoDoc(std::move(pUndoDoc)),
-    mpRedoDoc(std::move(pRedoDoc)),
-    mnTab(nTab)
+    mnTab(nTab),
+    mpUndoDoc(createUndoRedoData())
 {
 }
 
@@ -1618,6 +1616,16 @@ ScUndoConditionalFormat::~ScUndoConditionalFormat()
 {
 }
 
+ScDocumentUniquePtr ScUndoConditionalFormat::createUndoRedoData()
+{
+    ScDocument& rDoc = pDocShell->GetDocument();
+    ScDocumentUniquePtr pUndoRedoDoc(new ScDocument(SCDOCMODE_UNDO));
+    pUndoRedoDoc->InitUndo(rDoc, mnTab, mnTab);
+    if (const auto* pList = rDoc.GetCondFormList(mnTab))
+        pUndoRedoDoc->SetCondFormList(new ScConditionalFormatList(*pUndoRedoDoc, *pList), mnTab);
+    return pUndoRedoDoc;
+}
+
 OUString ScUndoConditionalFormat::GetComment() const
 {
     return ScResId( STR_UNDO_CONDFORMAT );
-- 
cgit