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;

Reply via email to