chart2/source/tools/DiagramHelper.cxx |    2 -
 include/svl/numformat.hxx             |   11 +++++++--
 sc/source/core/data/column3.cxx       |    4 +--
 svl/source/numbers/zforlist.cxx       |   40 ++++++++++++++++++----------------
 4 files changed, 34 insertions(+), 23 deletions(-)

New commits:
commit abe0080d66fe81013d92bbc3521980e049640f6d
Author:     Eike Rathke <er...@redhat.com>
AuthorDate: Thu Apr 14 18:23:04 2022 +0200
Commit:     Eike Rathke <er...@redhat.com>
CommitDate: Fri Apr 15 01:40:05 2022 +0200

    Prepare SvNumberFormatter::GetEditFormat() to obtain for another locale
    
    Change-Id: Iab8b9a802ebac60b52007754430352d3de925374
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133026
    Reviewed-by: Eike Rathke <er...@redhat.com>
    Tested-by: Jenkins

diff --git a/chart2/source/tools/DiagramHelper.cxx 
b/chart2/source/tools/DiagramHelper.cxx
index f1021442f617..51bcd4cf9f0c 100644
--- a/chart2/source/tools/DiagramHelper.cxx
+++ b/chart2/source/tools/DiagramHelper.cxx
@@ -1061,7 +1061,7 @@ sal_Int32 DiagramHelper::getDateTimeInputNumberFormat( 
const Reference< util::XN
         // 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, 
LANGUAGE_SYSTEM, nullptr);
+        nRet = pNumFormatter->GetEditFormat( fNumber, nRet, nType, nullptr);
     }
     return nRet;
 }
diff --git a/include/svl/numformat.hxx b/include/svl/numformat.hxx
index e002349b2dad..9cdb414346c5 100644
--- a/include/svl/numformat.hxx
+++ b/include/svl/numformat.hxx
@@ -306,9 +306,16 @@ public:
         should not be used otherwise. */
     sal_uInt32 GuessDateTimeFormat(SvNumFormatType& rType, double fNumber, 
LanguageType eLnge);
 
