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)); + } } }