use more concrete UNO classes in writerfilter (SwXContentControl)

Change-Id: I84a4c82176681eb55e90240a2db7001123605c1b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166807
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
Noel Grandin 2024-04-25 09:55:12 +02:00
parent b6c2ff2f05
commit 27ed452ae6
5 changed files with 48 additions and 37 deletions

View file

@ -115,6 +115,7 @@ class SwXLineBreak;
class SwXTextFrame;
class SwXTextGraphicObject;
class SwXPageStyle;
class SwXContentControl;
namespace com::sun::star::container { class XNameContainer; }
namespace com::sun::star::frame { class XController; }
namespace com::sun::star::lang { struct Locale; }
@ -528,6 +529,7 @@ public:
SW_DLLPUBLIC rtl::Reference<SwXTextGraphicObject> createTextGraphicObject();
SW_DLLPUBLIC rtl::Reference<SwXStyle> createNumberingStyle();
SW_DLLPUBLIC rtl::Reference<SwXPageStyle> createPageStyle();
SW_DLLPUBLIC rtl::Reference<SwXContentControl> createContentControl();
};
class SwXLinkTargetSupplier final : public cppu::WeakImplHelper

View file

@ -19,6 +19,7 @@
#pragma once
#include <swdllapi.h>
#include <memory>
#include <deque>
@ -48,7 +49,7 @@ typedef std::deque<rtl::Reference<SwXTextPortion>> TextRangeList_t;
* UNO API wrapper around an SwContentControl, exposed as the com.sun.star.text.ContentControl
* service.
*/
class SwXContentControl final
class SW_DLLPUBLIC SwXContentControl final
: public cppu::WeakImplHelper<css::lang::XServiceInfo, css::container::XEnumerationAccess,
css::text::XTextContent, css::text::XText,
css::beans::XPropertySet>

View file

