cui/source/inc/cuioptgenrl.hxx  |    6 
 cui/source/options/optgenrl.cxx |   61 ++++++--
 cui/uiconfig/ui/optuserpage.ui  |  274 +++++++++++++++++++++++++++++++++++-----
 3 files changed, 293 insertions(+), 48 deletions(-)

New commits:
commit 89fb894825b894080049abc500315f8b985c32c2
Author:     Balazs Varga <[email protected]>
AuthorDate: Wed Oct 18 18:41:38 2023 +0200
Commit:     Balazs Varga <[email protected]>
CommitDate: Tue Oct 24 08:32:56 2023 +0200

    tdf#157700 - UI: Part 1 - Unify lockdown behavior of Options dialog
    
    for page User Data.
    
    Change-Id: I912fe2786ad5e7fc110137dfbcff73ee25fb0fbd
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158126
    Tested-by: Jenkins
    Reviewed-by: Balazs Varga <[email protected]>

diff --git a/cui/source/inc/cuioptgenrl.hxx b/cui/source/inc/cuioptgenrl.hxx
index ac903a389df4..0ee8cacb6c50 100644
--- a/cui/source/inc/cuioptgenrl.hxx
+++ b/cui/source/inc/cuioptgenrl.hxx
@@ -32,10 +32,16 @@ class SvxGeneralTabPage : public SfxTabPage
 private:
     // the "Use data for document properties" checkbox
     std::unique_ptr<weld::CheckButton> m_xUseDataCB;
+    std::unique_ptr<weld::Widget> m_xUseDataImg;
     std::unique_ptr<weld::Widget> m_xCryptoFrame;
     std::unique_ptr<weld::ComboBox> m_xSigningKeyLB;
+    std::unique_ptr<weld::Label> m_xSigningKeyFT;
+    std::unique_ptr<weld::Widget> m_xSigningKeyImg;
     std::unique_ptr<weld::ComboBox> m_xEncryptionKeyLB;
+    std::unique_ptr<weld::Label> m_xEncryptionKeyFT;
+    std::unique_ptr<weld::Widget> m_xEncryptionKeyImg;
     std::unique_ptr<weld::CheckButton> m_xEncryptToSelfCB;
+    std::unique_ptr<weld::Widget> m_xEncryptToSelfImg;
     // rows
     struct Row;
     std::vector<std::shared_ptr<Row> > vRows;
diff --git a/cui/source/options/optgenrl.cxx b/cui/source/options/optgenrl.cxx
index f22eb6467f11..d2cf40244d85 100644
--- a/cui/source/options/optgenrl.cxx
+++ b/cui/source/options/optgenrl.cxx
@@ -79,6 +79,8 @@ namespace Lang
 
 struct
 {
+    // id of the lockimage
+    OUString pLockId;
     // id of the text
     OUString pTextId;
     // language flags (see Lang above):
@@ -87,18 +89,18 @@ struct
 }
 const vRowInfo[] =
 {
-    { "companyft",   Lang::All },
-    { "nameft",      Lang::All & ~Lang::Russian & ~Lang::Eastern },
-    { "rusnameft",   Lang::Russian },
-    { "eastnameft",  Lang::Eastern },
-    { "streetft",    Lang::All & ~Lang::Russian },
-    { "russtreetft", Lang::Russian },
-    { "icityft",     Lang::All & ~Lang::US },
-    { "cityft",      Lang::US },
-    { "countryft",   Lang::All },
-    { "titleft",     Lang::All },
-    { "phoneft",     Lang::All },
-    { "faxft",       Lang::All },
+    { "lockcompanyft",  "companyft",   Lang::All },
+    { "locknameft",     "nameft",      Lang::All & ~Lang::Russian & 
~Lang::Eastern },
+    { "lockrusnameft",  "rusnameft",   Lang::Russian },
+    { "lockeastnameft", "eastnameft",  Lang::Eastern },
+    { "lockstreetft",   "streetft",    Lang::All & ~Lang::Russian },
+    { "lockrusstreetft","russtreetft", Lang::Russian },
+    { "lockicityft",    "icityft",     Lang::All & ~Lang::US },
+    { "lockcityft",     "cityft",      Lang::US },
+    { "lockcountryft",  "countryft",   Lang::All },
+    { "locktitleft",    "titleft",     Lang::All },
+    { "lockphoneft",    "phoneft",     Lang::All },
+    { "lockfaxft",      "faxft",       Lang::All },
 };
 
 
