tdf#158467 - UI: Part 50 - Unify lockdown behavior of Options dialog

for Calc - Calculate Page.

Change-Id: Ibe728e2ffc122879ee66abb88927be355d41348a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160462
Tested-by: Jenkins
Reviewed-by: Balazs Varga <balazs.varga.extern@allotropia.de>
diff --git a/sc/source/ui/inc/tpcalc.hxx b/sc/source/ui/inc/tpcalc.hxx
index 87b4f90..6bfacae 100644
--- a/sc/source/ui/inc/tpcalc.hxx
+++ b/sc/source/ui/inc/tpcalc.hxx
@@ -21,6 +21,8 @@

#include <sfx2/tabdlg.hxx>
#include "editfield.hxx"
#include <com/sun/star/configuration/ReadWriteAccess.hpp>
#include <com/sun/star/beans/PropertyAttribute.hpp>

class ScDocOptions;

@@ -38,32 +40,46 @@ public:
    virtual DeactivateRC   DeactivatePage  ( SfxItemSet* pSet ) override;

private:
    css::uno::Reference<css::configuration::XReadWriteAccess> m_xReadWriteAccess;

    std::unique_ptr<ScDocOptions> pOldOptions;
    std::unique_ptr<ScDocOptions> pLocalOptions;

    std::unique_ptr<weld::CheckButton> m_xBtnIterate;
    std::unique_ptr<weld::Widget> m_xBtnIterateImg;
    std::unique_ptr<weld::Label> m_xFtSteps;
    std::unique_ptr<weld::SpinButton> m_xEdSteps;
    std::unique_ptr<weld::Widget> m_xEdStepsImg;
    std::unique_ptr<weld::Label> m_xFtEps;
    std::unique_ptr<ScDoubleField> m_xEdEps;
    std::unique_ptr<weld::Widget> m_xEdEpsImg;

    std::unique_ptr<weld::RadioButton> m_xBtnDateStd;
    std::unique_ptr<weld::RadioButton> m_xBtnDateSc10;
    std::unique_ptr<weld::RadioButton> m_xBtnDate1904;
    std::unique_ptr<weld::Widget> m_xDateImg;

    std::unique_ptr<weld::CheckButton> m_xBtnCase;
    std::unique_ptr<weld::Widget> m_xBtnCaseImg;
    std::unique_ptr<weld::CheckButton> m_xBtnCalc;
    std::unique_ptr<weld::Widget> m_xBtnCalcImg;
    std::unique_ptr<weld::CheckButton> m_xBtnMatch;
    std::unique_ptr<weld::Widget> m_xBtnMatchImg;
    std::unique_ptr<weld::RadioButton> m_xBtnWildcards;
    std::unique_ptr<weld::RadioButton> m_xBtnRegex;
    std::unique_ptr<weld::RadioButton> m_xBtnLiteral;
    std::unique_ptr<weld::Widget> m_xFormulaImg;
    std::unique_ptr<weld::CheckButton> m_xBtnLookUp;
    std::unique_ptr<weld::Widget> m_xBtnLookUpImg;
    std::unique_ptr<weld::CheckButton> m_xBtnGeneralPrec;
    std::unique_ptr<weld::Widget> m_xBtnGeneralPrecImg;

    std::unique_ptr<weld::Label> m_xFtPrec;
    std::unique_ptr<weld::SpinButton> m_xEdPrec;
    std::unique_ptr<weld::Widget> m_xEdPrecImg;

    std::unique_ptr<weld::CheckButton> m_xBtnThread;
    std::unique_ptr<weld::Widget> m_xBtnThreadImg;

private:
    void            Init();
