diff options
author | Balazs Varga <balazs.varga.extern@allotropia.de> | 2023-11-06 11:25:44 +0100 |
---|---|---|
committer | Balazs Varga <balazs.varga.extern@allotropia.de> | 2023-11-07 21:40:50 +0100 |
commit | ebb51d094d9d58568ad6adf5730b04b5f24c7f25 (patch) | |
tree | 54fca1173d412d47479aa396cc83924125b9f72e /cui | |
parent | 1e990eaa9e12cfba0114cd6cea5510985d3b51f3 (diff) |
tdf#158004 - UI: Part 20 - Unify lockdown behavior of Options dialog
for Connections Page.
Change-Id: I76510a893bb35e03e6401aeeb03971969cc42ad2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158989
Tested-by: Jenkins
Reviewed-by: Balazs Varga <balazs.varga.extern@allotropia.de>
Diffstat (limited to 'cui')
-rw-r--r-- | cui/source/options/connpooloptions.cxx | 30 | ||||
-rw-r--r-- | cui/source/options/connpooloptions.hxx | 6 | ||||
-rw-r--r-- | cui/uiconfig/ui/connpooloptions.ui | 244 |
3 files changed, 191 insertions, 89 deletions
diff --git a/cui/source/options/connpooloptions.cxx b/cui/source/options/connpooloptions.cxx index 00101bed4fb6..f6321f2252b1 100644 --- a/cui/source/options/connpooloptions.cxx +++ b/cui/source/options/connpooloptions.cxx @@ -25,6 +25,8 @@ #include <svx/databaseregistrationui.hxx> #include <strings.hrc> #include <dialmgr.hxx> +#include <officecfg/Office/DataAccess.hxx> +#include <com/sun/star/beans/PropertyAttribute.hpp> namespace offapp { @@ -49,13 +51,16 @@ namespace offapp , m_sYes(CuiResId(RID_CUISTR_YES)) , m_sNo(CuiResId(RID_CUISTR_NO)) , m_xEnablePooling(m_xBuilder->weld_check_button("connectionpooling")) + , m_xEnablePoolingImg(m_xBuilder->weld_widget("lockconnectionpooling")) , m_xDriversLabel(m_xBuilder->weld_label("driverslabel")) , m_xDriverList(m_xBuilder->weld_tree_view("driverlist")) , m_xDriverLabel(m_xBuilder->weld_label("driverlabel")) , m_xDriver(m_xBuilder->weld_label("driver")) , m_xDriverPoolingEnabled(m_xBuilder->weld_check_button("enablepooling")) + , m_xDriverPoolingEnabledImg(m_xBuilder->weld_widget("lockenablepooling")) , m_xTimeoutLabel(m_xBuilder->weld_label("timeoutlabel")) , m_xTimeout(m_xBuilder->weld_spin_button("timeout")) + , m_xTimeoutImg(m_xBuilder->weld_widget("locktimeout")) { m_xDriverList->set_size_request(m_xDriverList->get_approximate_digit_width() * 60, m_xDriverList->get_height_rows(15)); @@ -68,6 +73,9 @@ namespace offapp }; m_xDriverList->set_column_fixed_widths(aWidths); + css::uno::Reference < css::uno::XComponentContext > xContext(::comphelper::getProcessComponentContext()); + m_xReadWriteAccess = css::configuration::ReadWriteAccess::create(xContext, "*"); + m_xEnablePooling->connect_toggled( LINK(this, ConnectionPoolOptionsPage, OnEnabledDisabled) ); m_xDriverPoolingEnabled->connect_toggled( LINK(this, ConnectionPoolOptionsPage, OnEnabledDisabled) ); @@ -136,6 +144,8 @@ namespace offapp const SfxBoolItem* pEnabled = _rSet.GetItem<SfxBoolItem>(SID_SB_POOLING_ENABLED); OSL_ENSURE(pEnabled, "ConnectionPoolOptionsPage::implInitControls: missing the Enabled item!"); m_xEnablePooling->set_active(pEnabled == nullptr || pEnabled->GetValue()); + m_xEnablePooling->set_sensitive(!officecfg::Office::DataAccess::ConnectionPool::EnablePooling::isReadOnly()); + m_xEnablePoolingImg->set_visible(officecfg::Office::DataAccess::ConnectionPool::EnablePooling::isReadOnly()); m_xEnablePooling->save_state(); @@ -233,6 +243,20 @@ namespace offapp m_xDriverPoolingEnabled->set_active(currentSetting.bEnabled); m_xTimeout->set_value(currentSetting.nTimeoutSeconds); + OUString aConfigPath = officecfg::Office::DataAccess::ConnectionPool::DriverSettings::path() + "/" + currentSetting.sName; + css::beans::Property aProperty = m_xReadWriteAccess->getPropertyByHierarchicalName(aConfigPath + "/Enable"); + bool bReadOnly = (aProperty.Attributes & css::beans::PropertyAttribute::READONLY) != 0; + + m_xDriverPoolingEnabled->set_sensitive(!bReadOnly); + m_xDriverPoolingEnabledImg->set_visible(bReadOnly); + + aProperty = m_xReadWriteAccess->getPropertyByHierarchicalName(aConfigPath + "/Timeout"); + bReadOnly = (aProperty.Attributes & css::beans::PropertyAttribute::READONLY) != 0; + + m_xTimeout->set_sensitive(!bReadOnly); + m_xTimeoutLabel->set_sensitive(!bReadOnly); + m_xTimeoutImg->set_visible(bReadOnly); + OnEnabledDisabled(*m_xDriverPoolingEnabled); } } @@ -259,13 +283,13 @@ namespace offapp m_xDriverList->select(-1); m_xDriverLabel->set_sensitive(bGloballyEnabled); m_xDriver->set_sensitive(bGloballyEnabled); - m_xDriverPoolingEnabled->set_sensitive(bGloballyEnabled); + m_xDriverPoolingEnabled->set_sensitive(bGloballyEnabled && !m_xDriverPoolingEnabledImg->get_visible()); } else OSL_ENSURE(bLocalDriverChanged, "ConnectionPoolOptionsPage::OnEnabledDisabled: where did this come from?"); - m_xTimeoutLabel->set_sensitive(bGloballyEnabled && m_xDriverPoolingEnabled->get_active()); - m_xTimeout->set_sensitive(bGloballyEnabled && m_xDriverPoolingEnabled->get_active()); + m_xTimeoutLabel->set_sensitive(bGloballyEnabled && m_xDriverPoolingEnabled->get_active() && !m_xTimeoutImg->get_visible()); + m_xTimeout->set_sensitive(bGloballyEnabled && m_xDriverPoolingEnabled->get_active() && !m_xTimeoutImg->get_visible()); if (bLocalDriverChanged) { diff --git a/cui/source/options/connpooloptions.hxx b/cui/source/options/connpooloptions.hxx index e5ec2a63b1af..2413f0d16de3 100644 --- a/cui/source/options/connpooloptions.hxx +++ b/cui/source/options/connpooloptions.hxx @@ -20,6 +20,7 @@ #pragma once #include <sfx2/tabdlg.hxx> +#include <com/sun/star/configuration/ReadWriteAccess.hpp> #include "connpoolsettings.hxx" @@ -32,14 +33,19 @@ namespace offapp DriverPoolingSettings m_aSettings; DriverPoolingSettings m_aSavedSettings; + css::uno::Reference< css::configuration::XReadWriteAccess> m_xReadWriteAccess; + std::unique_ptr<weld::CheckButton> m_xEnablePooling; + std::unique_ptr<weld::Widget> m_xEnablePoolingImg; std::unique_ptr<weld::Label> m_xDriversLabel; std::unique_ptr<weld::TreeView> m_xDriverList; std::unique_ptr<weld::Label> m_xDriverLabel; std::unique_ptr<weld::Label> m_xDriver; std::unique_ptr<weld::CheckButton> m_xDriverPoolingEnabled; + std::unique_ptr<weld::Widget> m_xDriverPoolingEnabledImg; std::unique_ptr<weld::Label> m_xTimeoutLabel; std::unique_ptr<weld::SpinButton> m_xTimeout; + std::unique_ptr<weld::Widget> m_xTimeoutImg; public: ConnectionPoolOptionsPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& _rAttrSet); diff --git a/cui/uiconfig/ui/connpooloptions.ui b/cui/uiconfig/ui/connpooloptions.ui index 20440c5284b2..f31d0245ccaa 100644 --- a/cui/uiconfig/ui/connpooloptions.ui +++ b/cui/uiconfig/ui/connpooloptions.ui @@ -48,25 +48,6 @@ <property name="vexpand">True</property> <property name="row-spacing">6</property> <child> - <object class="GtkCheckButton" id="connectionpooling"> - <property name="label" translatable="yes" context="connpooloptions|connectionpooling">Connection pooling enabled</property> - <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">False</property> - <property name="use-underline">True</property> - <property name="draw-indicator">True</property> - <child internal-child="accessible"> - <object class="AtkObject" id="connectionpooling-atkobject"> - <property name="AtkObject::accessible-description" translatable="yes" context="extended_tip|connectionpooling">Specifies whether the chosen connections are pooled.</property> - </object> - </child> - </object> - <packing> - <property name="left-attach">0</property> - <property name="top-attach">0</property> - </packing> - </child> - <child> <!-- n-columns=1 n-rows=5 --> <object class="GtkGrid" id="grid2"> <property name="visible">True</property> @@ -133,73 +114,6 @@ </packing> </child> <child> - <object class="GtkCheckButton" id="enablepooling"> - <property name="label" translatable="yes" context="connpooloptions|enablepooling">Enable pooling for this driver</property> - <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">False</property> - <property name="use-underline">True</property> - <property name="draw-indicator">True</property> - <child internal-child="accessible"> - <object class="AtkObject" id="enablepooling-atkobject"> - <property name="AtkObject::accessible-description" translatable="yes" context="extended_tip|enablepooling">Select a driver from the list and mark the Enable pooling for this driver checkbox in order to pool its connection.</property> - </object> - </child> - </object> - <packing> - <property name="left-attach">0</property> - <property name="top-attach">3</property> - </packing> - </child> - <child> - <object class="GtkBox" id="box4"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="margin-start">12</property> - <property name="spacing">12</property> - <child> - <object class="GtkLabel" id="timeoutlabel"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes" context="connpooloptions|timeoutlabel">_Timeout (seconds):</property> - <property name="use-underline">True</property> - <property name="mnemonic-widget">timeout</property> - <property name="xalign">0</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkSpinButton" id="timeout"> - <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="activates-default">True</property> - <property name="text">60</property> - <property name="truncate-multiline">True</property> - <property name="adjustment">adjustment1</property> - <property name="value">60</property> - <child internal-child="accessible"> - <object class="AtkObject" id="timeout-atkobject"> - <property name="AtkObject::accessible-description" translatable="yes" context="extended_tip|timeout">Defines the time in seconds after which a pooled connection is freed.</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="left-attach">0</property> - <property name="top-attach">4</property> - </packing> - </child> - <child> <object class="GtkBox"> <property name="visible">True</property> <property name="can-focus">False</property> @@ -280,12 +194,170 @@ <property name="top-attach">1</property> </packing> </child> + <child> + <!-- n-columns=2 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <child> + <object class="GtkBox" id="box4"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">12</property> + <property name="spacing">12</property> + <child> + <object class="GtkLabel" id="timeoutlabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="connpooloptions|timeoutlabel">_Timeout (seconds):</property> + <property name="use-underline">True</property> + <property name="mnemonic-widget">timeout</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="timeout"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="activates-default">True</property> + <property name="text">60</property> + <property name="truncate-multiline">True</property> + <property name="adjustment">adjustment1</property> + <property name="value">60</property> + <child internal-child="accessible"> + <object class="AtkObject" id="timeout-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="extended_tip|timeout">Defines the time in seconds after which a pooled connection is freed.</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left-attach">1</property> + <property name="top-attach">0</property> + </packing> + </child> + <child> + <object class="GtkImage" id="locktimeout"> + <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> + <property name="top-attach">4</property> + </packing> + </child> + <child> + <!-- n-columns=2 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <child> + <object class="GtkCheckButton" id="enablepooling"> + <property name="label" translatable="yes" context="connpooloptions|enablepooling">Enable pooling for this driver</property> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> + <child internal-child="accessible"> + <object class="AtkObject" id="enablepooling-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="extended_tip|enablepooling">Select a driver from the list and mark the Enable pooling for this driver checkbox in order to pool its connection.</property> + </object> + </child> + </object> + <packing> + <property name="left-attach">1</property> + <property name="top-attach">0</property> + </packing> + </child> + <child> + <object class="GtkImage" id="lockenablepooling"> + <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> + <property name="top-attach">3</property> + </packing> + </child> </object> <packing> <property name="left-attach">0</property> <property name="top-attach">1</property> </packing> </child> + <child> + <!-- n-columns=2 n-rows=1 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <child> + <object class="GtkCheckButton" id="connectionpooling"> + <property name="label" translatable="yes" context="connpooloptions|connectionpooling">Connection pooling enabled</property> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> + <child internal-child="accessible"> + <object class="AtkObject" id="connectionpooling-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="extended_tip|connectionpooling">Specifies whether the chosen connections are pooled.</property> + </object> + </child> + </object> + <packing> + <property name="left-attach">1</property> + <property name="top-attach">0</property> + </packing> + </child> + <child> + <object class="GtkImage" id="lockconnectionpooling"> + <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> + <property name="top-attach">0</property> + </packing> + </child> </object> </child> <child type="label"> |