From 710017981194c33ac1ba1acc439f92b87869f532 Mon Sep 17 00:00:00 2001 From: Justin Luth Date: Mon, 2 Jan 2023 15:09:03 -0500 Subject: tdf#56258: allow i18npool to define SvxAdjust for outline Deciding whether the numbering should be Left, Right, or Center is a rather important setting. Specifically for Roman numerals (which grow very wide as they increment to 7 and 8) the numbering styles set these to right aligned. This really helps for keeping the text nicely aligned. The numbering styles are built-in LO defaults, but locale files can define numbering and outline choices. This patch add the setting for "adjust" on the outline levels. For en_US, it makes sense to right-align roman numeral levels. [The only other highly likely candidate for this that I could find was old Hungarian (SZEKELY_ROVAS), but it doesn't seem to be used in any locale definitions.] I only changed en_US for now, but of course many other locales are also using NumType="3" and NumType="4". This only applies to the toolbar/sidebar SVX code path. The Bullets and Numbering dialog does not currently modify any spacing, so I didn't apply the adjustment either. It also doesn't make sense to do this on single numbering changes (aka ContinuousNumberingLevels or LC_NumberingLevel) because we don't know or control the first line indent there either. But at least for toolbar Outlines, we do change every level, and so can set a (somewhat) appropriate spacing. [Setting SvxAdjust without adjusting the spacing is pointless. Don't make any changes at all if the spacing ends up causing problems.] The Numbering IVX/ivx styles set the firstLineIndent to -174, so I did the same here. This is the scariest part of this change. AFAICS SvxAdjust::Left is a non-locale aDefNumStyle default, so hardcoding that for undefined LC_OutlineNumberingLevel shouldn't be too scary. Change-Id: I52deefe88aa55c55c9531b651411f64accb86f7f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144978 Tested-by: Jenkins Reviewed-by: Justin Luth --- svx/source/sidebar/nbdtmg.cxx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'svx') diff --git a/svx/source/sidebar/nbdtmg.cxx b/svx/source/sidebar/nbdtmg.cxx index a4def326c80b..3643976d2866 100644 --- a/svx/source/sidebar/nbdtmg.cxx +++ b/svx/source/sidebar/nbdtmg.cxx @@ -103,6 +103,12 @@ NumSettings_Impl* lcl_CreateNumberingSettingsPtr(const Sequence& rValue.Value >>= pNew->sPrefix; else if(rValue.Name == "Suffix") rValue.Value >>= pNew->sSuffix; + else if (rValue.Name == "Adjust") + { + sal_Int16 nTmp; + if (rValue.Value >>= nTmp) + pNew->eNumAlign = static_cast(nTmp); + } else if(rValue.Name == "ParentNumbering") rValue.Value >>= pNew->nParentNumbering; else if(rValue.Name == "BulletChar") @@ -600,10 +606,13 @@ void OutlineTypeMgr::Init() NumSettings_Impl* pNew = lcl_CreateNumberingSettingsPtr(aLevelProps); const SvxNumberFormat& aNumFmt( aDefNumRule.GetLevel( nLevel) ); + assert(aNumFmt.GetNumAdjust() == SvxAdjust::Left && "new entry was previously defined by default, now defaults to Left"); pNew->eLabelFollowedBy = aNumFmt.GetLabelFollowedBy(); pNew->nTabValue = aNumFmt.GetListtabPos(); - pNew->eNumAlign = aNumFmt.GetNumAdjust(); - pNew->nNumAlignAt = aNumFmt.GetFirstLineIndent(); + if (pNew->eNumAlign == SvxAdjust::Right) + pNew->nNumAlignAt = -174; // number borrowed from RES_POOLNUMRULE_NUM4 + else + pNew->nNumAlignAt = aNumFmt.GetFirstLineIndent(); pNew->nNumIndentAt = aNumFmt.GetIndentAt(); pItemArr->pNumSettingsArr->push_back(std::shared_ptr(pNew)); } -- cgit