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

Bjoern Michaelsen (via logerrit) logerrit at kemper.freedesktop.org
Wed Dec 2 21:03:37 UTC 2020


 sw/inc/swtblfmt.hxx              |    2 
 sw/source/core/table/swtable.cxx |  339 +++++++++++++++++++--------------------
 2 files changed, 171 insertions(+), 170 deletions(-)

New commits:
commit e53584fd17c1024728c573cadce2e5ef6d6ae1fd
Author:     Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>
AuthorDate: Tue Dec 1 19:59:33 2020 +0100
Commit:     Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>
CommitDate: Wed Dec 2 22:02:51 2020 +0100

    SwTableBoxFormat: Modify no more
    
    Change-Id: I02775fa3ac4cdc01ed89e969449ec96427de30db
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107008
    Tested-by: Jenkins
    Reviewed-by: Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>

diff --git a/sw/inc/swtblfmt.hxx b/sw/inc/swtblfmt.hxx
index c1a114ea4066..14b200164b5d 100644
--- a/sw/inc/swtblfmt.hxx
+++ b/sw/inc/swtblfmt.hxx
@@ -55,7 +55,7 @@ class SAL_DLLPUBLIC_RTTI SwTableBoxFormat final : public SwFrameFormat
     {}
 
     // For recognition of changes (especially TableBoxAttribute).
-    virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNewValue ) override;
+    virtual void SwClientNotify(const SwModify&, const SfxHint&) override;
 
 public:
     virtual bool supportsFullDrawingLayerFillAttributeSet() const override;
diff --git a/sw/source/core/table/swtable.cxx b/sw/source/core/table/swtable.cxx
index 8864701cb59b..39fd910b599a 100644
--- a/sw/source/core/table/swtable.cxx
+++ b/sw/source/core/table/swtable.cxx
@@ -2155,215 +2155,216 @@ static void ChgNumToText( SwTableBox& rBox, sal_uLong nFormat )
 }
 
 // for detection of modifications (mainly TableBoxAttribute)
