svx/Library_svxcore.mk                 |    1 
 svx/source/tbxctrls/tbxcolorupdate.cxx |   80 +++++++++++++++++++++++----------
 2 files changed, 59 insertions(+), 22 deletions(-)

New commits:
commit 8c822b764b35a0116a0865e991a87c8315e005ab
Author:     Andreas Heinisch <andreas.heini...@yahoo.de>
AuthorDate: Mon Nov 27 21:46:17 2023 +0100
Commit:     Andreas Heinisch <andreas.heini...@yahoo.de>
CommitDate: Mon Jan 8 19:19:09 2024 +0100

    tdf#72991 - Remember last used color depending in cui
    
    Change-Id: I4c2cd970aa5b96a8037ecab5e3ae5e5e7cbe4975
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160008
    Tested-by: Jenkins
    Reviewed-by: Andreas Heinisch <andreas.heini...@yahoo.de>

diff --git a/svx/Library_svxcore.mk b/svx/Library_svxcore.mk
index 28ed214c063f..51dc332b26e0 100644
--- a/svx/Library_svxcore.mk
+++ b/svx/Library_svxcore.mk
@@ -87,6 +87,7 @@ $(eval $(call gb_Library_use_libraries,svxcore,\
 
 $(eval $(call gb_Library_use_externals,svxcore,\
        boost_headers \
+       frozen \
        icuuc \
        icu_headers \
        libxml2 \
diff --git a/svx/source/tbxctrls/tbxcolorupdate.cxx 
b/svx/source/tbxctrls/tbxcolorupdate.cxx
index 0854ad034dc2..064b4636230b 100644
--- a/svx/source/tbxctrls/tbxcolorupdate.cxx
+++ b/svx/source/tbxctrls/tbxcolorupdate.cxx
@@ -38,6 +38,13 @@
 
 #include <svx/strings.hrc>
 #include <svx/dialmgr.hxx>
+#include <unotools/viewoptions.hxx>
+#include <comphelper/string.hxx>
+#include <o3tl/string_view.hxx>
+
+#include <frozen/bits/defines.h>
+#include <frozen/bits/elsa_std.h>
+#include <frozen/unordered_map.h>
 
 namespace svx
 {
@@ -74,30 +81,51 @@ namespace svx
             }
         }
 
-        switch (nSlotId)
+        // tdf#72991 - remember last used color depending on slot id
+        const auto aSlotNamedColorMap = frozen::make_unordered_map<sal_uInt16, 
NamedColor>(
+            { { SID_ATTR_CHAR_COLOR,
+                NamedColor(COL_DEFAULT_FONT, 
SvxResId(RID_SVXSTR_COLOR_DEFAULT_FONT)) },
+              { SID_ATTR_CHAR_COLOR2,
+                NamedColor(COL_DEFAULT_FONT, 
SvxResId(RID_SVXSTR_COLOR_DEFAULT_FONT)) },
+              { SID_FRAME_LINECOLOR,
+                NamedColor(COL_DEFAULT_FRAMELINE, 
SvxResId(RID_SVXSTR_COLOR_DEFAULT_FRAMELINE)) },
+              { SID_ATTR_CHAR_COLOR_BACKGROUND,
+                NamedColor(COL_DEFAULT_HIGHLIGHT, 
SvxResId(RID_SVXSTR_COLOR_DEFAULT_HIGHLIGHT)) },
+              { SID_ATTR_CHAR_BACK_COLOR,
+                NamedColor(COL_DEFAULT_HIGHLIGHT, 
SvxResId(RID_SVXSTR_COLOR_DEFAULT_HIGHLIGHT)) },
+              { SID_BACKGROUND_COLOR,
+                NamedColor(COL_DEFAULT_HIGHLIGHT, 
SvxResId(RID_SVXSTR_COLOR_DEFAULT_HIGHLIGHT)) },
+              { SID_TABLE_CELL_BACKGROUND_COLOR,
+                NamedColor(COL_DEFAULT_HIGHLIGHT, 
SvxResId(RID_SVXSTR_COLOR_DEFAULT_HIGHLIGHT)) },
+              { SID_ATTR_LINE_COLOR, NamedColor(COL_DEFAULT_SHAPE_STROKE,
+                                                
SvxResId(RID_SVXSTR_COLOR_DEFAULT_SHAPE_STROKE)) },
+              { SID_ATTR_FILL_COLOR, NamedColor(COL_DEFAULT_SHAPE_FILLING,
+                                                
SvxResId(RID_SVXSTR_COLOR_DEFAULT_SHAPE_FILLING)) }
+
+            });
+
+        const auto aIterator = aSlotNamedColorMap.find(nSlotId);
+        if (aIterator != aSlotNamedColorMap.end())
         {
-            case SID_ATTR_CHAR_COLOR:
-            case SID_ATTR_CHAR_COLOR2:
-                Update(NamedColor(COL_DEFAULT_FONT, 
SvxResId(RID_SVXSTR_COLOR_DEFAULT_FONT)));
-                break;
-            case SID_FRAME_LINECOLOR:
-                Update(NamedColor(COL_DEFAULT_FRAMELINE, 
SvxResId(RID_SVXSTR_COLOR_DEFAULT_FRAMELINE)));
-                break;
-            case SID_ATTR_CHAR_COLOR_BACKGROUND:
-            case SID_ATTR_CHAR_BACK_COLOR:
-            case SID_BACKGROUND_COLOR:
-            case SID_TABLE_CELL_BACKGROUND_COLOR:
-                Update(NamedColor(COL_DEFAULT_HIGHLIGHT, 
SvxResId(RID_SVXSTR_COLOR_DEFAULT_HIGHLIGHT)));
-                break;
-            case SID_ATTR_LINE_COLOR:
-                Update(NamedColor(COL_DEFAULT_SHAPE_STROKE, 
SvxResId(RID_SVXSTR_COLOR_DEFAULT_SHAPE_STROKE)));
-                break;
-            case SID_ATTR_FILL_COLOR:
-                Update(NamedColor(COL_DEFAULT_SHAPE_FILLING, 
SvxResId(RID_SVXSTR_COLOR_DEFAULT_SHAPE_FILLING)));
-                break;
-            default:
-                Update(COL_TRANSPARENT);
+            NamedColor aNamedColor(aIterator->second);
+            SvtViewOptions aViewOpt(EViewType::Dialog, "ToolboxButtonColor");
+            if (aViewOpt.Exists())
+            {
+                css::uno::Any aUserItem = 
aViewOpt.GetUserItem(OUString::number(nSlotId));
+                OUString aUserData;
+                if (aUserItem >>= aUserData)
+                {
+                    sal_Int32 nIdx = 0;
+                    aNamedColor.m_aName = o3tl::getToken(aUserData, 0, ';', 
nIdx);
+                    aNamedColor.m_aColor
+                        = Color(ColorTransparencyTag::ColorTransparency,
+                                o3tl::toUInt32(o3tl::getToken(aUserData, 0, 
';', nIdx)));
+                }
+            }
+            Update(aNamedColor);
         }
+        else
+            Update(COL_TRANSPARENT);
     }
 
     void ToolboxButtonColorUpdaterBase::Notify(SfxBroadcaster& rBC, const 
SfxHint& rHint)
@@ -109,7 +137,15 @@ namespace svx
         else if (rHint.GetId() == SfxHintId::ColorsChanged)
         {
             if (auto oColor = 
static_cast<SfxObjectShell&>(rBC).GetRecentColor(mnSlotId))
+            {
                 Update(*oColor);
+                // tdf#72991 - remember last used color depending on slot id
+                const OUString aUserData
+                    = oColor->m_aName + ";"
+                      + 
OUString::number(static_cast<sal_uInt32>(oColor->m_aColor));
+                SvtViewOptions(EViewType::Dialog, "ToolboxButtonColor")
+                    .SetUserItem(OUString::number(mnSlotId), 
css::uno::Any(aUserData));
+            }
         }
     }
 

Reply via email to