sw content controls: preserve tag
This is similar to <w15:color> to preserve <w:tag>. Resolves <https://gerrit.libreoffice.org/c/core/+/137399/2#message-a5ba9f1e0dc9e586034758ee7c0a94e1533e8922>. Change-Id: I4fdab44aaf13ca812502ae79f38f32ec9468db11 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140981 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
This commit is contained in:
parent
1490923bea
commit
5262aab9d2
15 changed files with 89 additions and 0 deletions
|
@ -105,6 +105,12 @@ service ContentControl
|
|||
@since LibreOffice 7.5
|
||||
*/
|
||||
[optional, property] string Alias;
|
||||
|
||||
/** The tag: just remembered.
|
||||
|
||||
@since LibreOffice 7.5
|
||||
*/
|
||||
[optional, property] string Tag;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -169,6 +169,9 @@ class SW_DLLPUBLIC SwContentControl : public sw::BroadcastingModify
|
|||
/// The alias: just remembered.
|
||||
OUString m_aAlias;
|
||||
|
||||
/// The tag: just remembered.
|
||||
OUString m_aTag;
|
||||
|
||||
/// Stores a list item index, in case the doc model is not yet updated.
|
||||
std::optional<size_t> m_oSelectedListItem;
|
||||
|
||||
|
@ -329,6 +332,10 @@ public:
|
|||
|
||||
const OUString& GetAlias() const { return m_aAlias; }
|
||||
|
||||
void SetTag(const OUString& rTag) { m_aTag = rTag; }
|
||||
|
||||
const OUString& GetTag() const { return m_aTag; }
|
||||
|
||||
void SetReadWrite(bool bReadWrite) { m_bReadWrite = bReadWrite; }
|
||||
|
||||
bool GetReadWrite() const { return m_bReadWrite; }
|
||||
|
|
|
@ -891,6 +891,7 @@
|
|||
#define UNO_NAME_DATA_BINDING_STORE_ITEM_ID "DataBindingStoreItemID"
|
||||
#define UNO_NAME_COLOR "Color"
|
||||
#define UNO_NAME_ALIAS "Alias"
|
||||
#define UNO_NAME_TAG "Tag"
|
||||
#endif
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
|
|
|
@ -625,6 +625,7 @@ CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testContentControlDate)
|
|||
"DataBindingStoreItemID", uno::Any(OUString("{241A8A02-7FFD-488D-8827-63FBE74E8BC9}")));
|
||||
xContentControlProps->setPropertyValue("Color", uno::Any(OUString("008000")));
|
||||
xContentControlProps->setPropertyValue("Alias", uno::Any(OUString("myalias")));
|
||||
xContentControlProps->setPropertyValue("Tag", uno::Any(OUString("mytag")));
|
||||
xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
|
||||
|
||||
// Then make sure that the specified properties are set:
|
||||
|
@ -649,6 +650,7 @@ CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testContentControlDate)
|
|||
pContentControl->GetDataBindingStoreItemID());
|
||||
CPPUNIT_ASSERT_EQUAL(OUString("008000"), pContentControl->GetColor());
|
||||
CPPUNIT_ASSERT_EQUAL(OUString("myalias"), pContentControl->GetAlias());
|
||||
CPPUNIT_ASSERT_EQUAL(OUString("mytag"), pContentControl->GetTag());
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testListIdState)
|
||||
|
|
|
@ -427,6 +427,7 @@ CPPUNIT_TEST_FIXTURE(Test, testDateContentControlExport)
|
|||
xContentControlProps->setPropertyValue("DataBindingStoreItemID", uno::Any(OUString("{241A8A02-7FFD-488D-8827-63FBE74E8BC9}")));
|
||||
xContentControlProps->setPropertyValue("Color", uno::Any(OUString("008000")));
|
||||
xContentControlProps->setPropertyValue("Alias", uno::Any(OUString("myalias")));
|
||||
xContentControlProps->setPropertyValue("Tag", uno::Any(OUString("mytag")));
|
||||
xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
|
||||
|
||||
// When exporting to DOCX:
|
||||
|
@ -449,6 +450,7 @@ CPPUNIT_TEST_FIXTURE(Test, testDateContentControlExport)
|
|||
assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:dataBinding", "storeItemID", "{241A8A02-7FFD-488D-8827-63FBE74E8BC9}");
|
||||
assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w15:color", "val", "008000");
|
||||
assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:alias", "val", "myalias");
|
||||
assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:tag", "val", "mytag");
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(Test, testNegativePageBorder)
|
||||
|
|
|
@ -410,6 +410,7 @@ void SwContentControl::dumpAsXml(xmlTextWriterPtr pWriter) const
|
|||
BAD_CAST(m_aColor.toUtf8().getStr()));
|
||||
(void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("alias"),
|
||||
BAD_CAST(m_aAlias.toUtf8().getStr()));
|
||||
(void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("tag"), BAD_CAST(m_aTag.toUtf8().getStr()));
|
||||
|
||||
if (!m_aListItems.empty())
|
||||
{
|
||||
|
|
|
@ -175,6 +175,7 @@ public:
|
|||
OUString m_aDataBindingStoreItemID;
|
||||
OUString m_aColor;
|
||||
OUString m_aAlias;
|
||||
OUString m_aTag;
|
||||
|
||||
Impl(SwXContentControl& rThis, SwDoc& rDoc, SwContentControl* pContentControl,
|
||||
uno::Reference<text::XText> xParentText, std::unique_ptr<const TextRangeList_t> pPortions)
|
||||
|
@ -484,6 +485,7 @@ void SwXContentControl::AttachImpl(const uno::Reference<text::XTextRange>& xText
|
|||
pContentControl->SetDataBindingStoreItemID(m_pImpl->m_aDataBindingStoreItemID);
|
||||
pContentControl->SetColor(m_pImpl->m_aColor);
|
||||
pContentControl->SetAlias(m_pImpl->m_aAlias);
|
||||
pContentControl->SetTag(m_pImpl->m_aTag);
|
||||
|
||||
SwFormatContentControl aContentControl(pContentControl, nWhich);
|
||||
bool bSuccess
|
||||
|
@ -918,6 +920,21 @@ void SAL_CALL SwXContentControl::setPropertyValue(const OUString& rPropertyName,
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (rPropertyName == UNO_NAME_TAG)
|
||||
{
|
||||
OUString aValue;
|
||||
if (rValue >>= aValue)
|
||||
{
|
||||
if (m_pImpl->m_bIsDescriptor)
|
||||
{
|
||||
m_pImpl->m_aTag = aValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pImpl->m_pContentControl->SetTag(aValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw beans::UnknownPropertyException();
|
||||
|
@ -1140,6 +1157,17 @@ uno::Any SAL_CALL SwXContentControl::getPropertyValue(const OUString& rPropertyN
|
|||
aRet <<= m_pImpl->m_pContentControl->GetAlias();
|
||||
}
|
||||
}
|
||||
else if (rPropertyName == UNO_NAME_TAG)
|
||||
{
|
||||
if (m_pImpl->m_bIsDescriptor)
|
||||
{
|
||||
aRet <<= m_pImpl->m_aTag;
|
||||
}
|
||||
else
|
||||
{
|
||||
aRet <<= m_pImpl->m_pContentControl->GetTag();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw beans::UnknownPropertyException();
|
||||
|
|
|
@ -1010,6 +1010,7 @@ o3tl::span<const SfxItemPropertyMapEntry> SwUnoPropertyMapProvider::GetContentCo
|
|||
{ u"" UNO_NAME_DATA_BINDING_STORE_ITEM_ID, 0, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0 },
|
||||
{ u"" UNO_NAME_COLOR, 0, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0 },
|
||||
{ u"" UNO_NAME_ALIAS, 0, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0 },
|
||||
{ u"" UNO_NAME_TAG, 0, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0 },
|
||||
};
|
||||
|
||||
return aContentControlMap_Impl;
|
||||
|
|
|
@ -2367,6 +2367,12 @@ void DocxAttributeOutput::WriteContentControlStart()
|
|||
m_pContentControl->GetAlias());
|
||||
}
|
||||
|
||||
if (!m_pContentControl->GetTag().isEmpty())
|
||||
{
|
||||
m_pSerializer->singleElementNS(XML_w, XML_tag, FSNS(XML_w, XML_val),
|
||||
m_pContentControl->GetTag());
|
||||
}
|
||||
|
||||
if (m_pContentControl->GetShowingPlaceHolder())
|
||||
{
|
||||
m_pSerializer->singleElementNS(XML_w, XML_showingPlcHdr);
|
||||
|
|
|
@ -91,6 +91,10 @@ CPPUNIT_TEST_FIXTURE(Test, testSdtRunRichText)
|
|||
xContentControlProps->getPropertyValue("Alias") >>= aAlias;
|
||||
// This was empty.
|
||||
CPPUNIT_ASSERT_EQUAL(OUString("myalias"), aAlias);
|
||||
OUString aTag;
|
||||
xContentControlProps->getPropertyValue("Tag") >>= aTag;
|
||||
// This was empty.
|
||||
CPPUNIT_ASSERT_EQUAL(OUString("mytag"), aTag);
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(Test, testSdtRunPlainText)
|
||||
|
|
Binary file not shown.
|
@ -2814,6 +2814,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext )
|
|||
case NS_ooxml::LN_CT_SdtPr_alias:
|
||||
case NS_ooxml::LN_CT_SdtPlaceholder_docPart:
|
||||
case NS_ooxml::LN_CT_SdtPr_color:
|
||||
case NS_ooxml::LN_CT_SdtPr_tag:
|
||||
{
|
||||
if (!m_pImpl->GetSdtStarts().empty())
|
||||
{
|
||||
|
@ -2833,6 +2834,12 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext )
|
|||
break;
|
||||
}
|
||||
|
||||
if (nSprmId == NS_ooxml::LN_CT_SdtPr_tag)
|
||||
{
|
||||
m_pImpl->m_pSdtHelper->SetTag(sStringValue);
|
||||
break;
|
||||
}
|
||||
|
||||
if (nSprmId == NS_ooxml::LN_CT_SdtPr_checkbox)
|
||||
{
|
||||
m_pImpl->m_pSdtHelper->setControlType(SdtControlType::checkBox);
|
||||
|
@ -2864,6 +2871,14 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext )
|
|||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (nSprmId == NS_ooxml::LN_CT_SdtPr_tag)
|
||||
{
|
||||
// Tag is only handled here in case of inline SDT.
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// this is an unsupported SDT property, create a grab bag for it
|
||||
OUString sName;
|
||||
|
|
|
@ -943,6 +943,12 @@ void DomainMapper_Impl::PopSdt()
|
|||
uno::Any(m_pSdtHelper->GetAlias()));
|
||||
}
|
||||
|
||||
if (!m_pSdtHelper->GetTag().isEmpty())
|
||||
{
|
||||
xContentControlProps->setPropertyValue("Tag",
|
||||
uno::Any(m_pSdtHelper->GetTag()));
|
||||
}
|
||||
|
||||
if (m_pSdtHelper->getControlType() == SdtControlType::checkBox)
|
||||
{
|
||||
xContentControlProps->setPropertyValue("Checkbox", uno::Any(true));
|
||||
|
|
|
@ -515,6 +515,10 @@ void SdtHelper::SetAlias(const OUString& rAlias) { m_aAlias = rAlias; }
|
|||
|
||||
const OUString& SdtHelper::GetAlias() const { return m_aAlias; }
|
||||
|
||||
void SdtHelper::SetTag(const OUString& rTag) { m_aTag = rTag; }
|
||||
|
||||
const OUString& SdtHelper::GetTag() const { return m_aTag; }
|
||||
|
||||
} // namespace writerfilter::dmapper
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
|
|
|
@ -129,6 +129,9 @@ class SdtHelper final : public virtual SvRefBase
|
|||
/// <w:sdtPr>'s <w:alias w:val="...">.
|
||||
OUString m_aAlias;
|
||||
|
||||
/// <w:sdtPr>'s <w:tag w:val="...">.
|
||||
OUString m_aTag;
|
||||
|
||||
public:
|
||||
explicit SdtHelper(DomainMapper_Impl& rDM_Impl,
|
||||
css::uno::Reference<css::uno::XComponentContext> xContext);
|
||||
|
@ -211,6 +214,9 @@ public:
|
|||
void SetAlias(const OUString& rAlias);
|
||||
const OUString& GetAlias() const;
|
||||
|
||||
void SetTag(const OUString& rTag);
|
||||
const OUString& GetTag() const;
|
||||
|
||||
std::optional<OUString> getValueFromDataBinding();
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue