25#include <osl/file.hxx>
29#include <svx/strings.hrc>
30#include <svx/svxids.hrc>
38#include <officecfg/Office/Common.hxx>
39#include <com/sun/star/frame/XDispatchProvider.hpp>
40#include <com/sun/star/frame/XDispatch.hpp>
41#include <com/sun/star/frame/Desktop.hpp>
42#include <com/sun/star/util/XURLTransformer.hpp>
43#include <com/sun/star/util/URLTransformer.hpp>
55sal_Int16 g_aLumMods[] = { 10000, 2000, 4000, 6000, 7500, 5000 };
59sal_Int16 g_aLumOffs[] = { 0, 8000, 6000, 4000, 0, 0 };
63 mnMaxRecentColors(
Application::GetSettings().GetStyleSettings().GetColorValueSetColumnCount()),
67 mpBtnUpdater(nullptr),
74 if(
nullptr != ( pItem = pDocSh->
GetItem(SID_COLOR_TABLE) ) )
85 : mnMaxRecentColors(pClone->mnMaxRecentColors)
86 , mnNumOfPalettes(pClone->mnNumOfPalettes)
87 , mnCurrentPalette(pClone->mnCurrentPalette)
88 , mnColorCount(pClone->mnColorCount)
89 , mpBtnUpdater(nullptr)
90 , pColorList(pClone->pColorList)
91 , maRecentColors(pClone->maRecentColors)
112 std::stack<OUString> aDirs;
116 aDirs.push(aPalPaths.getToken(0,
';',
nIndex));
120 std::set<OUString> aNames;
123 while (!aDirs.empty())
125 OUString aPalPath = aDirs.top();
128 osl::Directory aDir(aPalPath);
129 osl::DirectoryItem aDirItem;
130 osl::FileStatus aFileStat( osl_FileStatus_Mask_FileName |
131 osl_FileStatus_Mask_FileURL |
132 osl_FileStatus_Mask_Type );
133 if( aDir.open() == osl::FileBase::E_None )
135 while( aDir.getNextItem(aDirItem) == osl::FileBase::E_None )
137 aDirItem.getFileStatus(aFileStat);
138 if(aFileStat.isRegular() || aFileStat.isLink())
140 OUString aFName = aFileStat.getFileName();
142 OUString aFNameWithoutExt = aURLObj.
GetBase();
143 if (aNames.find(aFName) == aNames.end())
145 std::unique_ptr<Palette> pPalette;
146 if( aFName.endsWithIgnoreAsciiCase(
".gpl") )
147 pPalette.reset(
new PaletteGPL(aFileStat.getFileURL(), aFNameWithoutExt));
148 else if( aFName.endsWithIgnoreAsciiCase(
".soc") )
149 pPalette.reset(
new PaletteSOC(aFileStat.getFileURL(), aFNameWithoutExt));
150 else if ( aFName.endsWithIgnoreAsciiCase(
".ase") )
151 pPalette.reset(
new PaletteASE(aFileStat.getFileURL(), aFNameWithoutExt));
153 if( pPalette && pPalette->IsValid() )
155 aNames.insert(aFNameWithoutExt);
169 sal_Int16& rLumMod, sal_Int16& rLumOff)
172 rThemeIndex = nItemId % 12;
175 rLumMod = g_aLumMods[nItemId / 12];
176 rLumOff = g_aLumOffs[nItemId / 12];
184 css::uno::Sequence< sal_Int32 > CustomColorList( officecfg::Office::Common::UserColors::CustomColor::get() );
185 css::uno::Sequence< OUString > CustomColorNameList( officecfg::Office::Common::UserColors::CustomColorName::get() );
187 for (
int i = 0;
i < CustomColorList.getLength(); ++
i)
190 rColorSet.
InsertItem(nIx, aColor, CustomColorNameList[
i]);
202 if (aColors.size() >= 12)
204 std::vector<OUString> aEffectNames = {
210 std::vector<OUString> aColorNames = {
219 sal_uInt16 nItemId = 0;
221 for (
size_t nEffect = 0; nEffect < aEffectNames.size() + 1; ++nEffect)
224 for (
size_t nColor = 0; nColor < aColorNames.size(); ++nColor)
226 Color aColor = aColors[nColor];
231 aColorName = aColorNames[nColor];
235 aColorName = aEffectNames[nEffect - 1].replaceAll(
"%1", aColorNames[nColor]);
237 rColorSet.
InsertItem(nItemId++, aColor, aColorName);
266 css::uno::Sequence< sal_Int32 > Colorlist(officecfg::Office::Common::UserColors::RecentColor::get());
267 css::uno::Sequence< OUString > ColorNamelist(officecfg::Office::Common::UserColors::RecentColorName::get());
269 const bool bHasColorNames = Colorlist.getLength() == ColorNamelist.getLength();
270 for (
int i = 0;
i < Colorlist.getLength(); ++
i)
273 OUString sColorName = bHasColorNames ? ColorNamelist[
i] : (
"#" + aColor.
AsRGBHexString().toAsciiUpperCase());
275 rColorSet.
InsertItem(nIx, aColor, sColorName);
282 std::vector<OUString> aPaletteNames
288 aPaletteNames.push_back( (*it).GetName() );
290 aPaletteNames.push_back(
SvxResId(RID_SVXSTR_THEME_COLORS));
291 aPaletteNames.push_back(
SvxResId ( RID_SVXSTR_DOC_COLORS ) );
293 return aPaletteNames;
309 if (pShell !=
nullptr)
316 OUString aPaletteName(officecfg::Office::Common::UserColors::PaletteName::get());
320 officecfg::Office::Common::UserColors::PaletteName::set(
GetPaletteName(), batch);
339 if(
nullptr != ( pItem = pDocSh->
GetItem(SID_COLOR_TABLE) ) )
368 [rRecentColor] (
const NamedColor &
a) { return a.first == rRecentColor; });
379 css::uno::Sequence< sal_Int32 > aColorList(
maRecentColors.size());
380 auto aColorListRange = asNonConstRange(aColorList);
381 css::uno::Sequence< OUString > aColorNameList(
maRecentColors.size());
382 auto aColorNameListRange = asNonConstRange(aColorNameList);
389 officecfg::Office::Common::UserColors::RecentColor::set(aColorList, batch);
390 officecfg::Office::Common::UserColors::RecentColorName::set(aColorNameList, batch);
411 m_pColorDlg->ExecuteAsync(pParent, [
this, aCommandCopy] (sal_Int32 nResult) {
415 OUString sColorName =
"#" + aLastColor.
AsRGBHexString().toAsciiUpperCase();
416 NamedColor aNamedColor = std::make_pair(aLastColor, sColorName);
428 using namespace css::uno;
429 using namespace css::frame;
430 using namespace css::beans;
431 using namespace css::util;
434 Reference<XDesktop2> xDesktop = Desktop::create(xContext);
435 Reference<XFrame>
xFrame(xDesktop->getCurrentFrame());
436 Reference<XDispatchProvider> xDispatchProvider(
xFrame, UNO_QUERY);
437 if (!xDispatchProvider.is())
442 std::vector<PropertyValue> aArgs{
466 Reference<XDispatch>
xDispatch = xDispatchProvider->queryDispatch(
aTargetURL, OUString(), 0);
470 if (
xFrame->getContainerWindow().is())
471 xFrame->getContainerWindow()->setFocus();
std::function< void(const OUString &, const svx::NamedThemedColor &)> ColorSelectFunction
std::pair< Color, OUString > NamedColor
OUString AsRGBHexString() const
void ApplyLumModOff(sal_Int16 nMod, sal_Int16 nOff)
OUString GetURLPath(DecodeMechanism eMechanism=DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
tools::Long GetColorCount() const
const sal_uInt16 mnMaxRecentColors
void SetColorSelectFunction(const ColorSelectFunction &aColorSelectFunction)
void PopupColorPicker(weld::Window *pParent, const OUString &aCommand, const Color &rInitialColor)
std::vector< OUString > GetPaletteList()
svx::ToolboxButtonColorUpdaterBase * mpBtnUpdater
static void GetThemeIndexLumModOff(sal_uInt16 nItemId, sal_Int16 &rThemeIndex, sal_Int16 &rLumMod, sal_Int16 &rLumOff)
PaletteManager * Clone() const
void ReloadColorSet(SvxColorValueSet &rColorSet)
tools::Long GetRecentColorCount() const
std::deque< NamedColor > maRecentColors
sal_uInt16 mnNumOfPalettes
void ReloadRecentColorSet(SvxColorValueSet &rColorSet)
sal_uInt16 mnCurrentPalette
ColorSelectFunction maColorSelectFunction
std::vector< std::unique_ptr< Palette > > m_Palettes
static void DispatchColorCommand(const OUString &aCommand, const svx::NamedThemedColor &rColor)
std::unique_ptr< SvColorDialog > m_pColorDlg
void SetPalette(sal_Int32 nPos)
OUString GetPaletteName()
bool IsThemePaletteSelected() const
OUString GetSelectedPalettePath()
void SetBtnUpdater(svx::ToolboxButtonColorUpdaterBase *pBtnUpdater)
sal_Int32 GetPalette() const
void AddRecentColor(const Color &rRecentColor, const OUString &rColorName, bool bFront=true)
virtual std::vector< Color > GetThemeColors()
virtual std::set< Color > GetDocColors()
static SAL_WARN_UNUSED_RESULT SfxObjectShell * Current()
void PutItem(const SfxPoolItem &rItem)
const SfxPoolItem * GetItem(sal_uInt16 nSlotId) const
const OUString & GetPalettePath() const
void addEntriesForColorSet(const std::set< Color > &rColorSet, std::u16string_view rNamePrefix)
void InsertItem(sal_uInt16 nItemId, const Image &rImage)
size_t GetItemCount() const
static XColorListRef CreateStdColorList()
static XColorListRef AsColorList(rtl::Reference< XPropertyList > const &plist)
static XPropertyListRef CreatePropertyListFromURL(XPropertyListType t, std::u16string_view rUrl)
static std::shared_ptr< ConfigurationChanges > create()
void addTransformation(Transformation const &rTransform)
void setType(ThemeColorType eType)
OUString SvxResId(TranslateId aId)
Reference< XDispatch > xDispatch
css::uno::Sequence< DstElementType > containerToSequence(const SrcType &i_Container)
Reference< XComponentContext > getProcessComponentContext()
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
OString convertToJSON(model::ThemeColor const &rThemeColor)
constexpr ThemeColorType convertToThemeColorType(sal_Int32 nIndex)
A color with an optional name and other theming-related properties.
static NamedThemedColor FromNamedColor(const NamedColor &rNamedColor)
Reference< XFrame > xFrame