[Libreoffice-commits] core.git: sw/inc sw/source

Bjoern Michaelsen (via logerrit) logerrit at kemper.freedesktop.org
Sat Nov 21 20:50:44 UTC 2020


 sw/inc/frmfmt.hxx                |    2 +
 sw/source/core/layout/atrfrm.cxx |   13 +++++++
 sw/source/core/undo/untbl.cxx    |   71 ++++++++++++++++++---------------------
 3 files changed, 48 insertions(+), 38 deletions(-)

New commits:
commit cfc04e5fc3ab6c5ee98af04805f3840ba3f3fa67
Author:     Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>
AuthorDate: Sat Nov 21 15:48:41 2020 +0100
Commit:     Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>
CommitDate: Sat Nov 21 21:50:01 2020 +0100

    SaveTable: Replace SwClientNotifyCall
    
    Change-Id: I0e961844836d60e96bcda178612fc0372a55cef1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106319
    Tested-by: Jenkins
    Reviewed-by: Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>

diff --git a/sw/inc/frmfmt.hxx b/sw/inc/frmfmt.hxx
index d739925f81f4..0fb32c34d190 100644
--- a/sw/inc/frmfmt.hxx
+++ b/sw/inc/frmfmt.hxx
@@ -37,6 +37,7 @@ class IMapObject;
 class SwRect;
 class SdrObject;
 class SwRootFrame;
+class SwTableBox;
 
 namespace sw
 {
@@ -178,6 +179,7 @@ public:
     void dumpAsXml(xmlTextWriterPtr pWriter) const;
 
     virtual void SetName( const OUString& rNewName, bool bBroadcast=false ) override;
+    void MoveTableBox(SwTableBox& rTableBox, const SwFrameFormat* pOldFormat);
 };
 
 // The FlyFrame-Format
diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx
index e3ee7fa334b8..84076a24ced6 100644
--- a/sw/source/core/layout/atrfrm.cxx
+++ b/sw/source/core/layout/atrfrm.cxx
@@ -92,6 +92,7 @@
 #include <svl/itemiter.hxx>
 #include <wrtsh.hxx>
 #include <txtfld.hxx>
+#include <cellatr.hxx>
 
 using namespace ::com::sun::star;
 
@@ -3560,6 +3561,18 @@ drawinglayer::attribute::SdrAllFillAttributesHelperPtr SwFrameFormat::getSdrAllF
     return maFillAttributes;
 }
 
+void SwFrameFormat::MoveTableBox(SwTableBox& rTableBox, const SwFrameFormat* pOldFormat)
+{
+    Add(&rTableBox);
+    if(!pOldFormat)
+        return;
+    const auto& rOld = pOldFormat->GetFormatAttr(RES_BOXATR_FORMAT);
+    const auto& rNew = GetFormatAttr(RES_BOXATR_FORMAT);
+    if(rOld != rNew)
+        SwClientNotify(*this, sw::LegacyModifyHint(&rOld, &rNew));
+}
+
+
 namespace sw {
 
 bool IsFlyFrameFormatInHeader(const SwFrameFormat& rFormat)
diff --git a/sw/source/core/undo/untbl.cxx b/sw/source/core/undo/untbl.cxx
index f46961cfedca..a07d8cb7df69 100644
--- a/sw/source/core/undo/untbl.cxx
+++ b/sw/source/core/undo/untbl.cxx
@@ -95,6 +95,12 @@ namespace {
 class SaveBox;
 class SaveLine;
 
+void KillEmptyFrameFormat(SwFrameFormat& rFormat)
+{
+    if(!rFormat.HasWriterListeners())
+        delete &rFormat;
+};
+
 }
 
 class SaveTable
@@ -113,14 +119,15 @@ class SaveTable
 
     SaveTable(const SaveTable&) = delete;
     SaveTable& operator=(const SaveTable&) = delete;
+    SwFrameFormat& CreateNewFormat(SwFrameFormat& rFormat, sal_uInt16 nFormatPos);
 
 public:
     SaveTable( const SwTable& rTable, sal_uInt16 nLnCnt = USHRT_MAX,
                 bool bSaveFormula = true );
 
     sal_uInt16 AddFormat( SwFrameFormat* pFormat, bool bIsLine );
-    void NewFrameFormat( const SwTableLine* , const SwTableBox*, sal_uInt16 nFormatPos,
-                    SwFrameFormat* pOldFormat );
+    void NewFrameFormatForLine(const SwTableLine&, sal_uInt16 nFormatPos, SwFrameFormat* pOldFormat);
+    void NewFrameFormatForBox(const SwTableBox&, sal_uInt16 nFormatPos, SwFrameFormat* pOldFormat);
 
     void RestoreAttr( SwTable& rTable, bool bModifyBox = false );
     void SaveContentAttrs( SwDoc* pDoc );
@@ -1072,43 +1079,31 @@ void SaveTable::CreateNew( SwTable& rTable, bool bCreateFrames,
     }
 }
 
