summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorSerge Krot <Serge.Krot@cib.de>2020-06-16 17:11:12 +0200
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2020-06-17 17:00:46 +0200
commit33ad3ee258587904afaa03550858beac25b883f7 (patch)
treeb9da475b6226ce31132917efe2360bd8a52ee568 /writerfilter
parent5568d92c5c705b4d728af859dc44afdd64e72195 (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.cxx60
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;
}