[Libreoffice-commits] core.git: svx/inc svx/source sw/inc sw/source

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Tue Dec 10 20:29:07 UTC 2019


 svx/inc/spacing.hrc                          |  101 ++++++++++++++++-----------
 svx/source/dialog/spacinglistbox.cxx         |   21 ++++-
 sw/inc/pageformatpanel.hrc                   |   42 ++++++-----
 sw/source/uibase/sidebar/PageFormatPanel.cxx |   17 ++++
 4 files changed, 117 insertions(+), 64 deletions(-)

New commits:
commit 137c9e826cdce429a004f05bde40d274437d7554
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Tue Dec 10 09:44:39 2019 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue Dec 10 21:28:13 2019 +0100

    Related: tdf#129267 format numbers with the UI locale
    
    Change-Id: Ib7712f56140e5ef9a67700c8ea86383adbf2a4fc
    Reviewed-on: https://gerrit.libreoffice.org/84800
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/svx/inc/spacing.hrc b/svx/inc/spacing.hrc
index 82f107fc67db..b8ca2661c528 100644
--- a/svx/inc/spacing.hrc
+++ b/svx/inc/spacing.hrc
@@ -13,60 +13,81 @@
 
 #define NC_(Context, String) reinterpret_cast<char const *>(Context "\004" u8##String)
 
+struct measurement
+{
+    const char* key;
+    int twips;
+    int human;
+};
+
 // To translators: this is a listbox labelled by "Spacing:", inch units
-const std::pair<const char*, int> RID_SVXSTRARY_SPACING_INCH[] =
+const measurement RID_SVXSTRARY_SPACING_INCH[] =
 {
-    { NC_("RID_SVXSTRARY_SPACING_INCH", "None"),                    0 },
-    { NC_("RID_SVXSTRARY_SPACING_INCH", "Extra Small (1/16″)"),   91 },
-    { NC_("RID_SVXSTRARY_SPACING_INCH", "Small (1/8″)"),         181 },
-    { NC_("RID_SVXSTRARY_SPACING_INCH", "Small Medium (1/4″)"),  363 },
-    { NC_("RID_SVXSTRARY_SPACING_INCH", "Medium (3/8″)"),        539 },
-    { NC_("RID_SVXSTRARY_SPACING_INCH", "Medium Large (1/2″)"),  720 },
-    { NC_("RID_SVXSTRARY_SPACING_INCH", "Large (3/4″)"),        1077 },
-    { NC_("RID_SVXSTRARY_SPACING_INCH", "Extra Large (1″)"),    1440 },
-    { nullptr, 0 }
+    { NC_("RID_SVXSTRARY_SPACING_INCH", "None"),                   0, 0 },
+    { NC_("RID_SVXSTRARY_SPACING_INCH", "Extra Small (1/16″)"),   91, 0 },
+    { NC_("RID_SVXSTRARY_SPACING_INCH", "Small (1/8″)"),         181, 0 },
+    { NC_("RID_SVXSTRARY_SPACING_INCH", "Small Medium (1/4″)"),  363, 0 },
+    { NC_("RID_SVXSTRARY_SPACING_INCH", "Medium (3/8″)"),        539, 0 },
+    { NC_("RID_SVXSTRARY_SPACING_INCH", "Medium Large (1/2″)"),  720, 0 },
+    { NC_("RID_SVXSTRARY_SPACING_INCH", "Large (3/4″)"),        1077, 0 },
+    { NC_("RID_SVXSTRARY_SPACING_INCH", "Extra Large (1″)"),    1440, 0 },
+    { nullptr, 0, 0 }
 };
 
 // To translators: this is a listbox labelled by "Spacing:", cm units