-void SaveTable::NewFrameFormat( const SwTableLine* pTableLn, const SwTableBox* pTableBx,
-                            sal_uInt16 nFormatPos, SwFrameFormat* pOldFormat )
+SwFrameFormat& SaveTable::CreateNewFormat(SwFrameFormat& rFormat, sal_uInt16 nFormatPos)
 {
-    SwDoc* pDoc = pOldFormat->GetDoc();
-
-    SwFrameFormat* pFormat = m_aFrameFormats[ nFormatPos ];
-    if( !pFormat )
-    {
-        if( pTableLn )
-            pFormat = pDoc->MakeTableLineFormat();
-        else
-            pFormat = pDoc->MakeTableBoxFormat();
-        pFormat->SetFormatAttr(*m_aSets[nFormatPos]);
-        m_aFrameFormats[nFormatPos] = pFormat;
-    }
-
-    // first re-assign Frames
-    if(pTableLn)
-        pOldFormat->CallSwClientNotify(sw::MoveTableLineHint(*pFormat, *pTableLn));
-    else
-        pOldFormat->CallSwClientNotify(sw::MoveTableBoxHint(*pFormat, *pTableBx));
-    // than re-assign myself
-    if ( pTableLn )
-        const_cast<SwTableLine*>(pTableLn)->RegisterToFormat( *pFormat );
-    else if ( pTableBx )
-        const_cast<SwTableBox*>(pTableBx)->RegisterToFormat( *pFormat );
+    rFormat.SetFormatAttr(*m_aSets[nFormatPos]);
+    m_aFrameFormats[nFormatPos] = &rFormat;
+    return rFormat;
+}
 
-    if (m_bModifyBox && !pTableLn)
-    {
-        const SfxPoolItem& rOld = pOldFormat->GetFormatAttr( RES_BOXATR_FORMAT ),
-                         & rNew = pFormat->GetFormatAttr( RES_BOXATR_FORMAT );
-        if( rOld != rNew )
-            pFormat->SwClientNotifyCall(*pFormat, sw::LegacyModifyHint(&rOld, &rNew));
-    }
+void SaveTable::NewFrameFormatForLine(const SwTableLine& rTableLn, sal_uInt16 nFormatPos, SwFrameFormat* pOldFormat)
+{
+    SwFrameFormat* pFormat = m_aFrameFormats[nFormatPos];
+    if(!pFormat)
+        pFormat = &CreateNewFormat(*pOldFormat->GetDoc()->MakeTableLineFormat(), nFormatPos);
+    pOldFormat->CallSwClientNotify(sw::MoveTableLineHint(*pFormat, rTableLn));
+    pFormat->Add(const_cast<SwTableLine*>(&rTableLn));
+    KillEmptyFrameFormat(*pOldFormat);
+}
 
-    if( !pOldFormat->HasWriterListeners() )
-        delete pOldFormat;
+void SaveTable::NewFrameFormatForBox(const SwTableBox& rTableBx, sal_uInt16 nFormatPos, SwFrameFormat* pOldFormat)
+{
+    SwFrameFormat* pFormat = m_aFrameFormats[nFormatPos];
+    if(!pFormat)
+        pFormat = &CreateNewFormat(*pOldFormat->GetDoc()->MakeTableBoxFormat(), nFormatPos);
+    pOldFormat->CallSwClientNotify(sw::MoveTableBoxHint(*pFormat, rTableBx));
+    pFormat->MoveTableBox(*const_cast<SwTableBox*>(&rTableBx), m_bModifyBox ? pOldFormat : nullptr);
+    KillEmptyFrameFormat(*pOldFormat);
 }
 
 SaveLine::SaveLine( SaveLine* pPrev, const SwTableLine& rLine, SaveTable& rSTable )
@@ -1133,7 +1128,7 @@ SaveLine::~SaveLine()
 
 void SaveLine::RestoreAttr( SwTableLine& rLine, SaveTable& rSTable )
 {
-    rSTable.NewFrameFormat( &rLine, nullptr, nItemSet, rLine.GetFrameFormat() );
+    rSTable.NewFrameFormatForLine( rLine, nItemSet, rLine.GetFrameFormat() );
 
     SaveBox* pBx = pBox;
     for( size_t n = 0; n < rLine.GetTabBoxes().size(); ++n, pBx = pBx->pNext )
@@ -1210,7 +1205,7 @@ SaveBox::~SaveBox()
 
 void SaveBox::RestoreAttr( SwTableBox& rBox, SaveTable& rSTable )
 {
-    rSTable.NewFrameFormat( nullptr, &rBox, nItemSet, rBox.GetFrameFormat() );
+    rSTable.NewFrameFormatForBox( rBox, nItemSet, rBox.GetFrameFormat() );
 
     if( ULONG_MAX == nSttNode )     // no EndBox
     {


More information about the Libreoffice-commits mailing list