-void SwTableBoxFormat::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
+void SwTableBoxFormat::SwClientNotify(const SwModify& rMod, const SfxHint& rHint)
 {
-    if( !IsModifyLocked() && GetDoc() && !GetDoc()->IsInDtor())
+    auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
+    if(!pLegacy)
+        return;
+    if(IsModifyLocked() || !GetDoc() || GetDoc()->IsInDtor())
     {
-        const SwTableBoxNumFormat *pNewFormat = nullptr;
-        const SwTableBoxFormula *pNewFormula = nullptr;
-        const SwTableBoxValue *pNewVal = nullptr;
-        sal_uLong nOldFormat = getSwDefaultTextFormat();
+        SwFrameFormat::SwClientNotify(rMod, rHint);
+        return;
+    }
+    const SwTableBoxNumFormat* pNewFormat = nullptr;
+    const SwTableBoxFormula* pNewFormula = nullptr;
+    const SwTableBoxValue* pNewVal = nullptr;
+    sal_uLong nOldFormat = getSwDefaultTextFormat();
 
-        switch( pNew ? pNew->Which() : 0 )
+    switch(pLegacy->m_pNew ? pLegacy->m_pNew->Which() : 0)
+    {
+        case RES_ATTRSET_CHG:
         {
-            case RES_ATTRSET_CHG:
-            {
-                const SfxItemSet& rSet = *static_cast<const SwAttrSetChg*>(pNew)->GetChgSet();
-                if( SfxItemState::SET == rSet.GetItemState( RES_BOXATR_FORMAT,
-                                    false, reinterpret_cast<const SfxPoolItem**>(&pNewFormat) ) )
-                    nOldFormat = static_cast<const SwAttrSetChg*>(pOld)->
-                            GetChgSet()->Get( RES_BOXATR_FORMAT ).GetValue();
-                rSet.GetItemState( RES_BOXATR_FORMULA, false,
-                                    reinterpret_cast<const SfxPoolItem**>(&pNewFormula) );
-                rSet.GetItemState( RES_BOXATR_VALUE, false,
-                                    reinterpret_cast<const SfxPoolItem**>(&pNewVal) );
-                break;
-            }
-            case RES_BOXATR_FORMAT:
-                pNewFormat = static_cast<const SwTableBoxNumFormat*>(pNew);
-                nOldFormat = static_cast<const SwTableBoxNumFormat*>(pOld)->GetValue();
-                break;
-            case RES_BOXATR_FORMULA:
-                pNewFormula = static_cast<const SwTableBoxFormula*>(pNew);
-                break;
-            case RES_BOXATR_VALUE:
-                pNewVal = static_cast<const SwTableBoxValue*>(pNew);
-                break;
+            const SfxItemSet& rSet = *static_cast<const SwAttrSetChg*>(pLegacy->m_pNew)->GetChgSet();
+            if(SfxItemState::SET == rSet.GetItemState( RES_BOXATR_FORMAT, false, reinterpret_cast<const SfxPoolItem**>(&pNewFormat)))
+                nOldFormat = static_cast<const SwAttrSetChg*>(pLegacy->m_pOld)->GetChgSet()->Get(RES_BOXATR_FORMAT).GetValue();
+            rSet.GetItemState(RES_BOXATR_FORMULA, false, reinterpret_cast<const SfxPoolItem**>(&pNewFormula));
+            rSet.GetItemState(RES_BOXATR_VALUE, false, reinterpret_cast<const SfxPoolItem**>(&pNewVal));
+            break;
         }
+        case RES_BOXATR_FORMAT:
+            pNewFormat = static_cast<const SwTableBoxNumFormat*>(pLegacy->m_pNew);
+            nOldFormat = static_cast<const SwTableBoxNumFormat*>(pLegacy->m_pOld)->GetValue();
+            break;
+        case RES_BOXATR_FORMULA:
+            pNewFormula = static_cast<const SwTableBoxFormula*>(pLegacy->m_pNew);
+            break;
+        case RES_BOXATR_VALUE:
+            pNewVal = static_cast<const SwTableBoxValue*>(pLegacy->m_pNew);
+            break;
+    }
 
-        // something changed and some BoxAttribut remained in the set!
-        if( pNewFormat || pNewFormula || pNewVal )
-        {
-            GetDoc()->getIDocumentFieldsAccess().SetFieldsDirty(true, nullptr, 0);
+    // something changed and some BoxAttribut remained in the set!
+    if( pNewFormat || pNewFormula || pNewVal )
+    {
+        GetDoc()->getIDocumentFieldsAccess().SetFieldsDirty(true, nullptr, 0);
 
-            if( SfxItemState::SET == GetItemState( RES_BOXATR_FORMAT, false ) ||
-                SfxItemState::SET == GetItemState( RES_BOXATR_VALUE, false ) ||
-                SfxItemState::SET == GetItemState( RES_BOXATR_FORMULA, false ) )
+        if( SfxItemState::SET == GetItemState( RES_BOXATR_FORMAT, false ) ||
+            SfxItemState::SET == GetItemState( RES_BOXATR_VALUE, false ) ||
+            SfxItemState::SET == GetItemState( RES_BOXATR_FORMULA, false ) )
+        {
+            // fetch the box
+            SwIterator<SwTableBox,SwFormat> aIter( *this );
+            SwTableBox* pBox = aIter.First();
+            if( pBox )
             {
-                // fetch the box
-                SwIterator<SwTableBox,SwFormat> aIter( *this );
-                SwTableBox* pBox = aIter.First();
-                if( pBox )
+                OSL_ENSURE( !aIter.Next(), "zero or more than one box at format" );
+
+                sal_uLong nNewFormat;
+                if( pNewFormat )
+                {
+                    nNewFormat = pNewFormat->GetValue();
+                    // new formatting
+                    // is it newer or has the current been removed?
+                    if( SfxItemState::SET != GetItemState( RES_BOXATR_VALUE, false ))
+                        pNewFormat = nullptr;
+                }
+                else
                 {
-                    OSL_ENSURE( !aIter.Next(), "zero or more than one box at format" );
+                    // fetch the current Item
+                    (void)GetItemState(RES_BOXATR_FORMAT, false, reinterpret_cast<const SfxPoolItem**>(&pNewFormat));
+                    nOldFormat = GetTableBoxNumFormat().GetValue();
+                    nNewFormat = pNewFormat ? pNewFormat->GetValue() : nOldFormat;
+                }
 
-                    sal_uLong nNewFormat;
-                    if( pNewFormat )
-                    {
-                        nNewFormat = pNewFormat->GetValue();
-                        // new formatting
-                        // is it newer or has the current been removed?
-                        if( SfxItemState::SET != GetItemState( RES_BOXATR_VALUE, false ))
-                            pNewFormat = nullptr;
-                    }
+                // is it newer or has the current been removed?
+                if( pNewVal )
+                {
+                    if( GetDoc()->GetNumberFormatter()->IsTextFormat(nNewFormat) )
+                        nOldFormat = 0;
                     else
                     {
-                        // fetch the current Item
-                        (void)GetItemState(RES_BOXATR_FORMAT, false, reinterpret_cast<const SfxPoolItem**>(&pNewFormat));
-                        nOldFormat = GetTableBoxNumFormat().GetValue();
-                        nNewFormat = pNewFormat ? pNewFormat->GetValue() : nOldFormat;
-                    }
-
-                    // is it newer or has the current been removed?
-                    if( pNewVal )
-                    {
-                        if( GetDoc()->GetNumberFormatter()->IsTextFormat(nNewFormat) )
-                            nOldFormat = 0;
+                        if( SfxItemState::SET == GetItemState( RES_BOXATR_VALUE, false ))
+                            nOldFormat = getSwDefaultTextFormat();
                         else
-                        {
-                            if( SfxItemState::SET == GetItemState( RES_BOXATR_VALUE, false ))
-                                nOldFormat = getSwDefaultTextFormat();
-                            else
-                                nNewFormat = getSwDefaultTextFormat();
-                        }
+                            nNewFormat = getSwDefaultTextFormat();
                     }
+                }
 
-                    // Logic:
-                    // Value change: -> "simulate" a format change!
-                    // Format change:
-                    // Text -> !Text or format change:
-                    //          - align right for horizontal alignment, if LEFT or JUSTIFIED
-                    //          - align bottom for vertical alignment, if TOP is set, or default
-                    //          - replace text (color? negative numbers RED?)
-                    // !Text -> Text:
-                    //          - align left for horizontal alignment, if RIGHT
-                    //          - align top for vertical alignment, if BOTTOM is set
-                    SvNumberFormatter* pNumFormatr = GetDoc()->GetNumberFormatter();
-                    bool bNewIsTextFormat = pNumFormatr->IsTextFormat( nNewFormat );
-
-                    if( (!bNewIsTextFormat && nOldFormat != nNewFormat) || pNewFormula )
+                // Logic:
+                // Value change: -> "simulate" a format change!
+                // Format change:
+                // Text -> !Text or format change:
+                //          - align right for horizontal alignment, if LEFT or JUSTIFIED
+                //          - align bottom for vertical alignment, if TOP is set, or default
+                //          - replace text (color? negative numbers RED?)
+                // !Text -> Text:
+                //          - align left for horizontal alignment, if RIGHT
+                //          - align top for vertical alignment, if BOTTOM is set
+                SvNumberFormatter* pNumFormatr = GetDoc()->GetNumberFormatter();
+                bool bNewIsTextFormat = pNumFormatr->IsTextFormat( nNewFormat );
+
+                if( (!bNewIsTextFormat && nOldFormat != nNewFormat) || pNewFormula )
+                {
+                    bool bIsNumFormat = false;
+                    OUString aOrigText;
+                    bool bChgText = true;
+                    double fVal = 0;
+                    if( !pNewVal && SfxItemState::SET != GetItemState(
+                        RES_BOXATR_VALUE, false, reinterpret_cast<const SfxPoolItem**>(&pNewVal) ))
                     {
-                        bool bIsNumFormat = false;
-                        OUString aOrigText;
-                        bool bChgText = true;
-                        double fVal = 0;
-                        if( !pNewVal && SfxItemState::SET != GetItemState(
-                            RES_BOXATR_VALUE, false, reinterpret_cast<const SfxPoolItem**>(&pNewVal) ))
+                        // so far, no value has been set, so try to evaluate the content
+                        sal_uLong nNdPos = pBox->IsValidNumTextNd();
+                        if( ULONG_MAX != nNdPos )
                         {
-                            // so far, no value has been set, so try to evaluate the content
-                            sal_uLong nNdPos = pBox->IsValidNumTextNd();
-                            if( ULONG_MAX != nNdPos )
+                            sal_uInt32 nTmpFormatIdx = nNewFormat;
+                            OUString aText( GetDoc()->GetNodes()[ nNdPos ]
+                                            ->GetTextNode()->GetRedlineText());
+                            aOrigText = aText;
+                            if( aText.isEmpty() )
+                                bChgText = false;
+                            else
                             {
-                                sal_uInt32 nTmpFormatIdx = nNewFormat;
-                                OUString aText( GetDoc()->GetNodes()[ nNdPos ]
-                                                ->GetTextNode()->GetRedlineText());
-                                aOrigText = aText;
-                                if( aText.isEmpty() )
-                                    bChgText = false;
-                                else
-                                {
-                                    // Keep Tabs
-                                    lcl_TabToBlankAtSttEnd( aText );
+                                // Keep Tabs
+                                lcl_TabToBlankAtSttEnd( aText );
 
-                                    // JP 22.04.98: Bug 49659 -
-                                    //  Special casing for percent
-                                    if( SvNumFormatType::PERCENT ==
-                                        pNumFormatr->GetType( nNewFormat ))
+                                // JP 22.04.98: Bug 49659 -
+                                //  Special casing for percent
+                                if( SvNumFormatType::PERCENT ==
+                                    pNumFormatr->GetType( nNewFormat ))
+                                {
+                                    sal_uInt32 nTmpFormat = 0;
+                                    if( GetDoc()->IsNumberFormat(
+                                                aText, nTmpFormat, fVal ))
                                     {
-                                        sal_uInt32 nTmpFormat = 0;
-                                        if( GetDoc()->IsNumberFormat(
-                                                    aText, nTmpFormat, fVal ))
-                                        {
-                                            if( SvNumFormatType::NUMBER ==
-                                                pNumFormatr->GetType( nTmpFormat ))
-                                                aText += "%";
-
-                                            bIsNumFormat = GetDoc()->IsNumberFormat(
-                                                        aText, nTmpFormatIdx, fVal );
-                                        }
-                                    }
-                                    else
-                                        bIsNumFormat = GetDoc()->IsNumberFormat(
-                                                        aText, nTmpFormatIdx, fVal );
+                                        if( SvNumFormatType::NUMBER ==
+                                            pNumFormatr->GetType( nTmpFormat ))
+                                            aText += "%";
 
-                                    if( bIsNumFormat )
-                                    {
-                                        // directly assign value - without Modify
-                                        bool bIsLockMod = IsModifyLocked();
-                                        LockModify();
-                                        SetFormatAttr( SwTableBoxValue( fVal ));
-                                        if( !bIsLockMod )
-                                            UnlockModify();
+                                        bIsNumFormat = GetDoc()->IsNumberFormat(
+                                                    aText, nTmpFormatIdx, fVal );
                                     }
                                 }
+                                else
+                                    bIsNumFormat = GetDoc()->IsNumberFormat(
+                                                    aText, nTmpFormatIdx, fVal );
+
+                                if( bIsNumFormat )
+                                {
+                                    // directly assign value - without Modify
+                                    bool bIsLockMod = IsModifyLocked();
+                                    LockModify();
+                                    SetFormatAttr( SwTableBoxValue( fVal ));
+                                    if( !bIsLockMod )
+                                        UnlockModify();
+                                }
                             }
                         }
-                        else
-                        {
-                            fVal = pNewVal->GetValue();
-                            bIsNumFormat = true;
-                        }
+                    }
+                    else
+                    {
+                        fVal = pNewVal->GetValue();
+                        bIsNumFormat = true;
+                    }
 
-                        // format contents with the new value assigned and write to paragraph
-                        const Color* pCol = nullptr;
-                        OUString sNewText;
-                        if( DBL_MAX == fVal )
-                        {
-                            sNewText = SwViewShell::GetShellRes()->aCalc_Error;
-                        }
+                    // format contents with the new value assigned and write to paragraph
+                    const Color* pCol = nullptr;
+                    OUString sNewText;
+                    if( DBL_MAX == fVal )
+                    {
+                        sNewText = SwViewShell::GetShellRes()->aCalc_Error;
+                    }
+                    else
+                    {
+                        if (bIsNumFormat)
+                            pNumFormatr->GetOutputString( fVal, nNewFormat, sNewText, &pCol );
                         else
                         {
-                            if (bIsNumFormat)
-                                pNumFormatr->GetOutputString( fVal, nNewFormat, sNewText, &pCol );
-                            else
-                            {
-                                // Original text could not be parsed as
-                                // number/date/time/..., so keep the text.
+                            // Original text could not be parsed as
+                            // number/date/time/..., so keep the text.
 #if 0
-                                // Actually the text should be formatted
-                                // according to the format, which may include
-                                // additional text from the format, for example
-                                // in {0;-0;"BAD: "@}. But other places when
-                                // entering a new value or changing text or
-                                // changing to a different format of type Text
-                                // don't do this (yet?).
-                                pNumFormatr->GetOutputString( aOrigText, nNewFormat, sNewText, &pCol );
+                            // Actually the text should be formatted
+                            // according to the format, which may include
+                            // additional text from the format, for example
+                            // in {0;-0;"BAD: "@}. But other places when
+                            // entering a new value or changing text or
+                            // changing to a different format of type Text
+                            // don't do this (yet?).
+                            pNumFormatr->GetOutputString( aOrigText, nNewFormat, sNewText, &pCol );
 #else
-                                sNewText = aOrigText;
+                            sNewText = aOrigText;
 #endif
-                            }
+                        }
 
-                            if( !bChgText )
-                            {
-                                sNewText.clear();
-                            }
+                        if( !bChgText )
+                        {
+                            sNewText.clear();
                         }
+                    }
 
-                        // across all boxes
-                        ChgTextToNum( *pBox, sNewText, pCol,
-                                        GetDoc()->IsInsTableAlignNum() );
+                    // across all boxes
+                    ChgTextToNum( *pBox, sNewText, pCol,
+                                    GetDoc()->IsInsTableAlignNum() );
 
-                    }
-                    else if( bNewIsTextFormat && nOldFormat != nNewFormat )
-                    {
-                        ChgNumToText( *pBox, nNewFormat );
-                    }
+                }
+                else if( bNewIsTextFormat && nOldFormat != nNewFormat )
+                {
+                    ChgNumToText( *pBox, nNewFormat );
                 }
             }
         }
     }
     // call base class
-    SwFrameFormat::Modify( pOld, pNew );
+    SwFrameFormat::SwClientNotify(rMod, rHint);
 }
 
 bool SwTableBoxFormat::supportsFullDrawingLayerFillAttributeSet() const


More information about the Libreoffice-commits mailing list