diff options
Diffstat (limited to 'sw')
-rw-r--r-- | sw/inc/formatcontentcontrol.hxx | 9 | ||||
-rw-r--r-- | sw/inc/unoprnms.hxx | 1 | ||||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport17.cxx | 30 | ||||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport19.cxx | 5 | ||||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport3.cxx | 3 | ||||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx | 2 | ||||
-rw-r--r-- | sw/source/core/txtnode/attrcontentcontrol.cxx | 3 | ||||
-rw-r--r-- | sw/source/core/unocore/unocontentcontrol.cxx | 28 | ||||
-rw-r--r-- | sw/source/core/unocore/unomap1.cxx | 1 | ||||
-rw-r--r-- | sw/source/filter/ww8/docxattributeoutput.cxx | 6 |
10 files changed, 59 insertions, 29 deletions
diff --git a/sw/inc/formatcontentcontrol.hxx b/sw/inc/formatcontentcontrol.hxx index 190d0bd540fe..cffe326d0703 100644 --- a/sw/inc/formatcontentcontrol.hxx +++ b/sw/inc/formatcontentcontrol.hxx @@ -173,7 +173,7 @@ class SW_DLLPUBLIC SwContentControl final : public sw::BroadcastingModify /// The appearance: just remembered. OUString m_aAppearance; - /// The alias: just remembered. + /// The alias. OUString m_aAlias; /// The tag: just remembered. @@ -188,6 +188,9 @@ class SW_DLLPUBLIC SwContentControl final : public sw::BroadcastingModify /// The control and content locks: mostly just remembered. OUString m_aLock; + /// The multiline property: just remembered. + OUString m_aMultiLine; + /// Stores a list item index, in case the doc model is not yet updated. // i.e. temporarily store the selected item until the text is inserted by GotoContentControl. std::optional<size_t> m_oSelectedListItem; @@ -389,6 +392,10 @@ public: // At the implementation level, define whether the user can directly modify the contents. bool GetReadWrite() const { return m_bReadWrite; } + void SetMultiLine(const OUString& rMultiline) { m_aMultiLine = rMultiline; } + + const OUString& GetMultiLine() const { return m_aMultiLine; } + SwContentControlType GetType() const; }; diff --git a/sw/inc/unoprnms.hxx b/sw/inc/unoprnms.hxx index 6553153b459d..630028f0e7a6 100644 --- a/sw/inc/unoprnms.hxx +++ b/sw/inc/unoprnms.hxx @@ -941,6 +941,7 @@ inline constexpr OUStringLiteral UNO_NAME_TAG = u"Tag"; inline constexpr OUStringLiteral UNO_NAME_ID = u"Id"; inline constexpr OUStringLiteral UNO_NAME_TAB_INDEX = u"TabIndex"; inline constexpr OUStringLiteral UNO_NAME_LOCK = u"Lock"; +inline constexpr OUStringLiteral UNO_NAME_MULTILINE = u"MultiLine"; inline constexpr OUStringLiteral UNO_NAME_DATE_STRING = u"DateString"; inline constexpr OUStringLiteral UNO_NAME_PARA_ID = u"ParaId"; inline constexpr OUStringLiteral UNO_NAME_PARA_ID_PARENT = u"ParaIdParent"; diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport17.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport17.cxx index 90c3c750c53c..6d3d0452740a 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport17.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport17.cxx @@ -683,28 +683,12 @@ DECLARE_OOXMLEXPORT_TEST(testTdf123642_BookmarkAtDocEnd, "tdf123642.docx") DECLARE_OOXMLEXPORT_TEST(testTdf148361, "tdf148361.docx") { - if (isExported()) - { - // Block SDT is turned into run SDT on export, so the next import will have this as content - // control, not as a field. - OUString aActual = getParagraph(1)->getString(); - // This was "itadmin". - CPPUNIT_ASSERT_EQUAL(OUString("itadmin"), aActual); - } - else - { - // Refresh fields and ensure cross-reference to numbered para is okay - uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY); - uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields()); - - uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration()); - CPPUNIT_ASSERT(xFields->hasMoreElements()); - - uno::Reference<text::XTextField> xTextField1(xFields->nextElement(), uno::UNO_QUERY); - CPPUNIT_ASSERT_EQUAL(OUString("itadmin"), xTextField1->getPresentation(false)); - } + // Plain text Block SDT is imported as content control + OUString aActual = getParagraph(1)->getString(); + // This was "itadmin". + CPPUNIT_ASSERT_EQUAL(OUString("itadmin"), aActual); - OUString aActual = getParagraph(2)->getString(); + aActual = getParagraph(2)->getString(); // This was "itadmin". CPPUNIT_ASSERT_EQUAL(OUString("[Type text]"), aActual); } @@ -936,9 +920,7 @@ DECLARE_OOXMLEXPORT_TEST(testTdf81507, "tdf81507.docx") // Ensure that we have <w:text/> assertXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:sdt/w:sdtPr/w:text"); - - // Ensure that we have no <w:text/> (not quite correct case, but to ensure import/export are okay) - assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/w:sdt/w:sdtPr/w:text", 0); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[4]/w:sdt/w:sdtPr/w:text"); } DECLARE_OOXMLEXPORT_TEST(testTdf139948, "tdf139948.docx") diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx index 275891d4f58b..fbd3bdb4aaaf 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx @@ -1108,7 +1108,10 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf157136) { // 1st paragraph - block content control auto xRun = getRun(getParagraph(1), 1); - CPPUNIT_ASSERT_EQUAL(OUString("Click or tap here to enter text.\r"), xRun->getString()); + auto xContentControl + = getProperty<css::uno::Reference<css::text::XTextRange>>(xRun, "ContentControl"); + CPPUNIT_ASSERT_EQUAL(OUString("Click or tap here to enter text."), + xContentControl->getString()); // Without the fix in place, this would fail with // - Expected: Placeholder Text // - Actual : diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx index ae1aa909d5fe..24b2ee333e49 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx @@ -1003,7 +1003,8 @@ CPPUNIT_TEST_FIXTURE(Test, testGlossaryWithEmail) // preserve the ShowingPlaceholder setting on both block SDTs. pXmlDoc = parseExport("word/document.xml"); - assertXPath(pXmlDoc,"/w:document/w:body/w:p/w:sdt/w:sdtPr/w:showingPlcHdr", 2); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:showingPlcHdr", 1); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:hyperlink/w:sdt/w:sdtPr/w:showingPlcHdr", 1); } DECLARE_OOXMLEXPORT_TEST(testFdo71785, "fdo71785.docx") diff --git a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx index c0578ad31a16..a7ffaa2ae7f5 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx @@ -636,7 +636,7 @@ CPPUNIT_TEST_FIXTURE(Test, testSdtCompanyMultipara) // Here is just a simple text node, so there should be either one or zero paragraph // (in this case sdt element is inside paragraph) assertXPath(pXmlDoc, "//w:sdtContent/w:p", 0); - assertXPath(pXmlDoc, "//w:sdtContent/w:r", 1); + assertXPath(pXmlDoc, "//w:sdtContent/w:r", 2); } DECLARE_OOXMLEXPORT_TEST(testFixedDateFields, "fixed-date-field.docx") diff --git a/sw/source/core/txtnode/attrcontentcontrol.cxx b/sw/source/core/txtnode/attrcontentcontrol.cxx index bc62606f2d97..2dd007f480b3 100644 --- a/sw/source/core/txtnode/attrcontentcontrol.cxx +++ b/sw/source/core/txtnode/attrcontentcontrol.cxx @@ -220,6 +220,7 @@ SwContentControl::SwContentControl(SwFormatContentControl* pFormat) SetId(pOther->m_nId); SetTabIndex(pOther->m_nTabIndex); SetLock(pOther->m_aLock); + SetMultiLine(pOther->m_aMultiLine); } SwContentControl::~SwContentControl() {} @@ -605,6 +606,8 @@ void SwContentControl::dumpAsXml(xmlTextWriterPtr pWriter) const BAD_CAST(OString::number(m_nTabIndex).getStr())); (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("lock"), BAD_CAST(m_aLock.toUtf8().getStr())); + (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("multiline"), + BAD_CAST(m_aMultiLine.toUtf8().getStr())); if (!m_aListItems.empty()) { diff --git a/sw/source/core/unocore/unocontentcontrol.cxx b/sw/source/core/unocore/unocontentcontrol.cxx index 541fc46699b3..8492e0fc94f7 100644 --- a/sw/source/core/unocore/unocontentcontrol.cxx +++ b/sw/source/core/unocore/unocontentcontrol.cxx @@ -176,6 +176,7 @@ public: sal_Int32 m_nId; sal_uInt32 m_nTabIndex; OUString m_aLock; + OUString m_aMultiLine; Impl(SwXContentControl& rThis, SwDoc& rDoc, SwContentControl* pContentControl, css::uno::Reference<SwXText> xParentText, std::unique_ptr<const TextRangeList_t> pPortions) @@ -475,6 +476,7 @@ void SwXContentControl::AttachImpl(const uno::Reference<text::XTextRange>& xText pContentControl->SetId(m_pImpl->m_nId); pContentControl->SetTabIndex(m_pImpl->m_nTabIndex); pContentControl->SetLock(m_pImpl->m_aLock); + pContentControl->SetMultiLine(m_pImpl->m_aMultiLine); SwFormatContentControl aContentControl(pContentControl, nWhich); bool bSuccess @@ -1010,6 +1012,21 @@ void SAL_CALL SwXContentControl::setPropertyValue(const OUString& rPropertyName, } } } + else if (rPropertyName == UNO_NAME_MULTILINE) + { + OUString aValue; + if (rValue >>= aValue) + { + if (m_pImpl->m_bIsDescriptor) + { + m_pImpl->m_aMultiLine = aValue; + } + else + { + m_pImpl->m_pContentControl->SetMultiLine(aValue); + } + } + } else { throw beans::UnknownPropertyException(); @@ -1305,6 +1322,17 @@ uno::Any SAL_CALL SwXContentControl::getPropertyValue(const OUString& rPropertyN aRet <<= m_pImpl->m_pContentControl->GetLock(); } } + else if (rPropertyName == UNO_NAME_MULTILINE) + { + if (m_pImpl->m_bIsDescriptor) + { + aRet <<= m_pImpl->m_aMultiLine; + } + else + { + aRet <<= m_pImpl->m_pContentControl->GetMultiLine(); + } + } else { throw beans::UnknownPropertyException(); diff --git a/sw/source/core/unocore/unomap1.cxx b/sw/source/core/unocore/unomap1.cxx index aae854fc24e0..ba165289c177 100644 --- a/sw/source/core/unocore/unomap1.cxx +++ b/sw/source/core/unocore/unomap1.cxx @@ -1053,6 +1053,7 @@ o3tl::span<const SfxItemPropertyMapEntry> SwUnoPropertyMapProvider::GetContentCo { UNO_NAME_ID, 0, cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE, 0 }, { UNO_NAME_TAB_INDEX, 0, cppu::UnoType<sal_uInt32>::get(), PROPERTY_NONE, 0 }, { UNO_NAME_LOCK, 0, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0 }, + { UNO_NAME_MULTILINE, 0, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0 }, { UNO_NAME_DATE_STRING, 0, cppu::UnoType<OUString>::get(), PropertyAttribute::READONLY, 0 }, }; diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 9c67855acbdd..4a4d440abc44 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -2739,7 +2739,11 @@ void DocxAttributeOutput::WriteContentControlStart() m_pSerializer->endElementNS(XML_w, XML_date); } - if (m_pContentControl->GetPlainText()) + if (!m_pContentControl->GetMultiLine().isEmpty()) + { + m_pSerializer->singleElementNS(XML_w, XML_text, FSNS(XML_w, XML_multiLine), m_pContentControl->GetMultiLine()); + } + else if (m_pContentControl->GetPlainText()) { m_pSerializer->singleElementNS(XML_w, XML_text); } |