diff --git a/editeng/source/items/numitem.cxx b/editeng/source/items/numitem.cxx index 7348eb16df4d..ca454d92f894 100644 --- a/editeng/source/items/numitem.cxx +++ b/editeng/source/items/numitem.cxx @@ -621,7 +621,9 @@ void SvxNumberFormat::SetListFormat(std::optional 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 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 diff --git a/sw/qa/uitest/data/tdf144578.odt b/sw/qa/uitest/data/tdf144578.odt new file mode 100644 index 000000000000..d8f0f0f830ee Binary files /dev/null and b/sw/qa/uitest/data/tdf144578.odt differ diff --git a/sw/qa/uitest/writer_tests7/tdf144578.py b/sw/qa/uitest/writer_tests7/tdf144578.py new file mode 100644 index 000000000000..259b26ed8298 --- /dev/null +++ b/sw/qa/uitest/writer_tests7/tdf144578.py @@ -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: diff --git a/xmloff/source/style/xmlnumi.cxx b/xmloff/source/style/xmlnumi.cxx index 335bbfac928f..8f40530a2a53 100644 --- a/xmloff/source/style/xmlnumi.cxx +++ b/xmloff/source/style/xmlnumi.cxx @@ -423,8 +423,6 @@ Sequence 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 SvxXMLListLevelStyleContext_Impl::GetProperties() aProperties.push_back(comphelper::makePropertyValue("BulletColor", m_nColor)); } + aProperties.push_back(comphelper::makePropertyValue("ListFormat", *sListFormat)); + return comphelper::containerToSequence(aProperties); }