cui/source/options/optfltr.cxx      |   50 +++++++++++
 cui/source/options/optfltr.hxx      |    3 
 cui/uiconfig/ui/optfltrembedpage.ui |  154 +++++++++++++++++++++++-------------
 3 files changed, 154 insertions(+), 53 deletions(-)

New commits:
commit 6f12739b6201948b8ccf8f162c999e42714539ba
Author:     Balazs Varga <[email protected]>
AuthorDate: Thu Nov 2 16:28:29 2023 +0100
Commit:     Balazs Varga <[email protected]>
CommitDate: Fri Nov 3 10:50:28 2023 +0100

    tdf#157861 - UI: Part 15 - Unify lockdown behavior of Options dialog
    
    for Load/Save - MS Office Page.
    
    Change-Id: Ifd576e5030e49bef3c73f55f4d3f23eea34a45f9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158837
    Tested-by: Jenkins
    Reviewed-by: Balazs Varga <[email protected]>

diff --git a/cui/source/options/optfltr.cxx b/cui/source/options/optfltr.cxx
index 7c04c20b27d0..b582b065bc65 100644
--- a/cui/source/options/optfltr.cxx
+++ b/cui/source/options/optfltr.cxx
@@ -185,9 +185,12 @@ OfaMSFilterTabPage2::OfaMSFilterTabPage2(weld::Container* 
pPage, weld::DialogCon
     , sChgToFromVisio(CuiResId(RID_CUISTR_CHG_VISIO))
     , sChgToFromPDF(CuiResId(RID_CUISTR_CHG_PDF))
     , m_xCheckLB(m_xBuilder->weld_tree_view("checklbcontainer"))
+    , m_xHighlightingFT(m_xBuilder->weld_label("label5"))
     , m_xHighlightingRB(m_xBuilder->weld_radio_button("highlighting"))
     , m_xShadingRB(m_xBuilder->weld_radio_button("shading"))
+    , m_xShadingImg(m_xBuilder->weld_widget("lockbuttonbox1"))
     , m_xMSOLockFileCB(m_xBuilder->weld_check_button("mso_lockfile"))
+    , m_xMSOLockFileImg(m_xBuilder->weld_widget("lockmso_lockfile"))
 {
     std::vector<int> aWidths
     {
@@ -351,6 +354,7 @@ void OfaMSFilterTabPage2::Reset( const SfxItemSet* )
     };
 
     bool bFirstCol = true;
+    bool bReadOnly = false;
     for( const ChkCBoxEntries & rArr : aChkArr )
     {
         // we loop through the list, alternating reading the first/second 
column,
@@ -365,13 +369,50 @@ void OfaMSFilterTabPage2::Reset( const SfxItemSet* )
             if (rArr.eType != MSFltrPg2_CheckBoxEntries::PDF)
             {
                 bCheck = (rOpt.*rArr.FnIs)();
+                switch (rArr.eType)
+                {
+                case MSFltrPg2_CheckBoxEntries::Math:
+                    if (nCol == 0)
+                        bReadOnly = 
officecfg::Office::Common::Filter::Microsoft::Import::MathTypeToMath::isReadOnly();
+                    else
+                        bReadOnly = 
officecfg::Office::Common::Filter::Microsoft::Export::MathToMathType::isReadOnly();
+                    break;
+                case MSFltrPg2_CheckBoxEntries::Writer:
+                    if (nCol == 0)
+                        bReadOnly = 
officecfg::Office::Common::Filter::Microsoft::Import::WinWordToWriter::isReadOnly();
+                    else
+                        bReadOnly = 
officecfg::Office::Common::Filter::Microsoft::Export::WriterToWinWord::isReadOnly();
+                    break;
+                case MSFltrPg2_CheckBoxEntries::Calc:
+                    if (nCol == 0)
+                        bReadOnly = 
officecfg::Office::Common::Filter::Microsoft::Import::ExcelToCalc::isReadOnly();
+                    else
+                        bReadOnly = 
officecfg::Office::Common::Filter::Microsoft::Export::CalcToExcel::isReadOnly();
+                    break;
+                case MSFltrPg2_CheckBoxEntries::Impress:
+                    if (nCol == 0)
+                        bReadOnly = 
officecfg::Office::Common::Filter::Microsoft::Import::PowerPointToImpress::isReadOnly();
+                    else
+                        bReadOnly = 
officecfg::Office::Common::Filter::Microsoft::Export::ImpressToPowerPoint::isReadOnly();
+                    break;
+                case MSFltrPg2_CheckBoxEntries::SmartArt:
+                    bReadOnly = 
officecfg::Office::Common::Filter::Microsoft::Import::SmartArtToShapes::isReadOnly();
+                    break;
+                case MSFltrPg2_CheckBoxEntries::Visio:
+                    bReadOnly = 
officecfg::Office::Common::Filter::Microsoft::Import::VisioToDraw::isReadOnly();
+                    break;
+                default:
+                    break;
+                }
             }
             else
             {
                 bCheck = 
officecfg::Office::Common::Filter::Adobe::Import::PDFToDraw::get();
+                bReadOnly = 
officecfg::Office::Common::Filter::Adobe::Import::PDFToDraw::isReadOnly();
                 nCol = 0;
             }
             m_xCheckLB->set_toggle(nEntry, bCheck ? TRISTATE_TRUE : 
TRISTATE_FALSE, nCol);
+            m_xCheckLB->set_sensitive(nEntry, !bReadOnly, nCol);
         }
         if (rArr.eType == MSFltrPg2_CheckBoxEntries::SmartArt)
         {
@@ -385,11 +426,20 @@ void OfaMSFilterTabPage2::Reset( const SfxItemSet* )
     else
         m_xShadingRB->set_active(true);
 
+    if 
(officecfg::Office::Common::Filter::Microsoft::Export::CharBackgroundToHighlighting::isReadOnly())
+    {
+        m_xHighlightingRB->set_sensitive(false);
+        m_xShadingRB->set_sensitive(false);
+        m_xHighlightingFT->set_sensitive(false);
+        m_xShadingImg->set_visible(true);
+    }
+
     m_xHighlightingRB->save_state();
 
     m_xMSOLockFileCB->set_active(rOpt.IsMSOLockFileCreationIsEnabled());
     m_xMSOLockFileCB->save_state();
     
m_xMSOLockFileCB->set_sensitive(!officecfg::Office::Common::Filter::Microsoft::Import::CreateMSOLockFiles::isReadOnly());
+    
m_xMSOLockFileImg->set_visible(officecfg::Office::Common::Filter::Microsoft::Import::CreateMSOLockFiles::isReadOnly());
 }
 
 void OfaMSFilterTabPage2::InsertEntry( const OUString& _rTxt, 
MSFltrPg2_CheckBoxEntries _nType )
diff --git a/cui/source/options/optfltr.hxx b/cui/source/options/optfltr.hxx
index dd4fcf18cd2e..51a51ec04456 100644
--- a/cui/source/options/optfltr.hxx
+++ b/cui/source/options/optfltr.hxx
@@ -67,9 +67,12 @@ class OfaMSFilterTabPage2 : public SfxTabPage
            sChgToFromPDF;
 
     std::unique_ptr<weld::TreeView> m_xCheckLB;
+    std::unique_ptr<weld::Label> m_xHighlightingFT;
     std::unique_ptr<weld::RadioButton> m_xHighlightingRB;
     std::unique_ptr<weld::RadioButton> m_xShadingRB;
+    std::unique_ptr<weld::Widget> m_xShadingImg;
     std::unique_ptr<weld::CheckButton> m_xMSOLockFileCB;
+    std::unique_ptr<weld::Widget> m_xMSOLockFileImg;
 
     void                InsertEntry( const OUString& _rTxt, 
MSFltrPg2_CheckBoxEntries _nType );
     void                InsertEntry( const OUString& _rTxt, 
MSFltrPg2_CheckBoxEntries _nType,
diff --git a/cui/uiconfig/ui/optfltrembedpage.ui 
b/cui/uiconfig/ui/optfltrembedpage.ui
index f8c6b5a7376a..b5401ff8ca8d 100644
--- a/cui/uiconfig/ui/optfltrembedpage.ui
+++ b/cui/uiconfig/ui/optfltrembedpage.ui
@@ -208,43 +208,22 @@
         <property name="label-xalign">0</property>
         <property name="shadow-type">none</property>
         <child>
-          <object class="GtkBox" id="box2">
+          <!-- n-columns=2 n-rows=1 -->
+          <object class="GtkGrid">
             <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="spacing">18</property>
-            <child>
-              <object class="GtkLabel" id="label5">
-                <property name="visible">True</property>
-                <property name="can-focus">False</property>
-                <property name="label" translatable="yes" 
context="optfltrembedpage|label5">Export as:</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
             <child>
-              <object class="GtkButtonBox" id="buttonbox1">
+              <object class="GtkBox" id="box2">
                 <property name="visible">True</property>
                 <property name="can-focus">False</property>
-                <property name="layout-style">start</property>
+                <property name="margin-start">12</property>
+                <property name="margin-top">6</property>
+                <property name="spacing">18</property>
                 <child>
-                  <object class="GtkRadioButton" id="highlighting">
-                    <property name="label" translatable="yes" 
context="optfltrembedpage|highlighting">Highlighting</property>
+                  <object class="GtkLabel" id="label5">
                     <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="active">True</property>
-                    <property name="draw-indicator">True</property>
-                    <child internal-child="accessible">
-                      <object class="AtkObject" id="highlighting-atkobject">
-                        <property name="AtkObject::accessible-description" 
translatable="yes" context="extended_tip|highlighting">Microsoft Office has two 
character attributes similar to Writer character background. Select the 
appropriate attribute (highlighting or shading) which you would like to use 
during export to Microsoft Office file formats.</property>
-                      </object>
-                    </child>
+                    <property name="can-focus">False</property>
+                    <property name="label" translatable="yes" 
context="optfltrembedpage|label5">Export as:</property>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -253,18 +232,51 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkRadioButton" id="shading">
-                    <property name="label" translatable="yes" 
context="optfltrembedpage|shading">Shading</property>
+                  <object class="GtkButtonBox" id="buttonbox1">
                     <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>
-                    <property name="group">highlighting</property>
-                    <child internal-child="accessible">
-                      <object class="AtkObject" id="shading-atkobject">
-                        <property name="AtkObject::accessible-description" 
translatable="yes" context="extended_tip|shading">Microsoft Office has two 
character attributes similar to Writer character background. Select the 
appropriate attribute (highlighting or shading) which you would like to use 
during export to Microsoft Office file formats.</property>
+                    <property name="can-focus">False</property>
+                    <property name="layout-style">start</property>
+                    <child>
+                      <object class="GtkRadioButton" id="highlighting">
+                        <property name="label" translatable="yes" 
context="optfltrembedpage|highlighting">Highlighting</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="active">True</property>
+                        <property name="draw-indicator">True</property>
+                        <child internal-child="accessible">
+                          <object class="AtkObject" 
id="highlighting-atkobject">
+                            <property name="AtkObject::accessible-description" 
translatable="yes" context="extended_tip|highlighting">Microsoft Office has two 
character attributes similar to Writer character background. Select the 
appropriate attribute (highlighting or shading) which you would like to use 
during export to Microsoft Office file formats.</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkRadioButton" id="shading">
+                        <property name="label" translatable="yes" 
context="optfltrembedpage|shading">Shading</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>
+                        <property name="group">highlighting</property>
+                        <child internal-child="accessible">
+                          <object class="AtkObject" id="shading-atkobject">
+                            <property name="AtkObject::accessible-description" 
translatable="yes" context="extended_tip|shading">Microsoft Office has two 
character attributes similar to Writer character background. Select the 
appropriate attribute (highlighting or shading) which you would like to use 
during export to Microsoft Office file formats.</property>
+                          </object>
+                        </child>
                       </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
                     </child>
                   </object>
                   <packing>
@@ -275,9 +287,21 @@
                 </child>
               </object>
               <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
+                <property name="left-attach">1</property>
+                <property name="top-attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="lockbuttonbox1">
+                <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>
@@ -312,18 +336,42 @@
             <property name="margin-top">6</property>
             <property name="layout-style">start</property>
             <child>
-              <object class="GtkCheckButton" id="mso_lockfile">
-                <property name="label" translatable="yes" 
context="optfltrembedpage|mso_lockfile">Create MSO lock file</property>
+              <!-- n-columns=2 n-rows=1 -->
+              <object class="GtkGrid">
                 <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="active">True</property>
-                <property name="draw-indicator">True</property>
-                <child internal-child="accessible">
-                  <object class="AtkObject" id="mso_lockfile-atkobject">
-                    <property name="AtkObject::accessible-description" 
translatable="yes" context="extended_tip|mso_lockfile">Mark this checkbox to 
generate a Microsoft Office lock file in addition to this office suite's own 
lock file.</property>
+                <property name="can-focus">False</property>
+                <child>
+                  <object class="GtkCheckButton" id="mso_lockfile">
+                    <property name="label" translatable="yes" 
context="optfltrembedpage|mso_lockfile">Create MSO lock file</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="active">True</property>
+                    <property name="draw-indicator">True</property>
+                    <child internal-child="accessible">
+                      <object class="AtkObject" id="mso_lockfile-atkobject">
+                        <property name="AtkObject::accessible-description" 
translatable="yes" context="extended_tip|mso_lockfile">Mark this checkbox to 
generate a Microsoft Office lock file in addition to this office suite's own 
lock file.</property>
+                      </object>
+                    </child>
                   </object>
+                  <packing>
+                    <property name="left-attach">1</property>
+                    <property name="top-attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkImage" id="lockmso_lockfile">
+                    <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>

Reply via email to