-const std::pair<const char*, int> RID_SVXSTRARY_SPACING_CM[] =
+const measurement RID_SVXSTRARY_SPACING_CM[] =
 {
-    { NC_("RID_SVXSTRARY_SPACING_CM", "None"),                    0 },
-    { NC_("RID_SVXSTRARY_SPACING_CM", "Extra Small (0.16 cm)"),   91 },
-    { NC_("RID_SVXSTRARY_SPACING_CM", "Small (0.32 cm)"),        181 },
-    { NC_("RID_SVXSTRARY_SPACING_CM", "Small Medium (0.64 cm)"), 363 },
-    { NC_("RID_SVXSTRARY_SPACING_CM", "Medium (0.95 cm)"),       539 },
-    { NC_("RID_SVXSTRARY_SPACING_CM", "Medium Large (1.27 cm)"), 720 },
-    { NC_("RID_SVXSTRARY_SPACING_CM", "Large (1.9 cm)"),        1077 },
-    { NC_("RID_SVXSTRARY_SPACING_CM", "Extra Large (2.54 cm)"), 1440 },
-    { nullptr, 0 }
+    { NC_("RID_SVXSTRARY_SPACING_CM", "None"),                0,   0 },
+    // Extra Small (0.16 cm)
+    { NC_("RID_SVXSTRARY_SPACING_CM", "Extra Small (%1)"),   91,  16 },
+    // Small (0.32 cm)
+    { NC_("RID_SVXSTRARY_SPACING_CM", "Small (%1)"),        181,  32 },
+    // Small Medium (0.64 cm)
+    { NC_("RID_SVXSTRARY_SPACING_CM", "Small Medium (%1)"), 363,  64 },
+    // Medium (0.95 cm)
+    { NC_("RID_SVXSTRARY_SPACING_CM", "Medium (%1)"),       539,  95 },
+    // Medium Large (1.27 cm)
+    { NC_("RID_SVXSTRARY_SPACING_CM", "Medium Large (%1)"), 720, 127 },
+    // Large (1.9 cm)
+    { NC_("RID_SVXSTRARY_SPACING_CM", "Large (%1)"),       1077, 190 },
+    // Extra Large (2.54 cm)
+    { NC_("RID_SVXSTRARY_SPACING_CM", "Extra Large (%1)"), 1440, 254 },
+    { nullptr, 0, 0 }
 };
 
 // To translators: this is a listbox labelled by "Margins:", inch units
-const std::pair<const char*, int> RID_SVXSTRARY_MARGINS_INCH[] =
+const measurement RID_SVXSTRARY_MARGINS_INCH[] =
 {
-    { NC_("RID_SVXSTRARY_MARGINS_INCH", "None"),                    0 },
-    { NC_("RID_SVXSTRARY_MARGINS_INCH", "Extra Small (1/16″)"),   91 },
-    { NC_("RID_SVXSTRARY_MARGINS_INCH", "Small (1/8″)"),         181 },
-    { NC_("RID_SVXSTRARY_MARGINS_INCH", "Small Medium (1/4″)"),  363 },
-    { NC_("RID_SVXSTRARY_MARGINS_INCH", "Medium (3/8″)"),        539 },
-    { NC_("RID_SVXSTRARY_MARGINS_INCH", "Medium Large (1/2″)"),  720 },
-    { NC_("RID_SVXSTRARY_MARGINS_INCH", "Large (3/4″)"),        1077 },
-    { NC_("RID_SVXSTRARY_MARGINS_INCH", "Extra Large (1″)"),    1440 },
-    { nullptr, 0 }
+    { NC_("RID_SVXSTRARY_MARGINS_INCH", "None"),                   0, 0 },
+    { NC_("RID_SVXSTRARY_MARGINS_INCH", "Extra Small (1/16″)"),   91, 0 },
+    { NC_("RID_SVXSTRARY_MARGINS_INCH", "Small (1/8″)"),         181, 0 },
+    { NC_("RID_SVXSTRARY_MARGINS_INCH", "Small Medium (1/4″)"),  363, 0 },
+    { NC_("RID_SVXSTRARY_MARGINS_INCH", "Medium (3/8″)"),        539, 0 },
+    { NC_("RID_SVXSTRARY_MARGINS_INCH", "Medium Large (1/2″)"),  720, 0 },
+    { NC_("RID_SVXSTRARY_MARGINS_INCH", "Large (3/4″)"),        1077, 0 },
+    { NC_("RID_SVXSTRARY_MARGINS_INCH", "Extra Large (1″)"),    1440, 0 },
+    { nullptr, 0, 0 }
 };
 
 // To translators: this is a listbox labelled by "Margins:", cm units