diff --git a/sc/source/ui/optdlg/tpcalc.cxx b/sc/source/ui/optdlg/tpcalc.cxx
index 356fcd9b..edeb306 100644
--- a/sc/source/ui/optdlg/tpcalc.cxx
+++ b/sc/source/ui/optdlg/tpcalc.cxx
@@ -38,27 +38,42 @@ ScTpCalcOptions::ScTpCalcOptions(weld::Container* pPage, weld::DialogController*
        rCoreAttrs.Get(SID_SCDOCOPTIONS).GetDocOptions()))
    , pLocalOptions(new ScDocOptions)
    , m_xBtnIterate(m_xBuilder->weld_check_button("iterate"))
    , m_xBtnIterateImg(m_xBuilder->weld_widget("lockiterate"))
    , m_xFtSteps(m_xBuilder->weld_label("stepsft"))
    , m_xEdSteps(m_xBuilder->weld_spin_button("steps"))
    , m_xEdStepsImg(m_xBuilder->weld_widget("locksteps"))
    , m_xFtEps(m_xBuilder->weld_label("minchangeft"))
    , m_xEdEps(new ScDoubleField(m_xBuilder->weld_entry("minchange")))
    , m_xEdEpsImg(m_xBuilder->weld_widget("lockminchange"))
    , m_xBtnDateStd(m_xBuilder->weld_radio_button("datestd"))
    , m_xBtnDateSc10(m_xBuilder->weld_radio_button("datesc10"))
    , m_xBtnDate1904(m_xBuilder->weld_radio_button("date1904"))
    , m_xDateImg(m_xBuilder->weld_widget("lockdate"))
    , m_xBtnCase(m_xBuilder->weld_check_button("case"))
    , m_xBtnCaseImg(m_xBuilder->weld_widget("lockcase"))
    , m_xBtnCalc(m_xBuilder->weld_check_button("calc"))
    , m_xBtnCalcImg(m_xBuilder->weld_widget("lockcalc"))
    , m_xBtnMatch(m_xBuilder->weld_check_button("match"))
    , m_xBtnMatchImg(m_xBuilder->weld_widget("lockmatch"))
    , m_xBtnWildcards(m_xBuilder->weld_radio_button("formulawildcards"))
    , m_xBtnRegex(m_xBuilder->weld_radio_button("formularegex"))
    , m_xBtnLiteral(m_xBuilder->weld_radio_button("formulaliteral"))
    , m_xFormulaImg(m_xBuilder->weld_widget("lockformulawild"))
    , m_xBtnLookUp(m_xBuilder->weld_check_button("lookup"))
    , m_xBtnLookUpImg(m_xBuilder->weld_widget("locklookup"))
    , m_xBtnGeneralPrec(m_xBuilder->weld_check_button("generalprec"))
    , m_xBtnGeneralPrecImg(m_xBuilder->weld_widget("lockgeneralprec"))
    , m_xFtPrec(m_xBuilder->weld_label("precft"))
    , m_xEdPrec(m_xBuilder->weld_spin_button("prec"))
    , m_xEdPrecImg(m_xBuilder->weld_widget("lockprec"))
    , m_xBtnThread(m_xBuilder->weld_check_button("threadingenabled"))
    , m_xBtnThreadImg(m_xBuilder->weld_widget("lockthreadingenabled"))
{
    Init();
    SetExchangeSupport();

    css::uno::Reference < css::uno::XComponentContext > xContext(::comphelper::getProcessComponentContext());
    m_xReadWriteAccess = css::configuration::ReadWriteAccess::create(xContext, "*");
}

