include/svx/compatflags.hxx    |    1 
 svx/source/svdraw/svdmodel.cxx |   57 +++++++++++------------------------------
 2 files changed, 17 insertions(+), 41 deletions(-)

New commits:
commit ab3d6fc0df510bee87e288b7b0c051173675048c
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Tue Aug 19 12:59:07 2025 +0200
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Thu Aug 21 00:05:54 2025 +0200

    Use enumarray for SdrModel's compat flags
    
    Simplifies adding new flags
    
    Change-Id: I9db6fab29676f620107d3364d7318790e4512e1d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189910
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
    (cherry picked from commit b2d3a4dd250ad6156f904d6b755a6faa4bfadd60)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189941
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/include/svx/compatflags.hxx b/include/svx/compatflags.hxx
index 9a64bd2bab80..4caecf18be55 100644
--- a/include/svx/compatflags.hxx
+++ b/include/svx/compatflags.hxx
@@ -14,6 +14,7 @@ enum class SdrCompatibilityFlag
     LegacyFontwork, ///< for tdf#148000 false == Fontwork works in PowerPoint 
compat mode
     ConnectorUseSnapRect, ///< for tdf#149756
     IgnoreBreakAfterMultilineField, ///< for tdf#148966
+    LAST = IgnoreBreakAfterMultilineField /// add new items above
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/svx/source/svdraw/svdmodel.cxx b/svx/source/svdraw/svdmodel.cxx
index a3d6de78ec99..b5b9ebb591ad 100644
--- a/svx/source/svdraw/svdmodel.cxx
+++ b/svx/source/svdraw/svdmodel.cxx
@@ -70,6 +70,7 @@
 #include <memory>
 #include <libxml/xmlwriter.h>
 #include <sfx2/viewsh.hxx>
+#include <o3tl/enumarray.hxx>
 #include <o3tl/enumrange.hxx>
 #include <comphelper/diagnose_ex.hxx>
 #include <tools/UnitConversion.hxx>
@@ -85,20 +86,19 @@ struct SdrModelImpl
 {
     SfxUndoManager* mpUndoManager;
     SdrUndoFactory* mpUndoFactory;
-    bool mbAnchoredTextOverflowLegacy; // tdf#99729 compatibility flag
-    bool mbLegacyFontwork;             // tdf#148000 compatibility flag
-    bool mbConnectorUseSnapRect;       // tdf#149756 compatibility flag
-    bool mbIgnoreBreakAfterMultilineField; ///< tdf#148966 compatibility flag
+    o3tl::enumarray<SdrCompatibilityFlag, bool> maCompatFlags;
     std::shared_ptr<model::Theme> mpTheme;
     std::shared_ptr<svx::IThemeColorChanger> mpThemeColorChanger;
 
     SdrModelImpl()
         : mpUndoManager(nullptr)
         , mpUndoFactory(nullptr)
-        , mbAnchoredTextOverflowLegacy(false)
-        , mbLegacyFontwork(false)
-        , mbConnectorUseSnapRect(false)
-        , mbIgnoreBreakAfterMultilineField(false)
+        , maCompatFlags{
+            false, // tdf#99729 AnchoredTextOverflowLegacy
+            false, // tdf#148000 LegacyFontwork
+            false, // tdf#149756 ConnectorUseSnapRect
+            false, // tdf#148966 IgnoreBreakAfterMultilineField
+          }
         , mpTheme(new model::Theme(u"Office"_ustr))
     {}
 
@@ -1742,38 +1742,12 @@ void SdrModel::SetAddExtLeading( bool bEnabled )
 
 void SdrModel::SetCompatibilityFlag(SdrCompatibilityFlag eFlag, bool bEnabled)
 {
-    switch (eFlag)
-    {
-        case SdrCompatibilityFlag::AnchoredTextOverflowLegacy:
-            mpImpl->mbAnchoredTextOverflowLegacy = bEnabled;
-            break;
-        case SdrCompatibilityFlag::LegacyFontwork:
-            mpImpl->mbLegacyFontwork = bEnabled;
-            break;
-        case SdrCompatibilityFlag::ConnectorUseSnapRect:
-            mpImpl->mbConnectorUseSnapRect = bEnabled;
-            break;
-        case SdrCompatibilityFlag::IgnoreBreakAfterMultilineField:
-            mpImpl->mbIgnoreBreakAfterMultilineField = bEnabled;
-            break;
-    }
+    mpImpl->maCompatFlags[eFlag] = bEnabled;
 }
 
 bool SdrModel::GetCompatibilityFlag(SdrCompatibilityFlag eFlag) const
 {
-    switch (eFlag)
-    {
-        case SdrCompatibilityFlag::AnchoredTextOverflowLegacy:
-            return mpImpl->mbAnchoredTextOverflowLegacy;
-        case SdrCompatibilityFlag::LegacyFontwork:
-            return mpImpl->mbLegacyFontwork;
-        case SdrCompatibilityFlag::ConnectorUseSnapRect:
-            return mpImpl->mbConnectorUseSnapRect;
-        case SdrCompatibilityFlag::IgnoreBreakAfterMultilineField:
-            return mpImpl->mbIgnoreBreakAfterMultilineField;
-        default:
-            return false;
-    }
+    return mpImpl->maCompatFlags[eFlag];
 }
 
 void SdrModel::ReformatAllTextObjects()
@@ -1816,7 +1790,7 @@ void SdrModel::ReadUserDataSequenceValue(const 
beans::PropertyValue* pValue)
         bool bBool = false;
         if (pValue->Value >>= bBool)
         {
-            mpImpl->mbAnchoredTextOverflowLegacy = bBool;
+            
SetCompatibilityFlag(SdrCompatibilityFlag::AnchoredTextOverflowLegacy, bBool);
         }
     }
     else if (pValue->Name == "ConnectorUseSnapRect")
@@ -1824,15 +1798,16 @@ void SdrModel::ReadUserDataSequenceValue(const 
beans::PropertyValue* pValue)
         bool bBool = false;
         if (pValue->Value >>= bBool)
         {
-            mpImpl->mbConnectorUseSnapRect = bBool;
+            SetCompatibilityFlag(SdrCompatibilityFlag::ConnectorUseSnapRect, 
bBool);
         }
     }
     else if (pValue->Name == "LegacySingleLineFontwork")
     {
         bool bBool = false;
-        if ((pValue->Value >>= bBool) && mpImpl->mbLegacyFontwork != bBool)
+        if ((pValue->Value >>= bBool)
+            && GetCompatibilityFlag(SdrCompatibilityFlag::LegacyFontwork) != 
bBool)
         {
-            mpImpl->mbLegacyFontwork = bBool;
+            SetCompatibilityFlag(SdrCompatibilityFlag::LegacyFontwork, bBool);
             // tdf#148000 hack: reset all CustomShape geometry as they may 
depend on this property
             // Ideally this ReadUserDataSequenceValue should be called before 
geometry creation
             // Once the calling order will be fixed, this hack will not be 
needed.
@@ -1858,7 +1833,7 @@ void SdrModel::ReadUserDataSequenceValue(const 
beans::PropertyValue* pValue)
         bool bBool = false;
         if (pValue->Value >>= bBool)
         {
-            mpImpl->mbIgnoreBreakAfterMultilineField = bBool;
+            
SetCompatibilityFlag(SdrCompatibilityFlag::IgnoreBreakAfterMultilineField, 
bBool);
         }
     }
 }

Reply via email to