-const std::pair<const char*, int> RID_SVXSTRARY_MARGINS_CM[] =
+const measurement RID_SVXSTRARY_MARGINS_CM[] =
 {
-    { NC_("RID_SVXSTRARY_MARGINS_CM", "None"),                    0 },
-    { NC_("RID_SVXSTRARY_MARGINS_CM", "Extra Small (0.16 cm)"),   91 },
-    { NC_("RID_SVXSTRARY_MARGINS_CM", "Small (0.32 cm)"),        181 },
-    { NC_("RID_SVXSTRARY_MARGINS_CM", "Small Medium (0.64 cm)"), 363 },
-    { NC_("RID_SVXSTRARY_MARGINS_CM", "Medium (0.95 cm)"),       539 },
-    { NC_("RID_SVXSTRARY_MARGINS_CM", "Medium Large (1.27 cm)"), 720 },
-    { NC_("RID_SVXSTRARY_MARGINS_CM", "Large (1.9 cm)"),        1077 },
-    { NC_("RID_SVXSTRARY_MARGINS_CM", "Extra Large (2.54 cm)"), 1440 },
-    { nullptr, 0 }
+    { NC_("RID_SVXSTRARY_MARGINS_CM", "None"),                0,   0 },
+    // Extra Small (0.16 cm)
+    { NC_("RID_SVXSTRARY_MARGINS_CM", "Extra Small (%1)"),   91,  16 },
+    // Small (0.32 cm)
+    { NC_("RID_SVXSTRARY_MARGINS_CM", "Small (%1)"),        181,  32 },
+    // Small Medium (0.64 cm)
+    { NC_("RID_SVXSTRARY_MARGINS_CM", "Small Medium (%1)"), 363,  64 },
+    // Medium (0.95 cm)
+    { NC_("RID_SVXSTRARY_MARGINS_CM", "Medium (%1)"),       539,  95 },
+    // Medium Large (1.27 cm)
+    { NC_("RID_SVXSTRARY_MARGINS_CM", "Medium Large (%1)"), 720, 127 },
+    // Large (1.9 cm)
+    { NC_("RID_SVXSTRARY_MARGINS_CM", "Large (%1)"),       1077, 190 },
+    // Extra Large (2.54 cm)
+    { NC_("RID_SVXSTRARY_MARGINS_CM", "Extra Large (%1)"), 1440, 254 },
+    { nullptr, 0, 0 }
 };
 
 #endif
diff --git a/svx/source/dialog/spacinglistbox.cxx b/svx/source/dialog/spacinglistbox.cxx
index 85ebc624931c..90654618f994 100644
--- a/svx/source/dialog/spacinglistbox.cxx
+++ b/svx/source/dialog/spacinglistbox.cxx
@@ -19,7 +19,11 @@
 #include <svx/strings.hrc>
 #include <svx/dialmgr.hxx>
 #include <svx/spacinglistbox.hxx>
+#include <unotools/localedatawrapper.hxx>
 #include <vcl/builderfactory.hxx>
+#include <vcl/settings.hxx>
+#include <vcl/svapp.hxx>
+#include <vcl/weld.hxx>
 #include <spacing.hrc>
 
 SpacingListBox::SpacingListBox(vcl::Window* pParent)
@@ -34,29 +38,38 @@ void SpacingListBox::Init(SpacingType eType)
         nSelected = 0;
     Clear();
 
-    const std::pair<const char*, int>* pResources;
+    const LocaleDataWrapper& rLocaleData = Application::GetSettings().GetLocaleDataWrapper();
+    OUString sSuffix;
+
+    const measurement* pResources;
     switch (eType)
     {
         case SpacingType::SPACING_INCH:
             pResources = RID_SVXSTRARY_SPACING_INCH;
+            sSuffix = weld::MetricSpinButton::MetricToString(FieldUnit::INCH);
             break;
         case SpacingType::MARGINS_INCH:
             pResources = RID_SVXSTRARY_MARGINS_INCH;
+            sSuffix = weld::MetricSpinButton::MetricToString(FieldUnit::INCH);
             break;
         case SpacingType::SPACING_CM:
             pResources = RID_SVXSTRARY_SPACING_CM;
+            sSuffix = " " + weld::MetricSpinButton::MetricToString(FieldUnit::CM);
             break;
         default:
         case SpacingType::MARGINS_CM:
+            sSuffix = " " + weld::MetricSpinButton::MetricToString(FieldUnit::CM);
             pResources = RID_SVXSTRARY_MARGINS_CM;
             break;
     }
 
-    while (pResources->first)
+    while (pResources->key)
     {
-        OUString aStr = SvxResId(pResources->first);
-        sal_uInt16 nData = pResources->second;
+        OUString sMeasurement = rLocaleData.getNum(pResources->human, 2, true, false) + sSuffix;
+        OUString aStr = SvxResId(pResources->key).replaceFirst("%1", sMeasurement);
+        sal_uInt16 nData = pResources->twips;
         sal_Int32 nPos = InsertEntry( aStr );
+
         SetEntryData( nPos, reinterpret_cast<void*>(static_cast<sal_uLong>(nData)) );
         ++pResources;
     }
