Resolves: tdf#121246 crash in chart dialogs

Change-Id: I3bc720e44f5ea15749e6bc0f0fada3a17a783e23
Reviewed-on: https://gerrit.libreoffice.org/63463
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/chart2/source/controller/dialogs/tp_AxisPositions.cxx b/chart2/source/controller/dialogs/tp_AxisPositions.cxx
index fc4fbe1..4c098e6 100644
--- a/chart2/source/controller/dialogs/tp_AxisPositions.cxx
+++ b/chart2/source/controller/dialogs/tp_AxisPositions.cxx
@@ -39,46 +39,29 @@ using namespace ::com::sun::star;
namespace chart
{

AxisPositionsTabPage::AxisPositionsTabPage(vcl::Window* pWindow,const SfxItemSet& rInAttrs)
    : SfxTabPage(pWindow
                ,"tp_AxisPositions"
                ,"modules/schart/ui/tp_AxisPositions.ui"
                , &rInAttrs)
AxisPositionsTabPage::AxisPositionsTabPage(TabPageParent pWindow,const SfxItemSet& rInAttrs)
    : SfxTabPage(pWindow ,"modules/schart/ui/tp_AxisPositions.ui" ,"tp_AxisPositions" , &rInAttrs)
    , m_pNumFormatter(nullptr)
    , m_bCrossingAxisIsCategoryAxis(false)
    , m_aCategories()
    , m_bSupportAxisPositioning(false)
    , m_xFL_AxisLine(m_xBuilder->weld_frame("FL_AXIS_LINE"))
    , m_xLB_CrossesAt(m_xBuilder->weld_combo_box("LB_CROSSES_OTHER_AXIS_AT"))
    , m_xED_CrossesAt(m_xBuilder->weld_formatted_spin_button("EDT_CROSSES_OTHER_AXIS_AT"))
    , m_xED_CrossesAtCategory(m_xBuilder->weld_combo_box( "EDT_CROSSES_OTHER_AXIS_AT_CATEGORY"))
    , m_xCB_AxisBetweenCategories(m_xBuilder->weld_check_button("CB_AXIS_BETWEEN_CATEGORIES"))
    , m_xFL_Labels(m_xBuilder->weld_frame("FL_LABELS"))
    , m_xLB_PlaceLabels(m_xBuilder->weld_combo_box("LB_PLACE_LABELS"))
    , m_xED_LabelDistance(m_xBuilder->weld_formatted_spin_button("EDT_AXIS_LABEL_DISTANCE"))
    , m_xCB_TicksInner(m_xBuilder->weld_check_button("CB_TICKS_INNER"))
    , m_xCB_TicksOuter(m_xBuilder->weld_check_button("CB_TICKS_OUTER"))
    , m_xCB_MinorInner(m_xBuilder->weld_check_button("CB_MINOR_INNER"))
    , m_xCB_MinorOuter(m_xBuilder->weld_check_button("CB_MINOR_OUTER"))
    , m_xBxPlaceTicks(m_xBuilder->weld_widget("boxPLACE_TICKS"))
    , m_xLB_PlaceTicks(m_xBuilder->weld_combo_box("LB_PLACE_TICKS"))
{
    get(m_pFL_AxisLine, "FL_AXIS_LINE");
    get(m_pLB_CrossesAt,"LB_CROSSES_OTHER_AXIS_AT");
    get(m_pED_CrossesAt,"EDT_CROSSES_OTHER_AXIS_AT");
    get(m_pED_CrossesAtCategory, "EDT_CROSSES_OTHER_AXIS_AT_CATEGORY");
    get(m_pCB_AxisBetweenCategories, "CB_AXIS_BETWEEN_CATEGORIES");

    get(m_pFL_Labels, "FL_LABELS");
    get(m_pLB_PlaceLabels,"LB_PLACE_LABELS");
    get(m_pED_LabelDistance,"EDT_AXIS_LABEL_DISTANCE");

    get(m_pCB_TicksInner, "CB_TICKS_INNER");
    get(m_pCB_TicksOuter, "CB_TICKS_OUTER");
    get(m_pCB_MinorInner, "CB_MINOR_INNER");
    get(m_pCB_MinorOuter, "CB_MINOR_OUTER");

    get(m_pBxPlaceTicks, "boxPLACE_TICKS");
    get(m_pLB_PlaceTicks, "LB_PLACE_TICKS");

    // these are not used/implemented
//     get(m_pCB_MajorGrid, "CB_MAJOR_GRID");
//     get(m_pPB_MajorGrid, "PB_MAJOR_GRID");
//     get(m_pCB_MinorGrid, "CB_MINOR_GRID");
//     get(m_pPB_MinorGrid, "PB_MINOR_GRID");

    m_pLB_CrossesAt->SetSelectHdl( LINK( this, AxisPositionsTabPage, CrossesAtSelectHdl ) );
    m_pLB_CrossesAt->SetDropDownLineCount( m_pLB_CrossesAt->GetEntryCount() );

    m_pLB_PlaceLabels->SetSelectHdl( LINK( this, AxisPositionsTabPage, PlaceLabelsSelectHdl ) );
    m_pLB_PlaceLabels->SetDropDownLineCount( m_pLB_PlaceLabels->GetEntryCount() );
    m_pLB_PlaceTicks->SetDropDownLineCount( m_pLB_PlaceTicks->GetEntryCount() );
    m_xLB_CrossesAt->connect_changed(LINK(this, AxisPositionsTabPage, CrossesAtSelectHdl));
    m_xLB_PlaceLabels->connect_changed(LINK(this, AxisPositionsTabPage, PlaceLabelsSelectHdl));
}

AxisPositionsTabPage::~AxisPositionsTabPage()
@@ -86,66 +69,47 @@ AxisPositionsTabPage::~AxisPositionsTabPage()
    disposeOnce();
}

void AxisPositionsTabPage::dispose()
VclPtr<SfxTabPage> AxisPositionsTabPage::Create(TabPageParent pParent, const SfxItemSet* rOutAttrs)
{
    m_pFL_AxisLine.clear();
    m_pLB_CrossesAt.clear();
    m_pED_CrossesAt.clear();
    m_pED_CrossesAtCategory.clear();
    m_pCB_AxisBetweenCategories.clear();
    m_pFL_Labels.clear();
    m_pLB_PlaceLabels.clear();
    m_pED_LabelDistance.clear();
    m_pCB_TicksInner.clear();
    m_pCB_TicksOuter.clear();
    m_pCB_MinorInner.clear();
    m_pCB_MinorOuter.clear();
    m_pBxPlaceTicks.clear();
    m_pLB_PlaceTicks.clear();
    SfxTabPage::dispose();
}

VclPtr<SfxTabPage> AxisPositionsTabPage::Create(TabPageParent pWindow,const SfxItemSet* rOutAttrs)
{
    return VclPtr<AxisPositionsTabPage>::Create(pWindow.pParent, *rOutAttrs);
    return VclPtr<AxisPositionsTabPage>::Create(pParent, *rOutAttrs);
}

