tdf#99361 Separate checkbox in Number dialog

 "Thousands Separator" and "Engineering notation" used the same checkbox,
 so help tips texts were the same.
This commit creates a second checkbox
 which is hiden/shown according to category selected

Change-Id: I94913e63e47b760deb747ce7cd3d74ab4c109599
Reviewed-on: https://gerrit.libreoffice.org/24224
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
diff --git a/cui/source/dialogs/cuires.src b/cui/source/dialogs/cuires.src
index b0fa5da..57d1708 100644
--- a/cui/source/dialogs/cuires.src
+++ b/cui/source/dialogs/cuires.src
@@ -65,16 +65,6 @@ String RID_SVXSTR_AUTO_ENTRY
    Text [ en-US ] = "Automatic";
};

String RID_SVXSTR_THOUSAND_SEP
{
    Text [ en-US ] = "Thousands separator";
};

String RID_SVXSTR_ENGINEERING
{
    Text [ en-US ] = "Engineering notation";
};

String RID_SVXSTR_EDIT_GRAPHIC
{
    Text [ en-US ] = "Link" ;
diff --git a/cui/source/inc/cuires.hrc b/cui/source/inc/cuires.hrc
index ac4b7e67..98cbb8d 100644
--- a/cui/source/inc/cuires.hrc
+++ b/cui/source/inc/cuires.hrc
@@ -444,9 +444,6 @@
#define RID_SVXSTR_PERSONA_MUSIC                            (RID_SVX_START + 1288)
#define RID_SVXSTR_PERSONA_NATURE                           (RID_SVX_START + 1289)

#define RID_SVXSTR_THOUSAND_SEP                             (RID_SVX_START + 1290)
#define RID_SVXSTR_ENGINEERING                              (RID_SVX_START + 1291)

#define RID_SVXPAGE_OPENCL                                  (RID_SVX_START + 254)

#endif
diff --git a/cui/source/inc/numfmt.hxx b/cui/source/inc/numfmt.hxx
index df61c57..b94788e 100644
--- a/cui/source/inc/numfmt.hxx
+++ b/cui/source/inc/numfmt.hxx
@@ -105,6 +105,7 @@ private:
    VclPtr<FixedText>              m_pFtLeadZeroes;
    VclPtr<NumericField>           m_pEdLeadZeroes;
    VclPtr<CheckBox>               m_pBtnThousand;
    VclPtr<CheckBox>               m_pBtnEngineering;

    VclPtr<VclContainer>           m_pFormatCodeFrame;
    VclPtr<Edit>                   m_pEdFormat;
@@ -127,8 +128,6 @@ private:
    short                   nFixedCategory;

    OUString sAutomaticEntry;
    OUString sThousandSeparator;
    OUString sEngineeringNotation;

    VclPtr<vcl::Window>            pLastActivWindow;

@@ -137,7 +136,7 @@ private:
    void    FillFormatListBox_Impl( std::vector<OUString>& rEntries );
    void    UpdateOptions_Impl( bool bCheckCatChange );
    void    UpdateFormatListBox_Impl( bool bCat, bool bUpdateEdit );
    void    UpdateThousandEngineeringText();
    void    UpdateThousandEngineeringCheckBox();
    void    Obstructing();
    void    EnableBySourceFormat_Impl();
    void    SetCategory( sal_uInt16 nPos );
diff --git a/cui/source/tabpages/numfmt.cxx b/cui/source/tabpages/numfmt.cxx
index f0b3255..ad5bfd2 100644
--- a/cui/source/tabpages/numfmt.cxx
+++ b/cui/source/tabpages/numfmt.cxx
@@ -238,8 +238,6 @@ SvxNumberFormatTabPage::SvxNumberFormatTabPage(vcl::Window* pParent,
    , pNumFmtShell(nullptr)
    , nInitFormat(ULONG_MAX)
    , sAutomaticEntry(CUI_RES(RID_SVXSTR_AUTO_ENTRY))
    , sThousandSeparator(CUI_RES(RID_SVXSTR_THOUSAND_SEP))
    , sEngineeringNotation(CUI_RES(RID_SVXSTR_ENGINEERING))
    , pLastActivWindow(nullptr)
{
    get(m_pFtCategory, "categoryft");
@@ -261,6 +259,7 @@ SvxNumberFormatTabPage::SvxNumberFormatTabPage(vcl::Window* pParent,
    get(m_pFtLeadZeroes, "leadzerosft");
    get(m_pEdLeadZeroes, "leadzerosed");
    get(m_pBtnThousand, "thousands");
    get(m_pBtnEngineering, "engineering");
    get(m_pFormatCodeFrame, "formatcode");
    get(m_pEdFormat, "formatted");
    get(m_pIbAdd, "add");
@@ -305,6 +304,7 @@ void SvxNumberFormatTabPage::dispose()
    m_pFtLeadZeroes.clear();
    m_pEdLeadZeroes.clear();
    m_pBtnThousand.clear();
    m_pBtnEngineering.clear();
    m_pFormatCodeFrame.clear();
    m_pEdFormat.clear();
    m_pIbAdd.clear();
@@ -345,14 +345,16 @@ void SvxNumberFormatTabPage::Init_Impl()

    m_pEdDecimals->SetModifyHdl( aLink );
    m_pEdLeadZeroes->SetModifyHdl( aLink );

    m_pBtnNegRed->SetClickHdl( LINK( this, SvxNumberFormatTabPage, OptClickHdl_Impl ) );
    m_pBtnThousand->SetClickHdl( LINK( this, SvxNumberFormatTabPage, OptClickHdl_Impl ) );
    m_pBtnEngineering->SetClickHdl( LINK( this, SvxNumberFormatTabPage, OptClickHdl_Impl ) );
    m_pLbFormat->SetDoubleClickHdl( HDL( DoubleClickHdl_Impl ) );
    m_pEdFormat->SetModifyHdl( HDL( EditModifyHdl_Impl ) );
    m_pIbAdd->SetClickHdl( HDL( ClickHdl_Impl ) );
    m_pIbRemove->SetClickHdl( HDL( ClickHdl_Impl ) );
    m_pIbInfo->SetClickHdl( HDL( ClickHdl_Impl ) );
    UpdateThousandEngineeringText();
    UpdateThousandEngineeringCheckBox();

    m_pEdComment->SetLoseFocusHdl( LINK( this, SvxNumberFormatTabPage, LostFocusHdl_Impl) );
    aResetWinTimer.SetTimeoutHdl(LINK( this, SvxNumberFormatTabPage, TimeHdl_Impl));
@@ -631,6 +633,7 @@ void SvxNumberFormatTabPage::Obstructing()

    m_pBtnNegRed->Disable();
    m_pBtnThousand->Disable();
    m_pBtnEngineering->Disable();
    m_pFtLeadZeroes->Disable();
    m_pFtDecimals->Disable();
    m_pEdLeadZeroes->Disable();
@@ -640,6 +643,7 @@ void SvxNumberFormatTabPage::Obstructing()
    m_pEdLeadZeroes->SetText( OUString() );
    m_pBtnNegRed->Check( false );
    m_pBtnThousand->Check( false );
    m_pBtnEngineering->Check( false );
    m_pWndPreview->NotifyChange( OUString() );

    m_pLbCategory->SelectEntryPos( 0 );
@@ -673,6 +677,7 @@ void SvxNumberFormatTabPage::EnableBySourceFormat_Impl()
    m_pEdLeadZeroes->Enable( bEnable );
    m_pBtnNegRed->Enable( bEnable );
    m_pBtnThousand->Enable( bEnable );
    m_pBtnEngineering->Enable( bEnable );
    m_pFtOptions->Enable( bEnable );
    m_pFormatCodeFrame->Enable( bEnable );
    m_pLbFormat->Invalidate(); // #i43322#
@@ -956,6 +961,7 @@ void SvxNumberFormatTabPage::UpdateOptions_Impl( bool bCheckCatChange /*= sal_Fa
        nCategory=nFixedCategory;
    }

    UpdateThousandEngineeringCheckBox();
    switch ( nCategory )
    {
        case CAT_SCIENTIFIC: // bThousand is for Engineering notation
@@ -965,6 +971,8 @@ void SvxNumberFormatTabPage::UpdateOptions_Impl( bool bCheckCatChange /*= sal_Fa
                    bThousand = true;
                else
                    bThousand = false;
                m_pBtnEngineering->Enable();
                m_pBtnEngineering->Check( bThousand );
            }
            // fallthru
        case CAT_NUMBER:
@@ -976,14 +984,17 @@ void SvxNumberFormatTabPage::UpdateOptions_Impl( bool bCheckCatChange /*= sal_Fa
            m_pFtLeadZeroes->Enable();
            m_pEdLeadZeroes->Enable();
            m_pBtnNegRed->Enable();
            m_pBtnThousand->Enable();
            if ( nCategory == CAT_NUMBER && m_pLbFormat->GetSelectEntryPos() == 0 )
                m_pEdDecimals->SetText( "" ); //General format tdf#44399
            else
                m_pEdDecimals->SetText( OUString::number( nDecimals ) );
            m_pEdLeadZeroes->SetText( OUString::number( nZeroes ) );
            m_pBtnNegRed->Check( bNegRed );
            m_pBtnThousand->Check( bThousand );
            if ( nCategory != CAT_SCIENTIFIC )
            {
                m_pBtnThousand->Enable();
                m_pBtnThousand->Check( bThousand );
            }
            break;

        case CAT_ALL:
@@ -1001,12 +1012,13 @@ void SvxNumberFormatTabPage::UpdateOptions_Impl( bool bCheckCatChange /*= sal_Fa
            m_pEdLeadZeroes->Disable();
            m_pBtnNegRed->Disable();
            m_pBtnThousand->Disable();
            m_pBtnEngineering->Disable();
            m_pEdDecimals->SetText( OUString::number( 0 ) );
            m_pEdLeadZeroes->SetText( OUString::number( 0 ) );
            m_pBtnNegRed->Check( false );
            m_pBtnThousand->Check( false );
            m_pBtnEngineering->Check( false );
    }
    UpdateThousandEngineeringText();
}


@@ -1118,11 +1130,11 @@ void SvxNumberFormatTabPage::UpdateFormatListBox_Impl


/*************************************************************************
#*  Method:        UpdateThousandEngineeringText
#*  Method:        UpdateThousandEngineeringCheckBox
#*------------------------------------------------------------------------
#*
#*  Class:      SvxNumberFormatTabPage
#*  Function:   Updates the text of Thousands separator checkbox
#*  Function:   Change visible checkbox according to category format
#*              if scientific format "Engineering notation"
#*              else "Thousands separator"
#*  Input:      ---
@@ -1130,12 +1142,11 @@ void SvxNumberFormatTabPage::UpdateFormatListBox_Impl
#*
#************************************************************************/

void SvxNumberFormatTabPage::UpdateThousandEngineeringText()
void SvxNumberFormatTabPage::UpdateThousandEngineeringCheckBox()
{
    if ( m_pLbCategory->GetSelectEntryPos() == CAT_SCIENTIFIC )
        m_pBtnThousand->SetText(sEngineeringNotation);
    else
        m_pBtnThousand->SetText(sThousandSeparator);
    bool bIsScientific = m_pLbCategory->GetSelectEntryPos() == CAT_SCIENTIFIC;
    m_pBtnThousand->Show( !bIsScientific );
    m_pBtnEngineering->Show( bIsScientific );
}


@@ -1579,19 +1590,19 @@ void SvxNumberFormatTabPage::OptHdl_Impl( void* pOptCtrl )
    if (   (pOptCtrl == m_pEdLeadZeroes)
        || (pOptCtrl == m_pEdDecimals)
        || (pOptCtrl == m_pBtnNegRed)
        || (pOptCtrl == m_pBtnThousand) )
        || (pOptCtrl == m_pBtnThousand)
        || (pOptCtrl == m_pBtnEngineering) )
    {
        OUString          aFormat;
        bool          bThousand     =    m_pBtnThousand->IsEnabled()
                                      && m_pBtnThousand->IsChecked();
        bool          bNegRed       =    m_pBtnNegRed->IsEnabled()
                                      && m_pBtnNegRed->IsChecked();
        sal_uInt16        nPrecision    = (m_pEdDecimals->IsEnabled())
                                        ? (sal_uInt16)m_pEdDecimals->GetValue()
                                        : (sal_uInt16)0;
        sal_uInt16        nLeadZeroes   = (m_pEdLeadZeroes->IsEnabled())
                                        ? (sal_uInt16)m_pEdLeadZeroes->GetValue()
                                        : (sal_uInt16)0;
        bool          bThousand  = ( m_pBtnThousand->IsVisible() && m_pBtnThousand->IsEnabled() && m_pBtnThousand->IsChecked() )
                                || ( m_pBtnEngineering->IsVisible() && m_pBtnEngineering->IsEnabled() && m_pBtnEngineering->IsChecked() );
        bool          bNegRed    =   m_pBtnNegRed->IsEnabled() && m_pBtnNegRed->IsChecked();
        sal_uInt16    nPrecision = (m_pEdDecimals->IsEnabled())
                                 ? (sal_uInt16)m_pEdDecimals->GetValue()
                                 : (sal_uInt16)0;
        sal_uInt16    nLeadZeroes = (m_pEdLeadZeroes->IsEnabled())
                                 ? (sal_uInt16)m_pEdLeadZeroes->GetValue()
                                 : (sal_uInt16)0;
        if ( pNumFmtShell->GetStandardName() == m_pEdFormat->GetText() )
        {
            m_pEdDecimals->SetValue( nPrecision );
diff --git a/cui/uiconfig/ui/numberingformatpage.ui b/cui/uiconfig/ui/numberingformatpage.ui
index c98755d..87039b2 100644
--- a/cui/uiconfig/ui/numberingformatpage.ui
+++ b/cui/uiconfig/ui/numberingformatpage.ui
@@ -292,14 +292,44 @@
                  </packing>
                </child>
                <child>
                  <object class="GtkCheckButton" id="thousands">
                    <property name="label" translatable="yes">_Thousands separator</property>
                  <object class="GtkBox" id="box1">
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">False</property>
                    <property name="use_underline">True</property>
                    <property name="xalign">0</property>
                    <property name="draw_indicator">True</property>
                    <property name="can_focus">False</property>
                    <property name="border_width">0</property>
                    <property name="orientation">vertical</property>
                    <property name="spacing">6</property>
                    <child>
                      <object class="GtkCheckButton" id="thousands">
                        <property name="label" translatable="yes">_Thousands separator</property>
                        <property name="visible">True</property>
                        <property name="can_focus">True</property>
                        <property name="receives_default">False</property>
                        <property name="use_underline">True</property>
                        <property name="xalign">0</property>
                        <property name="draw_indicator">True</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">0</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkCheckButton" id="engineering">
                        <property name="label" translatable="yes">_Engineering notation</property>
                        <property name="visible">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>
                        <property name="draw_indicator">True</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">0</property>
                      </packing>
                    </child>
                  </object>
                  <packing>
                    <property name="left_attach">2</property>