tdf#144578: numbering: generate include upper levels for UI

In spite of used list format in ODF for UI we still need to
show prefix/suffix (already was there) and included upper
levels (done in this patch) for correct visualization of
level properties.

Moved initialization of ListLevel to later steps to avoid
overriding of generated values for prefix, suffix and
IncludeUpperLevel by some invalid values.

Change-Id: I5d132426c06021ed526d16fb09276523105aa7b9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122686
Tested-by: Jenkins
Reviewed-by: Vasily Melenchuk <vasily.melenchuk@cib.de>
This commit is contained in:
Vasily Melenchuk
2021-10-04 15:29:45 +02:00
parent 66a7f8a49d
commit e6bf21d2d5
4 changed files with 79 additions and 3 deletions
+11 -1
View File
@@ -621,7 +621,9 @@ void SvxNumberFormat::SetListFormat(std::optional<OUString> oSet)
sListFormat = oSet;
// For backward compatibility and UI we should create prefix/suffix also
// For backward compatibility and UI we should create something looking like
// a prefix, suffix and included levels also. This is not possible in general case
// since level format string is much more flexible. But for most cases is okay
sal_Int32 nFirstReplacement = sListFormat->indexOf('%');
sal_Int32 nLastReplacement = sListFormat->lastIndexOf('%') + 1;
if (nFirstReplacement > 0)
@@ -630,6 +632,14 @@ void SvxNumberFormat::SetListFormat(std::optional<OUString> oSet)
if (nLastReplacement >= 0 && nLastReplacement < sListFormat->getLength())
// Everything beyond last '%' is a suffix
sSuffix = sListFormat->copy(nLastReplacement);
sal_uInt8 nPercents = 0;
for (sal_Int32 i = 0; i < sListFormat->getLength(); i++)
{
if ((*sListFormat)[i] == '%')
nPercents++;
}
nInclUpperLevels = nPercents/2;
}
OUString SvxNumberFormat::GetListFormat(bool bIncludePrefixSuffix /*= true*/) const
Binary file not shown.
+66
View File
@@ -0,0 +1,66 @@
# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
from uitest.framework import UITestCase
from uitest.uihelper.common import get_state_as_dict, get_url_for_data_file
import time
class tdf144578(UITestCase):
def test_tdf144578(self):
with self.ui_test.load_file(get_url_for_data_file("tdf144578.odt")) as writer_doc:
with self.ui_test.execute_dialog_through_command(".uno:ChapterNumberingDialog") as xDialog:
# Select level "1"
xLevelsTree = xDialog.getChild("level")
xLevel = xLevelsTree.getChild("0")
xLevel.executeAction("SELECT", tuple())
# Check value for show upper levels
xSubLevels = xDialog.getChild("sublevelsnf")
self.assertEqual(get_state_as_dict(xSubLevels)["Text"], "1")
# Select level "2"
xLevel = xLevelsTree.getChild("1")
xLevel.executeAction("SELECT", tuple())
# Check value for show upper levels
xSubLevels = xDialog.getChild("sublevelsnf")
self.assertEqual(get_state_as_dict(xSubLevels)["Text"], "2")
# Select level "3"
xLevel = xLevelsTree.getChild("2")
xLevel.executeAction("SELECT", tuple())
# Check value for show upper levels
xSubLevels = xDialog.getChild("sublevelsnf")
self.assertEqual(get_state_as_dict(xSubLevels)["Text"], "3")
# Select level "3"
xLevel = xLevelsTree.getChild("3")
xLevel.executeAction("SELECT", tuple())
# Check value for show upper levels
xSubLevels = xDialog.getChild("sublevelsnf")
self.assertEqual(get_state_as_dict(xSubLevels)["Text"], "1")
# And also verify label strings in outlines
Paragraphs = []
ParagraphEnum = writer_doc.Text.createEnumeration()
while ParagraphEnum.hasMoreElements():
Para = ParagraphEnum.nextElement()
Paragraphs.append(Para)
self.assertEqual(Paragraphs[0].getPropertyValue("ListLabelString"), "I.")
self.assertEqual(Paragraphs[2].getPropertyValue("ListLabelString"), "II.")
self.assertEqual(Paragraphs[4].getPropertyValue("ListLabelString"), "II.A.")
self.assertEqual(Paragraphs[6].getPropertyValue("ListLabelString"), "II.B.")
self.assertEqual(Paragraphs[8].getPropertyValue("ListLabelString"), "III.")
self.assertEqual(Paragraphs[10].getPropertyValue("ListLabelString"), "III.A.")
self.assertEqual(Paragraphs[11].getPropertyValue("ListLabelString"), "III.A.1.")
self.assertEqual(Paragraphs[13].getPropertyValue("ListLabelString"), "III.A.2.")
self.assertEqual(Paragraphs[15].getPropertyValue("ListLabelString"), "III.B.")
self.assertEqual(Paragraphs[17].getPropertyValue("ListLabelString"), "III.C.")
self.assertEqual(Paragraphs[19].getPropertyValue("ListLabelString"), "III.C.1.")
self.assertEqual(Paragraphs[21].getPropertyValue("ListLabelString"), "III.C.2.")
# vim: set shiftwidth=4 softtabstop=4 expandtab:
+2 -2
View File
@@ -423,8 +423,6 @@ Sequence<beans::PropertyValue> SvxXMLListLevelStyleContext_Impl::GetProperties()
aProperties.push_back(comphelper::makePropertyValue("Suffix", sSuffix));
aProperties.push_back(comphelper::makePropertyValue("ListFormat", *sListFormat));
aProperties.push_back(comphelper::makePropertyValue("Adjust", eAdjust));
sal_Int32 nLeftMargin = nSpaceBefore + nMinLabelWidth;
@@ -522,6 +520,8 @@ Sequence<beans::PropertyValue> SvxXMLListLevelStyleContext_Impl::GetProperties()
aProperties.push_back(comphelper::makePropertyValue("BulletColor", m_nColor));
}
aProperties.push_back(comphelper::makePropertyValue("ListFormat", *sListFormat));
return comphelper::containerToSequence(aProperties);
}