weld ScDPNumGroupDlg
Change-Id: I5f5861a1f39307133f4c87e4d5ca50ced24409ba
Reviewed-on: https://gerrit.libreoffice.org/67813
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/sc/inc/scabstdlg.hxx b/sc/inc/scabstdlg.hxx
index f272b1a..f4e48b1 100644
--- a/sc/inc/scabstdlg.hxx
+++ b/sc/inc/scabstdlg.hxx
@@ -482,8 +482,8 @@ public:
const ScPivotFuncData& rFuncData,
const ScDPNameVec& rDataFields ) = 0;
virtual VclPtr<AbstractScDPNumGroupDlg> CreateScDPNumGroupDlg( vcl::Window* pParent,
const ScDPNumGroupInfo& rInfo ) = 0;
virtual VclPtr<AbstractScDPNumGroupDlg> CreateScDPNumGroupDlg(weld::Window* pParent,
const ScDPNumGroupInfo& rInfo) = 0;
virtual VclPtr<AbstractScDPDateGroupDlg> CreateScDPDateGroupDlg( vcl::Window* pParent,
const ScDPNumGroupInfo& rInfo,
diff --git a/sc/source/ui/attrdlg/scdlgfact.cxx b/sc/source/ui/attrdlg/scdlgfact.cxx
index fa64f18..3f24dc0 100644
--- a/sc/source/ui/attrdlg/scdlgfact.cxx
+++ b/sc/source/ui/attrdlg/scdlgfact.cxx
@@ -168,7 +168,12 @@ short AbstractScNamePasteDlg_Impl::Execute()
IMPL_ABSTDLG_BASE(AbstractScPivotFilterDlg_Impl);
IMPL_ABSTDLG_BASE(AbstractScDPFunctionDlg_Impl);
IMPL_ABSTDLG_BASE(AbstractScDPSubtotalDlg_Impl);
IMPL_ABSTDLG_BASE(AbstractScDPNumGroupDlg_Impl);
short AbstractScDPNumGroupDlg_Impl::Execute()
{
return m_xDlg->run();
}
IMPL_ABSTDLG_BASE(AbstractScDPDateGroupDlg_Impl);
short AbstractScDPShowDetailDlg_Impl::Execute()
@@ -614,7 +619,7 @@ void AbstractScDPSubtotalDlg_Impl::FillLabelData( ScDPLabelData& rLabelData ) co
ScDPNumGroupInfo AbstractScDPNumGroupDlg_Impl::GetGroupInfo() const
{
return pDlg->GetGroupInfo();
return m_xDlg->GetGroupInfo();
}
ScDPNumGroupInfo AbstractScDPDateGroupDlg_Impl::GetGroupInfo() const
@@ -914,10 +919,9 @@ VclPtr<AbstractScDPSubtotalDlg> ScAbstractDialogFactory_Impl::CreateScDPSubtotal
return VclPtr<AbstractScDPSubtotalDlg_Impl>::Create( pDlg );
}
VclPtr<AbstractScDPNumGroupDlg> ScAbstractDialogFactory_Impl::CreateScDPNumGroupDlg(
vcl::Window* pParent, const ScDPNumGroupInfo& rInfo )
VclPtr<AbstractScDPNumGroupDlg> ScAbstractDialogFactory_Impl::CreateScDPNumGroupDlg(weld::Window* pParent, const ScDPNumGroupInfo& rInfo)
{
return VclPtr<AbstractScDPNumGroupDlg_Impl>::Create( VclPtr<ScDPNumGroupDlg>::Create( pParent, rInfo ) );
return VclPtr<AbstractScDPNumGroupDlg_Impl>::Create(new ScDPNumGroupDlg(pParent, rInfo));
}
VclPtr<AbstractScDPDateGroupDlg> ScAbstractDialogFactory_Impl::CreateScDPDateGroupDlg(
diff --git a/sc/source/ui/attrdlg/scdlgfact.hxx b/sc/source/ui/attrdlg/scdlgfact.hxx
index 1d1b8ce..ddee8f8 100644
--- a/sc/source/ui/attrdlg/scdlgfact.hxx
+++ b/sc/source/ui/attrdlg/scdlgfact.hxx
@@ -406,7 +406,14 @@ class AbstractScDPSubtotalDlg_Impl : public AbstractScDPSubtotalDlg
class AbstractScDPNumGroupDlg_Impl : public AbstractScDPNumGroupDlg
{
DECL_ABSTDLG_BASE( AbstractScDPNumGroupDlg_Impl, ScDPNumGroupDlg )
protected:
std::unique_ptr<ScDPNumGroupDlg> m_xDlg;
public:
explicit AbstractScDPNumGroupDlg_Impl(ScDPNumGroupDlg* p)
: m_xDlg(p)
{
}
virtual short Execute() override;
virtual ScDPNumGroupInfo GetGroupInfo() const override;
};
@@ -649,8 +656,8 @@ public:
const ScPivotFuncData& rFuncData,
const ScDPNameVec& rDataFields ) override;
virtual VclPtr<AbstractScDPNumGroupDlg> CreateScDPNumGroupDlg( vcl::Window* pParent,
const ScDPNumGroupInfo& rInfo ) override;
virtual VclPtr<AbstractScDPNumGroupDlg> CreateScDPNumGroupDlg(weld::Window* pParent,
const ScDPNumGroupInfo& rInfo) override;
virtual VclPtr<AbstractScDPDateGroupDlg> CreateScDPDateGroupDlg( vcl::Window* pParent,
const ScDPNumGroupInfo& rInfo,
diff --git a/sc/source/ui/cctrl/editfield.cxx b/sc/source/ui/cctrl/editfield.cxx
index 6583e2b..0f69edc 100644
--- a/sc/source/ui/cctrl/editfield.cxx
+++ b/sc/source/ui/cctrl/editfield.cxx
@@ -67,4 +67,29 @@ void ScDoubleField::SetValue( double fValue, sal_Int32 nDecPlaces )
nDecPlaces, lclGetDecSep(), true/*bEraseTrailingDecZeros*/ ) );
}
DoubleField::DoubleField(std::unique_ptr<weld::Entry> xEntry)
: m_xEntry(std::move(xEntry))
{
}
bool DoubleField::GetValue( double& rfValue ) const
{
OUString aStr(comphelper::string::strip(m_xEntry->get_text(), ' '));
bool bOk = !aStr.isEmpty();
if( bOk )
{
rtl_math_ConversionStatus eStatus;
sal_Int32 nEnd;
rfValue = ScGlobal::GetpLocaleData()->stringToDouble( aStr, true, &eStatus, &nEnd );
bOk = (eStatus == rtl_math_ConversionStatus_Ok) && (nEnd == aStr.getLength() );
}
return bOk;
}
void DoubleField::SetValue( double fValue, sal_Int32 nDecPlaces )
{
m_xEntry->set_text( ::rtl::math::doubleToUString( fValue, rtl_math_StringFormat_G,
nDecPlaces, lclGetDecSep(), true/*bEraseTrailingDecZeros*/ ) );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/dbgui/dpgroupdlg.cxx b/sc/source/ui/dbgui/dpgroupdlg.cxx
index 60522c0..f1e3f3f 100644
--- a/sc/source/ui/dbgui/dpgroupdlg.cxx
+++ b/sc/source/ui/dbgui/dpgroupdlg.cxx
@@ -107,10 +107,62 @@ IMPL_LINK( ScDPGroupEditHelper, ClickHdl, Button*, pButton, void )
}
}
ScDPNumGroupEditHelper::ScDPNumGroupEditHelper(
RadioButton* pRbAuto, RadioButton* pRbMan, ScDoubleField* pEdValue ) :
ScDPGroupEditHelper( pRbAuto, pRbMan, pEdValue ),
mpEdValue( pEdValue )
DPGroupEditHelper::DPGroupEditHelper(weld::RadioButton* pRbAuto, weld::RadioButton* pRbMan, weld::Entry* pEdValue)
: mpRbAuto(pRbAuto)
, mpRbMan(pRbMan)
, mpEdValue(pEdValue)
{
mpRbAuto->connect_clicked( LINK( this, DPGroupEditHelper, ClickHdl ) );
mpRbMan->connect_clicked( LINK( this, DPGroupEditHelper, ClickHdl ) );
}
bool DPGroupEditHelper::IsAuto() const
{
return mpRbAuto->get_active();
}
double DPGroupEditHelper::GetValue() const
{
double fValue;
if( !ImplGetValue( fValue ) )
fValue = 0.0;
return fValue;
}
void DPGroupEditHelper::SetValue( bool bAuto, double fValue )
{
if( bAuto )
{
mpRbAuto->set_active(true);
ClickHdl(*mpRbAuto);
}
else
{
mpRbMan->set_active(true);
ClickHdl(*mpRbMan);
}
ImplSetValue( fValue );
}
IMPL_LINK(DPGroupEditHelper, ClickHdl, weld::Button&, rButton, void)
{
if (&rButton == mpRbAuto)
{
// disable edit field on clicking "automatic" radio button
mpEdValue->set_sensitive(false);
}
else if (&rButton == mpRbMan)
{
// enable and set focus to edit field on clicking "manual" radio button
mpEdValue->set_sensitive(true);
mpEdValue->grab_focus();
}
}
ScDPNumGroupEditHelper::ScDPNumGroupEditHelper(weld::RadioButton* pRbAuto,
weld::RadioButton* pRbMan, DoubleField* pEdValue)
: DPGroupEditHelper(pRbAuto, pRbMan, pEdValue->get_widget())
, mpEdValue(pEdValue)
{
}
@@ -145,51 +197,36 @@ void ScDPDateGroupEditHelper::ImplSetValue( double fValue )
mpEdValue->SetDate( aDate );
}
ScDPNumGroupDlg::ScDPNumGroupDlg( vcl::Window* pParent, const ScDPNumGroupInfo& rInfo ) :
ModalDialog ( pParent, "PivotTableGroupByNumber", "modules/scalc/ui/groupbynumber.ui" ),
mpRbAutoStart ( get<RadioButton>("auto_start") ),
mpRbManStart ( get<RadioButton>("manual_start") ),
mpEdStart ( get<ScDoubleField> ("edit_start") ),
mpRbAutoEnd ( get<RadioButton> ( "auto_end" ) ),
mpRbManEnd ( get<RadioButton> ("manual_end") ),
mpEdEnd ( get<ScDoubleField>( "edit_end") ),
mpEdBy ( get<ScDoubleField> ("edit_by") ),
maStartHelper ( mpRbAutoStart, mpRbManStart, mpEdStart ),
maEndHelper ( mpRbAutoEnd, mpRbManEnd, mpEdEnd )
ScDPNumGroupDlg::ScDPNumGroupDlg(weld::Window* pParent, const ScDPNumGroupInfo& rInfo)
: GenericDialogController(pParent, "modules/scalc/ui/groupbynumber.ui", "PivotTableGroupByNumber")
, mxRbAutoStart(m_xBuilder->weld_radio_button("auto_start"))
, mxRbManStart(m_xBuilder->weld_radio_button("manual_start"))
, mxEdStart(new DoubleField(m_xBuilder->weld_entry("edit_start")))
, mxRbAutoEnd(m_xBuilder->weld_radio_button("auto_end"))
, mxRbManEnd(m_xBuilder->weld_radio_button("manual_end"))
, mxEdEnd(new DoubleField(m_xBuilder->weld_entry("edit_end")))
, mxEdBy(new DoubleField(m_xBuilder->weld_entry("edit_by")))
, maStartHelper(mxRbAutoStart.get(), mxRbManStart.get(), mxEdStart.get())
, maEndHelper(mxRbAutoEnd.get(), mxRbManEnd.get(), mxEdEnd.get())
{
maStartHelper.SetValue( rInfo.mbAutoStart, rInfo.mfStart );
maEndHelper.SetValue( rInfo.mbAutoEnd, rInfo.mfEnd );
mpEdBy->SetValue( (rInfo.mfStep <= 0.0) ? 1.0 : rInfo.mfStep );
mxEdBy->SetValue( (rInfo.mfStep <= 0.0) ? 1.0 : rInfo.mfStep );
/* Set the initial focus, currently it is somewhere after calling all the radio
button click handlers. Now the first enabled editable control is focused. */
if( mpEdStart->IsEnabled() )
mpEdStart->GrabFocus();
else if( mpEdEnd->IsEnabled() )
mpEdEnd->GrabFocus();
if (mxEdStart->get_sensitive())
mxEdStart->grab_focus();
else if (mxEdEnd->get_sensitive())
mxEdEnd->grab_focus();
else
mpEdBy->GrabFocus();
mxEdBy->grab_focus();
}
ScDPNumGroupDlg::~ScDPNumGroupDlg()
{
disposeOnce();
}
void ScDPNumGroupDlg::dispose()
{
mpRbAutoStart.clear();
mpRbManStart.clear();
mpEdStart.clear();
mpRbAutoEnd.clear();
mpRbManEnd.clear();
mpEdEnd.clear();
mpEdBy.clear();
ModalDialog::dispose();
}
ScDPNumGroupInfo ScDPNumGroupDlg::GetGroupInfo() const
{
ScDPNumGroupInfo aInfo;
@@ -202,7 +239,7 @@ ScDPNumGroupInfo ScDPNumGroupDlg::GetGroupInfo() const
// TODO: error messages in OK event?
aInfo.mfStart = maStartHelper.GetValue();
aInfo.mfEnd = maEndHelper.GetValue();
if( !mpEdBy->GetValue( aInfo.mfStep ) || (aInfo.mfStep <= 0.0) )
if( !mxEdBy->GetValue( aInfo.mfStep ) || (aInfo.mfStep <= 0.0) )
aInfo.mfStep = 1.0;
if( aInfo.mfEnd <= aInfo.mfStart )
aInfo.mfEnd = aInfo.mfStart + aInfo.mfStep;
diff --git a/sc/source/ui/inc/dpgroupdlg.hxx b/sc/source/ui/inc/dpgroupdlg.hxx
index 01737a6..00d5943 100644
--- a/sc/source/ui/inc/dpgroupdlg.hxx
+++ b/sc/source/ui/inc/dpgroupdlg.hxx
@@ -23,6 +23,7 @@
#include <vcl/dialog.hxx>
#include <vcl/button.hxx>
#include <vcl/field.hxx>
#include <vcl/weld.hxx>
#include <svx/checklbx.hxx>
#include "editfield.hxx"
#include <dpnumgroupinfo.hxx>
@@ -53,12 +54,39 @@ private:
VclPtr<Edit> mpEdValue;
};
class ScDPNumGroupEditHelper : public ScDPGroupEditHelper
class DPGroupEditHelper
{
public:
explicit DPGroupEditHelper(
weld::RadioButton* rRbAuto, weld::RadioButton* rRbMan,
weld::Entry* rEdValue );
bool IsAuto() const;
double GetValue() const;
void SetValue( bool bAuto, double fValue );
protected:
~DPGroupEditHelper() {}
private:
virtual bool ImplGetValue( double& rfValue ) const = 0;
virtual void ImplSetValue( double fValue ) = 0;
DECL_LINK(ClickHdl, weld::Button&, void);
private:
weld::RadioButton* mpRbAuto;
weld::RadioButton* mpRbMan;
weld::Entry* mpEdValue;
};
class ScDPNumGroupEditHelper : public DPGroupEditHelper
{
public:
explicit ScDPNumGroupEditHelper(
RadioButton* pRbAuto, RadioButton* pRbMan,
ScDoubleField* pEdValue );
weld::RadioButton* pRbAuto, weld::RadioButton* pRbMan,
DoubleField* pEdValue );
virtual ~ScDPNumGroupEditHelper() {}
private:
@@ -66,7 +94,7 @@ private:
virtual void ImplSetValue( double fValue ) override;
private:
VclPtr<ScDoubleField> mpEdValue;
DoubleField* mpEdValue;
};
class ScDPDateGroupEditHelper : public ScDPGroupEditHelper
@@ -87,22 +115,21 @@ private:
Date const maNullDate;
};
class ScDPNumGroupDlg : public ModalDialog
class ScDPNumGroupDlg : public weld::GenericDialogController
{
public:
explicit ScDPNumGroupDlg( vcl::Window* pParent, const ScDPNumGroupInfo& rInfo );
virtual ~ScDPNumGroupDlg() override;
virtual void dispose() override;
explicit ScDPNumGroupDlg(weld::Window* pParent, const ScDPNumGroupInfo& rInfo);
virtual ~ScDPNumGroupDlg() override;
ScDPNumGroupInfo GetGroupInfo() const;
private:
VclPtr<RadioButton> mpRbAutoStart;
VclPtr<RadioButton> mpRbManStart;
VclPtr<ScDoubleField> mpEdStart;
VclPtr<RadioButton> mpRbAutoEnd;
VclPtr<RadioButton> mpRbManEnd;
VclPtr<ScDoubleField> mpEdEnd;
VclPtr<ScDoubleField> mpEdBy;
std::unique_ptr<weld::RadioButton> mxRbAutoStart;
std::unique_ptr<weld::RadioButton> mxRbManStart;
std::unique_ptr<DoubleField> mxEdStart;
std::unique_ptr<weld::RadioButton> mxRbAutoEnd;
std::unique_ptr<weld::RadioButton> mxRbManEnd;
std::unique_ptr<DoubleField> mxEdEnd;
std::unique_ptr<DoubleField> mxEdBy;
ScDPNumGroupEditHelper maStartHelper;
ScDPNumGroupEditHelper maEndHelper;
};
diff --git a/sc/source/ui/inc/editfield.hxx b/sc/source/ui/inc/editfield.hxx
index fa27d47..4ab170c 100644
--- a/sc/source/ui/inc/editfield.hxx
+++ b/sc/source/ui/inc/editfield.hxx
@@ -21,6 +21,7 @@
#define INCLUDED_SC_SOURCE_UI_INC_EDITFIELD_HXX
#include <vcl/edit.hxx>
#include <vcl/weld.hxx>
/** An edit control that contains a double precision floating-point value. */
class ScDoubleField : public Edit
@@ -33,6 +34,22 @@ public:
sal_Int32 nDecPlaces = 12 );
};
class DoubleField
{
private:
std::unique_ptr<weld::Entry> m_xEntry;
public:
explicit DoubleField(std::unique_ptr<weld::Entry> xEntry);
bool GetValue(double& rfValue) const;
void SetValue(double fValue, sal_Int32 nDecPlaces = 12);
weld::Entry* get_widget() { return m_xEntry.get(); }
void grab_focus() { m_xEntry->grab_focus(); }
bool get_sensitive() const { return m_xEntry->get_sensitive(); }
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx
index 0694c87..88e7b85 100644
--- a/sc/source/ui/view/cellsh1.cxx
+++ b/sc/source/ui/view/cellsh1.cxx
@@ -1128,7 +1128,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
{
ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
ScopedVclPtr<AbstractScDPNumGroupDlg> pDlg( pFact->CreateScDPNumGroupDlg(
pTabViewShell->GetDialogParent(), aNumInfo ) );
pTabViewShell->GetFrameWeld(), aNumInfo ) );
if( pDlg->Execute() == RET_OK )
pTabViewShell->NumGroupDataPilot( pDlg->GetGroupInfo() );
}
diff --git a/sc/uiconfig/scalc/ui/groupbynumber.ui b/sc/uiconfig/scalc/ui/groupbynumber.ui
index ed6a95a..2429198 100644
--- a/sc/uiconfig/scalc/ui/groupbynumber.ui
+++ b/sc/uiconfig/scalc/ui/groupbynumber.ui
@@ -1,14 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<!-- Generated with glade 3.22.1 -->
<interface domain="sc">
<requires lib="gtk+" version="3.18"/>
<requires lib="LibreOffice" version="1.0"/>
<object class="GtkDialog" id="PivotTableGroupByNumber">
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="title" translatable="yes" context="groupbynumber|PivotTableGroupByNumber">Grouping</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="default_width">0</property>
<property name="default_height">0</property>
<property name="type_hint">dialog</property>
<child>
<placeholder/>
</child>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
<property name="can_focus">False</property>
@@ -23,6 +28,7 @@
<property name="label">gtk-ok</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
@@ -38,6 +44,7 @@
<property name="label">gtk-cancel</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</object>
@@ -105,7 +112,6 @@
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">manual_start</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -120,9 +126,11 @@
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">auto_start</property>
<accessibility>
<relation type="label-for" target="edit_start"/>
</accessibility>
</object>
<packing>
<property name="left_attach">0</property>
@@ -130,10 +138,14 @@
</packing>
</child>
<child>
<object class="scuilo-ScDoubleField" id="edit_start">
<object class="GtkEntry" id="edit_start">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="activates_default">True</property>
<accessibility>
<relation type="labelled-by" target="manual_start"/>
</accessibility>
</object>
<packing>
<property name="left_attach">1</property>
@@ -194,7 +206,6 @@
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">manual_end</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -209,9 +220,11 @@
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">auto_end</property>
<accessibility>
<relation type="label-for" target="edit_end"/>
</accessibility>
</object>
<packing>
<property name="left_attach">0</property>
@@ -219,10 +232,13 @@
</packing>
</child>
<child>
<object class="scuilo-ScDoubleField" id="edit_end">
<object class="GtkEntry" id="edit_end">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<accessibility>
<relation type="labelled-by" target="manual_end"/>
</accessibility>
</object>
<packing>
<property name="left_attach">1</property>
@@ -266,9 +282,10 @@
<property name="top_padding">6</property>
<property name="left_padding">12</property>
<child>
<object class="scuilo-ScDoubleField" id="edit_by">
<object class="GtkEntry" id="edit_by">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="activates_default">True</property>
</object>
</child>
</object>
diff --git a/solenv/sanitizers/ui/modules/scalc.suppr b/solenv/sanitizers/ui/modules/scalc.suppr
index 3ce7f26..ffed06f 100644
--- a/solenv/sanitizers/ui/modules/scalc.suppr
+++ b/solenv/sanitizers/ui/modules/scalc.suppr
@@ -75,6 +75,7 @@ sc/uiconfig/scalc/ui/functionpanel.ui://GtkLabel[@id='funcdesc:border'] orphan-l
sc/uiconfig/scalc/ui/groupbydate.ui://GtkSpinButton[@id='start_date:yy:mm:dd'] no-labelled-by
sc/uiconfig/scalc/ui/groupbydate.ui://GtkSpinButton[@id='end_date:yy:mm:dd'] no-labelled-by
sc/uiconfig/scalc/ui/groupbydate.ui://GtkSpinButton[@id='days_value'] no-labelled-by
sc/uiconfig/scalc/ui/groupbynumber.ui://GtkEntry[@id='edit_by'] no-labelled-by
sc/uiconfig/scalc/ui/headerfootercontent.ui://GtkLabel[@id='labelFT_H_CUSTOM'] orphan-label
sc/uiconfig/scalc/ui/headerfootercontent.ui://GtkLabel[@id='labelFT_F_CUSTOM'] orphan-label
sc/uiconfig/scalc/ui/headerfootercontent.ui://GtkLabel[@id='label2'] orphan-label