cui/source/options/optgdlg.cxx    |   52 +++++++++--
 cui/source/options/optgdlg.hxx    |    9 +
 cui/uiconfig/ui/optgeneralpage.ui |  172 ++++++++++++++++++++++++++++++++------
 3 files changed, 199 insertions(+), 34 deletions(-)

New commits:
commit d8b96939806bbeacc91bb2c42d44bb6de21010d0
Author:     Balazs Varga <[email protected]>
AuthorDate: Thu Oct 19 18:08:38 2023 +0200
Commit:     Balazs Varga <[email protected]>
CommitDate: Tue Oct 24 08:37:42 2023 +0200

    tdf#157702 - UI: Part 2 - Unify lockdown behavior of Options dialog
    
    for General Page.
    
    Change-Id: Ide7c387d1b9f8ebba7f7801cdd69b1e1a93f90e4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158196
    Tested-by: Jenkins
    Reviewed-by: Balazs Varga <[email protected]>

diff --git a/cui/source/options/optgdlg.cxx b/cui/source/options/optgdlg.cxx
index c8a569a9845e..f0e2cf26e2e2 100644
--- a/cui/source/options/optgdlg.cxx
+++ b/cui/source/options/optgdlg.cxx
@@ -160,35 +160,36 @@ bool lcl_HasSystemFilePicker()
 OfaMiscTabPage::OfaMiscTabPage(weld::Container* pPage, weld::DialogController* 
pController, const SfxItemSet& rSet)
     : SfxTabPage(pPage, pController, "cui/ui/optgeneralpage.ui", 
"OptGeneralPage", &rSet)
     , m_xExtHelpCB(m_xBuilder->weld_check_button("exthelp"))
+    , m_xExtHelpImg(m_xBuilder->weld_widget("lockexthelp"))
     , m_xPopUpNoHelpCB(m_xBuilder->weld_check_button("popupnohelp"))
+    , m_xPopUpNoHelpImg(m_xBuilder->weld_widget("lockpopupnohelp"))
     , m_xShowTipOfTheDay(m_xBuilder->weld_check_button("cbShowTipOfTheDay"))
+    , m_xShowTipOfTheDayImg(m_xBuilder->weld_widget("lockcbShowTipOfTheDay"))
     , m_xFileDlgFrame(m_xBuilder->weld_widget("filedlgframe"))
     , m_xFileDlgROImage(m_xBuilder->weld_widget("lockimage"))
     , m_xFileDlgCB(m_xBuilder->weld_check_button("filedlg"))
     , m_xDocStatusCB(m_xBuilder->weld_check_button("docstatus"))
+    , m_xDocStatusImg(m_xBuilder->weld_widget("lockdocstatus"))
     , m_xYearFrame(m_xBuilder->weld_widget("yearframe"))
+    , m_xYearLabel(m_xBuilder->weld_label("yearslabel"))
     , m_xYearValueField(m_xBuilder->weld_spin_button("year"))
     , m_xToYearFT(m_xBuilder->weld_label("toyear"))
+    , m_xYearFrameImg(m_xBuilder->weld_widget("lockyears"))
 #if HAVE_FEATURE_BREAKPAD
     , m_xPrivacyFrame(m_xBuilder->weld_widget("privacyframe"))
     , m_xCrashReport(m_xBuilder->weld_check_button("crashreport"))
+    , m_xCrashReportImg(m_xBuilder->weld_widget("lockcrashreport"))
 #endif
 #if defined(_WIN32)
     , m_xQuickStarterFrame(m_xBuilder->weld_widget("quickstarter"))
     , m_xQuickLaunchCB(m_xBuilder->weld_check_button("quicklaunch"))
+    , m_xQuickLaunchImg(m_xBuilder->weld_widget("lockquicklaunch"))
     , m_xFileAssocFrame(m_xBuilder->weld_widget("fileassoc"))
     , m_xFileAssocBtn(m_xBuilder->weld_button("assocfiles"))
     , 
