diff options
Diffstat (limited to 'sw')
-rw-r--r-- | sw/qa/extras/mailmerge/data/db_pagecounttest.ods | bin | 0 -> 9154 bytes | |||
-rw-r--r-- | sw/qa/extras/mailmerge/data/pagecounttest.ott | bin | 0 -> 12132 bytes | |||
-rw-r--r-- | sw/qa/extras/mailmerge/mailmerge.cxx | 71 | ||||
-rw-r--r-- | sw/source/uibase/dbui/dbmgr.cxx | 5 |
4 files changed, 74 insertions, 2 deletions
diff --git a/sw/qa/extras/mailmerge/data/db_pagecounttest.ods b/sw/qa/extras/mailmerge/data/db_pagecounttest.ods Binary files differnew file mode 100644 index 000000000000..4b9f90ec9098 --- /dev/null +++ b/sw/qa/extras/mailmerge/data/db_pagecounttest.ods diff --git a/sw/qa/extras/mailmerge/data/pagecounttest.ott b/sw/qa/extras/mailmerge/data/pagecounttest.ott Binary files differnew file mode 100644 index 000000000000..d7f63419c2b7 --- /dev/null +++ b/sw/qa/extras/mailmerge/data/pagecounttest.ott diff --git a/sw/qa/extras/mailmerge/mailmerge.cxx b/sw/qa/extras/mailmerge/mailmerge.cxx index 59cd2b512875..dae7008f4f12 100644 --- a/sw/qa/extras/mailmerge/mailmerge.cxx +++ b/sw/qa/extras/mailmerge/mailmerge.cxx @@ -1129,5 +1129,76 @@ DECLARE_SHELL_MAILMERGE_TEST(testTdf81750_shell, "tdf81750.odt", "10-testing-add CPPUNIT_ASSERT_EQUAL( aExpected, parseDump("/root/page[9]/body/txt[2]", "")); } + +DECLARE_FILE_MAILMERGE_TEST(testTdf123057_file, "pagecounttest.ott", "db_pagecounttest.ods", "Sheet1") +{ + executeMailMerge(true); + + for (int doc = 0; doc < 4; ++doc) + { + loadMailMergeDocument(doc); + + // get document properties + uno::Reference<text::XTextSectionsSupplier> xSectionsSupplier(mxComponent, uno::UNO_QUERY_THROW); + uno::Reference<container::XIndexAccess> xSections(xSectionsSupplier->getTextSections(), uno::UNO_QUERY_THROW); + + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xSections->getCount()); + uno::Reference<beans::XPropertySet> xSect0(xSections->getByIndex(0), uno::UNO_QUERY_THROW); + uno::Reference<beans::XPropertySet> xSect1(xSections->getByIndex(1), uno::UNO_QUERY_THROW); + + OUString sFieldPageCount; + uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields()); + uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration()); + + if (xFields.is()) + { + while (xFields->hasMoreElements()) + { + uno::Any aField = xFields->nextElement(); + uno::Reference<lang::XServiceInfo> xServiceInfo(aField, uno::UNO_QUERY); + if (xServiceInfo->supportsService("com.sun.star.text.textfield.PageCount")) + { + uno::Reference<text::XTextContent> xField(aField, uno::UNO_QUERY); + sFieldPageCount = xField->getAnchor()->getString(); + } + } + } + + switch (doc) + { + case 0: + // both sections visible, page num is 2 + CPPUNIT_ASSERT_EQUAL(2, getPages()); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xSect0, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xSect1, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(OUString("2"), sFieldPageCount); + break; + case 1: + // second section hidden, page num is 1 + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xSect0, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xSect1, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(OUString("1"), sFieldPageCount); + break; + case 2: + // first section hidden, page num is 1 + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xSect0, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xSect1, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(OUString("1"), sFieldPageCount); + break; + case 3: + // both sections hidden, page num is 1 + CPPUNIT_ASSERT_EQUAL(1, getPages()); + CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xSect0, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xSect1, "IsCurrentlyVisible")); + CPPUNIT_ASSERT_EQUAL(OUString("1"), sFieldPageCount); + break; + } + } +} + + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/dbui/dbmgr.cxx b/sw/source/uibase/dbui/dbmgr.cxx index fc68894c539d..d5e5790445b1 100644 --- a/sw/source/uibase/dbui/dbmgr.cxx +++ b/sw/source/uibase/dbui/dbmgr.cxx @@ -1497,6 +1497,9 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell, // prepare working copy and target to append pWorkDoc->RemoveInvisibleContent(); + // remove of invisible content has influence on page count and so on fields for page count, + // therefore layout has to be updated before fields are converted to text + pWorkShell->CalcLayout(); pWorkShell->ConvertFieldsToText(); pWorkShell->SetNumberingRestart(); if( bSynchronizedDoc ) @@ -1512,8 +1515,6 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell, ++targetDocPageCount; // Docs always start on odd pages (so offset must be even). SwNodeIndex appendedDocStart = pTargetDoc->AppendDoc( *pWorkDoc, nStartingPageNo, !bWorkDocInitialized, targetDocPageCount, nDocNo); - // ensure layout is up to date in order to get correct page count - pWorkShell->CalcLayout(); targetDocPageCount += pWorkShell->GetPageCnt(); if ( (nMaxDumpDocs < 0) || (nDocNo <= nMaxDumpDocs) ) |