@@ -166,14 +168,17 @@ const vFieldInfo[] =
 
 struct SvxGeneralTabPage::Row
 {
+    // row lockdown icon
+    std::unique_ptr<weld::Widget> xLockImg;
     // row label
     std::unique_ptr<weld::Label> xLabel;
     // first and last field in the row (last is exclusive)
     unsigned nFirstField, nLastField;
 
 public:
-    explicit Row (std::unique_ptr<weld::Label> xLabel_)
-        : xLabel(std::move(xLabel_))
+    explicit Row (std::unique_ptr<weld::Widget> xLockImg_, 
std::unique_ptr<weld::Label> xLabel_)
+        : xLockImg(std::move(xLockImg_))
+        , xLabel(std::move(xLabel_))
         , nFirstField(0)
         , nLastField(0)
     {
@@ -210,10 +215,16 @@ public:
 SvxGeneralTabPage::SvxGeneralTabPage(weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet& rCoreSet)
     : SfxTabPage(pPage, pController, "cui/ui/optuserpage.ui", "OptUserPage", 
&rCoreSet)
     , m_xUseDataCB(m_xBuilder->weld_check_button("usefordocprop"))
+    , m_xUseDataImg(m_xBuilder->weld_widget("lockusefordocprop"))
     , m_xCryptoFrame(m_xBuilder->weld_widget( "cryptography"))
     , m_xSigningKeyLB(m_xBuilder->weld_combo_box("signingkey"))
+    , m_xSigningKeyFT(m_xBuilder->weld_label("signingkeylabel"))
+    , m_xSigningKeyImg(m_xBuilder->weld_widget("locksigningkey"))
     , m_xEncryptionKeyLB(m_xBuilder->weld_combo_box("encryptionkey"))
+    , m_xEncryptionKeyFT(m_xBuilder->weld_label("encryptionkeylabel"))
+    , m_xEncryptionKeyImg(m_xBuilder->weld_widget("lockencryptionkey"))
     , m_xEncryptToSelfCB(m_xBuilder->weld_check_button("encrypttoself"))
+    , m_xEncryptToSelfImg(m_xBuilder->weld_widget("lockencrypttoself"))
 {
     InitControls();
 #if HAVE_FEATURE_GPGME
@@ -258,7 +269,7 @@ void SvxGeneralTabPage::InitControls ()
         if (!(vRowInfo[iRow].nLangFlags & LangBit))
             continue;
         // creating row
-        vRows.push_back(std::make_shared<Row>(
+        
vRows.push_back(std::make_shared<Row>(m_xBuilder->weld_widget(vRowInfo[iRow].pLockId),
             m_xBuilder->weld_label(vRowInfo[iRow].pTextId)));
         Row& rRow = *vRows.back();
         // fields in the row
@@ -497,13 +508,33 @@ void SvxGeneralTabPage::SetData_Impl()
             bEnableLabel = bEnableLabel || bEnableEdit;
         }
         rRow.xLabel->set_sensitive(bEnableLabel);
+        rRow.xLockImg->set_visible(!bEnableLabel);
     }
 
     // saving
     for (auto const & i: vFields)
         i->xEdit->save_value();
 
+    //enabling and disabling remaining fields
+    bool bEnable = 
!officecfg::Office::Common::Save::Document::UseUserData::isReadOnly();
+    m_xUseDataCB->set_sensitive(bEnable);
+    m_xUseDataImg->set_visible(!bEnable);
+
 #if HAVE_FEATURE_GPGME
+    bEnable = !aUserOpt.IsTokenReadonly(UserOptToken::SigningKey);
+    m_xSigningKeyLB->set_sensitive(bEnable);
+    m_xSigningKeyFT->set_sensitive(bEnable);
+    m_xSigningKeyImg->set_visible(!bEnable);
+
+    bEnable = !aUserOpt.IsTokenReadonly(UserOptToken::EncryptionKey);
+    m_xEncryptionKeyLB->set_sensitive(bEnable);
+    m_xEncryptionKeyFT->set_sensitive(bEnable);
+    m_xEncryptionKeyImg->set_visible(!bEnable);
+
+    bEnable = !aUserOpt.IsTokenReadonly(UserOptToken::EncryptToSelf);
+    m_xEncryptToSelfCB->set_sensitive(bEnable);
+    m_xEncryptToSelfImg->set_visible(!bEnable);
+
     OUString aSK = aUserOpt.GetToken(UserOptToken::SigningKey);
     aSK.isEmpty() ? m_xSigningKeyLB->set_active( 0 ) //i.e. 'No Key'
                   : m_xSigningKeyLB->set_active_text( aSK );
diff --git a/cui/uiconfig/ui/optuserpage.ui b/cui/uiconfig/ui/optuserpage.ui
index 1de038bbe158..a3399ae49739 100644
--- a/cui/uiconfig/ui/optuserpage.ui
+++ b/cui/uiconfig/ui/optuserpage.ui
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.40.0 -->
+<!-- Generated with glade 3.38.2 -->
 <interface domain="cui">
   <requires lib="gtk+" version="3.20"/>
   <object class="GtkBox" id="OptUserPage">
@@ -15,7 +15,7 @@
         <property name="label-xalign">0</property>
         <property name="shadow-type">none</property>
         <child>
-          <!-- n-columns=2 n-rows=13 -->
+          <!-- n-columns=3 n-rows=13 -->
           <object class="GtkGrid" id="grid1">
             <property name="visible">True</property>
             <property name="can-focus">False</property>
@@ -34,7 +34,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>
@@ -49,7 +49,7 @@
                 <property name="xalign">0</property>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">1</property>
               </packing>
             </child>
@@ -64,7 +64,7 @@
                 <property name="xalign">0</property>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">4</property>
               </packing>
             </child>
@@ -79,7 +79,7 @@
                 <property name="xalign">0</property>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">7</property>
               </packing>
             </child>
@@ -94,7 +94,7 @@
                 <property name="xalign">0</property>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">8</property>
               </packing>
             </child>
@@ -109,7 +109,7 @@
                 <property name="xalign">0</property>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">9</property>
               </packing>
             </child>
@@ -129,7 +129,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">10</property>
               </packing>
             </child>
@@ -144,7 +144,7 @@
                 <property name="xalign">0</property>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">11</property>
               </packing>
             </child>
@@ -216,7 +216,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">1</property>
+                <property name="left-attach">2</property>
                 <property name="top-attach">1</property>
               </packing>
             </child>
@@ -288,7 +288,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">1</property>
+                <property name="left-attach">2</property>
                 <property name="top-attach">7</property>
               </packing>
             </child>
@@ -341,7 +341,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">1</property>
+                <property name="left-attach">2</property>
                 <property name="top-attach">9</property>
               </packing>
             </child>
@@ -393,7 +393,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">1</property>
+                <property name="left-attach">2</property>
                 <property name="top-attach">10</property>
               </packing>
             </child>
@@ -446,7 +446,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">1</property>
+                <property name="left-attach">2</property>
                 <property name="top-attach">11</property>
               </packing>
             </child>
@@ -465,7 +465,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">12</property>
                 <property name="width">2</property>
               </packing>
@@ -481,7 +481,7 @@
                 <property name="xalign">0</property>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">2</property>
               </packing>
             </child>
@@ -573,7 +573,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">1</property>
+                <property name="left-attach">2</property>
                 <property name="top-attach">2</property>
               </packing>
             </child>
@@ -588,7 +588,7 @@
                 <property name="xalign">0</property>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">3</property>
               </packing>
             </child>
@@ -660,7 +660,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">1</property>
+                <property name="left-attach">2</property>
                 <property name="top-attach">3</property>
               </packing>
             </child>
@@ -675,7 +675,7 @@
                 <property name="xalign">0</property>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">5</property>
               </packing>
             </child>
@@ -727,7 +727,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">1</property>
+                <property name="left-attach">2</property>
                 <property name="top-attach">5</property>
               </packing>
             </child>
@@ -742,7 +742,7 @@
                 <property name="xalign">0</property>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">6</property>
               </packing>
             </child>
@@ -794,7 +794,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">1</property>
+                <property name="left-attach">2</property>
                 <property name="top-attach">6</property>
               </packing>
             </child>
@@ -825,7 +825,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">1</property>
+                <property name="left-attach">2</property>
                 <property name="top-attach">4</property>
               </packing>
             </child>
@@ -856,7 +856,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">1</property>
+                <property name="left-attach">2</property>
                 <property name="top-attach">8</property>
               </packing>
             </child>
@@ -887,10 +887,179 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">1</property>
+                <property name="left-attach">2</property>
+                <property name="top-attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockcompanyft">
+                <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="locknameft">
+                <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="lockrusnameft">
+                <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>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockeastnameft">
+                <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">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockstreetft">
+                <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">4</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockrusstreetft">
+                <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">5</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockicityft">
+                <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">6</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockcityft">
+                <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">7</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockcountryft">
+                <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">8</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="locktitleft">
+                <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">9</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockphoneft">
+                <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">10</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockfaxft">
+                <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">11</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockusefordocprop">
+                <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">12</property>
+              </packing>
+            </child>
           </object>
         </child>
         <child type="label">
@@ -917,7 +1086,7 @@
         <property name="label-xalign">0</property>
         <property name="shadow-type">none</property>
         <child>
-          <!-- n-columns=2 n-rows=3 -->
+          <!-- n-columns=3 n-rows=3 -->
           <object class="GtkGrid" id="grid14">
             <property name="visible">True</property>
             <property name="can-focus">False</property>
@@ -935,7 +1104,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>
@@ -949,7 +1118,7 @@
                 <property name="xalign">0</property>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">1</property>
               </packing>
             </child>
@@ -968,7 +1137,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">1</property>
+                <property name="left-attach">2</property>
                 <property name="top-attach">1</property>
               </packing>
             </child>
@@ -987,7 +1156,7 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">1</property>
+                <property name="left-attach">2</property>
                 <property name="top-attach">0</property>
               </packing>
             </child>
@@ -1006,11 +1175,50 @@
                 </child>
               </object>
               <packing>
-                <property name="left-attach">0</property>
+                <property name="left-attach">1</property>
                 <property name="top-attach">2</property>
                 <property name="width">2</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkImage" id="locksigningkey">
+                <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="lockencryptionkey">
+                <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="lockencrypttoself">
+                <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>
+              </packing>
+            </child>
           </object>
         </child>
         <child type="label">

Reply via email to