bool AxisPositionsTabPage::FillItemSet(SfxItemSet* rOutAttrs)
{
    // axis line
    sal_Int32 nPos = m_pLB_CrossesAt->GetSelectedEntryPos();
    sal_Int32 nPos = m_xLB_CrossesAt->get_active();
    rOutAttrs->Put( SfxInt32Item( SCHATTR_AXIS_POSITION, nPos+1 ));
    if( nPos==2 )
    {
        double fCrossover = m_pED_CrossesAt->GetValue();
        double fCrossover = m_xED_CrossesAt->get_value();
        if( m_bCrossingAxisIsCategoryAxis )
            fCrossover = m_pED_CrossesAtCategory->GetSelectedEntryPos()+1;
            fCrossover = m_xED_CrossesAtCategory->get_active()+1;
        rOutAttrs->Put(SvxDoubleItem(fCrossover,SCHATTR_AXIS_POSITION_VALUE));
    }

    // labels
    sal_Int32 nLabelPos = m_pLB_PlaceLabels->GetSelectedEntryPos();
    if( nLabelPos != LISTBOX_ENTRY_NOTFOUND )
    sal_Int32 nLabelPos = m_xLB_PlaceLabels->get_active();
    if (nLabelPos != -1)
        rOutAttrs->Put( SfxInt32Item( SCHATTR_AXIS_LABEL_POSITION, nLabelPos ));

    // tick marks
    long nTicks=0;
    long nMinorTicks=0;

    if(m_pCB_MinorInner->IsChecked())
    if(m_xCB_MinorInner->get_active())
        nMinorTicks|=CHAXIS_MARK_INNER;
    if(m_pCB_MinorOuter->IsChecked())
    if(m_xCB_MinorOuter->get_active())
        nMinorTicks|=CHAXIS_MARK_OUTER;
    if(m_pCB_TicksInner->IsChecked())
    if(m_xCB_TicksInner->get_active())
        nTicks|=CHAXIS_MARK_INNER;
    if(m_pCB_TicksOuter->IsChecked())
    if(m_xCB_TicksOuter->get_active())
        nTicks|=CHAXIS_MARK_OUTER;

    rOutAttrs->Put(SfxInt32Item(SCHATTR_AXIS_TICKS,nTicks));
    rOutAttrs->Put(SfxInt32Item(SCHATTR_AXIS_HELPTICKS,nMinorTicks));

    sal_Int32 nMarkPos = m_pLB_PlaceTicks->GetSelectedEntryPos();
    if( nMarkPos != LISTBOX_ENTRY_NOTFOUND )
    sal_Int32 nMarkPos = m_xLB_PlaceTicks->get_active();
    if (nMarkPos != -1)
        rOutAttrs->Put( SfxInt32Item( SCHATTR_AXIS_MARK_POSITION, nMarkPos ));

    return true;
@@ -154,26 +118,24 @@ bool AxisPositionsTabPage::FillItemSet(SfxItemSet* rOutAttrs)
void AxisPositionsTabPage::Reset(const SfxItemSet* rInAttrs)
{
    //init and enable controls
    m_pED_CrossesAt->Show( !m_bCrossingAxisIsCategoryAxis );
    m_pED_CrossesAtCategory->Show( m_bCrossingAxisIsCategoryAxis );
    const sal_Int32 nMaxCount = LISTBOX_ENTRY_NOTFOUND;
    if( m_bCrossingAxisIsCategoryAxis )
    m_xED_CrossesAt->show( !m_bCrossingAxisIsCategoryAxis );
    m_xED_CrossesAtCategory->show( m_bCrossingAxisIsCategoryAxis );
    if (m_bCrossingAxisIsCategoryAxis)
    {
        for( sal_Int32 nN=0; nN<m_aCategories.getLength() && nN<nMaxCount; nN++ )
            m_pED_CrossesAtCategory->InsertEntry( m_aCategories[nN] );
        for( sal_Int32 nN=0; nN<m_aCategories.getLength(); nN++ )
            m_xED_CrossesAtCategory->append_text(m_aCategories[nN]);

        sal_Int32 nCount = m_pED_CrossesAtCategory->GetEntryCount();
        sal_Int32 nCount = m_xED_CrossesAtCategory->get_count();
        if( nCount>30 )
            nCount=30;
        m_pED_CrossesAtCategory->SetDropDownLineCount( nCount );
    }

    if( m_pLB_CrossesAt->GetEntryCount() > 3 )
    if( m_xLB_CrossesAt->get_count() > 3 )
    {
        if( m_bCrossingAxisIsCategoryAxis )
            m_pLB_CrossesAt->RemoveEntry(2);
            m_xLB_CrossesAt->remove(2);
        else
            m_pLB_CrossesAt->RemoveEntry(3);
            m_xLB_CrossesAt->remove(3);
    }

    //fill controls
@@ -193,9 +155,9 @@ void AxisPositionsTabPage::Reset(const SfxItemSet* rInAttrs)
        else
            nPos--;

        if( nPos < m_pLB_CrossesAt->GetEntryCount() )
            m_pLB_CrossesAt->SelectEntryPos( nPos );
        CrossesAtSelectHdl( *m_pLB_CrossesAt );
        if( nPos < m_xLB_CrossesAt->get_count() )
            m_xLB_CrossesAt->set_active( nPos );
        CrossesAtSelectHdl( *m_xLB_CrossesAt );

        if( rInAttrs->GetItemState(SCHATTR_AXIS_POSITION_VALUE,true, &pPoolItem)== SfxItemState::SET || bZero )
        {
@@ -203,71 +165,71 @@ void AxisPositionsTabPage::Reset(const SfxItemSet* rInAttrs)
            if( !bZero )
                fCrossover = static_cast<const SvxDoubleItem*>(pPoolItem)->GetValue();
            if( m_bCrossingAxisIsCategoryAxis )
                m_pED_CrossesAtCategory->SelectEntryPos( static_cast<sal_uInt16>(::rtl::math::round(fCrossover-1.0)) );
                m_xED_CrossesAtCategory->set_active( static_cast<sal_uInt16>(::rtl::math::round(fCrossover-1.0)) );
            else
                m_pED_CrossesAt->SetValue(fCrossover);
                m_xED_CrossesAt->set_value(fCrossover);
        }
        else
        {
            m_pED_CrossesAtCategory->SetNoSelection();
            m_pED_CrossesAt->SetTextValue("");
            m_xED_CrossesAtCategory->set_active(-1);
            m_xED_CrossesAt->set_text("");
        }
    }
    else
    {
        m_pLB_CrossesAt->SetNoSelection();
        m_pED_CrossesAt->Enable( false );
        m_xLB_CrossesAt->set_active(-1);
        m_xED_CrossesAt->set_sensitive( false );
    }

    // Labels
    if( rInAttrs->GetItemState( SCHATTR_AXIS_LABEL_POSITION, false, &pPoolItem ) == SfxItemState::SET )
    {
        sal_Int32 nPos = static_cast< const SfxInt32Item * >( pPoolItem )->GetValue();
        if( nPos < m_pLB_PlaceLabels->GetEntryCount() )
            m_pLB_PlaceLabels->SelectEntryPos( nPos );
        if( nPos < m_xLB_PlaceLabels->get_count() )
            m_xLB_PlaceLabels->set_active( nPos );
    }
    else
        m_pLB_PlaceLabels->SetNoSelection();
    PlaceLabelsSelectHdl( *m_pLB_PlaceLabels );
        m_xLB_PlaceLabels->set_active(-1);
    PlaceLabelsSelectHdl( *m_xLB_PlaceLabels );

    // Tick marks
    long nTicks = 0, nMinorTicks = 0;
    if(rInAttrs->GetItemState(SCHATTR_AXIS_TICKS,true, &pPoolItem)== SfxItemState::SET)
    if (rInAttrs->GetItemState(SCHATTR_AXIS_TICKS,true, &pPoolItem)== SfxItemState::SET)
        nTicks = static_cast<const SfxInt32Item*>(pPoolItem)->GetValue();
    if(rInAttrs->GetItemState(SCHATTR_AXIS_HELPTICKS,true, &pPoolItem)== SfxItemState::SET)
    if (rInAttrs->GetItemState(SCHATTR_AXIS_HELPTICKS,true, &pPoolItem)== SfxItemState::SET)
        nMinorTicks = static_cast<const SfxInt32Item*>(pPoolItem)->GetValue();

    m_pCB_TicksInner->Check(bool(nTicks&CHAXIS_MARK_INNER));
    m_pCB_TicksOuter->Check(bool(nTicks&CHAXIS_MARK_OUTER));
    m_pCB_MinorInner->Check(bool(nMinorTicks&CHAXIS_MARK_INNER));
    m_pCB_MinorOuter->Check(bool(nMinorTicks&CHAXIS_MARK_OUTER));
    m_xCB_TicksInner->set_active(bool(nTicks&CHAXIS_MARK_INNER));
    m_xCB_TicksOuter->set_active(bool(nTicks&CHAXIS_MARK_OUTER));
    m_xCB_MinorInner->set_active(bool(nMinorTicks&CHAXIS_MARK_INNER));
    m_xCB_MinorOuter->set_active(bool(nMinorTicks&CHAXIS_MARK_OUTER));

    // Tick position
    if( rInAttrs->GetItemState( SCHATTR_AXIS_MARK_POSITION, false, &pPoolItem ) == SfxItemState::SET )
    {
        sal_Int32 nPos = static_cast< const SfxInt32Item * >( pPoolItem )->GetValue();
        if( nPos < m_pLB_PlaceTicks->GetEntryCount() )
            m_pLB_PlaceTicks->SelectEntryPos( nPos );
        if( nPos < m_xLB_PlaceTicks->get_count() )
            m_xLB_PlaceTicks->set_active( nPos );
    }
    else
        m_pLB_PlaceTicks->SetNoSelection();
        m_xLB_PlaceTicks->set_active(-1);

    if( !m_bSupportAxisPositioning )
    {
        m_pFL_AxisLine->Show(false);
        m_xFL_AxisLine->show(false);

        m_pFL_Labels->Show(false);
        m_xFL_Labels->show(false);

        m_pBxPlaceTicks->Show(false);
        m_xBxPlaceTicks->show(false);
    }
    else if( !AxisHelper::isAxisPositioningEnabled() )
    {

        m_pFL_AxisLine->Enable(false);
        m_xFL_AxisLine->set_sensitive(false);

        m_pFL_Labels->Enable(false);
        m_xFL_Labels->set_sensitive(false);

        m_pBxPlaceTicks->Enable(false);
        m_xBxPlaceTicks->set_sensitive(false);

        //todo: maybe set a special help id to all those controls
    }
@@ -284,14 +246,13 @@ DeactivateRC AxisPositionsTabPage::DeactivatePage(SfxItemSet* pItemSet)
void AxisPositionsTabPage::SetNumFormatter( SvNumberFormatter* pFormatter )
{
    m_pNumFormatter = pFormatter;
    m_pED_CrossesAt->SetFormatter( m_pNumFormatter );
    m_pED_CrossesAt->UseInputStringForFormatting();
    m_xED_CrossesAt->set_formatter(m_pNumFormatter);

    const SfxPoolItem *pPoolItem = nullptr;
    if( GetItemSet().GetItemState( SCHATTR_AXIS_CROSSING_MAIN_AXIS_NUMBERFORMAT, true, &pPoolItem ) == SfxItemState::SET )
    {
        sal_uLong nFmt = static_cast<sal_uLong>(static_cast<const SfxInt32Item*>(pPoolItem)->GetValue());
        m_pED_CrossesAt->SetFormatKey( nFmt );
        m_xED_CrossesAt->set_format_key( nFmt );
    }
}

@@ -310,32 +271,32 @@ void AxisPositionsTabPage::SupportAxisPositioning( bool bSupportAxisPositioning 
    m_bSupportAxisPositioning = bSupportAxisPositioning;
}

IMPL_LINK_NOARG(AxisPositionsTabPage, CrossesAtSelectHdl, ListBox&, void)
IMPL_LINK_NOARG(AxisPositionsTabPage, CrossesAtSelectHdl, weld::ComboBox&, void)
{
    sal_Int32 nPos = m_pLB_CrossesAt->GetSelectedEntryPos();
    m_pED_CrossesAt->Show( (nPos==2) && !m_bCrossingAxisIsCategoryAxis );
    m_pED_CrossesAtCategory->Show( (nPos==2) && m_bCrossingAxisIsCategoryAxis );
    sal_Int32 nPos = m_xLB_CrossesAt->get_active();
    m_xED_CrossesAt->show( (nPos==2) && !m_bCrossingAxisIsCategoryAxis );
    m_xED_CrossesAtCategory->show( (nPos==2) && m_bCrossingAxisIsCategoryAxis );

    if( m_pED_CrossesAt->GetText().isEmpty() )
        m_pED_CrossesAt->SetValue(0.0);
    if( m_pED_CrossesAtCategory->GetSelectedEntryCount() == 0 )
        m_pED_CrossesAtCategory->SelectEntryPos(0);
    if (m_xED_CrossesAt->get_text().isEmpty())
        m_xED_CrossesAt->set_value(0.0);
    if (m_xED_CrossesAtCategory->get_active() == -1)
        m_xED_CrossesAtCategory->set_active(0);

    PlaceLabelsSelectHdl( *m_pLB_PlaceLabels );
    PlaceLabelsSelectHdl(*m_xLB_PlaceLabels);
}

IMPL_LINK_NOARG(AxisPositionsTabPage, PlaceLabelsSelectHdl, ListBox&, void)
IMPL_LINK_NOARG(AxisPositionsTabPage, PlaceLabelsSelectHdl, weld::ComboBox&, void)
{
    sal_Int32 nLabelPos = m_pLB_PlaceLabels->GetSelectedEntryPos();
    sal_Int32 nLabelPos = m_xLB_PlaceLabels->get_active();

    bool bEnableTickmarkPlacement = (nLabelPos>1);
    if( bEnableTickmarkPlacement )
    {
        sal_Int32 nAxisPos = m_pLB_CrossesAt->GetSelectedEntryPos();
        sal_Int32 nAxisPos = m_xLB_CrossesAt->get_active();
        if( nLabelPos-2 == nAxisPos )
            bEnableTickmarkPlacement=false;
    }
    m_pBxPlaceTicks->Enable(bEnableTickmarkPlacement);
    m_xBxPlaceTicks->set_sensitive(bEnableTickmarkPlacement);
}

} //namespace chart
diff --git a/chart2/source/controller/dialogs/tp_AxisPositions.hxx b/chart2/source/controller/dialogs/tp_AxisPositions.hxx
index 656e04f..1b4f2e0 100644
--- a/chart2/source/controller/dialogs/tp_AxisPositions.hxx
+++ b/chart2/source/controller/dialogs/tp_AxisPositions.hxx
@@ -20,9 +20,6 @@
#define INCLUDED_CHART2_SOURCE_CONTROLLER_DIALOGS_TP_AXISPOSITIONS_HXX

#include <sfx2/tabdlg.hxx>
#include <vcl/fmtfield.hxx>
#include <vcl/button.hxx>
#include <vcl/lstbox.hxx>

namespace chart
{
@@ -30,9 +27,8 @@ namespace chart
class AxisPositionsTabPage : public SfxTabPage
{
public:
    AxisPositionsTabPage( vcl::Window* pParent, const SfxItemSet& rInAttrs );
    AxisPositionsTabPage(TabPageParent pParent, const SfxItemSet& rInAttrs);
    virtual ~AxisPositionsTabPage() override;
    virtual void dispose() override;

    static VclPtr<SfxTabPage> Create( TabPageParent pParent, const SfxItemSet* rInAttrs );
    virtual bool FillItemSet( SfxItemSet* rOutAttrs ) override;
@@ -48,41 +44,35 @@ public:
    void SupportAxisPositioning( bool bSupportAxisPositioning );

private: //methods:
    DECL_LINK( CrossesAtSelectHdl, ListBox&, void );
    DECL_LINK( PlaceLabelsSelectHdl, ListBox&, void );
    DECL_LINK(CrossesAtSelectHdl, weld::ComboBox&, void);
    DECL_LINK(PlaceLabelsSelectHdl, weld::ComboBox&, void);

private: //member:
    VclPtr<VclFrame>       m_pFL_AxisLine;
    VclPtr<ListBox>        m_pLB_CrossesAt;
    VclPtr<FormattedField> m_pED_CrossesAt;
    VclPtr<ComboBox>       m_pED_CrossesAtCategory;
    VclPtr<CheckBox>       m_pCB_AxisBetweenCategories;

    VclPtr<VclFrame>       m_pFL_Labels;
    VclPtr<ListBox>        m_pLB_PlaceLabels;
    VclPtr<FormattedField> m_pED_LabelDistance;

    VclPtr<CheckBox>       m_pCB_TicksInner;
    VclPtr<CheckBox>       m_pCB_TicksOuter;

    VclPtr<CheckBox>       m_pCB_MinorInner;
    VclPtr<CheckBox>       m_pCB_MinorOuter;

    VclPtr<VclBox>         m_pBxPlaceTicks;
    VclPtr<ListBox>        m_pLB_PlaceTicks;

//     Not implemented
//     VclPtr<CheckBox>       m_pCB_MajorGrid;
//     VclPtr<PushButton>     m_pPB_MajorGrid;
//     VclPtr<CheckBox>       m_pCB_MinorGrid;
//     VclPtr<PushButton>     m_pPB_MinorGrid;

    SvNumberFormatter*  m_pNumFormatter;

    bool    m_bCrossingAxisIsCategoryAxis;
    css::uno::Sequence< OUString > m_aCategories;

    bool    m_bSupportAxisPositioning;

    std::unique_ptr<weld::Frame> m_xFL_AxisLine;
    std::unique_ptr<weld::ComboBox> m_xLB_CrossesAt;
    std::unique_ptr<weld::FormattedSpinButton> m_xED_CrossesAt;
    std::unique_ptr<weld::ComboBox> m_xED_CrossesAtCategory;
    std::unique_ptr<weld::CheckButton> m_xCB_AxisBetweenCategories;

    std::unique_ptr<weld::Frame> m_xFL_Labels;
    std::unique_ptr<weld::ComboBox> m_xLB_PlaceLabels;
    std::unique_ptr<weld::FormattedSpinButton> m_xED_LabelDistance;

    std::unique_ptr<weld::CheckButton> m_xCB_TicksInner;
    std::unique_ptr<weld::CheckButton> m_xCB_TicksOuter;

    std::unique_ptr<weld::CheckButton> m_xCB_MinorInner;
    std::unique_ptr<weld::CheckButton> m_xCB_MinorOuter;

    std::unique_ptr<weld::Widget> m_xBxPlaceTicks;
    std::unique_ptr<weld::ComboBox> m_xLB_PlaceTicks;
};

} //namespace chart
diff --git a/chart2/source/controller/dialogs/tp_Scale.cxx b/chart2/source/controller/dialogs/tp_Scale.cxx
index b785414..21794cf 100644
--- a/chart2/source/controller/dialogs/tp_Scale.cxx
+++ b/chart2/source/controller/dialogs/tp_Scale.cxx
@@ -43,81 +43,61 @@ namespace chart
namespace
{

void lcl_setValue( FormattedField& rFmtField, double fValue )
void lcl_setValue(weld::FormattedSpinButton& rFmtField, double fValue)
{
    rFmtField.SetValue( fValue );
    rFmtField.SetDefaultValue( fValue );
    rFmtField.set_value(fValue);
}

}

