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 <balazs.varga.extern@allotropia.de>
diff --git a/cui/source/inc/cuioptgenrl.hxx b/cui/source/inc/cuioptgenrl.hxx
index ac903a3..0ee8cac 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 f22eb64..d2cf402 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 1de038b..a3399ae 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">