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">