summaryrefslogtreecommitdiff
path: root/cui
diff options
context:
space:
mode:
authorBalazs Varga <balazs.varga.extern@allotropia.de>2023-12-19 20:54:39 +0100
committerBalazs Varga <balazs.varga.extern@allotropia.de>2023-12-21 00:22:27 +0100
commit0cd74b5be297f638d455b9b267462192f2e6620c (patch)
tree80ca649d336ed4624f8cda7253eaa188ea5b7766 /cui
parent9f92a39234dfae40fe19ab6fa47caf8b21dd8847 (diff)
tdf#158759 - UI: Part 56 - Unify lockdown behavior of Options dialog
for General - Application Colors Page. Change-Id: I2fb6c73cef82c12c3c8f3c49fb0e4b62703a1de3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161030 Tested-by: Jenkins Reviewed-by: Balazs Varga <balazs.varga.extern@allotropia.de>
Diffstat (limited to 'cui')
-rw-r--r--cui/source/options/optcolor.cxx205
-rw-r--r--cui/source/options/optcolor.hxx2
-rw-r--r--cui/uiconfig/ui/optappearancepage.ui62
3 files changed, 183 insertions, 86 deletions
diff --git a/cui/source/options/optcolor.cxx b/cui/source/options/optcolor.cxx
index c8841205f3b4..f1e1b8a26b18 100644
--- a/cui/source/options/optcolor.cxx
+++ b/cui/source/options/optcolor.cxx
@@ -21,6 +21,8 @@
#include <bitset>
+#include <com/sun/star/configuration/ReadWriteAccess.hpp>
+#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <tools/debug.hxx>
#include <editeng/editids.hrc>
#include <svtools/colorcfg.hxx>
@@ -36,6 +38,8 @@
#include <strings.hrc>
#include <svtools/miscopt.hxx>
#include <officecfg/Office/Common.hxx>
+#include <officecfg/Office/ExtendedColorScheme.hxx>
+#include <officecfg/Office/UI.hxx>
using namespace ::com::sun::star;
using namespace ::svtools;
@@ -87,6 +91,8 @@ struct
OUString pColor;
// has checkbox?
bool bCheckBox;
+ //prop name
+ std::u16string_view sPropName;
}
const vEntryInfo[] =
{
@@ -98,67 +104,67 @@ const vEntryInfo[] =
// The list of these entries (enum ColorConfigEntry) are in colorcfg.hxx.
- { Group_General, IDS(doccolor) },
- { Group_General, IDS_CB(docboundaries) },
- { Group_General, IDS(appback) },
- { Group_General, IDS_CB(objboundaries) },
- { Group_General, IDS_CB(tblboundaries) },
- { Group_General, IDS(font) },
- { Group_General, IDS_CB(unvisitedlinks) },
- { Group_General, IDS_CB(visitedlinks) },
- { Group_General, IDS(autospellcheck) },
- { Group_General, IDS(grammarcheck) },
- { Group_General, IDS(smarttags) },
- { Group_General, IDS_CB(shadows) },
-
- { Group_Writer, IDS(writergrid) },
- { Group_Writer, IDS_CB(field) },
- { Group_Writer, IDS_CB(index) },
- { Group_Writer, IDS(direct) },
- { Group_Writer, IDS(script) },
- { Group_Writer, IDS_CB(section) },
- { Group_Writer, IDS(hdft) },
- { Group_Writer, IDS(pagebreak) },
-
- { Group_Html, IDS(sgml) },
- { Group_Html, IDS(htmlcomment) },
- { Group_Html, IDS(htmlkeyword) },
- { Group_Html, IDS(unknown) },
-
- { Group_Calc, IDS(calcgrid) },
- { Group_Calc, IDS(brk) },
- { Group_Calc, IDS(brkmanual) },
- { Group_Calc, IDS(brkauto) },
- { Group_Calc, IDS_CB(hiddencolrow) },
- { Group_Calc, IDS_CB(textoverflow) },
- { Group_Calc, IDS(comments) },
- { Group_Calc, IDS(det) },
- { Group_Calc, IDS(deterror) },
- { Group_Calc, IDS(ref) },
- { Group_Calc, IDS(notes) },
- { Group_Calc, IDS(values) },
- { Group_Calc, IDS(formulas) },
- { Group_Calc, IDS(text) },
- { Group_Calc, IDS(protectedcells) },
-
- { Group_Draw, IDS(drawgrid) },
-
- { Group_Basic, IDS(basiceditor) },
- { Group_Basic, IDS(basicid) },
- { Group_Basic, IDS(basiccomment) },
- { Group_Basic, IDS(basicnumber) },
- { Group_Basic, IDS(basicstring) },
- { Group_Basic, IDS(basicop) },
- { Group_Basic, IDS(basickeyword) },
- { Group_Basic, IDS(error) },
-
- { Group_Sql, IDS(sqlid) },
- { Group_Sql, IDS(sqlnumber) },
- { Group_Sql, IDS(sqlstring) },
- { Group_Sql, IDS(sqlop) },
- { Group_Sql, IDS(sqlkeyword) },
- { Group_Sql, IDS(sqlparam) },
- { Group_Sql, IDS(sqlcomment) }
+ { Group_General, IDS(doccolor), std::u16string_view(u"/DocColor") },
+ { Group_General, IDS_CB(docboundaries), std::u16string_view(u"/DocBoundaries") },
+ { Group_General, IDS(appback), std::u16string_view(u"/AppBackground") },
+ { Group_General, IDS_CB(objboundaries), std::u16string_view(u"/ObjectBoundaries") },
+ { Group_General, IDS_CB(tblboundaries), std::u16string_view(u"/TableBoundaries") },
+ { Group_General, IDS(font), std::u16string_view(u"/FontColor") },
+ { Group_General, IDS_CB(unvisitedlinks), std::u16string_view(u"/Links") },
+ { Group_General, IDS_CB(visitedlinks), std::u16string_view(u"/LinksVisited") },
+ { Group_General, IDS(autospellcheck), std::u16string_view(u"/Spell") },
+ { Group_General, IDS(grammarcheck), std::u16string_view(u"/Grammar") },
+ { Group_General, IDS(smarttags), std::u16string_view(u"/SmartTags") },
+ { Group_General, IDS_CB(shadows), std::u16string_view(u"/Shadow") },
+
+ { Group_Writer, IDS(writergrid), std::u16string_view(u"/WriterTextGrid") },
+ { Group_Writer, IDS_CB(field), std::u16string_view(u"/WriterFieldShadings") },
+ { Group_Writer, IDS_CB(index), std::u16string_view(u"/WriterIdxShadings") },
+ { Group_Writer, IDS(direct), std::u16string_view(u"/WriterDirectCursor") },
+ { Group_Writer, IDS(script), std::u16string_view(u"/WriterScriptIndicator") },
+ { Group_Writer, IDS_CB(section), std::u16string_view(u"/WriterSectionBoundaries") },
+ { Group_Writer, IDS(hdft), std::u16string_view(u"/WriterHeaderFooterMark") },
+ { Group_Writer, IDS(pagebreak), std::u16string_view(u"/WriterPageBreaks") },
+
+ { Group_Html, IDS(sgml), std::u16string_view(u"/HTMLSGML") },
+ { Group_Html, IDS(htmlcomment), std::u16string_view(u"/HTMLComment") },
+ { Group_Html, IDS(htmlkeyword), std::u16string_view(u"/HTMLKeyword") },
+ { Group_Html, IDS(unknown), std::u16string_view(u"/HTMLUnknown") },
+
+ { Group_Calc, IDS(calcgrid), std::u16string_view(u"/CalcGrid") },
+ { Group_Calc, IDS(brk), std::u16string_view(u"/CalcPageBreak") },
+ { Group_Calc, IDS(brkmanual), std::u16string_view(u"/CalcPageBreakManual") },
+ { Group_Calc, IDS(brkauto), std::u16string_view(u"/CalcPageBreakAutomatic") },
+ { Group_Calc, IDS_CB(hiddencolrow), std::u16string_view(u"/CalcHiddenColRow") },
+ { Group_Calc, IDS_CB(textoverflow), std::u16string_view(u"/CalcTextOverflow") },
+ { Group_Calc, IDS(comments), std::u16string_view(u"/CalcComments") },
+ { Group_Calc, IDS(det), std::u16string_view(u"/CalcDetective") },
+ { Group_Calc, IDS(deterror), std::u16string_view(u"/CalcDetectiveError") },
+ { Group_Calc, IDS(ref), std::u16string_view(u"/CalcReference") },
+ { Group_Calc, IDS(notes), std::u16string_view(u"/CalcNotesBackground") },
+ { Group_Calc, IDS(values), std::u16string_view(u"/CalcValue") },
+ { Group_Calc, IDS(formulas), std::u16string_view(u"/CalcFormula") },
+ { Group_Calc, IDS(text), std::u16string_view(u"/CalcText") },
+ { Group_Calc, IDS(protectedcells), std::u16string_view(u"/CalcProtectedBackground") },
+
+ { Group_Draw, IDS(drawgrid), std::u16string_view(u"/DrawGrid") },
+
+ { Group_Basic, IDS(basiceditor), std::u16string_view(u"/BASICEditor") },
+ { Group_Basic, IDS(basicid), std::u16string_view(u"/BASICIdentifier") },
+ { Group_Basic, IDS(basiccomment), std::u16string_view(u"/BASICComment") },
+ { Group_Basic, IDS(basicnumber), std::u16string_view(u"/BASICNumber") },
+ { Group_Basic, IDS(basicstring), std::u16string_view(u"/BASICString") },
+ { Group_Basic, IDS(basicop), std::u16string_view(u"/BASICOperator") },
+ { Group_Basic, IDS(basickeyword), std::u16string_view(u"/BASICKeyword") },
+ { Group_Basic, IDS(error), std::u16string_view(u"/BASICError") },
+
+ { Group_Sql, IDS(sqlid), std::u16string_view(u"/SQLIdentifier") },
+ { Group_Sql, IDS(sqlnumber), std::u16string_view(u"/SQLNumber") },
+ { Group_Sql, IDS(sqlstring), std::u16string_view(u"/SQLString") },
+ { Group_Sql, IDS(sqlop), std::u16string_view(u"/SQLOperator") },
+ { Group_Sql, IDS(sqlkeyword), std::u16string_view(u"/SQLKeyword") },
+ { Group_Sql, IDS(sqlparam), std::u16string_view(u"/SQLParameter") },
+ { Group_Sql, IDS(sqlcomment), std::u16string_view(u"/SQLComment") }
#undef IDS
};
@@ -258,8 +264,10 @@ private:
void SetLinks(Link<weld::Toggleable&,void> const&,
Link<ColorListBox&,void> const&,
Link<weld::Widget&,void> const&);
- void Update (ColorConfigValue const&);
- void Update (ExtendedColorConfigValue const&);
+ void Update (ColorConfigValue const&, const std::u16string_view&,
+ css::uno::Reference<css::configuration::XReadWriteAccess> const&);
+ void Update (ExtendedColorConfigValue const&, const std::u16string_view&,
+ css::uno::Reference<css::configuration::XReadWriteAccess> const&);
void ColorChanged (ColorConfigValue&);
void ColorChanged (ExtendedColorConfigValue&);
@@ -274,6 +282,8 @@ private:
Color m_aDefaultColor;
};
+ css::uno::Reference<css::configuration::XReadWriteAccess> m_xReadWriteAccess;
+
private:
weld::Window* m_pTopLevel;
int m_nCheckBoxLabelOffset;
@@ -363,22 +373,54 @@ void ColorConfigWindow_Impl::Entry::SetLinks(Link<weld::Toggleable&,void> const&
}
// updates a default color config entry
-void ColorConfigWindow_Impl::Entry::Update(ColorConfigValue const& rValue)
+void ColorConfigWindow_Impl::Entry::Update(ColorConfigValue const& rValue, const std::u16string_view& rConfigPath,
+ css::uno::Reference<css::configuration::XReadWriteAccess> const& xReadWriteAccess)
{
Color aColor(rValue.nColor);
m_xColorList->SelectEntry(aColor);
+
+ bool bReadOnly = false;
+ OUString aConfigPath = OUString::Concat(rConfigPath) + "/Color";
+ if (xReadWriteAccess->hasPropertyByHierarchicalName(aConfigPath))
+ {
+ css::beans::Property aProperty = xReadWriteAccess->getPropertyByHierarchicalName(aConfigPath);
+ bReadOnly = (aProperty.Attributes & css::beans::PropertyAttribute::READONLY) != 0;
+ }
+ m_xColorList->set_sensitive(!bReadOnly);
+
if (weld::Toggleable* pCheckBox = dynamic_cast<weld::Toggleable*>(m_xText.get()))
+ {
+ bReadOnly = false;
pCheckBox->set_active(rValue.bIsVisible);
+
+ aConfigPath = OUString::Concat(rConfigPath) + "/IsVisible";
+ if (xReadWriteAccess->hasPropertyByHierarchicalName(aConfigPath))
+ {
+ css::beans::Property aProperty = xReadWriteAccess->getPropertyByHierarchicalName(aConfigPath);
+ bReadOnly = (aProperty.Attributes & css::beans::PropertyAttribute::READONLY) != 0;
+ }
+ pCheckBox->set_sensitive(!bReadOnly);
+ }
}
// updates an extended color config entry
-void ColorConfigWindow_Impl::Entry::Update(ExtendedColorConfigValue const& rValue)
+void ColorConfigWindow_Impl::Entry::Update(ExtendedColorConfigValue const& rValue, const std::u16string_view& rConfigPath,
+ css::uno::Reference<css::configuration::XReadWriteAccess> const& xReadWriteAccess)
{
Color aColor(rValue.getColor());
if (rValue.getColor() == rValue.getDefaultColor())
m_xColorList->SelectEntry(COL_AUTO);
else
m_xColorList->SelectEntry(aColor);
+
+ bool bReadOnly = false;
+ OUString aConfigPath = OUString::Concat(rConfigPath) + rValue.getName() + "/Color";
+ if (xReadWriteAccess->hasPropertyByHierarchicalName(aConfigPath))
+ {
+ css::beans::Property aProperty = xReadWriteAccess->getPropertyByHierarchicalName(aConfigPath);
+ bReadOnly = (aProperty.Attributes & css::beans::PropertyAttribute::READONLY) != 0;
+ }
+ m_xColorList->set_sensitive(!bReadOnly);
}
// color of a default entry has changed
@@ -407,6 +449,9 @@ ColorConfigWindow_Impl::ColorConfigWindow_Impl(weld::Window* pTopLevel, weld::Co
, m_xWidget1(m_xBuilder->weld_widget("docboundaries"))
, m_xWidget2(m_xBuilder->weld_widget("docboundaries_lb"))
{
+ css::uno::Reference < css::uno::XComponentContext > xContext(::comphelper::getProcessComponentContext());
+ m_xReadWriteAccess = css::configuration::ReadWriteAccess::create(xContext, "*");
+
CreateEntries();
}
@@ -509,11 +554,17 @@ void ColorConfigWindow_Impl::Update (
EditableExtendedColorConfig const* pExtConfig)
{
// updating default entries
+ std::optional<OUString> aUIColorSchemeName = officecfg::Office::UI::ColorScheme::CurrentColorScheme::get();
+ OUString aUIColorSchemePath = officecfg::Office::UI::ColorScheme::ColorSchemes::path() + u"/" + aUIColorSchemeName.value();
+
for (unsigned i = 0; i != ColorConfigEntryCount; ++i)
{
+ OUString sPath = aUIColorSchemePath + vEntryInfo[i].sPropName;
ColorConfigEntry const aColorEntry = static_cast<ColorConfigEntry>(i);
vEntries[i]->Update(
- pConfig->GetColorValue(aColorEntry)
+ pConfig->GetColorValue(aColorEntry),
+ sPath,
+ m_xReadWriteAccess
);
}
@@ -523,10 +574,14 @@ void ColorConfigWindow_Impl::Update (
for (unsigned j = 0; j != nExtCount; ++j)
{
OUString sComponentName = pExtConfig->GetComponentName(j);
+ aUIColorSchemePath = officecfg::Office::ExtendedColorScheme::ExtendedColorScheme::ColorSchemes::path() + u"/" +
+ aUIColorSchemeName.value() + u"/" + sComponentName + u"/Entries/";
unsigned const nColorCount = pExtConfig->GetComponentColorCount(sComponentName);
for (unsigned k = 0; i != vEntries.size() && k != nColorCount; ++i, ++k)
vEntries[i]->Update(
- pExtConfig->GetComponentColorConfigValue(sComponentName, k)
+ pExtConfig->GetComponentColorConfigValue(sComponentName, k),
+ aUIColorSchemePath,
+ m_xReadWriteAccess
);
}
}
@@ -746,7 +801,9 @@ SvxColorOptionsTabPage::SvxColorOptionsTabPage(weld::Container* pPage, weld::Dia
, bFillItemSetCalled(false)
, m_nSizeAllocEventId(nullptr)
, m_xAutoColorLB(m_xBuilder->weld_combo_box("autocolorlb"))
+ , m_xAutoColorImg(m_xBuilder->weld_widget("lockautocolorlb"))
, m_xColorSchemeLB(m_xBuilder->weld_combo_box("colorschemelb"))
+ , m_xColorSchemeImg(m_xBuilder->weld_widget("lockcolorschemelb"))
, m_xSaveSchemePB(m_xBuilder->weld_button("save"))
, m_xDeleteSchemePB(m_xBuilder->weld_button("delete"))
, m_xColorConfigCT(new ColorConfigCtrl_Impl(pController->getDialog(), *m_xBuilder))
@@ -850,6 +907,13 @@ void SvxColorOptionsTabPage::Reset( const SfxItemSet* )
m_xAutoColorLB->set_active( MiscSettings::GetAppColorMode() );
+ bool bReadOnly = officecfg::Office::ExtendedColorScheme::ExtendedColorScheme::CurrentColorScheme::isReadOnly() ||
+ officecfg::Office::UI::ColorScheme::CurrentColorScheme::isReadOnly();
+ m_xAutoColorLB->set_sensitive(!bReadOnly);
+ m_xSaveSchemePB->set_sensitive(!bReadOnly);
+ m_xDeleteSchemePB->set_sensitive(!bReadOnly);
+ m_xAutoColorImg->set_visible(bReadOnly);
+
OUString sUser = GetUserData();
//has to be called always to speed up accessibility tools
m_xColorConfigCT->SetScrollPosition(sUser.toInt32());
@@ -857,9 +921,14 @@ void SvxColorOptionsTabPage::Reset( const SfxItemSet* )
const uno::Sequence< OUString > aSchemes = pColorConfig->GetSchemeNames();
for(const OUString& s : aSchemes)
m_xColorSchemeLB->append_text(lcl_SchemeIdToTranslatedName(s));
+
m_xColorSchemeLB->set_active_text(lcl_SchemeIdToTranslatedName(pColorConfig->GetCurrentSchemeName()));
+ m_xColorSchemeLB->set_sensitive(!officecfg::Office::Common::Misc::ApplicationAppearance::isReadOnly());
+ m_xColorSchemeImg->set_visible(officecfg::Office::Common::Misc::ApplicationAppearance::isReadOnly());
m_xColorSchemeLB->save_value();
- m_xDeleteSchemePB->set_sensitive( aSchemes.getLength() > 1 );
+
+ m_xDeleteSchemePB->set_sensitive( aSchemes.getLength() > 1 &&
+ !officecfg::Office::ExtendedColorScheme::ExtendedColorScheme::CurrentColorScheme::isReadOnly() );
UpdateColorConfig();
}
diff --git a/cui/source/options/optcolor.hxx b/cui/source/options/optcolor.hxx
index 396746dea07d..7b5cdbca7451 100644
--- a/cui/source/options/optcolor.hxx
+++ b/cui/source/options/optcolor.hxx
@@ -32,7 +32,9 @@ class SvxColorOptionsTabPage : public SfxTabPage
ImplSVEvent* m_nSizeAllocEventId;
std::unique_ptr<weld::ComboBox> m_xAutoColorLB;
+ std::unique_ptr<weld::Widget> m_xAutoColorImg;
std::unique_ptr<weld::ComboBox> m_xColorSchemeLB;
+ std::unique_ptr<weld::Widget> m_xColorSchemeImg;
std::unique_ptr<weld::Button> m_xSaveSchemePB;
std::unique_ptr<weld::Button> m_xDeleteSchemePB;
std::unique_ptr<ColorConfigCtrl_Impl> m_xColorConfigCT;
diff --git a/cui/uiconfig/ui/optappearancepage.ui b/cui/uiconfig/ui/optappearancepage.ui
index 227565907c80..0d8792b12244 100644
--- a/cui/uiconfig/ui/optappearancepage.ui
+++ b/cui/uiconfig/ui/optappearancepage.ui
@@ -135,7 +135,7 @@
</packing>
</child>
<child>
- <!-- n-columns=6 n-rows=1 -->
+ <!-- n-columns=8 n-rows=1 -->
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can-focus">False</property>
@@ -144,19 +144,6 @@
<property name="hexpand">True</property>
<property name="column-spacing">6</property>
<child>
- <object class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes" context="optappearancepage|label3">_Scheme:</property>
- <property name="use-underline">True</property>
- <property name="mnemonic-widget">colorschemelb</property>
- </object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">0</property>
- </packing>
- </child>
- <child>
<object class="GtkButton" id="save">
<property name="label" translatable="yes" context="optappearancepage|save">_Save</property>
<property name="visible">True</property>
@@ -170,7 +157,7 @@
</child>
</object>
<packing>
- <property name="left-attach">2</property>
+ <property name="left-attach">3</property>
<property name="top-attach">0</property>
</packing>
</child>
@@ -188,7 +175,7 @@
</child>
</object>
<packing>
- <property name="left-attach">3</property>
+ <property name="left-attach">4</property>
<property name="top-attach">0</property>
</packing>
</child>
@@ -204,7 +191,7 @@
</child>
</object>
<packing>
- <property name="left-attach">1</property>
+ <property name="left-attach">2</property>
<property name="top-attach">0</property>
</packing>
</child>
@@ -218,7 +205,7 @@
<property name="mnemonic-widget">autocolorlb</property>
</object>
<packing>
- <property name="left-attach">4</property>
+ <property name="left-attach">6</property>
<property name="top-attach">0</property>
</packing>
</child>
@@ -234,10 +221,49 @@
</items>
</object>
<packing>
+ <property name="left-attach">7</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="lockautocolorlb">
+ <property name="can-focus">False</property>
+ <property name="no-show-all">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="icon-name">res/lock.png</property>
+ </object>
+ <packing>
<property name="left-attach">5</property>
<property name="top-attach">0</property>
</packing>
</child>
+ <child>
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes" context="optappearancepage|label3">_Scheme:</property>
+ <property name="use-underline">True</property>
+ <property name="mnemonic-widget">colorschemelb</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="lockcolorschemelb">
+ <property name="can-focus">False</property>
+ <property name="no-show-all">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="icon-name">res/lock.png</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="left-attach">0</property>