ScaleTabPage::ScaleTabPage(vcl::Window* pWindow,const SfxItemSet& rInAttrs) :
    SfxTabPage(pWindow
               , "tp_Scale"
               , "modules/schart/ui/tp_Scale.ui"
               , &rInAttrs),
    fMin(0.0),
    fMax(0.0),
    fStepMain(0.0),
    nStepHelp(0),
    fOrigin(0.0),
    m_nTimeResolution(1),
    m_nMainTimeUnit(1),
    m_nHelpTimeUnit(1),
    m_nAxisType(chart2::AxisType::REALNUMBER),
    m_bAllowDateAxis(false),
    pNumFormatter(nullptr),
    m_bShowAxisOrigin(false)
ScaleTabPage::ScaleTabPage(TabPageParent pWindow,const SfxItemSet& rInAttrs)
    : SfxTabPage(pWindow, "modules/schart/ui/tp_Scale.ui", "tp_Scale", &rInAttrs)
    , fMin(0.0)
    , fMax(0.0)
    , fStepMain(0.0)
    , nStepHelp(0)
    , fOrigin(0.0)
    , m_nTimeResolution(1)
    , m_nMainTimeUnit(1)
    , m_nHelpTimeUnit(1)
    , m_nAxisType(chart2::AxisType::REALNUMBER)
    , m_bAllowDateAxis(false)
    , pNumFormatter(nullptr)
    , m_bShowAxisOrigin(false)
    , m_xCbxReverse(m_xBuilder->weld_check_button("CBX_REVERSE"))
    , m_xCbxLogarithm(m_xBuilder->weld_check_button("CBX_LOGARITHM"))
    , m_xBxType(m_xBuilder->weld_widget("boxTYPE"))
    , m_xLB_AxisType(m_xBuilder->weld_combo_box("LB_AXIS_TYPE"))
    , m_xBxMinMax(m_xBuilder->weld_widget("gridMINMAX"))
    , m_xFmtFldMin(m_xBuilder->weld_formatted_spin_button("EDT_MIN"))
    , m_xCbxAutoMin(m_xBuilder->weld_check_button("CBX_AUTO_MIN"))
    , m_xFmtFldMax(m_xBuilder->weld_formatted_spin_button("EDT_MAX"))
    , m_xCbxAutoMax(m_xBuilder->weld_check_button("CBX_AUTO_MAX"))
    , m_xBxResolution(m_xBuilder->weld_widget("boxRESOLUTION"))
    , m_xLB_TimeResolution(m_xBuilder->weld_combo_box("LB_TIME_RESOLUTION"))
    , m_xCbx_AutoTimeResolution(m_xBuilder->weld_check_button("CBX_AUTO_TIME_RESOLUTION"))
    , m_xTxtMain(m_xBuilder->weld_label("TXT_STEP_MAIN"))
    , m_xFmtFldStepMain(m_xBuilder->weld_formatted_spin_button("EDT_STEP_MAIN"))
    , m_xMt_MainDateStep(m_xBuilder->weld_spin_button("MT_MAIN_DATE_STEP"))
    , m_xLB_MainTimeUnit(m_xBuilder->weld_combo_box("LB_MAIN_TIME_UNIT"))
    , m_xCbxAutoStepMain(m_xBuilder->weld_check_button("CBX_AUTO_STEP_MAIN"))
    , m_xTxtHelpCount(m_xBuilder->weld_label("TXT_STEP_HELP_COUNT"))
    , m_xTxtHelp(m_xBuilder->weld_label("TXT_STEP_HELP"))
    , m_xMtStepHelp(m_xBuilder->weld_spin_button("MT_STEPHELP"))
    , m_xLB_HelpTimeUnit(m_xBuilder->weld_combo_box("LB_HELP_TIME_UNIT"))
    , m_xCbxAutoStepHelp(m_xBuilder->weld_check_button("CBX_AUTO_STEP_HELP"))
    , m_xFmtFldOrigin(m_xBuilder->weld_formatted_spin_button("EDT_ORIGIN"))
    , m_xCbxAutoOrigin(m_xBuilder->weld_check_button("CBX_AUTO_ORIGIN"))
    , m_xBxOrigin(m_xBuilder->weld_widget("boxORIGIN"))
{
    get(m_pCbxReverse, "CBX_REVERSE");
    get(m_pCbxLogarithm, "CBX_LOGARITHM");
    get(m_pLB_AxisType, "LB_AXIS_TYPE");
    get(m_pBxType,"boxTYPE");
    m_xCbxAutoMin->connect_toggled(LINK(this, ScaleTabPage, EnableValueHdl));
    m_xCbxAutoMax->connect_toggled(LINK(this, ScaleTabPage, EnableValueHdl));
    m_xCbxAutoStepMain->connect_toggled(LINK(this, ScaleTabPage, EnableValueHdl));
    m_xCbxAutoStepHelp->connect_toggled(LINK(this, ScaleTabPage, EnableValueHdl));
    m_xCbxAutoOrigin->connect_toggled(LINK(this, ScaleTabPage, EnableValueHdl));
    m_xCbx_AutoTimeResolution->connect_toggled(LINK(this, ScaleTabPage, EnableValueHdl));

    get(m_pBxMinMax, "gridMINMAX");
    get(m_pFmtFldMin, "EDT_MIN");
    get(m_pCbxAutoMin, "CBX_AUTO_MIN");
    get(m_pFmtFldMax, "EDT_MAX");
    get(m_pCbxAutoMax, "CBX_AUTO_MAX");

    get(m_pBxResolution, "boxRESOLUTION");
    get(m_pLB_TimeResolution, "LB_TIME_RESOLUTION");
    get(m_pCbx_AutoTimeResolution, "CBX_AUTO_TIME_RESOLUTION");

    get(m_pTxtMain, "TXT_STEP_MAIN");
    get(m_pFmtFldStepMain, "EDT_STEP_MAIN");
    get(m_pMt_MainDateStep, "MT_MAIN_DATE_STEP");
    get(m_pLB_MainTimeUnit, "LB_MAIN_TIME_UNIT");
    get(m_pCbxAutoStepMain, "CBX_AUTO_STEP_MAIN");

    get(m_pMtStepHelp, "MT_STEPHELP");
    get(m_pLB_HelpTimeUnit, "LB_HELP_TIME_UNIT");
    get(m_pCbxAutoStepHelp, "CBX_AUTO_STEP_HELP");
    get(m_pTxtHelpCount,"TXT_STEP_HELP_COUNT");
    get(m_pTxtHelp,"TXT_STEP_HELP");

    get(m_pBxOrigin,"boxORIGIN");
    get(m_pFmtFldOrigin, "EDT_ORIGIN");
    get(m_pCbxAutoOrigin, "CBX_AUTO_ORIGIN");

    m_pCbxAutoMin->SetClickHdl(LINK(this, ScaleTabPage, EnableValueHdl));
    m_pCbxAutoMax->SetClickHdl(LINK(this, ScaleTabPage, EnableValueHdl));
    m_pCbxAutoStepMain->SetClickHdl(LINK(this, ScaleTabPage, EnableValueHdl));
    m_pCbxAutoStepHelp->SetClickHdl(LINK(this, ScaleTabPage, EnableValueHdl));
    m_pCbxAutoOrigin->SetClickHdl(LINK(this, ScaleTabPage, EnableValueHdl));
    m_pCbx_AutoTimeResolution->SetClickHdl(LINK(this, ScaleTabPage, EnableValueHdl));

    m_pLB_AxisType->SetDropDownLineCount(3);
    m_pLB_AxisType->SetSelectHdl(LINK(this, ScaleTabPage, SelectAxisTypeHdl));

    m_pLB_TimeResolution->SetDropDownLineCount(3);
    m_pLB_MainTimeUnit->SetDropDownLineCount(3);
    m_pLB_HelpTimeUnit->SetDropDownLineCount(3);

    m_pFmtFldMin->SetModifyHdl(LINK(this, ScaleTabPage, FmtFieldModifiedHdl));
    m_pFmtFldMax->SetModifyHdl(LINK(this, ScaleTabPage, FmtFieldModifiedHdl));
    m_pFmtFldStepMain->SetModifyHdl(LINK(this, ScaleTabPage, FmtFieldModifiedHdl));
    m_pFmtFldOrigin->SetModifyHdl(LINK(this, ScaleTabPage, FmtFieldModifiedHdl));
    m_xLB_AxisType->connect_changed(LINK(this, ScaleTabPage, SelectAxisTypeHdl));

    HideAllControls();
}
@@ -127,43 +107,6 @@ ScaleTabPage::~ScaleTabPage()
    disposeOnce();
}

void ScaleTabPage::dispose()
{
    m_pCbxReverse.clear();
    m_pCbxLogarithm.clear();
    m_pBxType.clear();
    m_pLB_AxisType.clear();
    m_pBxMinMax.clear();
    m_pFmtFldMin.clear();
    m_pCbxAutoMin.clear();
    m_pFmtFldMax.clear();
    m_pCbxAutoMax.clear();
    m_pBxResolution.clear();
    m_pLB_TimeResolution.clear();
    m_pCbx_AutoTimeResolution.clear();
    m_pTxtMain.clear();
    m_pFmtFldStepMain.clear();
    m_pMt_MainDateStep.clear();
    m_pLB_MainTimeUnit.clear();
    m_pCbxAutoStepMain.clear();
    m_pTxtHelpCount.clear();
    m_pTxtHelp.clear();
    m_pMtStepHelp.clear();
    m_pLB_HelpTimeUnit.clear();
    m_pCbxAutoStepHelp.clear();
    m_pFmtFldOrigin.clear();
    m_pCbxAutoOrigin.clear();
    m_pBxOrigin.clear();
    SfxTabPage::dispose();
}

IMPL_STATIC_LINK(
    ScaleTabPage, FmtFieldModifiedHdl, Edit&, rEdit, void )
{
    FormattedField& rFmtField = static_cast<FormattedField&>(rEdit);
    rFmtField.SetDefaultValue( rFmtField.GetValue() );
}

void ScaleTabPage::EnableControls()
{
    bool bValueAxis = m_nAxisType == chart2::AxisType::REALNUMBER
@@ -171,77 +114,76 @@ void ScaleTabPage::EnableControls()
                   || m_nAxisType == chart2::AxisType::DATE;
    bool bDateAxis = m_nAxisType == chart2::AxisType::DATE;

    m_pBxType->Show(m_bAllowDateAxis);
    m_xBxType->show(m_bAllowDateAxis);

    m_pCbxLogarithm->Show( bValueAxis && !bDateAxis );
    m_xCbxLogarithm->show( bValueAxis && !bDateAxis );

    m_pBxMinMax->Show(bValueAxis);
    m_xBxMinMax->show(bValueAxis);

    m_pTxtMain->Show( bValueAxis );
    m_pCbxAutoStepMain->Show( bValueAxis );
    m_xTxtMain->show( bValueAxis );
    m_xCbxAutoStepMain->show( bValueAxis );

    m_pTxtHelpCount->Show( bValueAxis && !bDateAxis );
    m_pTxtHelp->Show( bDateAxis );
    m_pMtStepHelp->Show( bValueAxis );
    m_pCbxAutoStepHelp->Show( bValueAxis );
    m_xTxtHelpCount->show( bValueAxis && !bDateAxis );
    m_xTxtHelp->show( bDateAxis );
    m_xMtStepHelp->show( bValueAxis );
    m_xCbxAutoStepHelp->show( bValueAxis );

    m_pBxOrigin->Show( m_bShowAxisOrigin && bValueAxis );
    m_pBxResolution->Show( bDateAxis );
    m_xBxOrigin->show( m_bShowAxisOrigin && bValueAxis );
    m_xBxResolution->show( bDateAxis );

    bool bWasDateAxis = m_pMt_MainDateStep->IsVisible();
    bool bWasDateAxis = m_xMt_MainDateStep->get_visible();
    if( bWasDateAxis != bDateAxis )
    {
        //transport value from one to other control
        if( bWasDateAxis )
            lcl_setValue( *m_pFmtFldStepMain, m_pMt_MainDateStep->GetValue() );
            lcl_setValue( *m_xFmtFldStepMain, m_xMt_MainDateStep->get_value() );
        else
            m_pMt_MainDateStep->SetValue( static_cast<sal_Int32>(m_pFmtFldStepMain->GetValue()) );
            m_xMt_MainDateStep->set_value(m_xFmtFldStepMain->get_value());
    }

    m_pFmtFldStepMain->Show( bValueAxis && !bDateAxis );
    m_pMt_MainDateStep->Show( bDateAxis );
    m_xFmtFldStepMain->show( bValueAxis && !bDateAxis );
    m_xMt_MainDateStep->show( bDateAxis );

    m_pLB_MainTimeUnit->Show( bDateAxis );
    m_pLB_HelpTimeUnit->Show( bDateAxis );
    m_xLB_MainTimeUnit->show( bDateAxis );
    m_xLB_HelpTimeUnit->show( bDateAxis );

    EnableValueHdl(m_pCbxAutoMin);
    EnableValueHdl(m_pCbxAutoMax);
    EnableValueHdl(m_pCbxAutoStepMain);
    EnableValueHdl(m_pCbxAutoStepHelp);
    EnableValueHdl(m_pCbxAutoOrigin);
    EnableValueHdl(m_pCbx_AutoTimeResolution);
    EnableValueHdl(*m_xCbxAutoMin);
    EnableValueHdl(*m_xCbxAutoMax);
    EnableValueHdl(*m_xCbxAutoStepMain);
    EnableValueHdl(*m_xCbxAutoStepHelp);
    EnableValueHdl(*m_xCbxAutoOrigin);
    EnableValueHdl(*m_xCbx_AutoTimeResolution);
}