-    /** Return the corresponding edit format of a format. */
+    /** Return the corresponding edit format of a format.
+
+        nFIndex, eType and pFormat (if not nullptr) are assumed to match each
+        other / be of one format. The locale to use is obtained from pFormat,
+        if nullptr then LANGUAGE_SYSTEM is used. This can be overriden by
+        specifying eForLocale other than LANGUAGE_DONTKNOW.
+     */
     sal_uInt32 GetEditFormat(double fNumber, sal_uInt32 nFIndex, 
SvNumFormatType eType,
-                             LanguageType eLnge, SvNumberformat const* 
pFormat);
+                             SvNumberformat const* pFormat,
+                             LanguageType eForLocale = LANGUAGE_DONTKNOW);
 
     /// Return the reference date
     const Date& GetNullDate() const;
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index 56aff45386b5..8d5a9363a02a 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -2064,8 +2064,8 @@ bool ScColumn::ParseString(
                             bForceFormatDate = false;
                         else
                         {
-                            nIndex = aParam.mpNumFormatter->GetEditFormat( 
aCell.getValue(), nOldIndex, eNumFormatType,
-                                    pOldFormat->GetLanguage(), pOldFormat);
+                            nIndex = aParam.mpNumFormatter->GetEditFormat(
+                                    aCell.getValue(), nOldIndex, 
eNumFormatType, pOldFormat);
                             eEvalDateFormat = 
aParam.mpNumFormatter->GetEvalDateFormat();
                             aParam.mpNumFormatter->SetEvalDateFormat( 
NF_EVALDATEFORMAT_FORMAT_INTL);
                         }
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index 8606a4a24226..1ea60fc81784 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -1594,10 +1594,14 @@ sal_uInt32 SvNumberFormatter::GuessDateTimeFormat( 
SvNumFormatType& rType, doubl
 }
 
 sal_uInt32 SvNumberFormatter::GetEditFormat( double fNumber, sal_uInt32 
nFIndex,
-                                             SvNumFormatType eType, 
LanguageType eLang,
-                                             SvNumberformat const * pFormat )
+                                             SvNumFormatType eType,
+                                             SvNumberformat const * pFormat,
+                                             LanguageType eForLocale )
 {
     ::osl::MutexGuard aGuard( GetInstanceMutex() );
+    const LanguageType eLang = (pFormat ? pFormat->GetLanguage() : 
LANGUAGE_SYSTEM);
+    if (eForLocale == LANGUAGE_DONTKNOW)
+        eForLocale = eLang;
     sal_uInt32 nKey = nFIndex;
     switch ( eType )
     {
@@ -1615,16 +1619,16 @@ sal_uInt32 SvNumberFormatter::GetEditFormat( double 
fNumber, sal_uInt32 nFIndex,
                 // fdo#34977 preserve time when editing even if only date was
                 // displayed.
                 if (bIsoDate)
-                    nKey = GetFormatIndex( NF_DATETIME_ISO_YYYYMMDD_HHMMSS, 
eLang);
+                    nKey = GetFormatIndex( NF_DATETIME_ISO_YYYYMMDD_HHMMSS, 
eForLocale);
                 else
-                    nKey = GetFormatIndex( NF_DATETIME_SYS_DDMMYYYY_HHMMSS, 
eLang );
+                    nKey = GetFormatIndex( NF_DATETIME_SYS_DDMMYYYY_HHMMSS, 
eForLocale );
             }
             else
             {
                 if (bIsoDate)
-                    nKey = GetFormatIndex( NF_DATE_ISO_YYYYMMDD, eLang);
+                    nKey = GetFormatIndex( NF_DATE_ISO_YYYYMMDD, eForLocale);
                 else
-                    nKey = GetFormatIndex( NF_DATE_SYS_DDMMYYYY, eLang );
+                    nKey = GetFormatIndex( NF_DATE_SYS_DDMMYYYY, eForLocale );
             }
         }
         break;
@@ -1635,36 +1639,36 @@ sal_uInt32 SvNumberFormatter::GetEditFormat( double 
fNumber, sal_uInt32 nFIndex,
              * of a signed 16-bit. 32k hours are 3.7 years ... or
              * 1903-09-26 if date. */
             if (fabs( fNumber) * 24 < 0x7fff)
-                nKey = GetTimeFormat( fNumber, eLang, true);
+                nKey = GetTimeFormat( fNumber, eForLocale, true);
             // Preserve duration, use [HH]:MM:SS instead of time.
             else
-                nKey = GetFormatIndex( NF_DATETIME_SYS_DDMMYYYY_HHMMSS, eLang 
);
+                nKey = GetFormatIndex( NF_DATETIME_SYS_DDMMYYYY_HHMMSS, 
eForLocale );
             // Assume that a large value is a datetime with only time
             // displayed.
         }
         else
-            nKey = GetStandardFormat( fNumber, nFIndex, eType, eLang );
+            nKey = GetStandardFormat( fNumber, nFIndex, eType, eForLocale );
         break;
     case SvNumFormatType::DURATION :
-        nKey = GetTimeFormat( fNumber, eLang, true);
+        nKey = GetTimeFormat( fNumber, eForLocale, true);
         break;
     case SvNumFormatType::DATETIME :
         if (nFIndex == GetFormatIndex( NF_DATETIME_ISO_YYYYMMDDTHHMMSS, eLang))
-            nKey = GetFormatIndex( NF_DATETIME_ISO_YYYYMMDDTHHMMSS, eLang );
+            nKey = GetFormatIndex( NF_DATETIME_ISO_YYYYMMDDTHHMMSS, eForLocale 
);
         else if (nFIndex == GetFormatIndex( 
NF_DATETIME_ISO_YYYYMMDDTHHMMSS000, eLang))
-            nKey = GetFormatIndex( NF_DATETIME_ISO_YYYYMMDDTHHMMSS000, eLang );
+            nKey = GetFormatIndex( NF_DATETIME_ISO_YYYYMMDDTHHMMSS000, 
eForLocale );
         else if (nFIndex == GetFormatIndex( 
NF_DATETIME_ISO_YYYYMMDD_HHMMSS000, eLang))
-            nKey = GetFormatIndex( NF_DATETIME_ISO_YYYYMMDD_HHMMSS000, eLang );
+            nKey = GetFormatIndex( NF_DATETIME_ISO_YYYYMMDD_HHMMSS000, 
eForLocale );
         else if (nFIndex == GetFormatIndex( NF_DATETIME_ISO_YYYYMMDD_HHMMSS, 
eLang) || (pFormat && pFormat->IsIso8601( 0 )))
-            nKey = GetFormatIndex( NF_DATETIME_ISO_YYYYMMDD_HHMMSS, eLang );
+            nKey = GetFormatIndex( NF_DATETIME_ISO_YYYYMMDD_HHMMSS, eForLocale 
);
         else
-            nKey = GetFormatIndex( NF_DATETIME_SYS_DDMMYYYY_HHMMSS, eLang );
+            nKey = GetFormatIndex( NF_DATETIME_SYS_DDMMYYYY_HHMMSS, eForLocale 
);
         break;
     case SvNumFormatType::NUMBER:
-        nKey = GetStandardFormat( eType, eLang );
+        nKey = GetStandardFormat( eType, eForLocale );
         break;
     default:
-        nKey = GetStandardFormat( fNumber, nFIndex, eType, eLang );
+        nKey = GetStandardFormat( fNumber, nFIndex, eType, eForLocale );
     }
     return nKey;
 }
@@ -1712,7 +1716,7 @@ void SvNumberFormatter::GetInputLineString(const double& 
fOutNumber,
         bPrecChanged = true;
     }
 
-    sal_uInt32 nKey = GetEditFormat( fOutNumber, nRealKey, eType, eLang, 
pFormat);
+    sal_uInt32 nKey = GetEditFormat( fOutNumber, nRealKey, eType, pFormat);
     // if bFiltering true keep the nRealKey format
     if ( nKey != nRealKey && !bFiltering )
     {

Reply via email to