diff options
author | Serge Krot <Serge.Krot@cib.de> | 2020-06-16 17:11:12 +0200 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2020-06-17 17:00:46 +0200 |
commit | 33ad3ee258587904afaa03550858beac25b883f7 (patch) | |
tree | b9da475b6226ce31132917efe2360bd8a52ee568 /writerfilter | |
parent | 5568d92c5c705b4d728af859dc44afdd64e72195 (diff) |
tdf#134043 DOCX import: DropDown text field instead of ComboBox form control
Change-Id: Ide9cedefde3b00fa0eeb37a6540e8d4a420b70c0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96471
Tested-by: Jenkins
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/SdtHelper.cxx | 60 |
1 files changed, 46 insertions, 14 deletions
diff --git a/writerfilter/source/dmapper/SdtHelper.cxx b/writerfilter/source/dmapper/SdtHelper.cxx index 2e36709db3d9..8a224243aa07 100644 --- a/writerfilter/source/dmapper/SdtHelper.cxx +++ b/writerfilter/source/dmapper/SdtHelper.cxx @@ -16,9 +16,10 @@ #include <vcl/outdev.hxx> #include <comphelper/sequence.hxx> #include <xmloff/odffields.hxx> - +#include <com/sun/star/text/XTextField.hpp> #include "DomainMapper_Impl.hxx" #include "StyleSheetTable.hxx" +#include <officecfg/Office/Writer.hxx> namespace writerfilter::dmapper { @@ -77,19 +78,50 @@ SdtHelper::~SdtHelper() = default; void SdtHelper::createDropDownControl() { assert(m_bInsideDropDownControl); - OUString aDefaultText = m_aSdtTexts.makeStringAndClear(); - uno::Reference<awt::XControlModel> xControlModel( - m_rDM_Impl.GetTextFactory()->createInstance("com.sun.star.form.component.ComboBox"), - uno::UNO_QUERY); - uno::Reference<beans::XPropertySet> xPropertySet(xControlModel, uno::UNO_QUERY); - xPropertySet->setPropertyValue("DefaultText", uno::makeAny(aDefaultText)); - xPropertySet->setPropertyValue("Dropdown", uno::makeAny(true)); - xPropertySet->setPropertyValue("StringItemList", - uno::makeAny(comphelper::containerToSequence(m_aDropDownItems))); - - createControlShape( - lcl_getOptimalWidth(m_rDM_Impl.GetStyleSheetTable(), aDefaultText, m_aDropDownItems), - xControlModel, uno::Sequence<beans::PropertyValue>()); + + const bool bDropDown + = officecfg::Office::Writer::Filter::Import::DOCX::ImportComboBoxAsDropDown::get(); + const OUString aDefaultText = m_aSdtTexts.makeStringAndClear(); + + if (bDropDown) + { + // create field + uno::Reference<css::text::XTextField> xControlModel( + m_rDM_Impl.GetTextFactory()->createInstance("com.sun.star.text.TextField.DropDown"), + uno::UNO_QUERY); + + // set properties + uno::Reference<beans::XPropertySet> xPropertySet(xControlModel, uno::UNO_QUERY); + xPropertySet->setPropertyValue("SelectedItem", uno::makeAny(aDefaultText)); + xPropertySet->setPropertyValue( + "Items", uno::makeAny(comphelper::containerToSequence(m_aDropDownItems))); + + // add it into document + m_rDM_Impl.appendTextContent(xControlModel, uno::Sequence<beans::PropertyValue>()); + + m_bHasElements = true; + } + else + { + // create control + uno::Reference<awt::XControlModel> xControlModel( + m_rDM_Impl.GetTextFactory()->createInstance("com.sun.star.form.component.ComboBox"), + uno::UNO_QUERY); + + // set properties + uno::Reference<beans::XPropertySet> xPropertySet(xControlModel, uno::UNO_QUERY); + xPropertySet->setPropertyValue("DefaultText", uno::makeAny(aDefaultText)); + xPropertySet->setPropertyValue("Dropdown", uno::makeAny(true)); + xPropertySet->setPropertyValue( + "StringItemList", uno::makeAny(comphelper::containerToSequence(m_aDropDownItems))); + + // add it into document + createControlShape( + lcl_getOptimalWidth(m_rDM_Impl.GetStyleSheetTable(), aDefaultText, m_aDropDownItems), + xControlModel, uno::Sequence<beans::PropertyValue>()); + } + + // clean up m_aDropDownItems.clear(); m_bInsideDropDownControl = false; } |