IMPL_LINK( ScaleTabPage, EnableValueHdl, Button *, pButton, void )
IMPL_LINK( ScaleTabPage, EnableValueHdl, weld::ToggleButton&, rCbx, void )
{
    CheckBox * pCbx = static_cast<CheckBox*>(pButton);
    bool bEnable = pCbx && !pCbx->IsChecked() && pCbx->IsEnabled();
    if (pCbx == m_pCbxAutoMin)
    bool bEnable = !rCbx.get_active() && rCbx.get_sensitive();
    if (&rCbx == m_xCbxAutoMin.get())
    {
        m_pFmtFldMin->Enable( bEnable );
        m_xFmtFldMin->set_sensitive( bEnable );
    }
    else if (pCbx == m_pCbxAutoMax)
    else if (&rCbx == m_xCbxAutoMax.get())
    {
        m_pFmtFldMax->Enable( bEnable );
        m_xFmtFldMax->set_sensitive( bEnable );
    }
    else if (pCbx == m_pCbxAutoStepMain)
    else if (&rCbx == m_xCbxAutoStepMain.get())
    {
        m_pFmtFldStepMain->Enable( bEnable );
        m_pMt_MainDateStep->Enable( bEnable );
        m_pLB_MainTimeUnit->Enable( bEnable );
        m_xFmtFldStepMain->set_sensitive( bEnable );
        m_xMt_MainDateStep->set_sensitive( bEnable );
        m_xLB_MainTimeUnit->set_sensitive( bEnable );
    }
    else if (pCbx == m_pCbxAutoStepHelp)
    else if (&rCbx == m_xCbxAutoStepHelp.get())
    {
        m_pMtStepHelp->Enable( bEnable );
        m_pLB_HelpTimeUnit->Enable( bEnable );
        m_xMtStepHelp->set_sensitive( bEnable );
        m_xLB_HelpTimeUnit->set_sensitive( bEnable );
    }
    else if (pCbx == m_pCbx_AutoTimeResolution)
    else if (&rCbx == m_xCbx_AutoTimeResolution.get())
    {
        m_pLB_TimeResolution->Enable( bEnable );
        m_xLB_TimeResolution->set_sensitive( bEnable );
    }
    else if (pCbx == m_pCbxAutoOrigin)
    else if (&rCbx == m_xCbxAutoOrigin.get())
    {
        m_pFmtFldOrigin->Enable( bEnable );
        m_xFmtFldOrigin->set_sensitive( bEnable );
    }
}

@@ -252,22 +194,22 @@ enum AxisTypeListBoxEntry
    TYPE_DATE=2
};

IMPL_LINK_NOARG(ScaleTabPage, SelectAxisTypeHdl, ListBox&, void)
IMPL_LINK_NOARG(ScaleTabPage, SelectAxisTypeHdl, weld::ComboBox&, void)
{
    const sal_Int32 nPos = m_pLB_AxisType->GetSelectedEntryPos();
    const sal_Int32 nPos = m_xLB_AxisType->get_active();
    if( nPos==TYPE_DATE )
        m_nAxisType = chart2::AxisType::DATE;
    else
        m_nAxisType = chart2::AxisType::CATEGORY;
    if( m_nAxisType == chart2::AxisType::DATE )
        m_pCbxLogarithm->Check(false);
        m_xCbxLogarithm->set_active(false);
    EnableControls();
    SetNumFormat();
}

VclPtr<SfxTabPage> ScaleTabPage::Create(TabPageParent pWindow,const SfxItemSet* rOutAttrs)
VclPtr<SfxTabPage> ScaleTabPage::Create(TabPageParent pParent, const SfxItemSet* rOutAttrs)
{
    return VclPtr<ScaleTabPage>::Create(pWindow.pParent, *rOutAttrs);
    return VclPtr<ScaleTabPage>::Create(pParent, *rOutAttrs);
}

bool ScaleTabPage::FillItemSet(SfxItemSet* rOutAttrs)
@@ -276,27 +218,27 @@ bool ScaleTabPage::FillItemSet(SfxItemSet* rOutAttrs)

    rOutAttrs->Put(SfxInt32Item(SCHATTR_AXISTYPE, m_nAxisType));
    if(m_bAllowDateAxis)
        rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_AUTO_DATEAXIS, m_pLB_AxisType->GetSelectedEntryPos()==TYPE_AUTO));
        rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_AUTO_DATEAXIS, m_xLB_AxisType->get_active()==TYPE_AUTO));

    bool bAutoScale = false;
    if( m_nAxisType==chart2::AxisType::CATEGORY )
        bAutoScale = true;//reset scaling for category charts

    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_AUTO_MIN      ,bAutoScale || m_pCbxAutoMin->IsChecked()));
    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_AUTO_MAX      ,bAutoScale || m_pCbxAutoMax->IsChecked()));
    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_AUTO_STEP_HELP,bAutoScale || m_pCbxAutoStepHelp->IsChecked()));
    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_AUTO_ORIGIN   ,bAutoScale || m_pCbxAutoOrigin->IsChecked()));
    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_LOGARITHM     ,m_pCbxLogarithm->IsChecked()));
    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_REVERSE       ,m_pCbxReverse->IsChecked()));
    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_AUTO_MIN      ,bAutoScale || m_xCbxAutoMin->get_active()));
    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_AUTO_MAX      ,bAutoScale || m_xCbxAutoMax->get_active()));
    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_AUTO_STEP_HELP,bAutoScale || m_xCbxAutoStepHelp->get_active()));
    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_AUTO_ORIGIN   ,bAutoScale || m_xCbxAutoOrigin->get_active()));
    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_LOGARITHM     ,m_xCbxLogarithm->get_active()));
    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_REVERSE       ,m_xCbxReverse->get_active()));
    rOutAttrs->Put(SvxDoubleItem(fMax     , SCHATTR_AXIS_MAX));
    rOutAttrs->Put(SvxDoubleItem(fMin     , SCHATTR_AXIS_MIN));
    rOutAttrs->Put(SfxInt32Item(SCHATTR_AXIS_STEP_HELP, nStepHelp));
    rOutAttrs->Put(SvxDoubleItem(fOrigin  , SCHATTR_AXIS_ORIGIN));

    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_AUTO_STEP_MAIN,bAutoScale || m_pCbxAutoStepMain->IsChecked()));
    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_AUTO_STEP_MAIN,bAutoScale || m_xCbxAutoStepMain->get_active()));
    rOutAttrs->Put(SvxDoubleItem(fStepMain,SCHATTR_AXIS_STEP_MAIN));

    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_AUTO_TIME_RESOLUTION,bAutoScale || m_pCbx_AutoTimeResolution->IsChecked()));
    rOutAttrs->Put(SfxBoolItem(SCHATTR_AXIS_AUTO_TIME_RESOLUTION,bAutoScale || m_xCbx_AutoTimeResolution->get_active()));
    rOutAttrs->Put(SfxInt32Item(SCHATTR_AXIS_TIME_RESOLUTION,m_nTimeResolution));

    rOutAttrs->Put(SfxInt32Item(SCHATTR_AXIS_MAIN_TIME_UNIT,m_nMainTimeUnit));
@@ -332,79 +274,85 @@ void ScaleTabPage::Reset(const SfxItemSet* rInAttrs)
            nPos=TYPE_AUTO;
        else
            nPos=TYPE_TEXT;
        m_pLB_AxisType->SelectEntryPos( nPos );
        m_xLB_AxisType->set_active( nPos );
    }

    m_pCbxAutoMin->Check();
    m_pCbxAutoMax->Check();
    m_pCbxAutoStepMain->Check();
    m_pCbxAutoStepHelp->Check();
    m_pCbxAutoOrigin->Check();
    m_pCbx_AutoTimeResolution->Check();
    m_xCbxAutoMin->set_active(true);
    m_xCbxAutoMax->set_active(true);
    m_xCbxAutoStepMain->set_active(true);
    m_xCbxAutoStepHelp->set_active(true);
    m_xCbxAutoOrigin->set_active(true);
    m_xCbx_AutoTimeResolution->set_active(true);

    if (rInAttrs->GetItemState(SCHATTR_AXIS_AUTO_MIN,true,&pPoolItem) == SfxItemState::SET)
        m_pCbxAutoMin->Check(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());
        m_xCbxAutoMin->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());

    if (rInAttrs->GetItemState(SCHATTR_AXIS_MIN,true, &pPoolItem) == SfxItemState::SET)
    {
        fMin = static_cast<const SvxDoubleItem*>(pPoolItem)->GetValue();
        lcl_setValue( *m_pFmtFldMin, fMin );
        lcl_setValue( *m_xFmtFldMin, fMin );
        m_xFmtFldMin->save_value();
    }

    if (rInAttrs->GetItemState(SCHATTR_AXIS_AUTO_MAX,true, &pPoolItem) == SfxItemState::SET)
        m_pCbxAutoMax->Check(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());
        m_xCbxAutoMax->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());

    if (rInAttrs->GetItemState(SCHATTR_AXIS_MAX,true, &pPoolItem) == SfxItemState::SET)
    {
        fMax = static_cast<const SvxDoubleItem*>(pPoolItem)->GetValue();
        lcl_setValue( *m_pFmtFldMax, fMax );
        lcl_setValue( *m_xFmtFldMax, fMax );
        m_xFmtFldMax->save_value();
    }

    if (rInAttrs->GetItemState(SCHATTR_AXIS_AUTO_STEP_MAIN,true, &pPoolItem) == SfxItemState::SET)
        m_pCbxAutoStepMain->Check(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());
        m_xCbxAutoStepMain->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());

    if (rInAttrs->GetItemState(SCHATTR_AXIS_STEP_MAIN,true, &pPoolItem) == SfxItemState::SET)
    {
        fStepMain = static_cast<const SvxDoubleItem*>(pPoolItem)->GetValue();
        lcl_setValue( *m_pFmtFldStepMain, fStepMain );
        m_pMt_MainDateStep->SetValue( static_cast<sal_Int32>(fStepMain) );
        lcl_setValue( *m_xFmtFldStepMain, fStepMain );
        m_xFmtFldStepMain->save_value();
        m_xMt_MainDateStep->set_value( static_cast<sal_Int32>(fStepMain) );
        m_xMt_MainDateStep->save_value();
    }
    if (rInAttrs->GetItemState(SCHATTR_AXIS_AUTO_STEP_HELP,true, &pPoolItem) == SfxItemState::SET)
        m_pCbxAutoStepHelp->Check(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());
        m_xCbxAutoStepHelp->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());
    if (rInAttrs->GetItemState(SCHATTR_AXIS_LOGARITHM,true, &pPoolItem) == SfxItemState::SET)
        m_pCbxLogarithm->Check(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());
        m_xCbxLogarithm->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());
    if (rInAttrs->GetItemState(SCHATTR_AXIS_REVERSE,true, &pPoolItem) == SfxItemState::SET)
        m_pCbxReverse->Check(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());
        m_xCbxReverse->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());
    if (rInAttrs->GetItemState(SCHATTR_AXIS_STEP_HELP,true, &pPoolItem) == SfxItemState::SET)
    {
        nStepHelp = static_cast<const SfxInt32Item*>(pPoolItem)->GetValue();
        m_pMtStepHelp->SetValue( nStepHelp );
        m_xMtStepHelp->set_value( nStepHelp );
        m_xMtStepHelp->save_value();
    }
    if (rInAttrs->GetItemState(SCHATTR_AXIS_AUTO_ORIGIN,true, &pPoolItem) == SfxItemState::SET)
        m_pCbxAutoOrigin->Check(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());
        m_xCbxAutoOrigin->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());
    if (rInAttrs->GetItemState(SCHATTR_AXIS_ORIGIN,true, &pPoolItem) == SfxItemState::SET)
    {
        fOrigin = static_cast<const SvxDoubleItem*>(pPoolItem)->GetValue();
        lcl_setValue( *m_pFmtFldOrigin, fOrigin );
        lcl_setValue( *m_xFmtFldOrigin, fOrigin );
        m_xFmtFldOrigin->save_value();
    }

    if (rInAttrs->GetItemState(SCHATTR_AXIS_AUTO_TIME_RESOLUTION,true, &pPoolItem) == SfxItemState::SET)
        m_pCbx_AutoTimeResolution->Check(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());
        m_xCbx_AutoTimeResolution->set_active(static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());
    if (rInAttrs->GetItemState(SCHATTR_AXIS_TIME_RESOLUTION,true, &pPoolItem) == SfxItemState::SET)
    {
        m_nTimeResolution = static_cast<const SfxInt32Item*>(pPoolItem)->GetValue();
        m_pLB_TimeResolution->SelectEntryPos( m_nTimeResolution );
        m_xLB_TimeResolution->set_active( m_nTimeResolution );
    }

    if (rInAttrs->GetItemState(SCHATTR_AXIS_MAIN_TIME_UNIT,true, &pPoolItem) == SfxItemState::SET)
    {
        m_nMainTimeUnit = static_cast<const SfxInt32Item*>(pPoolItem)->GetValue();
        m_pLB_MainTimeUnit->SelectEntryPos( m_nMainTimeUnit );
        m_xLB_MainTimeUnit->set_active( m_nMainTimeUnit );
    }
    if (rInAttrs->GetItemState(SCHATTR_AXIS_HELP_TIME_UNIT,true, &pPoolItem) == SfxItemState::SET)
    {
        m_nHelpTimeUnit = static_cast<const SfxInt32Item*>(pPoolItem)->GetValue();
        m_pLB_HelpTimeUnit->SelectEntryPos( m_nHelpTimeUnit );
        m_xLB_HelpTimeUnit->set_active( m_nHelpTimeUnit );
    }

    EnableControls();
