sc/source/ui/inc/tpcalc.hxx | 16 ++ sc/source/ui/optdlg/tpcalc.cxx | 104 ++++++++++++- sc/uiconfig/scalc/ui/optcalculatepage.ui | 240 +++++++++++++++++++++++++++---- 3 files changed, 321 insertions(+), 39 deletions(-)
New commits: commit a6ead255af6efaede730a980c3a4a80ff193c8e5 Author: Balazs Varga <balazs.varga.ext...@allotropia.de> AuthorDate: Fri Dec 8 12:33:08 2023 +0100 Commit: Balazs Varga <balazs.varga.ext...@allotropia.de> CommitDate: Sun Dec 10 17:56:31 2023 +0100 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.ext...@allotropia.de> diff --git a/sc/source/ui/inc/tpcalc.hxx b/sc/source/ui/inc/tpcalc.hxx index 87b4f903684d..6bfacaee3c30 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 356fcd9bd1fb..edeb306b668d 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); + + 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); - m_xBtnThread->set_sensitive( !officecfg::Office::Calc::Formula::Calculation::UseThreadedCalculationForFormulaGroups::isReadOnly() ); + 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 c88fbdec09a3..f7073fbea926 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> @@ -223,6 +236,84 @@ </packing> </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> @@ -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">