chart2/source/inc/DiagramHelper.hxx | 2 chart2/source/tools/DiagramHelper.cxx | 117 +++++---------------- chart2/source/tools/ExplicitCategoriesProvider.cxx | 7 - 3 files changed, 34 insertions(+), 92 deletions(-)
New commits: commit 03cecc410ed2f271f0e90eaafcff3380080aec0e Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Fri Apr 4 19:51:01 2025 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Sat Apr 5 12:13:37 2025 +0200 use more concrete class in chart2 Change-Id: Ie949b25310ad9292165405c254a24e374095cb82 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183730 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/chart2/source/inc/DiagramHelper.hxx b/chart2/source/inc/DiagramHelper.hxx index 7b6079dae5b3..5ba0438dc0a9 100644 --- a/chart2/source/inc/DiagramHelper.hxx +++ b/chart2/source/inc/DiagramHelper.hxx @@ -69,7 +69,7 @@ public: static void switchToTextCategories( const rtl::Reference<::chart::ChartModel> & xChartDoc ); - static bool isDateNumberFormat( sal_Int32 nNumberFormat, const css::uno::Reference< css::util::XNumberFormats >& xNumberFormats ); + static bool isDateNumberFormat( sal_Int32 nNumberFormat, const rtl::Reference< SvNumberFormatsSupplierObj >& xNumberFormats ); static sal_Int32 getDateNumberFormat( const rtl::Reference< SvNumberFormatsSupplierObj >& xNumberFormatsSupplier ); static sal_Int32 getDateTimeInputNumberFormat( const rtl::Reference< SvNumberFormatsSupplierObj >& xNumberFormatsSupplier, double fNumber ); diff --git a/chart2/source/tools/DiagramHelper.cxx b/chart2/source/tools/DiagramHelper.cxx index c887a5dc32af..8a645470f82f 100644 --- a/chart2/source/tools/DiagramHelper.cxx +++ b/chart2/source/tools/DiagramHelper.cxx @@ -46,6 +46,7 @@ #include <svl/numformat.hxx> #include <svl/numuno.hxx> #include <svl/zforlist.hxx> +#include <svl/zformat.hxx> #include <vcl/svapp.hxx> #include <vcl/settings.hxx> #include <comphelper/sequence.hxx> @@ -244,30 +245,20 @@ void lcl_switchToDateCategories( const rtl::Reference< ChartModel >& xChartDoc, sal_Int32 nNumberFormat = -1; xAxisProps->getPropertyValue(CHART_UNONAME_NUMFMT) >>= nNumberFormat; - Reference< util::XNumberFormats > xNumberFormats( xChartDoc->getNumberFormats() ); - if( xNumberFormats.is() ) + SvNumberFormatter* pNumberFormatter = xChartDoc->getNumberFormatsSupplier()->GetNumberFormatter(); + const SvNumberformat* pNumberFormat = pNumberFormatter->GetEntry( nNumberFormat ); + sal_Int32 nType = util::NumberFormat::UNDEFINED; + if( pNumberFormat ) + nType = static_cast<sal_Int16>(pNumberFormat->GetType()); + if( !( nType & util::NumberFormat::DATE ) ) { - Reference< beans::XPropertySet > xKeyProps; - try + //set a date format to the axis + LanguageType eLang = Application::GetSettings().GetLanguageTag().getLanguageType(); + sal_uInt32 nIndex = 0; + SvNumberFormatTable& rTable = pNumberFormatter->ChangeCL( static_cast<SvNumFormatType>(util::NumberFormat::DATE), nIndex, eLang ); + if (!rTable.empty()) { - xKeyProps = xNumberFormats->getByKey( nNumberFormat ); - } - catch( const uno::Exception & ) - { - DBG_UNHANDLED_EXCEPTION("chart2"); - } - sal_Int32 nType = util::NumberFormat::UNDEFINED; - if( xKeyProps.is() ) - xKeyProps->getPropertyValue( u"Type"_ustr ) >>= nType; - if( !( nType & util::NumberFormat::DATE ) ) - { - //set a date format to the axis - const LocaleDataWrapper& rLocaleDataWrapper = Application::GetSettings().GetLocaleDataWrapper(); - Sequence<sal_Int32> aKeySeq = xNumberFormats->queryKeys( util::NumberFormat::DATE, rLocaleDataWrapper.getLanguageTag().getLocale(), true/*bCreate*/ ); - if( aKeySeq.hasElements() ) - { - xAxisProps->setPropertyValue(CHART_UNONAME_NUMFMT, uno::Any(aKeySeq[0])); - } + xAxisProps->setPropertyValue(CHART_UNONAME_NUMFMT, uno::Any(rTable.begin()->first)); } } } @@ -325,17 +316,14 @@ void DiagramHelper::switchToTextCategories( const rtl::Reference<::chart::ChartM } } -bool DiagramHelper::isDateNumberFormat( sal_Int32 nNumberFormat, const Reference< util::XNumberFormats >& xNumberFormats ) +bool DiagramHelper::isDateNumberFormat( sal_Int32 nNumberFormat, const rtl::Reference< SvNumberFormatsSupplierObj >& xNumberFormats ) { bool bIsDate = false; - if( !xNumberFormats.is() ) - return bIsDate; - - Reference< beans::XPropertySet > xKeyProps = xNumberFormats->getByKey( nNumberFormat ); - if( xKeyProps.is() ) + const SvNumberformat* pFormat = xNumberFormats->GetNumberFormatter()->GetEntry(nNumberFormat); + if( pFormat ) { sal_Int32 nType = util::NumberFormat::UNDEFINED; - xKeyProps->getPropertyValue( u"Type"_ustr ) >>= nType; + nType = static_cast<sal_Int16>(pFormat->GetType()); bIsDate = nType & util::NumberFormat::DATE; } return bIsDate; @@ -343,30 +331,12 @@ bool DiagramHelper::isDateNumberFormat( sal_Int32 nNumberFormat, const Reference sal_Int32 DiagramHelper::getDateNumberFormat( const rtl::Reference< SvNumberFormatsSupplierObj >& xNumberFormatsSupplier ) { - sal_Int32 nRet=-1; - //try to get a date format with full year display const LanguageTag& rLanguageTag = Application::GetSettings().GetLanguageTag(); - NumberFormatterWrapper aNumberFormatterWrapper( xNumberFormatsSupplier ); - SvNumberFormatter* pNumFormatter = aNumberFormatterWrapper.getSvNumberFormatter(); - if( pNumFormatter ) - { - nRet = pNumFormatter->GetFormatIndex( NF_DATE_SYS_DDMMYYYY, rLanguageTag.getLanguageType() ); - } - else - { - Reference< util::XNumberFormats > xNumberFormats( xNumberFormatsSupplier->getNumberFormats() ); - if( xNumberFormats.is() ) - { - Sequence<sal_Int32> aKeySeq = xNumberFormats->queryKeys( util::NumberFormat::DATE, - rLanguageTag.getLocale(), true/*bCreate */); - if( aKeySeq.hasElements() ) - { - nRet = aKeySeq[0]; - } - } - } - return nRet; + SvNumberFormatter* pNumFormatter = xNumberFormatsSupplier->GetNumberFormatter(); + if (!pNumFormatter) + return -1; + return pNumFormatter->GetFormatIndex( NF_DATE_SYS_DDMMYYYY, rLanguageTag.getLanguageType() ); } sal_Int32 DiagramHelper::getDateTimeInputNumberFormat( const rtl::Reference< SvNumberFormatsSupplierObj >& xNumberFormatsSupplier, double fNumber ) @@ -374,49 +344,20 @@ sal_Int32 DiagramHelper::getDateTimeInputNumberFormat( const rtl::Reference< SvN sal_Int32 nRet = 0; // Get the most detailed date/time format according to fNumber. - NumberFormatterWrapper aNumberFormatterWrapper( xNumberFormatsSupplier ); - SvNumberFormatter* pNumFormatter = aNumberFormatterWrapper.getSvNumberFormatter(); - if (!pNumFormatter) - SAL_WARN("chart2", "DiagramHelper::getDateTimeInputNumberFormat - no SvNumberFormatter"); - else - { - SvNumFormatType nType; - // Obtain best matching date, time or datetime format. - nRet = pNumFormatter->GuessDateTimeFormat( nType, fNumber, LANGUAGE_SYSTEM); - // Obtain the corresponding edit format. - nRet = pNumFormatter->GetEditFormat( fNumber, nRet, nType, nullptr); - } + SvNumberFormatter* pNumFormatter = xNumberFormatsSupplier->GetNumberFormatter(); + SvNumFormatType nType; + // Obtain best matching date, time or datetime format. + nRet = pNumFormatter->GuessDateTimeFormat( nType, fNumber, LANGUAGE_SYSTEM); + // Obtain the corresponding edit format. + nRet = pNumFormatter->GetEditFormat( fNumber, nRet, nType, nullptr); return nRet; } sal_Int32 DiagramHelper::getPercentNumberFormat( const rtl::Reference< SvNumberFormatsSupplierObj >& xNumberFormatsSupplier ) { - sal_Int32 nRet=-1; const LanguageTag& rLanguageTag = Application::GetSettings().GetLanguageTag(); - NumberFormatterWrapper aNumberFormatterWrapper( xNumberFormatsSupplier ); - SvNumberFormatter* pNumFormatter = aNumberFormatterWrapper.getSvNumberFormatter(); - if( pNumFormatter ) - { - nRet = pNumFormatter->GetFormatIndex( NF_PERCENT_INT, rLanguageTag.getLanguageType() ); - } - else - { - Reference< util::XNumberFormats > xNumberFormats( xNumberFormatsSupplier->getNumberFormats() ); - if( xNumberFormats.is() ) - { - Sequence<sal_Int32> aKeySeq = xNumberFormats->queryKeys( util::NumberFormat::PERCENT, - rLanguageTag.getLocale(), true/*bCreate*/ ); - if( aKeySeq.hasElements() ) - { - // This *assumes* the sequence is sorted as in - // NfIndexTableOffset and the first format is the integer 0% - // format by chance... which usually is the case, but... anyway, - // we usually also have a number formatter so don't reach here. - nRet = aKeySeq[0]; - } - } - } - return nRet; + SvNumberFormatter* pNumFormatter = xNumberFormatsSupplier->GetNumberFormatter(); + return pNumFormatter->GetFormatIndex( NF_PERCENT_INT, rLanguageTag.getLanguageType() ); } bool DiagramHelper::areChartTypesCompatible( const rtl::Reference< ChartType >& xFirstType, diff --git a/chart2/source/tools/ExplicitCategoriesProvider.cxx b/chart2/source/tools/ExplicitCategoriesProvider.cxx index 9a3ced3ba49d..9b21fc42ef95 100644 --- a/chart2/source/tools/ExplicitCategoriesProvider.cxx +++ b/chart2/source/tools/ExplicitCategoriesProvider.cxx @@ -37,6 +37,7 @@ #include <o3tl/safeint.hxx> #include <rtl/ustrbuf.hxx> #include <comphelper/diagnose_ex.hxx> +#include <svl/numuno.hxx> #include <limits> @@ -418,7 +419,7 @@ static bool lcl_fillDateCategories( const uno::Reference< data::XDataSequence >& uno::Sequence< uno::Any > aValues = xDataSequence->getData(); sal_Int32 nCount = aValues.getLength(); rDateCategories.reserve(nCount); - Reference< util::XNumberFormats > xNumberFormats( rModel.getNumberFormats() ); + rtl::Reference< SvNumberFormatsSupplierObj > xNumberFormatsSupplier( rModel.getNumberFormatsSupplier() ); bool bOwnData = false; bool bOwnDataAnddAxisHasAnyFormat = false; @@ -434,7 +435,7 @@ static bool lcl_fillDateCategories( const uno::Reference< data::XDataSequence >& if (xAxisProps.is() && (xAxisProps->getPropertyValue(CHART_UNONAME_NUMFMT) >>= nAxisNumberFormat)) { bOwnDataAnddAxisHasAnyFormat = true; - bOwnDataAnddAxisHasDateFormat = DiagramHelper::isDateNumberFormat( nAxisNumberFormat, xNumberFormats ); + bOwnDataAnddAxisHasDateFormat = DiagramHelper::isDateNumberFormat( nAxisNumberFormat, xNumberFormatsSupplier ); } } } @@ -447,7 +448,7 @@ static bool lcl_fillDateCategories( const uno::Reference< data::XDataSequence >& if( bOwnData ) bIsDate = !bOwnDataAnddAxisHasAnyFormat || bOwnDataAnddAxisHasDateFormat; else - bIsDate = DiagramHelper::isDateNumberFormat( xDataSequence->getNumberFormatKeyByIndex( nN ), xNumberFormats ); + bIsDate = DiagramHelper::isDateNumberFormat( xDataSequence->getNumberFormatKeyByIndex( nN ), xNumberFormatsSupplier ); } else bIsDate = true;