cui/source/options/connpooloptions.cxx |   30 +++-
 cui/source/options/connpooloptions.hxx |    6 
 cui/uiconfig/ui/connpooloptions.ui     |  244 +++++++++++++++++++++------------
 3 files changed, 191 insertions(+), 89 deletions(-)

New commits:
commit ebb51d094d9d58568ad6adf5730b04b5f24c7f25
Author:     Balazs Varga <balazs.varga.ext...@allotropia.de>
AuthorDate: Mon Nov 6 11:25:44 2023 +0100
Commit:     Balazs Varga <balazs.varga.ext...@allotropia.de>
CommitDate: Tue Nov 7 21:40:50 2023 +0100

    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.ext...@allotropia.de>

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
@@ -47,25 +47,6 @@
             <property name="hexpand">True</property>
             <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">
@@ -132,73 +113,6 @@
                     <property name="top-attach">2</property>
                   </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>
@@ -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">

Reply via email to