ScTpCalcOptions::~ScTpCalcOptions()
@@ -90,12 +105,21 @@ void ScTpCalcOptions::Reset(const SfxItemSet* rCoreAttrs)

    *pLocalOptions = *pOldOptions;

    bool bReadOnly = officecfg::Office::Calc::Calculate::Other::CaseSensitive::isReadOnly();
    m_xBtnCase->set_active( !pLocalOptions->IsIgnoreCase() );
    m_xBtnCase->set_sensitive( !officecfg::Office::Calc::Calculate::Other::CaseSensitive::isReadOnly() );
    m_xBtnCase->set_sensitive(!bReadOnly);
    m_xBtnCaseImg->set_visible(bReadOnly);

    bReadOnly = officecfg::Office::Calc::Calculate::Other::Precision::isReadOnly();
    m_xBtnCalc->set_active( pLocalOptions->IsCalcAsShown() );
    m_xBtnCalc->set_sensitive( !officecfg::Office::Calc::Calculate::Other::Precision::isReadOnly() );
    m_xBtnCalc->set_sensitive(!bReadOnly);
    m_xBtnCalcImg->set_visible(bReadOnly);

    bReadOnly = officecfg::Office::Calc::Calculate::Other::SearchCriteria::isReadOnly();
    m_xBtnMatch->set_active( pLocalOptions->IsMatchWholeCell() );
    m_xBtnMatch->set_sensitive( !officecfg::Office::Calc::Calculate::Other::SearchCriteria::isReadOnly() );
    m_xBtnMatch->set_sensitive(!bReadOnly);
    m_xBtnMatchImg->set_visible(bReadOnly);

    bool bWildcards = pLocalOptions->IsFormulaWildcardsEnabled();
    bool bRegex = pLocalOptions->IsFormulaRegexEnabled();
    // If both, Wildcards and Regex, are set then Wildcards shall take
@@ -116,9 +140,20 @@ void ScTpCalcOptions::Reset(const SfxItemSet* rCoreAttrs)
        m_xBtnRegex->set_sensitive( false );
        m_xBtnLiteral->set_sensitive( false );
    }
    bReadOnly = officecfg::Office::Calc::Calculate::Other::Wildcards::isReadOnly() ||
        officecfg::Office::Calc::Calculate::Other::RegularExpressions::isReadOnly();
    m_xFormulaImg->set_visible(bReadOnly);

    bReadOnly = officecfg::Office::Calc::Calculate::Other::FindLabel::isReadOnly();
    m_xBtnLookUp->set_active( pLocalOptions->IsLookUpColRowNames() );
    m_xBtnLookUp->set_sensitive( !officecfg::Office::Calc::Calculate::Other::FindLabel::isReadOnly() );
    m_xBtnLookUp->set_sensitive(!bReadOnly);
    m_xBtnLookUpImg->set_visible(bReadOnly);

    bReadOnly = officecfg::Office::Calc::Calculate::IterativeReference::Iteration::isReadOnly();
    m_xBtnIterate->set_active( pLocalOptions->IsIter() );
    m_xBtnIterate->set_sensitive(!bReadOnly);
    m_xBtnIterateImg->set_visible(bReadOnly);

    m_xEdSteps->set_value( pLocalOptions->GetIterCount() );
    m_xEdEps->SetValue( pLocalOptions->GetIterEps(), 6 );