@@ -421,101 +369,101 @@ DeactivateRC ScaleTabPage::DeactivatePage(SfxItemSet* pItemSet)

    bool bDateAxis = m_nAxisType == chart2::AxisType::DATE;

    sal_uInt32 nMinMaxOriginFmt = m_pFmtFldMax->GetFormatKey();
    sal_uInt32 nMinMaxOriginFmt = m_xFmtFldMax->get_format_key();
    if (pNumFormatter->GetType(nMinMaxOriginFmt) == SvNumFormatType::TEXT)
        nMinMaxOriginFmt = 0;
    // numberformat_text cause numbers to fail being numbers...  Shouldn't happen, but can.
    sal_uInt32 nStepFmt = m_pFmtFldStepMain->GetFormatKey();
    sal_uInt32 nStepFmt = m_xFmtFldStepMain->get_format_key();
    if (pNumFormatter->GetType(nStepFmt) == SvNumFormatType::TEXT)
        nStepFmt = 0;

    Control* pControl = nullptr;
    weld::Widget* pControl = nullptr;
    const char* pErrStrId = nullptr;
    double fDummy;

    fMax = m_pFmtFldMax->GetValue();
    fMin = m_pFmtFldMin->GetValue();
    fOrigin = m_pFmtFldOrigin->GetValue();
    fStepMain = bDateAxis ? m_pMt_MainDateStep->GetValue() : m_pFmtFldStepMain->GetValue();
    nStepHelp = static_cast< sal_Int32 >( m_pMtStepHelp->GetValue());
    m_nTimeResolution = m_pLB_TimeResolution->GetSelectedEntryPos();
    m_nMainTimeUnit = m_pLB_MainTimeUnit->GetSelectedEntryPos();
    m_nHelpTimeUnit = m_pLB_HelpTimeUnit->GetSelectedEntryPos();
    fMax = m_xFmtFldMax->get_value();
    fMin = m_xFmtFldMin->get_value();
    fOrigin = m_xFmtFldOrigin->get_value();
    fStepMain = bDateAxis ? m_xMt_MainDateStep->get_value() : m_xFmtFldStepMain->get_value();
    nStepHelp = m_xMtStepHelp->get_value();
    m_nTimeResolution = m_xLB_TimeResolution->get_active();
    m_nMainTimeUnit = m_xLB_MainTimeUnit->get_active();
    m_nHelpTimeUnit = m_xLB_HelpTimeUnit->get_active();

    if( m_nAxisType != chart2::AxisType::REALNUMBER )
        m_pCbxLogarithm->Show( false );
        m_xCbxLogarithm->show( false );

    //check which entries need user action

    if ( m_pCbxLogarithm->IsChecked() &&
            ( ( !m_pCbxAutoMin->IsChecked() && fMin <= 0.0 )
             || ( !m_pCbxAutoMax->IsChecked() && fMax <= 0.0 ) ) )
    if ( m_xCbxLogarithm->get_active() &&
            ( ( !m_xCbxAutoMin->get_active() && fMin <= 0.0 )
             || ( !m_xCbxAutoMax->get_active() && fMax <= 0.0 ) ) )
    {
        pControl = m_pFmtFldMin;
        pControl = m_xFmtFldMin.get();
        pErrStrId = STR_BAD_LOGARITHM;
    }
    // check for entries that cannot be parsed for the current number format
    else if ( m_pFmtFldMin->IsModified()
              && !m_pCbxAutoMin->IsChecked()
              && !pNumFormatter->IsNumberFormat( m_pFmtFldMin->GetText(), nMinMaxOriginFmt, fDummy))
    else if ( m_xFmtFldMin->get_value_changed_from_saved()
              && !m_xCbxAutoMin->get_active()
              && !pNumFormatter->IsNumberFormat( m_xFmtFldMin->get_text(), nMinMaxOriginFmt, fDummy))
    {
        pControl = m_pFmtFldMin;
        pControl = m_xFmtFldMin.get();
        pErrStrId = STR_INVALID_NUMBER;
    }
    else if ( m_pFmtFldMax->IsModified()
              && !m_pCbxAutoMax->IsChecked()
              && !pNumFormatter->IsNumberFormat( m_pFmtFldMax->GetText(), nMinMaxOriginFmt, fDummy))
    else if ( m_xFmtFldMax->get_value_changed_from_saved()
              && !m_xCbxAutoMax->get_active()
              && !pNumFormatter->IsNumberFormat( m_xFmtFldMax->get_text(), nMinMaxOriginFmt, fDummy))
    {
        pControl = m_pFmtFldMax;
        pControl = m_xFmtFldMax.get();
        pErrStrId = STR_INVALID_NUMBER;
    }
    else if ( !bDateAxis && m_pFmtFldStepMain->IsModified()
              && !m_pCbxAutoStepMain->IsChecked()
              && !pNumFormatter->IsNumberFormat( m_pFmtFldStepMain->GetText(), nStepFmt, fDummy))
    else if ( !bDateAxis && m_xFmtFldStepMain->get_value_changed_from_saved()
              && !m_xCbxAutoStepMain->get_active()
              && !pNumFormatter->IsNumberFormat( m_xFmtFldStepMain->get_text(), nStepFmt, fDummy))
    {
        pControl = m_pFmtFldStepMain;
        pControl = m_xFmtFldStepMain.get();
        pErrStrId = STR_INVALID_NUMBER;
    }
    else if (m_pFmtFldOrigin->IsModified() && !m_pCbxAutoOrigin->IsChecked() &&
             !pNumFormatter->IsNumberFormat( m_pFmtFldOrigin->GetText(), nMinMaxOriginFmt, fDummy))
    else if (m_xFmtFldOrigin->get_value_changed_from_saved() && !m_xCbxAutoOrigin->get_active() &&
             !pNumFormatter->IsNumberFormat( m_xFmtFldOrigin->get_text(), nMinMaxOriginFmt, fDummy))
    {
        pControl = m_pFmtFldOrigin;
        pControl = m_xFmtFldOrigin.get();
        pErrStrId = STR_INVALID_NUMBER;
    }
    else if (!m_pCbxAutoStepMain->IsChecked() && fStepMain <= 0.0)
    else if (!m_xCbxAutoStepMain->get_active() && fStepMain <= 0.0)
    {
        pControl = m_pFmtFldStepMain;
        pControl = m_xFmtFldStepMain.get();
        pErrStrId = STR_STEP_GT_ZERO;
    }
    else if (!m_pCbxAutoMax->IsChecked() && !m_pCbxAutoMin->IsChecked() &&
    else if (!m_xCbxAutoMax->get_active() && !m_xCbxAutoMin->get_active() &&
             fMin >= fMax)
    {
        pControl = m_pFmtFldMin;
        pControl = m_xFmtFldMin.get();
        pErrStrId = STR_MIN_GREATER_MAX;
    }
    else if( bDateAxis )
    {
        if( !m_pCbxAutoStepMain->IsChecked() && !m_pCbxAutoStepHelp->IsChecked() )
        if( !m_xCbxAutoStepMain->get_active() && !m_xCbxAutoStepHelp->get_active() )
        {
            if( m_nHelpTimeUnit > m_nMainTimeUnit )
            {
                pControl = m_pLB_MainTimeUnit;
                pControl = m_xLB_MainTimeUnit.get();
                pErrStrId = STR_INVALID_INTERVALS;
            }
            else if( m_nHelpTimeUnit == m_nMainTimeUnit && nStepHelp > fStepMain )
            {
                pControl = m_pLB_MainTimeUnit;
                pControl = m_xLB_MainTimeUnit.get();
                pErrStrId = STR_INVALID_INTERVALS;
            }
        }
        if( !pErrStrId && !m_pCbx_AutoTimeResolution->IsChecked() )
        if( !pErrStrId && !m_xCbx_AutoTimeResolution->get_active() )
        {
            if( (!m_pCbxAutoStepMain->IsChecked() && m_nTimeResolution > m_nMainTimeUnit )
            if( (!m_xCbxAutoStepMain->get_active() && m_nTimeResolution > m_nMainTimeUnit )
                ||
                (!m_pCbxAutoStepHelp->IsChecked() && m_nTimeResolution > m_nHelpTimeUnit )
                (!m_xCbxAutoStepHelp->get_active() && m_nTimeResolution > m_nHelpTimeUnit )
                )
            {
                pControl = m_pLB_TimeResolution;
                pControl = m_xLB_TimeResolution.get();
                pErrStrId = STR_INVALID_TIME_UNIT;
            }
        }
@@ -533,20 +481,10 @@ DeactivateRC ScaleTabPage::DeactivatePage(SfxItemSet* pItemSet)
void ScaleTabPage::SetNumFormatter( SvNumberFormatter* pFormatter )
{
    pNumFormatter = pFormatter;
    m_pFmtFldMax->SetFormatter( pNumFormatter );
    m_pFmtFldMin->SetFormatter( pNumFormatter );
    m_pFmtFldStepMain->SetFormatter( pNumFormatter );
    m_pFmtFldOrigin->SetFormatter( pNumFormatter );

    // #i6278# allow more decimal places than the output format.  As
    // the numbers shown in the edit fields are used for input, it makes more
    // sense to display the values in the input format rather than the output
    // format.
    m_pFmtFldMax->UseInputStringForFormatting();
    m_pFmtFldMin->UseInputStringForFormatting();
    m_pFmtFldStepMain->UseInputStringForFormatting();
    m_pFmtFldOrigin->UseInputStringForFormatting();

    m_xFmtFldMax->set_formatter( pNumFormatter );
    m_xFmtFldMin->set_formatter( pNumFormatter );
    m_xFmtFldStepMain->set_formatter( pNumFormatter );
    m_xFmtFldOrigin->set_formatter( pNumFormatter );
    SetNumFormat();
}

@@ -558,9 +496,9 @@ void ScaleTabPage::SetNumFormat()
    {
        sal_uLong nFmt = static_cast<sal_uLong>(static_cast<const SfxInt32Item*>(pPoolItem)->GetValue());

        m_pFmtFldMax->SetFormatKey( nFmt );
        m_pFmtFldMin->SetFormatKey( nFmt );
        m_pFmtFldOrigin->SetFormatKey( nFmt );
        m_xFmtFldMax->set_format_key(nFmt);
        m_xFmtFldMin->set_format_key(nFmt);
        m_xFmtFldOrigin->set_format_key(nFmt);

        if( pNumFormatter )
        {
@@ -592,13 +530,13 @@ void ScaleTabPage::SetNumFormat()
                else
                    nFmt = pNumFormatter->GetStandardFormat( SvNumFormatType::DATE );

                m_pFmtFldMax->SetFormatKey( nFmt );
                m_pFmtFldMin->SetFormatKey( nFmt );
                m_pFmtFldOrigin->SetFormatKey( nFmt );
                m_xFmtFldMax->set_format_key(nFmt);
                m_xFmtFldMin->set_format_key(nFmt);
                m_xFmtFldOrigin->set_format_key(nFmt);
            }
        }

        m_pFmtFldStepMain->SetFormatKey( nFmt );
        m_xFmtFldStepMain->set_format_key(nFmt);
    }
}

@@ -609,7 +547,7 @@ void ScaleTabPage::ShowAxisOrigin( bool bShowOrigin )
        m_bShowAxisOrigin = true;
}

