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-30 23:29:51 +0200 |
commit | 029d239dd64a52ebb548f699c89e9109ae836fce (patch) | |
tree | 62f52bf663e354e8caee784553b6902a7e8df673 /writerfilter | |
parent | a994ab97213db1d8a4a793ed6290d577e431bdbc (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>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96608
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 aef7ac1e5fbd..3685e92cf942 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 { @@ -80,19 +81,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; } |