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>
51 sal_Int16 g_aLumMods[] = { 10000, 2000, 4000, 6000, 7500, 5000 };
55 sal_Int16 g_aLumOffs[] = { 0, 8000, 6000, 4000, 0, 0 };
59 mnMaxRecentColors(
Application::GetSettings().GetStyleSettings().GetColorValueSetColumnCount()),
63 mpBtnUpdater(nullptr),
70 if(
nullptr != ( pItem = pDocSh->
GetItem(SID_COLOR_TABLE) ) )
89 std::stack<OUString> aDirs;
93 aDirs.push(aPalPaths.getToken(0,
';', nIndex));
97 std::set<OUString> aNames;
100 while (!aDirs.empty())
102 OUString aPalPath = aDirs.top();
105 osl::Directory aDir(aPalPath);
106 osl::DirectoryItem aDirItem;
107 osl::FileStatus aFileStat( osl_FileStatus_Mask_FileName |
108 osl_FileStatus_Mask_FileURL |
109 osl_FileStatus_Mask_Type );
110 if( aDir.open() == osl::FileBase::E_None )
112 while( aDir.getNextItem(aDirItem) == osl::FileBase::E_None )
114 aDirItem.getFileStatus(aFileStat);
115 if(aFileStat.isRegular() || aFileStat.isLink())
117 OUString aFName = aFileStat.getFileName();
119 OUString aFNameWithoutExt = aURLObj.
GetBase();
120 if (aNames.find(aFName) == aNames.end())
122 std::unique_ptr<Palette> pPalette;
123 if( aFName.endsWithIgnoreAsciiCase(
".gpl") )
124 pPalette.reset(
new PaletteGPL(aFileStat.getFileURL(), aFNameWithoutExt));
125 else if( aFName.endsWithIgnoreAsciiCase(
".soc") )
126 pPalette.reset(
new PaletteSOC(aFileStat.getFileURL(), aFNameWithoutExt));
127 else if ( aFName.endsWithIgnoreAsciiCase(
".ase") )
128 pPalette.reset(
new PaletteASE(aFileStat.getFileURL(), aFNameWithoutExt));
130 if( pPalette && pPalette->IsValid() )
132 aNames.insert(aFNameWithoutExt);
146 sal_Int16& rLumMod, sal_Int16& rLumOff)
149 rThemeIndex = nItemId % 12;
152 rLumMod = g_aLumMods[nItemId / 12];
153 rLumOff = g_aLumOffs[nItemId / 12];
161 css::uno::Sequence< sal_Int32 > CustomColorList( officecfg::Office::Common::UserColors::CustomColor::get() );
162 css::uno::Sequence< OUString > CustomColorNameList( officecfg::Office::Common::UserColors::CustomColorName::get() );
164 for (
int i = 0;
i < CustomColorList.getLength(); ++
i)
167 rColorSet.
InsertItem(nIx, aColor, CustomColorNameList[i]);
179 if (aColors.size() >= 12)
181 std::vector<OUString> aEffectNames = {
187 std::vector<OUString> aColorNames = {
196 sal_uInt16 nItemId = 0;
198 for (
size_t nEffect = 0; nEffect < aEffectNames.size() + 1; ++nEffect)
201 for (
size_t nColor = 0; nColor < aColorNames.size(); ++nColor)
203 Color aColor = aColors[nColor];
208 aColorName = aColorNames[nColor];
212 aColorName = aEffectNames[nEffect - 1].replaceAll(
"%1", aColorNames[nColor]);
214 rColorSet.
InsertItem(nItemId++, aColor, aColorName);
243 css::uno::Sequence< sal_Int32 > Colorlist(officecfg::Office::Common::UserColors::RecentColor::get());
244 css::uno::Sequence< OUString > ColorNamelist(officecfg::Office::Common::UserColors::RecentColorName::get());
246 const bool bHasColorNames = Colorlist.getLength() == ColorNamelist.getLength();
247 for (
int i = 0;
i < Colorlist.getLength(); ++
i)
250 OUString sColorName = bHasColorNames ? ColorNamelist[i] : (
"#" + aColor.
AsRGBHexString().toAsciiUpperCase());
252 rColorSet.
InsertItem(nIx, aColor, sColorName);
259 std::vector<OUString> aPaletteNames
265 aPaletteNames.push_back( (*it).GetName() );
267 aPaletteNames.push_back(
SvxResId(RID_SVXSTR_THEME_COLORS));
268 aPaletteNames.push_back(
SvxResId ( RID_SVXSTR_DOC_COLORS ) );
270 return aPaletteNames;
286 if (pShell !=
nullptr)
293 OUString aPaletteName(officecfg::Office::Common::UserColors::PaletteName::get());
297 officecfg::Office::Common::UserColors::PaletteName::set(
GetPaletteName(), batch);
316 if(
nullptr != ( pItem = pDocSh->
GetItem(SID_COLOR_TABLE) ) )
345 [rRecentColor] (
const NamedColor &
a) {
return a.first == rRecentColor; });
356 css::uno::Sequence< sal_Int32 > aColorList(
maRecentColors.size());
357 auto aColorListRange = asNonConstRange(aColorList);
358 css::uno::Sequence< OUString > aColorNameList(
maRecentColors.size());
359 auto aColorNameListRange = asNonConstRange(aColorNameList);
366 officecfg::Office::Common::UserColors::RecentColor::set(aColorList, batch);
367 officecfg::Office::Common::UserColors::RecentColorName::set(aColorNameList, batch);
384 OUString aCommandCopy = aCommand;
388 m_pColorDlg->ExecuteAsync(pParent, [
this, aCommandCopy] (sal_Int32 nResult) {
392 OUString sColorName =
"#" + aLastColor.
AsRGBHexString().toAsciiUpperCase();
393 NamedColor aNamedColor = std::make_pair(aLastColor, sColorName);
407 using namespace css::util;
410 Reference<XDesktop2> xDesktop = Desktop::create(xContext);
412 Reference<XDispatchProvider> xDispatchProvider(
xFrame, UNO_QUERY);
413 if (!xDispatchProvider.is())
418 std::vector<PropertyValue> aArgs{
429 aTargetURL.Complete = aCommand;
431 xURLTransformer->parseStrict(aTargetURL);
433 Reference<XDispatch>
xDispatch = xDispatchProvider->queryDispatch(aTargetURL, OUString(), 0);
437 if (
xFrame->getContainerWindow().is())
438 xFrame->getContainerWindow()->setFocus();
OUString AsRGBHexString() const
std::pair< Color, OUString > NamedColor
void ReloadColorSet(SvxColorValueSet &rColorSet)
static NamedThemedColor FromNamedColor(const NamedColor &rNamedColor)
A color with an optional name and other theming-related properties.
virtual std::vector< Color > GetThemeColors()
static std::shared_ptr< ConfigurationChanges > create()
static XColorListRef CreateStdColorList()
OUString GetURLPath(DecodeMechanism eMechanism=DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
Reference< XFrame > xFrame
svx::ToolboxButtonColorUpdaterBase * mpBtnUpdater
static SfxObjectShell * Current()
sal_Int32 GetPalette() const
void PutItem(const SfxPoolItem &rItem)
OUString GetSelectedPalettePath()
tools::Long GetColorCount() const
const OUString & GetPalettePath() const
tools::Long GetRecentColorCount() const
void addEntriesForColorSet(const std::set< Color > &rColorSet, const OUString &rNamePrefix)
OUString SvxResId(TranslateId aId)
static void GetThemeIndexLumModOff(sal_uInt16 nItemId, sal_Int16 &rThemeIndex, sal_Int16 &rLumMod, sal_Int16 &rLumOff)
void SetBtnUpdater(svx::ToolboxButtonColorUpdaterBase *pBtnUpdater)
static XColorListRef AsColorList(rtl::Reference< XPropertyList > const &plist)
const SfxPoolItem * GetItem(sal_uInt16 nSlotId) const
const sal_uInt16 mnMaxRecentColors
void SetPalette(sal_Int32 nPos)
std::vector< OUString > GetPaletteList()
void ApplyLumModOff(sal_Int16 nMod, sal_Int16 nOff)
OUString GetPaletteName()
void InsertItem(sal_uInt16 nItemId, const Image &rImage)
bool IsThemePaletteSelected() const
void ReloadRecentColorSet(SvxColorValueSet &rColorSet)
ColorSelectFunction maColorSelectFunction
std::deque< NamedColor > maRecentColors
void PopupColorPicker(weld::Window *pParent, const OUString &aCommand, const Color &rInitialColor)
virtual OUString GetPath() const override
virtual std::set< Color > GetDocColors()
Reference< XDispatch > xDispatch
static void DispatchColorCommand(const OUString &aCommand, const svx::NamedThemedColor &rColor)
size_t GetItemCount() const
css::uno::Sequence< DstElementType > containerToSequence(const SrcType &i_Container)
static XPropertyListRef CreatePropertyListFromURL(XPropertyListType t, std::u16string_view rUrl)
sal_uInt16 mnCurrentPalette
Reference< XComponentContext > getProcessComponentContext()
void SetColorSelectFunction(const ColorSelectFunction &aColorSelectFunction)
std::vector< std::unique_ptr< Palette > > m_Palettes
sal_uInt16 mnNumOfPalettes
void AddRecentColor(const Color &rRecentColor, const OUString &rColorName, bool bFront=true)
std::unique_ptr< SvColorDialog > m_pColorDlg
std::function< void(const OUString &, const svx::NamedThemedColor &)> ColorSelectFunction