m_xPerformFileExtCheck(m_xBuilder->weld_check_button("cbPerformFileExtCheck"))
+    , 
m_xPerformFileExtImg(m_xBuilder->weld_widget("lockcbPerformFileExtCheck"))
 #endif
 {
-    if (!lcl_HasSystemFilePicker())
-        m_xFileDlgFrame->hide();
-    else if 
(officecfg::Office::Common::Misc::UseSystemFileDialog::isReadOnly())
-    {
-        m_xFileDlgROImage->show();
-        m_xFileDlgCB->set_sensitive(false);
-    }
-
 #if HAVE_FEATURE_BREAKPAD
     m_xPrivacyFrame->show();
 #endif
@@ -221,7 +222,7 @@ std::unique_ptr<SfxTabPage> OfaMiscTabPage::Create( 
weld::Container* pPage, weld
 OUString OfaMiscTabPage::GetAllStrings()
 {
     OUString sAllStrings;
-    OUString labels[] = { "label1", "label2", "label4", "label5", "label6",
+    OUString labels[] = { "label1", "label2", "label4", "label5", "yearslabel",
                           "toyear", "label7", "label8", "label9" };
 
     for (const auto& label : labels)
@@ -313,19 +314,48 @@ bool OfaMiscTabPage::FillItemSet( SfxItemSet* rSet )
 
 void OfaMiscTabPage::Reset( const SfxItemSet* rSet )
 {
+    bool bEnable = !officecfg::Office::Common::Help::ExtendedTip::isReadOnly();
     m_xExtHelpCB->set_active( officecfg::Office::Common::Help::Tip::get() &&
             officecfg::Office::Common::Help::ExtendedTip::get() );
+    m_xExtHelpCB->set_sensitive(bEnable);
+    m_xExtHelpImg->set_visible(!bEnable);
     m_xExtHelpCB->save_state();
+
+    bEnable = 
!officecfg::Office::Common::Help::BuiltInHelpNotInstalledPopUp::isReadOnly();
     m_xPopUpNoHelpCB->set_active( 
officecfg::Office::Common::Help::BuiltInHelpNotInstalledPopUp::get() );
+    m_xPopUpNoHelpCB->set_sensitive(bEnable);
+    m_xPopUpNoHelpImg->set_visible(!bEnable);
     m_xPopUpNoHelpCB->save_state();
+
+    bEnable = !officecfg::Office::Common::Misc::ShowTipOfTheDay::isReadOnly();
     m_xShowTipOfTheDay->set_active( 
officecfg::Office::Common::Misc::ShowTipOfTheDay::get() );
+    m_xShowTipOfTheDay->set_sensitive(bEnable);
+    m_xShowTipOfTheDayImg->set_visible(!bEnable);
     m_xShowTipOfTheDay->save_state();
-    m_xFileDlgCB->set_active( 
!officecfg::Office::Common::Misc::UseSystemFileDialog::get() );
+
+    if (!lcl_HasSystemFilePicker())
+        m_xFileDlgFrame->hide();
+    else
+    {
+        bEnable = 
!officecfg::Office::Common::Misc::UseSystemFileDialog::isReadOnly();
+        m_xFileDlgCB->set_sensitive(bEnable);
+        m_xFileDlgROImage->set_visible(!bEnable);
+    }
+    
m_xFileDlgCB->set_active(!officecfg::Office::Common::Misc::UseSystemFileDialog::get());
     m_xFileDlgCB->save_state();
 
+    bEnable = 
!officecfg::Office::Common::Print::PrintingModifiesDocument::isReadOnly();
     
m_xDocStatusCB->set_active(officecfg::Office::Common::Print::PrintingModifiesDocument::get());
+    m_xDocStatusCB->set_sensitive(bEnable);
+    m_xDocStatusImg->set_visible(!bEnable);
     m_xDocStatusCB->save_state();
 
+    bEnable = 
!officecfg::Office::Common::DateFormat::TwoDigitYear::isReadOnly();
+    m_xYearLabel->set_sensitive(bEnable);
+    m_xYearValueField->set_sensitive(bEnable);
+    m_xToYearFT->set_sensitive(bEnable);
+    m_xYearFrameImg->set_visible(!bEnable);
+
     if ( const SfxUInt16Item* pYearItem = rSet->GetItemIfSet( 
SID_ATTR_YEAR2000, false ) )
     {
         m_xYearValueField->set_value( pYearItem->GetValue() );
@@ -337,6 +367,7 @@ void OfaMiscTabPage::Reset( const SfxItemSet* rSet )
 #if HAVE_FEATURE_BREAKPAD
     
m_xCrashReport->set_active(officecfg::Office::Common::Misc::CrashReport::get() 
&& CrashReporter::IsDumpEnable());
     
m_xCrashReport->set_sensitive(!officecfg::Office::Common::Misc::CrashReport::isReadOnly()
 && CrashReporter::IsDumpEnable());
+    
m_xCrashReportImg->set_visible(officecfg::Office::Common::Misc::CrashReport::isReadOnly()
 && CrashReporter::IsDumpEnable());
     m_xCrashReport->save_state();
 #endif
 
@@ -357,6 +388,7 @@ void OfaMiscTabPage::Reset( const SfxItemSet* rSet )
         officecfg::Office::Common::Misc::PerformFileExtCheck::get());
     m_xPerformFileExtCheck->save_state();
     
m_xPerformFileExtCheck->set_sensitive(!officecfg::Office::Common::Misc::PerformFileExtCheck::isReadOnly());
+    
m_xPerformFileExtImg->set_visible(officecfg::Office::Common::Misc::PerformFileExtCheck::isReadOnly());
 #endif
 }
 
diff --git a/cui/source/options/optgdlg.hxx b/cui/source/options/optgdlg.hxx
index 7dc7e073634e..02c5eda2ce74 100644
--- a/cui/source/options/optgdlg.hxx
+++ b/cui/source/options/optgdlg.hxx
@@ -34,25 +34,34 @@ private:
     OUString             m_aStrDateInfo;
 
     std::unique_ptr<weld::CheckButton> m_xExtHelpCB;
+    std::unique_ptr<weld::Widget> m_xExtHelpImg;
     std::unique_ptr<weld::CheckButton> m_xPopUpNoHelpCB;
+    std::unique_ptr<weld::Widget> m_xPopUpNoHelpImg;
     std::unique_ptr<weld::CheckButton> m_xShowTipOfTheDay;
+    std::unique_ptr<weld::Widget> m_xShowTipOfTheDayImg;
     std::unique_ptr<weld::Widget> m_xFileDlgFrame;
     std::unique_ptr<weld::Widget> m_xFileDlgROImage;
     std::unique_ptr<weld::CheckButton> m_xFileDlgCB;
     std::unique_ptr<weld::CheckButton> m_xDocStatusCB;
+    std::unique_ptr<weld::Widget> m_xDocStatusImg;
     std::unique_ptr<weld::Widget> m_xYearFrame;
+    std::unique_ptr<weld::Label> m_xYearLabel;
     std::unique_ptr<weld::SpinButton> m_xYearValueField;
     std::unique_ptr<weld::Label> m_xToYearFT;
+    std::unique_ptr<weld::Widget> m_xYearFrameImg;
 #if HAVE_FEATURE_BREAKPAD
     std::unique_ptr<weld::Widget> m_xPrivacyFrame;
     std::unique_ptr<weld::CheckButton> m_xCrashReport;
+    std::unique_ptr<weld::Widget> m_xCrashReportImg;
 #endif
 #if defined(_WIN32)
     std::unique_ptr<weld::Widget> m_xQuickStarterFrame;
     std::unique_ptr<weld::CheckButton> m_xQuickLaunchCB;
+    std::unique_ptr<weld::Widget> m_xQuickLaunchImg;
     std::unique_ptr<weld::Widget> m_xFileAssocFrame;
     std::unique_ptr<weld::Button> m_xFileAssocBtn;
     std::unique_ptr<weld::CheckButton> m_xPerformFileExtCheck;
+    std::unique_ptr<weld::Widget> m_xPerformFileExtImg;
 #endif
 
     DECL_LINK(TwoFigureHdl, weld::SpinButton&, void);
diff --git a/cui/uiconfig/ui/optgeneralpage.ui 
b/cui/uiconfig/ui/optgeneralpage.ui
index ce2743e99b6f..1f04a0c05dc1 100644
--- a/cui/uiconfig/ui/optgeneralpage.ui
+++ b/cui/uiconfig/ui/optgeneralpage.ui
@@ -23,12 +23,13 @@
         <property name="label-xalign">0</property>
         <property name="shadow-type">none</property>
         <child>
-          <!-- n-columns=1 n-rows=3 -->
+          <!-- n-columns=2 n-rows=3 -->
           <object class="GtkGrid" id="grid2">
             <property name="visible">True</property>
             <property name="can-focus">False</property>
             <property name="margin-start">12</property>
             <property name="margin-top">6</property>
+            <property name="column-spacing">6</property>
             <child>
               <object class="GtkCheckButton" id="exthelp">
                 <property name="label" translatable="yes" 
context="optgeneralpage|exthelp">_Extended tips</property>
@@ -44,7 +45,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">0</property>
               </packing>
             </child>
@@ -57,7 +58,7 @@
                 <property name="draw-indicator">True</property>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">1</property>
               </packing>
             </child>
@@ -70,6 +71,45 @@
                 <property name="active">True</property>
                 <property name="draw-indicator">True</property>
               </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockexthelp">
+                <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>
+            <child>
+              <object class="GtkImage" id="lockpopupnohelp">
+                <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">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockcbShowTipOfTheDay">
+                <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">2</property>
@@ -159,19 +199,44 @@
         <property name="label-xalign">0</property>
         <property name="shadow-type">none</property>
         <child>
-          <object class="GtkCheckButton" id="docstatus">
-            <property name="label" translatable="yes" 
context="optgeneralpage|docstatus">_Printing sets "document modified" 
status</property>
+          <!-- n-columns=2 n-rows=1 -->
+          <object class="GtkGrid" id="grid9">
             <property name="visible">True</property>
-            <property name="can-focus">True</property>
-            <property name="receives-default">False</property>
+            <property name="can-focus">False</property>
             <property name="margin-start">12</property>
             <property name="margin-top">6</property>
-            <property name="use-underline">True</property>
-            <property name="draw-indicator">True</property>
-            <child internal-child="accessible">
-              <object class="AtkObject" id="docstatus-atkobject">
-                <property name="AtkObject::accessible-description" 
translatable="yes" context="extended_tip | docstatus">Specifies whether the 
printing of the document counts as a modification.</property>
+            <property name="column-spacing">6</property>
+            <child>
+              <object class="GtkCheckButton" id="docstatus">
+                <property name="label" translatable="yes" 
context="optgeneralpage|docstatus">_Printing sets "document modified" 
status</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="docstatus-atkobject">
+                    <property name="AtkObject::accessible-description" 
translatable="yes" context="extended_tip | docstatus">Specifies whether the 
printing of the document counts as a modification.</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockdocstatus">
+                <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>
         </child>
@@ -198,7 +263,7 @@
         <property name="label-xalign">0</property>
         <property name="shadow-type">none</property>
         <child>
-          <!-- n-columns=3 n-rows=1 -->
+          <!-- n-columns=4 n-rows=1 -->
           <object class="GtkGrid" id="grid3">
             <property name="visible">True</property>
             <property name="can-focus">False</property>
@@ -206,7 +271,7 @@
             <property name="margin-top">6</property>
             <property name="column-spacing">6</property>
             <child>
-              <object class="GtkLabel" id="label6">
+              <object class="GtkLabel" id="yearslabel">
                 <property name="visible">True</property>
                 <property name="can-focus">False</property>
                 <property name="label" translatable="yes" 
context="optgeneralpage|label6">_Interpret as years between </property>
@@ -215,7 +280,7 @@
                 <property name="xalign">0</property>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">0</property>
               </packing>
             </child>
@@ -233,7 +298,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">1</property>
+                <property name="left-attach">2</property>
                 <property name="top-attach">0</property>
               </packing>
             </child>
@@ -244,7 +309,20 @@
                 <property name="label" translatable="yes" 
context="optgeneralpage|toyear">and </property>
               </object>
               <packing>
-                <property name="left-attach">2</property>
+                <property name="left-attach">3</property>
+                <property name="top-attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockyears">
+                <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>
@@ -268,17 +346,17 @@
     </child>
     <child>
       <object class="GtkFrame" id="privacyframe">
-        <property name="visible">False</property>
         <property name="can-focus">False</property>
         <property name="label-xalign">0</property>
         <property name="shadow-type">none</property>
         <child>
-          <!-- n-columns=1 n-rows=2 -->
-          <object class="GtkGrid">
+          <!-- n-columns=2 n-rows=2 -->
+          <object class="GtkGrid" id="grid10">
             <property name="visible">True</property>
             <property name="can-focus">False</property>
             <property name="margin-start">12</property>
             <property name="margin-top">6</property>
+            <property name="column-spacing">6</property>
             <child>
               <object class="GtkCheckButton" id="crashreport">
                 <property name="label" translatable="yes" 
context="optgeneralpage|crashreport">Sen_d crash reports to The Document 
Foundation</property>
@@ -290,6 +368,19 @@
                 <property name="active">True</property>
                 <property name="draw-indicator">True</property>
               </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockcrashreport">
+                <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">1</property>
@@ -298,6 +389,9 @@
             <child>
               <placeholder/>
             </child>
+            <child>
+              <placeholder/>
+            </child>
           </object>
         </child>
         <child type="label">
@@ -318,18 +412,18 @@
     </child>
     <child>
       <object class="GtkFrame" id="quickstarter">
-        <property name="visible">False</property>
         <property name="can-focus">False</property>
         <property name="label-xalign">0</property>
         <property name="shadow-type">none</property>
         <child>
-          <!-- n-columns=1 n-rows=1 -->
+          <!-- n-columns=2 n-rows=1 -->
           <object class="GtkGrid" id="grid7">
             <property name="visible">True</property>
             <property name="can-focus">False</property>
             <property name="margin-start">12</property>
             <property name="margin-top">6</property>
             <property name="row-spacing">6</property>
+            <property name="column-spacing">6</property>
             <child>
               <object class="GtkCheckButton" id="quicklaunch">
                 <property name="label" translatable="yes" 
context="optgeneralpage|quicklaunch">Load %PRODUCTNAME during system 
start-up</property>
@@ -340,6 +434,19 @@
                 <property name="use-underline">True</property>
                 <property name="draw-indicator">True</property>
               </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockquicklaunch">
+                <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>
@@ -369,13 +476,14 @@
         <property name="label-xalign">0</property>
         <property name="shadow-type">none</property>
         <child>
-          <!-- n-columns=1 n-rows=2 -->
+          <!-- n-columns=2 n-rows=2 -->
           <object class="GtkGrid" id="grid8">
             <property name="visible">True</property>
             <property name="can-focus">False</property>
             <property name="margin-start">12</property>
             <property name="margin-top">6</property>
             <property name="row-spacing">6</property>
+            <property name="column-spacing">6</property>
             <child>
               <object class="GtkButton" id="assocfiles">
                 <property name="label" translatable="yes" 
context="optgeneralpage|fileassoc">Windows Default apps</property>
@@ -386,7 +494,7 @@
                 <property name="use-underline">True</property>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">0</property>
               </packing>
             </child>
@@ -399,11 +507,27 @@
                 <property name="active">True</property>
                 <property name="draw-indicator">True</property>
               </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockcbPerformFileExtCheck">
+                <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">1</property>
               </packing>
             </child>
+            <child>
+              <placeholder/>
+            </child>
           </object>
         </child>
         <child type="label">

Reply via email to