diff --git a/sw/inc/pageformatpanel.hrc b/sw/inc/pageformatpanel.hrc
index ddc82ed620d3..70a8bbbc1930 100644
--- a/sw/inc/pageformatpanel.hrc
+++ b/sw/inc/pageformatpanel.hrc
@@ -16,29 +16,35 @@ namespace sw
 {
 
 // To translators: this is a listbox labelled by "Margins:", inch units
-const char* RID_PAGEFORMATPANEL_MARGINS_INCH[] =
+const std::pair<const char*, int> RID_PAGEFORMATPANEL_MARGINS_INCH[] =
 {
-    NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "None"),
-    NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "Narrow"),
-    NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "Moderate"),
-    NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "Normal (0.75″)"),
-    NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "Normal (1″)"),
-    NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "Normal (1.25″)"),
-    NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "Wide"),
-    NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "Mirrored")
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "None"), 0 },
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "Narrow"), 0 },
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "Moderate"), 0 },
+    // Normal (0.75")
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "Normal (%1)"), 75 },
+    // Normal (1")
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "Normal (%1)"), 100 },
+    // Normal (1.25")
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "Normal (%1)"), 125 },
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "Wide"), 0 },
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_INCH", "Mirrored"), 0 }
 };
 
 // To translators: this is a listbox labelled by "Margins:", cm units
-const char* RID_PAGEFORMATPANEL_MARGINS_CM[] =
+const std::pair<const char*, int> RID_PAGEFORMATPANEL_MARGINS_CM[] =
 {
-    NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "None"),
-    NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "Narrow"),
-    NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "Moderate"),
-    NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "Normal (1.9 cm)"),
-    NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "Normal (2.54 cm)"),
-    NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "Normal (3.18 cm)"),
-    NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "Wide"),
-    NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "Mirrored")
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "None"), 0 },
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "Narrow"), 0 },
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "Moderate"), 0 },
+    // Normal (1.9 cm)
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "Normal (%1)"), 190 },
+    // Normal (2.54 cm)
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "Normal (%1)"), 254 },
+    // Normal (3.18 cm)
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "Normal (%1)"), 318 },
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "Wide"), 0 },
+    { NC_("RID_PAGEFORMATPANEL_MARGINS_CM", "Mirrored"), 0 }
 };
 
 }
diff --git a/sw/source/uibase/sidebar/PageFormatPanel.cxx b/sw/source/uibase/sidebar/PageFormatPanel.cxx
index ecc8ff01b5c6..ad2fbc21c26a 100644
--- a/sw/source/uibase/sidebar/PageFormatPanel.cxx
+++ b/sw/source/uibase/sidebar/PageFormatPanel.cxx
@@ -40,6 +40,9 @@
 #include <uitool.hxx>
 #include <svtools/unitconv.hxx>
 #include <svtools/optionsdrawinglayer.hxx>
+#include <unotools/localedatawrapper.hxx>
+#include <vcl/settings.hxx>
+#include <vcl/svapp.hxx>
 
 #include <com/sun/star/lang/IllegalArgumentException.hpp>
 
@@ -62,15 +65,25 @@ void PageFormatPanel::SetMarginFieldUnit()
 {
     auto nSelected = mpMarginSelectBox->GetSelectedEntryPos();
     mpMarginSelectBox->Clear();
+
+    const LocaleDataWrapper& rLocaleData = Application::GetSettings().GetLocaleDataWrapper();
     if (IsInch(meFUnit))
     {
+        OUString sSuffix = weld::MetricSpinButton::MetricToString(FieldUnit::INCH);
         for (size_t i = 0; i < SAL_N_ELEMENTS(RID_PAGEFORMATPANEL_MARGINS_INCH); ++i)
-            mpMarginSelectBox->InsertEntry(SwResId(RID_PAGEFORMATPANEL_MARGINS_INCH[i]));
+        {
+            OUString sStr = rLocaleData.getNum(RID_PAGEFORMATPANEL_MARGINS_INCH[i].second, 2, true, false) + sSuffix;
+            mpMarginSelectBox->InsertEntry(SwResId(RID_PAGEFORMATPANEL_MARGINS_INCH[i].first).replaceFirst("%1", sStr));
+        }
     }
     else
     {
+        OUString sSuffix = weld::MetricSpinButton::MetricToString(FieldUnit::CM);
         for (size_t i = 0; i < SAL_N_ELEMENTS(RID_PAGEFORMATPANEL_MARGINS_CM); ++i)
-            mpMarginSelectBox->InsertEntry(SwResId(RID_PAGEFORMATPANEL_MARGINS_CM[i]));
+        {
+            OUString sStr = rLocaleData.getNum(RID_PAGEFORMATPANEL_MARGINS_CM[i].second, 2, true, false) + " " + sSuffix;
+            mpMarginSelectBox->InsertEntry(SwResId(RID_PAGEFORMATPANEL_MARGINS_CM[i].first).replaceFirst("%1", sStr));
+        }
     }
     mpMarginSelectBox->SelectEntryPos(nSelected);
 }


More information about the Libreoffice-commits mailing list