@ -180,6 +180,7 @@
#include <unofield.hxx>
#include <unoframe.hxx>
#include <unoxstyle.hxx>
#include <unocontentcontrol.hxx>
#include <SwXTextDefaults.hxx>
using namespace ::com::sun::star;
@ -1735,6 +1736,13 @@ rtl::Reference< SwXPageStyle > SwXTextDocument::createPageStyle()
return SwXStyleFamilies::CreateStylePage(GetDocOrThrow());
}
rtl::Reference< SwXContentControl > SwXTextDocument::createContentControl()
{
SolarMutexGuard aGuard;
ThrowIfInvalid();
return SwXContentControl::CreateXContentControl(GetDocOrThrow());
}
Reference< XInterface > SwXTextDocument::createInstance(const OUString& rServiceName)
{
return create(rServiceName, nullptr);

View file

@ -140,6 +140,8 @@
#include <unolinebreak.hxx>
#include <unoframe.hxx>
#include <unoxstyle.hxx>
#include <unocontentcontrol.hxx>
#include <unoport.hxx>
#define REFFLDFLAG_STYLE_FROM_BOTTOM 0xc100
#define REFFLDFLAG_STYLE_HIDE_NON_NUMERICAL 0xc200
@ -1084,86 +1086,84 @@ void DomainMapper_Impl::PopSdt()
}
}
uno::Reference<text::XTextContent> xContentControl(
m_xTextDocument->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY);
uno::Reference<beans::XPropertySet> xContentControlProps(xContentControl, uno::UNO_QUERY);
rtl::Reference<SwXContentControl> xContentControl( m_xTextDocument->createContentControl());
if (m_pSdtHelper->GetShowingPlcHdr())
{
xContentControlProps->setPropertyValue("ShowingPlaceHolder",
xContentControl->setPropertyValue("ShowingPlaceHolder",
uno::Any(m_pSdtHelper->GetShowingPlcHdr()));
}
if (!m_pSdtHelper->GetPlaceholderDocPart().isEmpty())
{
xContentControlProps->setPropertyValue("PlaceholderDocPart",
xContentControl->setPropertyValue("PlaceholderDocPart",
uno::Any(m_pSdtHelper->GetPlaceholderDocPart()));
}
if (!m_pSdtHelper->GetDataBindingPrefixMapping().isEmpty())
{
xContentControlProps->setPropertyValue("DataBindingPrefixMappings",
xContentControl->setPropertyValue("DataBindingPrefixMappings",
uno::Any(m_pSdtHelper->GetDataBindingPrefixMapping()));
}
if (!m_pSdtHelper->GetDataBindingXPath().isEmpty())
{
xContentControlProps->setPropertyValue("DataBindingXpath",
xContentControl->setPropertyValue("DataBindingXpath",
uno::Any(m_pSdtHelper->GetDataBindingXPath()));
}
if (!m_pSdtHelper->GetDataBindingStoreItemID().isEmpty())
{
xContentControlProps->setPropertyValue("DataBindingStoreItemID",
xContentControl->setPropertyValue("DataBindingStoreItemID",
uno::Any(m_pSdtHelper->GetDataBindingStoreItemID()));
}
if (!m_pSdtHelper->GetColor().isEmpty())
{
xContentControlProps->setPropertyValue("Color",
xContentControl->setPropertyValue("Color",
uno::Any(m_pSdtHelper->GetColor()));
}
if (!m_pSdtHelper->GetAppearance().isEmpty())
{
xContentControlProps->setPropertyValue("Appearance",
xContentControl->setPropertyValue("Appearance",
uno::Any(m_pSdtHelper->GetAppearance()));
}
if (!m_pSdtHelper->GetAlias().isEmpty())
{
xContentControlProps->setPropertyValue("Alias",
xContentControl->setPropertyValue("Alias",
uno::Any(m_pSdtHelper->GetAlias()));
}
if (!m_pSdtHelper->GetTag().isEmpty())
{
xContentControlProps->setPropertyValue("Tag",
xContentControl->setPropertyValue("Tag",
uno::Any(m_pSdtHelper->GetTag()));
}
if (m_pSdtHelper->GetId())
{
xContentControlProps->setPropertyValue("Id", uno::Any(m_pSdtHelper->GetId()));
xContentControl->setPropertyValue("Id", uno::Any(m_pSdtHelper->GetId()));
}
if (m_pSdtHelper->GetTabIndex())
{
xContentControlProps->setPropertyValue("TabIndex", uno::Any(m_pSdtHelper->GetTabIndex()));
xContentControl->setPropertyValue("TabIndex", uno::Any(m_pSdtHelper->GetTabIndex()));
}
if (!m_pSdtHelper->GetLock().isEmpty())
{
xContentControlProps->setPropertyValue("Lock", uno::Any(m_pSdtHelper->GetLock()));
xContentControl->setPropertyValue("Lock", uno::Any(m_pSdtHelper->GetLock()));
}
if (m_pSdtHelper->getControlType() == SdtControlType::checkBox)
{
xContentControlProps->setPropertyValue("Checkbox", uno::Any(true));
xContentControl->setPropertyValue("Checkbox", uno::Any(true));
xContentControlProps->setPropertyValue("Checked", uno::Any(m_pSdtHelper->GetChecked()));
xContentControl->setPropertyValue("Checked", uno::Any(m_pSdtHelper->GetChecked()));
xContentControlProps->setPropertyValue("CheckedState",
xContentControl->setPropertyValue("CheckedState",
uno::Any(m_pSdtHelper->GetCheckedState()));
xContentControlProps->setPropertyValue("UncheckedState",
xContentControl->setPropertyValue("UncheckedState",
uno::Any(m_pSdtHelper->GetUncheckedState()));
}
@ -1183,31 +1183,31 @@ void DomainMapper_Impl::PopSdt()
comphelper::makePropertyValue("Value", rValues[i])
};
}
xContentControlProps->setPropertyValue("ListItems", uno::Any(aItems));
xContentControl->setPropertyValue("ListItems", uno::Any(aItems));
if (m_pSdtHelper->getControlType() == SdtControlType::dropDown)
{
xContentControlProps->setPropertyValue("DropDown", uno::Any(true));
xContentControl->setPropertyValue("DropDown", uno::Any(true));
}
else
{
xContentControlProps->setPropertyValue("ComboBox", uno::Any(true));
xContentControl->setPropertyValue("ComboBox", uno::Any(true));
}
}
}
if (m_pSdtHelper->getControlType() == SdtControlType::picture)
{
xContentControlProps->setPropertyValue("Picture", uno::Any(true));
xContentControl->setPropertyValue("Picture", uno::Any(true));
}
bool bDateFromDataBinding = false;
if (m_pSdtHelper->getControlType() == SdtControlType::datePicker)
{
xContentControlProps->setPropertyValue("Date", uno::Any(true));
xContentControl->setPropertyValue("Date", uno::Any(true));
OUString aDateFormat = m_pSdtHelper->getDateFormat().makeStringAndClear();
xContentControlProps->setPropertyValue("DateFormat",
xContentControl->setPropertyValue("DateFormat",
uno::Any(aDateFormat.replaceAll("'", "\"")));
xContentControlProps->setPropertyValue("DateLanguage",
xContentControl->setPropertyValue("DateLanguage",
uno::Any(m_pSdtHelper->getLocale().makeStringAndClear()));
OUString aCurrentDate = m_pSdtHelper->getDate().makeStringAndClear();
if (oData.has_value())
@ -1215,13 +1215,13 @@ void DomainMapper_Impl::PopSdt()
aCurrentDate = *oData;
bDateFromDataBinding = true;
}
xContentControlProps->setPropertyValue("CurrentDate",
xContentControl->setPropertyValue("CurrentDate",
uno::Any(aCurrentDate));
}
if (m_pSdtHelper->getControlType() == SdtControlType::plainText)
{
xContentControlProps->setPropertyValue("PlainText", uno::Any(true));
xContentControl->setPropertyValue("PlainText", uno::Any(true));
}
xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
@ -1229,7 +1229,7 @@ void DomainMapper_Impl::PopSdt()
if (bDateFromDataBinding)
{
OUString aDateString;
xContentControlProps->getPropertyValue("DateString") >>= aDateString;
xContentControl->getPropertyValue("DateString") >>= aDateString;
xCursor->setString(aDateString);
}

View file

@ -33,6 +33,8 @@
#include <com/sun/star/xml/dom/DocumentBuilder.hpp>
#include <unotxdoc.hxx>
#include <unobookmark.hxx>
#include <unocontentcontrol.hxx>
#include <unoport.hxx>
namespace writerfilter::dmapper
{
@ -374,10 +376,8 @@ void SdtHelper::createPlainTextControl()
if (oData.has_value())
xCrsr->setString(*oData);
uno::Reference<text::XTextContent> xContentControl(
m_rDM_Impl.GetTextDocument()->createInstance("com.sun.star.text.ContentControl"),
uno::UNO_QUERY);
uno::Reference<beans::XPropertySet> xContentControlProps(xContentControl, uno::UNO_QUERY);
rtl::Reference<SwXContentControl> xContentControl(
m_rDM_Impl.GetTextDocument()->createContentControl());
for (const beans::PropertyValue& prop : getInteropGrabBagAndClear())
{
@ -418,7 +418,7 @@ void SdtHelper::createPlainTextControl()
sPropertyName = "MultiLine";
if (!sPropertyName.isEmpty())
{
xContentControlProps->setPropertyValue(sPropertyName, internalProp.Value);
xContentControl->setPropertyValue(sPropertyName, internalProp.Value);
}
sPropertyName.clear();
}
@ -426,11 +426,11 @@ void SdtHelper::createPlainTextControl()
if (!sPropertyName.isEmpty())
{
xContentControlProps->setPropertyValue(sPropertyName, prop.Value);
xContentControl->setPropertyValue(sPropertyName, prop.Value);
}
}
xContentControlProps->setPropertyValue("PlainText", uno::Any(true));
xContentControl->setPropertyValue("PlainText", uno::Any(true));
xText->insertTextContent(xCrsr, xContentControl, /*bAbsorb=*/true);