bool ScaleTabPage::ShowWarning(const char* pResIdMessage, Control* pControl /* = NULL */ )
bool ScaleTabPage::ShowWarning(const char* pResIdMessage, weld::Widget* pControl /* = nullptr */)
{
    if (pResIdMessage == nullptr)
        return false;
@@ -618,12 +556,12 @@ bool ScaleTabPage::ShowWarning(const char* pResIdMessage, Control* pControl /* =
                                               VclMessageType::Warning, VclButtonsType::Ok,
                                               SchResId(pResIdMessage)));
    xWarn->run();
    if( pControl )
    if (pControl)
    {
        pControl->GrabFocus();
        Edit* pEdit = dynamic_cast<Edit*>(pControl);
        if(pEdit)
            pEdit->SetSelection( Selection( 0, SELECTION_MAX ));
        pControl->grab_focus();
        weld::Entry* pEdit = dynamic_cast<weld::Entry*>(pControl);
        if (pEdit)
            pEdit->select_region(0, -1);
    }
    return true;
}
@@ -635,20 +573,20 @@ void ScaleTabPage::HideAllControls()
    // visibility of these controls depend on axis data type, and are
    // set in EnableControls().

    m_pBxType->Hide();
    m_pCbxLogarithm->Hide();
    m_pBxMinMax->Hide();
    m_pTxtMain->Hide();
    m_pFmtFldStepMain->Hide();
    m_pMt_MainDateStep->Hide();
    m_pLB_MainTimeUnit->Hide();
    m_pCbxAutoStepMain->Hide();
    m_pTxtHelpCount->Hide();
    m_pTxtHelp->Hide();
    m_pMtStepHelp->Hide();
    m_pCbxAutoStepHelp->Hide();
    m_pBxOrigin->Hide();
    m_pBxResolution->Hide();
    m_xBxType->hide();
    m_xCbxLogarithm->hide();
    m_xBxMinMax->hide();
    m_xTxtMain->hide();
    m_xFmtFldStepMain->hide();
    m_xMt_MainDateStep->hide();
    m_xLB_MainTimeUnit->hide();
    m_xCbxAutoStepMain->hide();
    m_xTxtHelpCount->hide();
    m_xTxtHelp->hide();
    m_xMtStepHelp->hide();
    m_xCbxAutoStepHelp->hide();
    m_xBxOrigin->hide();
    m_xBxResolution->hide();
}

} //namespace chart
diff --git a/chart2/source/controller/dialogs/tp_Scale.hxx b/chart2/source/controller/dialogs/tp_Scale.hxx
index 8e6c7aa..49902e4 100644
--- a/chart2/source/controller/dialogs/tp_Scale.hxx
+++ b/chart2/source/controller/dialogs/tp_Scale.hxx
@@ -32,9 +32,8 @@ namespace chart
class ScaleTabPage : public SfxTabPage
{
public:
    ScaleTabPage( vcl::Window* pParent, const SfxItemSet& rInAttrs );
    ScaleTabPage(TabPageParent pParent, const SfxItemSet& rInAttrs);
    virtual ~ScaleTabPage() override;
    virtual void dispose() override;

    static VclPtr<SfxTabPage> Create( TabPageParent pParent, const SfxItemSet* rInAttrs );
    virtual bool FillItemSet( SfxItemSet* rOutAttrs ) override;
@@ -48,39 +47,6 @@ public:
    void ShowAxisOrigin( bool bShowOrigin );

private:
    VclPtr<CheckBox>            m_pCbxReverse;
    VclPtr<CheckBox>            m_pCbxLogarithm;

    VclPtr<VclBox>              m_pBxType;
    VclPtr<ListBox>             m_pLB_AxisType;

    VclPtr<VclGrid>              m_pBxMinMax;
    VclPtr<FormattedField>      m_pFmtFldMin;
    VclPtr<CheckBox>            m_pCbxAutoMin;

    VclPtr<FormattedField>      m_pFmtFldMax;
    VclPtr<CheckBox>            m_pCbxAutoMax;

    VclPtr<VclBox>              m_pBxResolution;
    VclPtr<ListBox>             m_pLB_TimeResolution;
    VclPtr<CheckBox>            m_pCbx_AutoTimeResolution;

    VclPtr<FixedText>           m_pTxtMain;
    VclPtr<FormattedField>      m_pFmtFldStepMain;
    VclPtr<MetricField>         m_pMt_MainDateStep;
    VclPtr<ListBox>             m_pLB_MainTimeUnit;
    VclPtr<CheckBox>            m_pCbxAutoStepMain;

    VclPtr<FixedText>           m_pTxtHelpCount;
    VclPtr<FixedText>           m_pTxtHelp;
    VclPtr<MetricField>         m_pMtStepHelp;
    VclPtr<ListBox>             m_pLB_HelpTimeUnit;
    VclPtr<CheckBox>            m_pCbxAutoStepHelp;

    VclPtr<FormattedField>      m_pFmtFldOrigin;
    VclPtr<CheckBox>            m_pCbxAutoOrigin;
    VclPtr<VclBox>              m_pBxOrigin;

    double              fMin;
    double              fMax;
    double              fStepMain;
@@ -95,11 +61,36 @@ private:

    bool                m_bShowAxisOrigin;

    std::unique_ptr<weld::CheckButton> m_xCbxReverse;
    std::unique_ptr<weld::CheckButton> m_xCbxLogarithm;
    std::unique_ptr<weld::Widget> m_xBxType;
    std::unique_ptr<weld::ComboBox> m_xLB_AxisType;
    std::unique_ptr<weld::Widget> m_xBxMinMax;
    std::unique_ptr<weld::FormattedSpinButton> m_xFmtFldMin;
    std::unique_ptr<weld::CheckButton> m_xCbxAutoMin;
    std::unique_ptr<weld::FormattedSpinButton> m_xFmtFldMax;
    std::unique_ptr<weld::CheckButton> m_xCbxAutoMax;
    std::unique_ptr<weld::Widget> m_xBxResolution;
    std::unique_ptr<weld::ComboBox> m_xLB_TimeResolution;
    std::unique_ptr<weld::CheckButton> m_xCbx_AutoTimeResolution;
    std::unique_ptr<weld::Label> m_xTxtMain;
    std::unique_ptr<weld::FormattedSpinButton> m_xFmtFldStepMain;
    std::unique_ptr<weld::SpinButton> m_xMt_MainDateStep;
    std::unique_ptr<weld::ComboBox> m_xLB_MainTimeUnit;
    std::unique_ptr<weld::CheckButton> m_xCbxAutoStepMain;
    std::unique_ptr<weld::Label> m_xTxtHelpCount;
    std::unique_ptr<weld::Label> m_xTxtHelp;
    std::unique_ptr<weld::SpinButton> m_xMtStepHelp;
    std::unique_ptr<weld::ComboBox> m_xLB_HelpTimeUnit;
    std::unique_ptr<weld::CheckButton> m_xCbxAutoStepHelp;
    std::unique_ptr<weld::FormattedSpinButton> m_xFmtFldOrigin;
    std::unique_ptr<weld::CheckButton> m_xCbxAutoOrigin;
    std::unique_ptr<weld::Widget> m_xBxOrigin;

    void EnableControls();

    DECL_LINK( SelectAxisTypeHdl, ListBox&, void );
    DECL_LINK( EnableValueHdl, Button*, void );
    DECL_STATIC_LINK( ScaleTabPage, FmtFieldModifiedHdl, Edit&, void);
    DECL_LINK(SelectAxisTypeHdl, weld::ComboBox&, void);
    DECL_LINK(EnableValueHdl, weld::ToggleButton&, void);

    /** shows a warning window due to an invalid input.

@@ -114,7 +105,7 @@ private:

        @return false, if nResIdMessage was 0, true otherwise
     */
    bool ShowWarning(const char* pResIdMessage, Control* pControl);
    bool ShowWarning(const char* pResIdMessage, weld::Widget* pControl);

    void HideAllControls();
};
diff --git a/chart2/uiconfig/ui/tp_AxisPositions.ui b/chart2/uiconfig/ui/tp_AxisPositions.ui
index fa5cfbe..16fcff3 100644
--- a/chart2/uiconfig/ui/tp_AxisPositions.ui
+++ b/chart2/uiconfig/ui/tp_AxisPositions.ui
@@ -1,7 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface domain="chart">
  <requires lib="gtk+" version="3.18"/>
  <requires lib="LibreOffice" version="1.0"/>
  <object class="GtkAdjustment" id="adjustment1">
    <property name="upper">100</property>
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkAdjustment" id="adjustment2">
    <property name="upper">100</property>
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkBox" id="tp_AxisPositions">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
@@ -35,10 +45,10 @@
                      <object class="GtkLabel" id="FT_CROSSES_OTHER_AXIS_AT">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="xalign">0</property>
                        <property name="label" translatable="yes" context="tp_AxisPositions|FT_CROSSES_OTHER_AXIS_AT">_Cross other axis at</property>
                        <property name="use_underline">True</property>
                        <property name="mnemonic_widget">LB_CROSSES_OTHER_AXIS_AT</property>
                        <property name="xalign">0</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
@@ -50,9 +60,6 @@
                      <object class="GtkComboBoxText" id="LB_CROSSES_OTHER_AXIS_AT">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="row_span_column">0</property>
                        <property name="entry_text_column">0</property>
                        <property name="id_column">1</property>
                        <items>
                          <item translatable="yes" context="tp_AxisPositions|LB_CROSSES_OTHER_AXIS_AT">Start</item>
                          <item translatable="yes" context="tp_AxisPositions|LB_CROSSES_OTHER_AXIS_AT">End</item>
@@ -67,9 +74,11 @@
                      </packing>
                    </child>
                    <child>
                      <object class="svtlo-FormattedField" id="EDT_CROSSES_OTHER_AXIS_AT">
                      <object class="GtkSpinButton" id="EDT_CROSSES_OTHER_AXIS_AT">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="can_focus">True</property>
                        <property name="activates_default">True</property>
                        <property name="adjustment">adjustment1</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
@@ -78,13 +87,14 @@
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBox" id="EDT_CROSSES_OTHER_AXIS_AT_CATEGORY">
                      <object class="GtkComboBoxText" id="EDT_CROSSES_OTHER_AXIS_AT_CATEGORY">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="has_entry">True</property>
                        <child internal-child="entry">
                          <object class="GtkEntry" id="combobox-entry">
                            <property name="can_focus">False</property>
                            <property name="can_focus">True</property>
                            <property name="activates_default">True</property>
                          </object>
                        </child>
                      </object>
@@ -104,7 +114,7 @@
                <child>
                  <object class="GtkCheckButton" id="CB_AXIS_BETWEEN_CATEGORIES">
                    <property name="label" translatable="yes" context="tp_AxisPositions|CB_AXIS_BETWEEN_CATEGORIES">Axis _between categories</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">False</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
@@ -124,8 +134,8 @@
          <object class="GtkLabel" id="TXT_AXIS_LINE">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="xalign">0</property>
            <property name="label" translatable="yes" context="tp_AxisPositions|TXT_AXIS_LINE">Axis Line</property>
            <property name="xalign">0</property>
            <attributes>
              <attribute name="weight" value="bold"/>
            </attributes>
@@ -165,10 +175,10 @@
                      <object class="GtkLabel" id="FT_PLACE_LABELS">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="xalign">0</property>
                        <property name="label" translatable="yes" context="tp_AxisPositions|FT_PLACE_LABELS">_Place labels</property>
                        <property name="use_underline">True</property>
                        <property name="mnemonic_widget">LB_PLACE_LABELS</property>
                        <property name="xalign">0</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
@@ -180,8 +190,6 @@
                      <object class="GtkComboBoxText" id="LB_PLACE_LABELS">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="entry_text_column">0</property>
                        <property name="id_column">1</property>
                        <items>
                          <item translatable="yes" context="tp_AxisPositions|LB_PLACE_LABELS">Near axis</item>
                          <item translatable="yes" context="tp_AxisPositions|LB_PLACE_LABELS">Near axis (other side)</item>
@@ -210,10 +218,10 @@
                    <child>
                      <object class="GtkLabel" id="FT_AXIS_LABEL_DISTANCE">
                        <property name="can_focus">False</property>
                        <property name="xalign">0</property>
                        <property name="label" translatable="yes" context="tp_AxisPositions|FT_AXIS_LABEL_DISTANCE">_Distance</property>
                        <property name="use_underline">True</property>
                        <property name="mnemonic_widget">EDT_AXIS_LABEL_DISTANCE</property>
                        <property name="xalign">0</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
@@ -222,8 +230,10 @@
                      </packing>
                    </child>
                    <child>
                      <object class="svtlo-FormattedField" id="EDT_AXIS_LABEL_DISTANCE">
                        <property name="can_focus">False</property>
                      <object class="GtkSpinButton" id="EDT_AXIS_LABEL_DISTANCE">
                        <property name="can_focus">True</property>
                        <property name="activates_default">True</property>
                        <property name="adjustment">adjustment2</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
@@ -246,8 +256,8 @@
          <object class="GtkLabel" id="TXT_FL_LABELS">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="xalign">0</property>
            <property name="label" translatable="yes" context="tp_AxisPositions|TXT_FL_LABELS">Labels</property>
            <property name="xalign">0</property>
            <attributes>
              <attribute name="weight" value="bold"/>
            </attributes>
@@ -288,8 +298,8 @@
                      <object class="GtkLabel" id="FT_MAJOR">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="xalign">0</property>
                        <property name="label" translatable="yes" context="tp_AxisPositions|FT_MAJOR">Major:</property>
                        <property name="xalign">0</property>
                        <accessibility>
                          <relation type="label-for" target="CB_TICKS_INNER"/>
                          <relation type="label-for" target="CB_TICKS_OUTER"/>
@@ -298,16 +308,14 @@
                      <packing>
                        <property name="left_attach">0</property>
                        <property name="top_attach">0</property>
                        <property name="width">1</property>
                        <property name="height">1</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkLabel" id="FT_MINOR">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="xalign">0</property>
                        <property name="label" translatable="yes" context="tp_AxisPositions|FT_MINOR">Minor:</property>
                        <property name="xalign">0</property>
                        <accessibility>
                          <relation type="label-for" target="CB_MINOR_INNER"/>
                          <relation type="label-for" target="CB_MINOR_OUTER"/>
@@ -316,15 +324,13 @@
                      <packing>
                        <property name="left_attach">0</property>
                        <property name="top_attach">1</property>
                        <property name="width">1</property>
                        <property name="height">1</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkCheckButton" id="CB_TICKS_INNER">
                        <property name="label" translatable="yes" context="tp_AxisPositions|CB_TICKS_INNER">_Inner</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="can_focus">True</property>
                        <property name="receives_default">False</property>
                        <property name="use_underline">True</property>
                        <property name="xalign">0</property>
@@ -336,15 +342,13 @@
                      <packing>
                        <property name="left_attach">1</property>
                        <property name="top_attach">0</property>
                        <property name="width">1</property>
                        <property name="height">1</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkCheckButton" id="CB_TICKS_OUTER">
                        <property name="label" translatable="yes" context="tp_AxisPositions|CB_TICKS_OUTER">_Outer</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="can_focus">True</property>
                        <property name="receives_default">False</property>
                        <property name="use_underline">True</property>
                        <property name="xalign">0</property>
@@ -356,15 +360,13 @@
                      <packing>
                        <property name="left_attach">2</property>
                        <property name="top_attach">0</property>
                        <property name="width">1</property>
                        <property name="height">1</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkCheckButton" id="CB_MINOR_INNER">
                        <property name="label" translatable="yes" context="tp_AxisPositions|CB_MINOR_INNER">I_nner</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="can_focus">True</property>
                        <property name="receives_default">False</property>
                        <property name="use_underline">True</property>
                        <property name="xalign">0</property>
@@ -376,15 +378,13 @@
                      <packing>
                        <property name="left_attach">1</property>
                        <property name="top_attach">1</property>
                        <property name="width">1</property>
                        <property name="height">1</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkCheckButton" id="CB_MINOR_OUTER">
                        <property name="label" translatable="yes" context="tp_AxisPositions|CB_MINOR_OUTER">O_uter</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="can_focus">True</property>
                        <property name="receives_default">False</property>
                        <property name="use_underline">True</property>
                        <property name="xalign">0</property>
@@ -396,8 +396,6 @@
                      <packing>
                        <property name="left_attach">2</property>
                        <property name="top_attach">1</property>
                        <property name="width">1</property>
                        <property name="height">1</property>
                      </packing>
                    </child>
                  </object>
@@ -416,10 +414,10 @@
                      <object class="GtkLabel" id="FT_PLACE_TICKS">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="xalign">0</property>
                        <property name="label" translatable="yes" context="tp_AxisPositions|FT_PLACE_TICKS">Place _marks</property>
                        <property name="use_underline">True</property>
                        <property name="mnemonic_widget">LB_PLACE_TICKS</property>
                        <property name="xalign">0</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
@@ -431,8 +429,6 @@
                      <object class="GtkComboBoxText" id="LB_PLACE_TICKS">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="entry_text_column">0</property>
                        <property name="id_column">1</property>
                        <items>
                          <item translatable="yes" context="tp_AxisPositions|LB_PLACE_TICKS">At labels</item>
                          <item translatable="yes" context="tp_AxisPositions|LB_PLACE_TICKS">At axis</item>
@@ -460,8 +456,8 @@
          <object class="GtkLabel" id="TXT_FL_TICKS">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="xalign">0</property>
            <property name="label" translatable="yes" context="tp_AxisPositions|TXT_FL_TICKS">Interval Marks</property>
            <property name="xalign">0</property>
            <attributes>
              <attribute name="weight" value="bold"/>
            </attributes>
@@ -495,7 +491,7 @@
                  <object class="GtkCheckButton" id="CB_MAJOR_GRID">
                    <property name="label" translatable="yes" context="tp_AxisPositions|CB_MAJOR_GRID">Show major _grid</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">False</property>
                    <property name="relief">half</property>
                    <property name="use_underline">True</property>
@@ -505,15 +501,13 @@
                  <packing>
                    <property name="left_attach">0</property>
                    <property name="top_attach">0</property>
                    <property name="width">1</property>
                    <property name="height">1</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkCheckButton" id="CB_MINOR_GRID">
                    <property name="label" translatable="yes" context="tp_AxisPositions|CB_MINOR_GRID">_Show minor grid</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">False</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
@@ -522,30 +516,26 @@
                  <packing>
                    <property name="left_attach">0</property>
                    <property name="top_attach">1</property>
                    <property name="width">1</property>
                    <property name="height">1</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkButton" id="PB_MAJOR_GRID">
                    <property name="label" translatable="yes" context="tp_AxisPositions|PB_MAJOR_GRID">Mo_re...</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">True</property>
                    <property name="use_underline">True</property>
                  </object>
                  <packing>
                    <property name="left_attach">1</property>
                    <property name="top_attach">0</property>
                    <property name="width">1</property>
                    <property name="height">1</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkButton" id="PB_MINOR_GRID">
                    <property name="label" translatable="yes" context="tp_AxisPositions|PB_MINOR_GRID">Mor_e...</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">True</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0.49000000953674316</property>
@@ -553,8 +543,6 @@
                  <packing>
                    <property name="left_attach">1</property>
                    <property name="top_attach">1</property>
                    <property name="width">1</property>
                    <property name="height">1</property>
                  </packing>
                </child>
              </object>
@@ -565,8 +553,8 @@
          <object class="GtkLabel" id="label2">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="xalign">0</property>
            <property name="label" translatable="yes" context="tp_AxisPositions|label2">Grids</property>
            <property name="xalign">0</property>
            <attributes>
              <attribute name="weight" value="bold"/>
            </attributes>
diff --git a/chart2/uiconfig/ui/tp_Scale.ui b/chart2/uiconfig/ui/tp_Scale.ui
index 5257efc..6b5b1cf 100644
--- a/chart2/uiconfig/ui/tp_Scale.ui
+++ b/chart2/uiconfig/ui/tp_Scale.ui
@@ -1,34 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface domain="chart">
  <requires lib="gtk+" version="3.18"/>
  <requires lib="LibreOffice" version="1.0"/>
  <object class="GtkAdjustment" id="adjustment1">
    <property name="upper">100</property>
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkAdjustment" id="adjustment2">
    <property name="upper">100</property>
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkAdjustment" id="adjustment3">
    <property name="upper">100</property>
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkAdjustment" id="adjustment4">
    <property name="upper">100</property>
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkAdjustment" id="adjustmentINTERVAL">
    <property name="lower">1</property>
    <property name="upper">100</property>
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkListStore" id="liststoreDATE">
    <columns>
      <!-- column-name gchararray1 -->
      <column type="gchararray"/>
      <!-- column-name guint1 -->
      <column type="guint"/>
    </columns>
    <data>
      <row>
        <col id="0" translatable="yes" context="tp_Scale|liststoreDATE">Days</col>
        <col id="1">0</col>
      </row>
      <row>
        <col id="0" translatable="yes" context="tp_Scale|liststoreDATE">Months</col>
        <col id="1">1</col>
      </row>
      <row>
        <col id="0" translatable="yes" context="tp_Scale|liststoreDATE">Years</col>
        <col id="1">2</col>
      </row>
    </data>
  <object class="GtkAdjustment" id="adjustmentINTERVAL1">
    <property name="lower">1</property>
    <property name="upper">100</property>
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkFrame" id="tp_Scale">
    <property name="visible">True</property>
@@ -58,7 +62,7 @@
                  <object class="GtkCheckButton" id="CBX_REVERSE">
                    <property name="label" translatable="yes" context="tp_Scale|CBX_REVERSE">_Reverse direction</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">False</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
@@ -74,7 +78,7 @@
                  <object class="GtkCheckButton" id="CBX_LOGARITHM">
                    <property name="label" translatable="yes" context="tp_Scale|CBX_LOGARITHM">_Logarithmic scale</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">False</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
@@ -95,10 +99,10 @@
                      <object class="GtkLabel" id="TXT_AXIS_TYPE">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="xalign">0</property>
                        <property name="label" translatable="yes" context="tp_Scale|TXT_AXIS_TYPE">T_ype</property>
                        <property name="use_underline">True</property>
                        <property name="mnemonic_widget">LB_AXIS_TYPE</property>
                        <property name="xalign">0</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
@@ -110,8 +114,6 @@
                      <object class="GtkComboBoxText" id="LB_AXIS_TYPE">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="entry_text_column">0</property>
                        <property name="id_column">1</property>
                        <items>
                          <item translatable="yes" context="tp_Scale|LB_AXIS_TYPE">Automatic</item>
                          <item translatable="yes" context="tp_Scale|LB_AXIS_TYPE">Text</item>
@@ -148,39 +150,35 @@
                  <object class="GtkLabel" id="TXT_MIN">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="xalign">0</property>
                    <property name="label" translatable="yes" context="tp_Scale|TXT_MIN">_Minimum</property>
                    <property name="use_underline">True</property>
                    <property name="mnemonic_widget">EDT_MIN</property>
                    <property name="xalign">0</property>
                  </object>
                  <packing>
                    <property name="left_attach">0</property>
                    <property name="top_attach">0</property>
                    <property name="width">1</property>
                    <property name="height">1</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkLabel" id="TXT_MAX">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="xalign">0</property>
                    <property name="label" translatable="yes" context="tp_Scale|TXT_MAX">Ma_ximum</property>
                    <property name="use_underline">True</property>
                    <property name="mnemonic_widget">EDT_MAX</property>
                    <property name="xalign">0</property>
                  </object>
                  <packing>
                    <property name="left_attach">0</property>
                    <property name="top_attach">1</property>
                    <property name="width">1</property>
                    <property name="height">1</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkCheckButton" id="CBX_AUTO_MIN">
                    <property name="label" translatable="yes" context="tp_Scale|CBX_AUTO_MIN">_Automatic</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">False</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
@@ -189,15 +187,13 @@
                  <packing>
                    <property name="left_attach">2</property>
                    <property name="top_attach">0</property>
                    <property name="width">1</property>
                    <property name="height">1</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkCheckButton" id="CBX_AUTO_MAX">
                    <property name="label" translatable="yes" context="tp_Scale|CBX_AUTO_MAX">A_utomatic</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">False</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
@@ -206,32 +202,32 @@
                  <packing>
                    <property name="left_attach">2</property>
                    <property name="top_attach">1</property>
                    <property name="width">1</property>
                    <property name="height">1</property>
                  </packing>
                </child>
                <child>
                  <object class="svtlo-FormattedField" id="EDT_MIN">
                  <object class="GtkSpinButton" id="EDT_MIN">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="activates_default">True</property>
                    <property name="width_chars">10</property>
                    <property name="adjustment">adjustment1</property>
                  </object>
                  <packing>
                    <property name="left_attach">1</property>
                    <property name="top_attach">0</property>
                    <property name="width">1</property>
                    <property name="height">1</property>
                  </packing>
                </child>
                <child>
                  <object class="svtlo-FormattedField" id="EDT_MAX">
                  <object class="GtkSpinButton" id="EDT_MAX">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="activates_default">True</property>
                    <property name="width_chars">10</property>
                    <property name="adjustment">adjustment2</property>
                  </object>
                  <packing>
                    <property name="left_attach">1</property>
                    <property name="top_attach">1</property>
                    <property name="width">1</property>
                    <property name="height">1</property>
                  </packing>
                </child>
              </object>
@@ -250,10 +246,10 @@
                  <object class="GtkLabel" id="TXT_TIME_RESOLUTION">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="xalign">0</property>
                    <property name="label" translatable="yes" context="tp_Scale|TXT_TIME_RESOLUTION">R_esolution</property>
                    <property name="use_underline">True</property>
                    <property name="mnemonic_widget">LB_TIME_RESOLUTION</property>
                    <property name="xalign">0</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
@@ -262,10 +258,14 @@
                  </packing>
                </child>
                <child>
                  <object class="GtkComboBox" id="LB_TIME_RESOLUTION">
                  <object class="GtkComboBoxText" id="LB_TIME_RESOLUTION">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="model">liststoreDATE</property>
                    <items>
                      <item id="0" translatable="yes" context="tp_Scale|liststoreDATE">Days</item>
                      <item id="1" translatable="yes" context="tp_Scale|liststoreDATE">Months</item>
                      <item id="2" translatable="yes" context="tp_Scale|liststoreDATE">Years</item>
                    </items>
                  </object>
                  <packing>
                    <property name="expand">False</property>
@@ -277,7 +277,7 @@
                  <object class="GtkCheckButton" id="CBX_AUTO_TIME_RESOLUTION">
                    <property name="label" translatable="yes" context="tp_Scale|CBX_AUTO_TIME_RESOLUTION">Automat_ic</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">False</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
@@ -305,9 +305,9 @@
                  <object class="GtkLabel" id="TXT_STEP_MAIN">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="xalign">0</property>
                    <property name="label" translatable="yes" context="tp_Scale|TXT_STEP_MAIN">Ma_jor interval</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
@@ -326,9 +326,11 @@
                        <property name="can_focus">False</property>
                        <property name="spacing">12</property>
                        <child>
                          <object class="GtkSpinButton" id="MT_MAIN_DATE_STEP:0">
                          <object class="GtkSpinButton" id="MT_MAIN_DATE_STEP">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="can_focus">True</property>
                            <property name="activates_default">True</property>
                            <property name="width_chars">10</property>
                            <property name="adjustment">adjustmentINTERVAL</property>
                          </object>
                          <packing>
@@ -338,10 +340,14 @@
                          </packing>
                        </child>
                        <child>
                          <object class="GtkComboBox" id="LB_MAIN_TIME_UNIT">
                          <object class="GtkComboBoxText" id="LB_MAIN_TIME_UNIT">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="model">liststoreDATE</property>
                            <items>
                              <item id="0" translatable="yes" context="tp_Scale|liststoreDATE">Days</item>
                              <item id="1" translatable="yes" context="tp_Scale|liststoreDATE">Months</item>
                              <item id="2" translatable="yes" context="tp_Scale|liststoreDATE">Years</item>
                            </items>
                          </object>
                          <packing>
                            <property name="expand">False</property>
@@ -357,9 +363,12 @@
                      </packing>
                    </child>
                    <child>
                      <object class="svtlo-FormattedField" id="EDT_STEP_MAIN">
                      <object class="GtkSpinButton" id="EDT_STEP_MAIN">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="can_focus">True</property>
                        <property name="activates_default">True</property>
                        <property name="width_chars">10</property>
                        <property name="adjustment">adjustment4</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
@@ -378,7 +387,7 @@
                  <object class="GtkCheckButton" id="CBX_AUTO_STEP_MAIN">
                    <property name="label" translatable="yes" context="tp_Scale|CBX_AUTO_STEP_MAIN">Au_tomatic</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">False</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
@@ -411,9 +420,9 @@
                      <object class="GtkLabel" id="TXT_STEP_HELP">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="xalign">0</property>
                        <property name="label" translatable="yes" context="tp_Scale|TXT_STEP_HELP">Minor inter_val</property>
                        <property name="use_underline">True</property>
                        <property name="xalign">0</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
@@ -425,9 +434,9 @@
                      <object class="GtkLabel" id="TXT_STEP_HELP_COUNT">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="xalign">0</property>
                        <property name="label" translatable="yes" context="tp_Scale|TXT_STEP_HELP_COUNT">Minor inter_val count</property>
                        <property name="use_underline">True</property>
                        <property name="xalign">0</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
@@ -443,10 +452,12 @@
                  </packing>
                </child>
                <child>
                  <object class="GtkSpinButton" id="MT_STEPHELP:0">
                  <object class="GtkSpinButton" id="MT_STEPHELP">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="adjustment">adjustmentINTERVAL</property>
                    <property name="can_focus">True</property>
                    <property name="activates_default">True</property>
                    <property name="width_chars">10</property>
                    <property name="adjustment">adjustmentINTERVAL1</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
@@ -455,10 +466,14 @@
                  </packing>
                </child>
                <child>
                  <object class="GtkComboBox" id="LB_HELP_TIME_UNIT">
                  <object class="GtkComboBoxText" id="LB_HELP_TIME_UNIT">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="model">liststoreDATE</property>
                    <items>
                      <item id="0" translatable="yes" context="tp_Scale|liststoreDATE">Days</item>
                      <item id="1" translatable="yes" context="tp_Scale|liststoreDATE">Months</item>
                      <item id="2" translatable="yes" context="tp_Scale|liststoreDATE">Years</item>
                    </items>
                  </object>
                  <packing>
                    <property name="expand">False</property>
@@ -470,7 +485,7 @@
                  <object class="GtkCheckButton" id="CBX_AUTO_STEP_HELP">
                    <property name="label" translatable="yes" context="tp_Scale|CBX_AUTO_STEP_HELP">Aut_omatic</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">False</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
@@ -498,9 +513,9 @@
                  <object class="GtkLabel" id="TXT_ORIGIN">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="xalign">0</property>
                    <property name="label" translatable="yes" context="tp_Scale|TXT_ORIGIN">Re_ference value</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
@@ -509,9 +524,12 @@
                  </packing>
                </child>
                <child>
                  <object class="svtlo-FormattedField" id="EDT_ORIGIN:0">
                  <object class="GtkSpinButton" id="EDT_ORIGIN">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="activates_default">True</property>
                    <property name="width_chars">10</property>
                    <property name="adjustment">adjustment3</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
@@ -523,7 +541,7 @@
                  <object class="GtkCheckButton" id="CBX_AUTO_ORIGIN">
                    <property name="label" translatable="yes" context="tp_Scale|CBX_AUTO_ORIGIN">Automat_ic</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">False</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
@@ -550,8 +568,8 @@
      <object class="GtkLabel" id="FL_SCALE">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="xalign">0</property>
        <property name="label" translatable="yes" context="tp_Scale|FL_SCALE">Scale</property>
        <property name="xalign">0</property>
        <attributes>
          <attribute name="weight" value="bold"/>
        </attributes>
@@ -563,10 +581,10 @@
      <widget name="LB_AXIS_TYPE"/>
      <widget name="EDT_MIN"/>
      <widget name="EDT_MAX"/>
      <widget name="MT_MAIN_DATE_STEP:0"/>
      <widget name="MT_MAIN_DATE_STEP"/>
      <widget name="EDT_STEP_MAIN"/>
      <widget name="MT_STEPHELP:0"/>
      <widget name="EDT_ORIGIN:0"/>
      <widget name="MT_STEPHELP"/>
      <widget name="EDT_ORIGIN"/>
      <widget name="LB_TIME_RESOLUTION"/>
      <widget name="LB_MAIN_TIME_UNIT"/>
      <widget name="LB_HELP_TIME_UNIT"/>
diff --git a/extras/source/glade/libreoffice-catalog.xml.in b/extras/source/glade/libreoffice-catalog.xml.in
index 8d9c6d0..1f1e3cd 100644
--- a/extras/source/glade/libreoffice-catalog.xml.in
+++ b/extras/source/glade/libreoffice-catalog.xml.in
@@ -175,9 +175,6 @@
    <glade-widget-class title="AutoComplete MultiLine Edit" name="cuilo-AutoCompleteMultiListBox"
                        generic-name="MultiLineEdit" parent="GtkTextView"
                        icon-name="widget-gtk-textview"/>
    <glade-widget-class title="SvtFormattedField" name="svtlo-FormattedField"
                        generic-name="Formatted Field" parent="GtkSpinButton"
                        icon-name="widget-gtk-textentry"/>
    <glade-widget-class title="Address MultiLine Edit" name="swuilo-AddressMultiLineEdit"
                        generic-name="AddressMultiLineEdit" parent="GtkTextView"
                        icon-name="widget-gtk-textview"/>
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index dcc59a2..a5a0c7c 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -715,6 +715,8 @@ public:
    }

    virtual void set_formatter(SvNumberFormatter* pFormatter) = 0;
    virtual sal_Int32 get_format_key() const = 0;
    virtual void set_format_key(sal_Int32 nFormatKey) = 0;

    void connect_value_changed(const Link<FormattedSpinButton&, void>& rLink)
    {
diff --git a/solenv/sanitizers/ui/modules/schart.suppr b/solenv/sanitizers/ui/modules/schart.suppr
index cabe450..d26296f 100644
--- a/solenv/sanitizers/ui/modules/schart.suppr
+++ b/solenv/sanitizers/ui/modules/schart.suppr
@@ -29,6 +29,7 @@ chart2/uiconfig/ui/tp_axisLabel.ui://GtkSpinButton[@id='OrientDegree'] no-labell
chart2/uiconfig/ui/tp_axisLabel.ui://GtkLabel[@id='degreeL'] orphan-label
chart2/uiconfig/ui/tp_axisLabel.ui://GtkLabel[@id='labelABCD'] orphan-label
chart2/uiconfig/ui/tp_axisLabel.ui://GtkLabel[@id='textdirL'] orphan-label
chart2/uiconfig/ui/tp_AxisPositions.ui://GtkSpinButton[@id='EDT_CROSSES_OTHER_AXIS_AT'] no-labelled-by
chart2/uiconfig/ui/tp_ChartType.ui://GtkLabel[@id='FT_CAPTION_FOR_WIZARD'] orphan-label
chart2/uiconfig/ui/tp_ChartType.ui://GtkTreeView[@id='charttype:border'] no-labelled-by
chart2/uiconfig/ui/tp_DataLabel.ui://GtkLabel[@id='CT_LABEL_DIAL'] orphan-label
@@ -50,15 +51,15 @@ chart2/uiconfig/ui/tp_RangeChooser.ui://GtkLabel[@id='FT_CAPTION_FOR_WIZARD'] or
chart2/uiconfig/ui/tp_RangeChooser.ui://GtkLabel[@id='STR_PAGE_DATA_RANGE'] orphan-label
chart2/uiconfig/ui/tp_SeriesToAxis.ui://GtkLabel[@id='FT_MISSING_VALUES'] orphan-label
chart2/uiconfig/ui/tp_Scale.ui://GtkLabel[@id='TXT_STEP_MAIN'] orphan-label
chart2/uiconfig/ui/tp_Scale.ui://GtkSpinButton[@id='MT_MAIN_DATE_STEP:0'] no-labelled-by
chart2/uiconfig/ui/tp_Scale.ui://GtkSpinButton[@id='MT_MAIN_DATE_STEP'] no-labelled-by
chart2/uiconfig/ui/tp_Scale.ui://GtkComboBox[@id='LB_MAIN_TIME_UNIT'] no-labelled-by
chart2/uiconfig/ui/tp_Scale.ui://svtlo-FormattedField[@id='EDT_STEP_MAIN'] no-labelled-by
chart2/uiconfig/ui/tp_Scale.ui://GtkSpinButton[@id='EDT_STEP_MAIN'] no-labelled-by
chart2/uiconfig/ui/tp_Scale.ui://GtkLabel[@id='TXT_STEP_HELP'] orphan-label
chart2/uiconfig/ui/tp_Scale.ui://GtkLabel[@id='TXT_STEP_HELP_COUNT'] orphan-label
chart2/uiconfig/ui/tp_Scale.ui://GtkSpinButton[@id='MT_STEPHELP:0'] no-labelled-by
chart2/uiconfig/ui/tp_Scale.ui://GtkSpinButton[@id='MT_STEPHELP'] no-labelled-by
chart2/uiconfig/ui/tp_Scale.ui://GtkComboBox[@id='LB_HELP_TIME_UNIT'] no-labelled-by
chart2/uiconfig/ui/tp_Scale.ui://GtkLabel[@id='TXT_ORIGIN'] orphan-label
chart2/uiconfig/ui/tp_Scale.ui://svtlo-FormattedField[@id='EDT_ORIGIN:0'] no-labelled-by
chart2/uiconfig/ui/tp_Scale.ui://GtkSpinButton[@id='EDT_ORIGIN'] no-labelled-by
chart2/uiconfig/ui/tp_Trendline.ui://GtkLabel[@id='label3'] orphan-label
chart2/uiconfig/ui/tp_Trendline.ui://GtkSpinButton[@id='degree'] no-labelled-by
chart2/uiconfig/ui/tp_Trendline.ui://GtkLabel[@id='label4'] orphan-label
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 82f1138..ade8338 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -2093,6 +2093,11 @@ public:
        : SalInstanceEntry(pButton, bTakeOwnership)
        , m_xButton(pButton)
    {
        // #i6278# allow more decimal places than the output format.  As
        // the numbers shown in the edit fields are used for input, it makes more
        // sense to display the values in the input format rather than the output
        // format.
        m_xButton->UseInputStringForFormatting();
    }

    virtual double get_value() const override
@@ -2121,6 +2126,16 @@ public:
    {
        m_xButton->SetFormatter(pFormatter);
    }

    virtual sal_Int32 get_format_key() const override
    {
        return m_xButton->GetFormatKey();
    }

    virtual void set_format_key(sal_Int32 nFormatKey) override
    {
        m_xButton->SetFormatKey(nFormatKey);
    }
};

class SalInstanceLabel : public SalInstanceWidget, public virtual weld::Label
diff --git a/vcl/source/control/fmtfield.cxx b/vcl/source/control/fmtfield.cxx
index 280bf06..d9e2b01 100644
--- a/vcl/source/control/fmtfield.cxx
+++ b/vcl/source/control/fmtfield.cxx
@@ -320,8 +320,6 @@ FormattedField::FormattedField(vcl::Window* pParent, WinBits nStyle)
{
}

VCL_BUILDER_FACTORY_ARGS(FormattedField, WB_BORDER | WB_SPIN)

void FormattedField::SetText(const OUString& rStr)
{

diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index d23daa5..2ffe595 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -4540,7 +4540,7 @@ private:
        }
        else
        {
            m_pFormatter->GetOutputString(dVal, m_nFormatKey, sNewText, &m_pLastOutputColor);
            m_pFormatter->GetInputLineString(dVal, m_nFormatKey, sNewText);
        }
        set_text(sNewText);
        return true;
@@ -4658,6 +4658,16 @@ public:
        signal_output();
    }

    virtual sal_Int32 get_format_key() const override
    {
        return m_nFormatKey;
    }

    virtual void set_format_key(sal_Int32 nFormatKey) override
    {
        m_nFormatKey = nFormatKey;
    }

    virtual ~GtkInstanceFormattedSpinButton() override
    {
        g_signal_handler_disconnect(m_pButton, m_nInputSignalId);