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@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/svx/inc/spacing.hrc b/svx/inc/spacing.hrc
index 82f107f..b8ca266 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)
// To translators: this is a listbox labelled by "Spacing:", inch units
const std::pair<const char*, int> RID_SVXSTRARY_SPACING_INCH[] =
struct measurement
{
{ 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 }
const char* key;
int twips;
int human;
};
// To translators: this is a listbox labelled by "Spacing:", inch units
const measurement RID_SVXSTRARY_SPACING_INCH[] =
{
{ 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 85ebc62..9065461 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 ddc82ed..70a8bbb 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 ecc8ff0..ad2fbc2 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);
}