@@ -137,7 +172,45 @@ void ScTpCalcOptions::Reset(const SfxItemSet* rCoreAttrs)
            break;
    }

    // TODO: these option settings need to be simplified.
    bReadOnly = false;
    OUString aDateConfPath = officecfg::Office::Calc::Calculate::Other::path() + "/Date/DD";
    if (m_xReadWriteAccess->hasPropertyByHierarchicalName(aDateConfPath))
    {
        css::beans::Property aProperty = m_xReadWriteAccess->getPropertyByHierarchicalName(aDateConfPath);
        bReadOnly = (aProperty.Attributes & css::beans::PropertyAttribute::READONLY) != 0;
    }

    if (!bReadOnly)
    {
        aDateConfPath = officecfg::Office::Calc::Calculate::Other::path() + "/Date/MM";
        if (m_xReadWriteAccess->hasPropertyByHierarchicalName(aDateConfPath))
        {
            css::beans::Property aProperty = m_xReadWriteAccess->getPropertyByHierarchicalName(aDateConfPath);
            bReadOnly = (aProperty.Attributes & css::beans::PropertyAttribute::READONLY) != 0;
        }
    }

    if (!bReadOnly)
    {
        aDateConfPath = officecfg::Office::Calc::Calculate::Other::path() + "/Date/YY";
        if (m_xReadWriteAccess->hasPropertyByHierarchicalName(aDateConfPath))
        {
            css::beans::Property aProperty = m_xReadWriteAccess->getPropertyByHierarchicalName(aDateConfPath);
            bReadOnly = (aProperty.Attributes & css::beans::PropertyAttribute::READONLY) != 0;
        }
    }

    if (bReadOnly)
    {
        m_xBtnDateStd->set_sensitive(false);
        m_xBtnDateSc10->set_sensitive(false);
        m_xBtnDate1904->set_sensitive(false);
        m_xDateImg->set_visible(true);
    }

    sal_uInt16 nPrec = pLocalOptions->GetStdPrecision();
    bReadOnly = officecfg::Office::Calc::Calculate::Other::DecimalPlaces::isReadOnly();
    if (nPrec == SvNumberFormatter::UNLIMITED_PRECISION)
    {
        m_xFtPrec->set_sensitive(false);
@@ -149,11 +222,24 @@ void ScTpCalcOptions::Reset(const SfxItemSet* rCoreAttrs)
    {
        m_xBtnGeneralPrec->set_active(true);
        m_xFtPrec->set_sensitive(true);
        m_xEdPrec->set_sensitive(true);
        m_xEdPrec->set_sensitive(!bReadOnly);
        m_xEdPrec->set_value(nPrec);
    }
    m_xBtnGeneralPrec->set_sensitive(!bReadOnly);
    m_xBtnGeneralPrecImg->set_visible(bReadOnly);
    m_xEdPrecImg->set_visible(bReadOnly);

    m_xBtnThread->set_sensitive( !officecfg::Office::Calc::Formula::Calculation::UseThreadedCalculationForFormulaGroups::isReadOnly() );
    bReadOnly = officecfg::Office::Calc::Calculate::IterativeReference::Steps::isReadOnly();
    m_xEdSteps->set_sensitive(!bReadOnly);
    m_xEdStepsImg->set_visible(bReadOnly);

    bReadOnly = officecfg::Office::Calc::Calculate::IterativeReference::MinimumChange::isReadOnly();
    m_xEdEps->set_sensitive(!bReadOnly);
    m_xEdEpsImg->set_visible(bReadOnly);

    bReadOnly = officecfg::Office::Calc::Formula::Calculation::UseThreadedCalculationForFormulaGroups::isReadOnly();
    m_xBtnThread->set_sensitive(!bReadOnly);
    m_xBtnThreadImg->set_visible(bReadOnly);
    m_xBtnThread->set_active( officecfg::Office::Calc::Formula::Calculation::UseThreadedCalculationForFormulaGroups::get() );

    CheckClickHdl(*m_xBtnIterate);
@@ -281,7 +367,7 @@ IMPL_LINK(ScTpCalcOptions, CheckClickHdl, weld::Toggleable&, rBtn, void)
    {
        if (rBtn.get_active())
        {
            m_xEdPrec->set_sensitive(true);
            m_xEdPrec->set_sensitive(!officecfg::Office::Calc::Calculate::Other::DecimalPlaces::isReadOnly());
            m_xFtPrec->set_sensitive(true);
        }
        else
@@ -295,8 +381,8 @@ IMPL_LINK(ScTpCalcOptions, CheckClickHdl, weld::Toggleable&, rBtn, void)
        if (rBtn.get_active())
        {
            pLocalOptions->SetIter( true );
            m_xFtSteps->set_sensitive(true);  m_xEdSteps->set_sensitive(true);
            m_xFtEps->set_sensitive(true);  m_xEdEps->set_sensitive(true);
            m_xFtSteps->set_sensitive(true);  m_xEdSteps->set_sensitive(!officecfg::Office::Calc::Calculate::IterativeReference::Steps::isReadOnly());
            m_xFtEps->set_sensitive(true);  m_xEdEps->set_sensitive(!officecfg::Office::Calc::Calculate::IterativeReference::MinimumChange::isReadOnly());
        }
        else
        {
diff --git a/sc/uiconfig/scalc/ui/optcalculatepage.ui b/sc/uiconfig/scalc/ui/optcalculatepage.ui
index c88fbde..f7073fb 100644
--- a/sc/uiconfig/scalc/ui/optcalculatepage.ui
+++ b/sc/uiconfig/scalc/ui/optcalculatepage.ui
@@ -28,7 +28,7 @@
        <property name="label-xalign">0</property>
        <property name="shadow-type">none</property>
        <child>
          <!-- n-columns=2 n-rows=1 -->
          <!-- n-columns=3 n-rows=1 -->
          <object class="GtkGrid" id="grid4">
            <property name="visible">True</property>
            <property name="can-focus">False</property>
@@ -48,11 +48,24 @@
                <property name="draw-indicator">True</property>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="left-attach">1</property>
                <property name="top-attach">0</property>
                <property name="width">2</property>
              </packing>
            </child>
            <child>
              <object class="GtkImage" id="lockthreadingenabled">
                <property name="can-focus">False</property>
                <property name="no-show-all">True</property>
                <property name="halign">center</property>
                <property name="valign">center</property>
                <property name="icon-name">res/lock.png</property>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="top-attach">0</property>
              </packing>
            </child>
          </object>
        </child>
        <child type="label">
@@ -79,7 +92,7 @@
        <property name="label-xalign">0</property>
        <property name="shadow-type">none</property>
        <child>
          <!-- n-columns=1 n-rows=6 -->
          <!-- n-columns=2 n-rows=6 -->
          <object class="GtkGrid" id="grid3">
            <property name="visible">True</property>
            <property name="can-focus">False</property>
@@ -102,7 +115,7 @@
                </child>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="left-attach">1</property>
                <property name="top-attach">0</property>
              </packing>
            </child>
@@ -121,7 +134,7 @@
                </child>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="left-attach">1</property>
                <property name="top-attach">1</property>
              </packing>
            </child>
@@ -141,7 +154,7 @@
                </child>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="left-attach">1</property>
                <property name="top-attach">2</property>
              </packing>
            </child>
@@ -160,7 +173,7 @@
                </child>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="left-attach">1</property>
                <property name="top-attach">3</property>
              </packing>
            </child>
@@ -179,7 +192,7 @@
                </child>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="left-attach">1</property>
                <property name="top-attach">4</property>
              </packing>
            </child>
@@ -224,6 +237,84 @@
                </child>
              </object>
              <packing>
                <property name="left-attach">1</property>
                <property name="top-attach">5</property>
              </packing>
            </child>
            <child>
              <object class="GtkImage" id="lockcase">
                <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="lockcalc">
                <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="lockmatch">
                <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="locklookup">
                <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="lockgeneralprec">
                <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="lockprec">
                <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>
@@ -262,17 +353,42 @@
            <property name="orientation">vertical</property>
            <property name="spacing">3</property>
            <child>
              <object class="GtkCheckButton" id="iterate">
                <property name="label" translatable="yes" context="optcalculatepage|iterate">_Iterations</property>
              <object class="GtkBox">
                <property name="visible">True</property>
                <property name="can-focus">True</property>
                <property name="receives-default">False</property>
                <property name="use-underline">True</property>
                <property name="draw-indicator">True</property>
                <child internal-child="accessible">
                  <object class="AtkObject" id="iterate-atkobject">
                    <property name="AtkObject::accessible-description" translatable="yes" context="extended_tip|iterate">Specifies whether formulas with iterative references (formulas that are continuously repeated until the problem is solved) are calculated after a specific number of repetitions.</property>
                <property name="can-focus">False</property>
                <child>
                  <object class="GtkImage" id="lockiterate">
                    <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="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">0</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkCheckButton" id="iterate">
                    <property name="label" translatable="yes" context="optcalculatepage|iterate">_Iterations</property>
                    <property name="visible">True</property>
                    <property name="can-focus">True</property>
                    <property name="receives-default">False</property>
                    <property name="use-underline">True</property>
                    <property name="draw-indicator">True</property>
                    <child internal-child="accessible">
                      <object class="AtkObject" id="iterate-atkobject">
                        <property name="AtkObject::accessible-description" translatable="yes" context="extended_tip|iterate">Specifies whether formulas with iterative references (formulas that are continuously repeated until the problem is solved) are calculated after a specific number of repetitions.</property>
                      </object>
                    </child>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">1</property>
                  </packing>
                </child>
              </object>
              <packing>
@@ -282,7 +398,7 @@
              </packing>
            </child>
            <child>
              <!-- n-columns=2 n-rows=2 -->
              <!-- n-columns=3 n-rows=2 -->
              <object class="GtkGrid" id="grid1">
                <property name="visible">True</property>
                <property name="can-focus">False</property>
@@ -299,7 +415,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>
@@ -313,7 +429,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>
@@ -331,7 +447,7 @@
                    </child>
                  </object>
                  <packing>
                    <property name="left-attach">1</property>
                    <property name="left-attach">2</property>
                    <property name="top-attach">0</property>
                  </packing>
                </child>
@@ -349,7 +465,33 @@
                    </child>
                  </object>
                  <packing>
                    <property name="left-attach">1</property>
                    <property name="left-attach">2</property>
                    <property name="top-attach">1</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkImage" id="locksteps">
                    <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="lockminchange">
                    <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>
@@ -386,7 +528,7 @@
        <property name="label-xalign">0</property>
        <property name="shadow-type">none</property>
        <child>
          <!-- n-columns=1 n-rows=3 -->
          <!-- n-columns=2 n-rows=3 -->
          <object class="GtkGrid" id="grid2">
            <property name="visible">True</property>
            <property name="can-focus">False</property>
@@ -409,7 +551,7 @@
                </child>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="left-attach">1</property>
                <property name="top-attach">0</property>
              </packing>
            </child>
@@ -430,7 +572,7 @@
                </child>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="left-attach">1</property>
                <property name="top-attach">1</property>
              </packing>
            </child>
@@ -451,10 +593,29 @@
                </child>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="left-attach">1</property>
                <property name="top-attach">2</property>
              </packing>
            </child>
            <child>
              <object class="GtkImage" id="lockdate">
                <property name="can-focus">False</property>
                <property name="no-show-all">True</property>
                <property name="halign">center</property>
                <property name="valign">center</property>
                <property name="icon-name">res/lock.png</property>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="top-attach">1</property>
              </packing>
            </child>
            <child>
              <placeholder/>
            </child>
            <child>
              <placeholder/>
            </child>
          </object>
        </child>
        <child type="label">
@@ -480,7 +641,7 @@
        <property name="label-xalign">0</property>
        <property name="shadow-type">none</property>
        <child>
          <!-- n-columns=1 n-rows=3 -->
          <!-- n-columns=2 n-rows=3 -->
          <object class="GtkGrid" id="grid5">
            <property name="visible">True</property>
            <property name="can-focus">False</property>
@@ -503,7 +664,7 @@
                </child>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="left-attach">1</property>
                <property name="top-attach">0</property>
              </packing>
            </child>
@@ -523,7 +684,7 @@
                </child>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="left-attach">1</property>
                <property name="top-attach">1</property>
              </packing>
            </child>
@@ -543,10 +704,29 @@
                </child>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="left-attach">1</property>
                <property name="top-attach">2</property>
              </packing>
            </child>
            <child>
              <object class="GtkImage" id="lockformulawild">
                <property name="can-focus">False</property>
                <property name="no-show-all">True</property>
                <property name="halign">center</property>
                <property name="valign">center</property>
                <property name="icon-name">res/lock.png</property>
              </object>
              <packing>
                <property name="left-attach">0</property>
                <property name="top-attach">1</property>
              </packing>
            </child>
            <child>
              <placeholder/>
            </child>
            <child>
              <placeholder/>
            </child>
          </object>
        </child>
        <child type="label">