[Libreoffice-commits] core.git: Branch 'feature/msforms' - 12 commits - sw/qa sw/source writerfilter/source
Tamás Zolnai (via logerrit)
logerrit at kemper.freedesktop.org
Thu Jul 4 13:16:31 UTC 2019
Rebased ref, commits from common ancestor:
commit 17191508b9694461e17af65f772de2ff7513282c
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
AuthorDate: Wed Jul 3 19:57:19 2019 +0200
Commit: Tamás Zolnai <tamas.zolnai at collabora.com>
CommitDate: Thu Jul 4 13:30:58 2019 +0200
MSForms: DOCX filter: The new text-based field is allowed in the header.
Change-Id: I71d61c702ccd0470c4c3df09531704783c1b3e01
diff --git a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
index 3d3c528ef41a..b5b6b6040216 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
@@ -589,13 +589,13 @@ DECLARE_OOXMLEXPORT_TEST(testfdo82492, "fdo82492.docx")
assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt[1]/w:sdtContent/w:r",1);
}
-/*DECLARE_OOXMLEXPORT_TEST(testSdtHeader, "sdt-header.docx")
+DECLARE_OOXMLEXPORT_TEST(testSdtHeader, "sdt-header.docx")
{
// Problem was that w:sdt elements in headers were lost on import.
if (xmlDocPtr pXmlDoc = parseExport("word/header1.xml"))
// This was 0, w:sdt (and then w:date) was missing.
assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:date", 1);
-}*/
+}
DECLARE_OOXMLEXPORT_TEST(testSdtCompanyMultipara, "sdt-company-multipara.docx")
{
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index b24e258645d9..5647b6ef115d 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -1018,7 +1018,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
if (!m_pImpl->m_pSdtHelper->getDropDownItems().empty())
m_pImpl->m_pSdtHelper->createDropDownControl();
- else if (m_pImpl->m_pSdtHelper->validateDateFormat() && !IsInHeaderFooter())
+ else if (m_pImpl->m_pSdtHelper->validateDateFormat())
m_pImpl->m_pSdtHelper->createDateContentControl();
break;
case NS_ooxml::LN_CT_SdtListItem_displayText:
@@ -2427,30 +2427,20 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext )
break;
case NS_ooxml::LN_CT_SdtDate_dateFormat:
{
- if (!IsInHeaderFooter())
- m_pImpl->m_pSdtHelper->getDateFormat().append(sStringValue);
- else
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_SdtDate_dateFormat", sStringValue);
+ m_pImpl->m_pSdtHelper->getDateFormat().append(sStringValue);
}
break;
case NS_ooxml::LN_CT_SdtDate_storeMappedDataAs:
{
- if (IsInHeaderFooter())
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_SdtDate_storeMappedDataAs", sStringValue);
}
break;
case NS_ooxml::LN_CT_SdtDate_calendar:
{
- if (IsInHeaderFooter())
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_SdtDate_calendar", sStringValue);
}
break;
case NS_ooxml::LN_CT_SdtDate_lid:
{
- if (!IsInHeaderFooter())
- m_pImpl->m_pSdtHelper->getLocale().append(sStringValue);
- else
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_SdtDate_lid", sStringValue);
+ m_pImpl->m_pSdtHelper->getLocale().append(sStringValue);
}
break;
case NS_ooxml::LN_CT_SdtPr_dataBinding:
@@ -3213,13 +3203,13 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
return;
}
}
- // Form controls are not allowed in headers / footers; see sw::DocumentContentOperationsManager::InsertDrawObj()
- else if (m_pImpl->m_pSdtHelper->validateDateFormat() && !IsInHeaderFooter())
+ else if (m_pImpl->m_pSdtHelper->validateDateFormat())
{
// Date field will be imported, so we don't need the corresponding date text in most of the cases
// however when fullDate is not specified, but we have a date string we need to import it as
// simple text (this is the case when user sets date field manually in MSO).
- if(!m_pImpl->m_pSdtHelper->getDate().toString().isEmpty() || sText.isEmpty())
+ if((!m_pImpl->m_pSdtHelper->getDate().toString().isEmpty() || sText.isEmpty()) &&
+ (!IsInHeaderFooter() || !m_pImpl->IsDiscardHeaderFooter())) // discard date control with header / footer
{
return;
}
commit b82558c48932fa1c4e853e520fd712aaa67932a5
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
AuthorDate: Wed Jul 3 19:46:48 2019 +0200
Commit: Tamás Zolnai <tamas.zolnai at collabora.com>
CommitDate: Thu Jul 4 13:30:57 2019 +0200
MSForms: DOCX filter: update testN820509() test
Now we import date field as date form field and not as date form control.
Design mode has no interaction with this kind of field, so we don't need
check the design mode status.
Change-Id: I5dc2abc33f307d934771e4f6608d1c3a9ed71b0b
diff --git a/sw/qa/extras/ooxmlexport/data/n820509.docx b/sw/qa/extras/ooxmlexport/data/n820509.docx
index a6da1e16842c..bfaea9075652 100644
Binary files a/sw/qa/extras/ooxmlexport/data/n820509.docx and b/sw/qa/extras/ooxmlexport/data/n820509.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
index 0ab2ee04f42c..59ab8b015be6 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
@@ -44,6 +44,9 @@
#include <unotools/fltrcfg.hxx>
#include <comphelper/sequenceashashmap.hxx>
#include <oox/drawingml/drawingmltypes.hxx>
+#include <xmloff/odffields.hxx>
+#include <IDocumentMarkAccess.hxx>
+#include <IMark.hxx>
#include <bordertest.hxx>
@@ -958,19 +961,34 @@ DECLARE_OOXMLEXPORT_TEST(testN816593, "n816593.docx")
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTables->getCount());
}
-/*DECLARE_OOXMLEXPORT_TEST(testN820509, "n820509.docx")
+DECLARE_OOXMLEXPORT_TEST(testN820509, "n820509.docx")
{
- // Design mode was enabled.
- uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
- uno::Reference<view::XFormLayerAccess> xFormLayerAccess(xModel->getCurrentController(), uno::UNO_QUERY);
- CPPUNIT_ASSERT_EQUAL(false, bool(xFormLayerAccess->isFormDesignMode()));
-
// M.d.yyyy date format was unhandled.
- uno::Reference<drawing::XControlShape> xControlShape(getShape(1), uno::UNO_QUERY);
- uno::Reference<beans::XPropertySet> xPropertySet(xControlShape->getControl(), uno::UNO_QUERY);
- uno::Reference<lang::XServiceInfo> xServiceInfo(xPropertySet, uno::UNO_QUERY);
- CPPUNIT_ASSERT_EQUAL(sal_Int16(8), getProperty<sal_Int16>(xPropertySet, "DateFormat"));
-}*/
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+ SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
+ IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+
+ for(auto aIter = pMarkAccess->getAllMarksBegin(); aIter != pMarkAccess->getAllMarksEnd(); ++aIter)
+ {
+ ::sw::mark::IFieldmark* pFieldmark = dynamic_cast<::sw::mark::IFieldmark*>(*aIter);
+
+ if(!pFieldmark)
+ continue;
+
+ CPPUNIT_ASSERT_EQUAL(OUString(ODF_FORMDATE), pFieldmark->GetFieldname());
+
+ const sw::mark::IFieldmark::parameter_map_t* const pParameters = pFieldmark->GetParameters();
+ OUString sDateFormat;
+ auto pResult = pParameters->find(ODF_FORMDATE_DATEFORMAT);
+ if (pResult != pParameters->end())
+ {
+ pResult->second >>= sDateFormat;
+ }
+ CPPUNIT_ASSERT_EQUAL(OUString("M.d.yyyy"), sDateFormat);
+ }
+}
DECLARE_OOXMLEXPORT_TEST(testN830205, "n830205.docx")
{
commit fa751efff1a0ebcc00743130f32f6914a1110282
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
AuthorDate: Wed Jul 3 19:21:35 2019 +0200
Commit: Tamás Zolnai <tamas.zolnai at collabora.com>
CommitDate: Thu Jul 4 13:30:56 2019 +0200
MSForms: DOCX filter: reenable passing test
Change-Id: I566a65fa4ece6500128ceeb497c01f1c6e38470c
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
index 2d717f106b54..0ab2ee04f42c 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
@@ -527,21 +527,21 @@ DECLARE_OOXMLEXPORT_TEST(testN780563, "n780563.docx")
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount( ));
}
-/*DECLARE_OOXMLEXPORT_TEST(testN780853, "n780853.docx")
-{*/
+DECLARE_OOXMLEXPORT_TEST(testN780853, "n780853.docx")
+{
/*
* The problem was that the table was not imported.
*
* xray ThisComponent.TextTables.Count 'was 0
*/
- /*uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
//tdf#102619 - I would have expected this to be "Standard", but MSO 2013/2010/2003 all give FollowStyle==Date
uno::Reference< beans::XPropertySet > properties(getStyles("ParagraphStyles")->getByName("Date"), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(OUString("Date"), getProperty<OUString>(properties, "FollowStyle"));
-}*/
+}
DECLARE_OOXMLEXPORT_TEST(testN780843, "n780843.docx")
{
commit 112401ce78b2752b510283d2502a57b815e0450b
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
AuthorDate: Wed Jul 3 14:43:54 2019 +0200
Commit: Tamás Zolnai <tamas.zolnai at collabora.com>
CommitDate: Thu Jul 4 13:30:56 2019 +0200
MSForms: DOCX filter: handle date formats with quotation marks.
Change-Id: I61cc6d47200acdd55f147b4f1829330dec8562a0
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
index c6d67de8bd25..6e4fd349935f 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
@@ -661,7 +661,7 @@ DECLARE_OOXMLEXPORT_TEST(testTableCurruption, "tableCurrupt.docx")
CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), aHeaderBottomBorder.LineWidth);
}
-/*DECLARE_OOXMLEXPORT_TEST(testDateControl, "date-control.docx")
+DECLARE_OOXMLEXPORT_TEST(testDateControl, "date-control.docx")
{
// check XML
xmlDocPtr pXmlDoc = parseExport("word/document.xml");
@@ -671,7 +671,7 @@ DECLARE_OOXMLEXPORT_TEST(testTableCurruption, "tableCurrupt.docx")
assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:date/w:dateFormat", "val", "dddd, dd' de 'MMMM' de 'yyyy");
assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:date/w:lid", "val", "es-ES");
assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtContent/w:r/w:t", u"mi\u00E9rcoles, 05 de marzo de 2014");
-}*/
+}
DECLARE_OOXMLEXPORT_TEST(test_OpeningBrace, "2120112713_OpenBrace.docx")
{
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 0a708d0bc6f0..eac660544018 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -1884,8 +1884,11 @@ void DocxAttributeOutput::WriteFormDate(const OUString& sCurrentDate, const OUSt
else
m_pSerializer->startElementNS(XML_w, XML_date);
+ OString sUTF8DateFormat = sDateFormat.toUtf8();
+ // Replace quotation mark used for mark static strings in date format
+ sUTF8DateFormat = sUTF8DateFormat.replaceAll("\"", "'");
m_pSerializer->singleElementNS(XML_w, XML_dateFormat,
- FSNS(XML_w, XML_val), sDateFormat.toUtf8());
+ FSNS(XML_w, XML_val), sUTF8DateFormat);
m_pSerializer->singleElementNS(XML_w, XML_lid,
FSNS(XML_w, XML_val), sLang.toUtf8());
m_pSerializer->singleElementNS(XML_w, XML_storeMappedDataAs,
diff --git a/writerfilter/source/dmapper/SdtHelper.cxx b/writerfilter/source/dmapper/SdtHelper.cxx
index c55ceaec0d65..1c7c04563f09 100644
--- a/writerfilter/source/dmapper/SdtHelper.cxx
+++ b/writerfilter/source/dmapper/SdtHelper.cxx
@@ -122,7 +122,10 @@ void SdtHelper::createDateContentControl()
uno::Reference<container::XNameContainer> xNameCont = xFormField->getParameters();
if(xNameCont.is())
{
- xNameCont->insertByName(ODF_FORMDATE_DATEFORMAT, uno::makeAny(m_sDateFormat.makeStringAndClear()));
+ OUString sDateFormat = m_sDateFormat.makeStringAndClear();
+ // Replace quotation mark used for mark static strings in date format
+ sDateFormat = sDateFormat.replaceAll("'", "\"");
+ xNameCont->insertByName(ODF_FORMDATE_DATEFORMAT, uno::makeAny(sDateFormat));
xNameCont->insertByName(ODF_FORMDATE_DATEFORMAT_LANGUAGE, uno::makeAny(m_sLocale.makeStringAndClear()));
OUString sDate = m_sDate.makeStringAndClear();
if(!sDate.isEmpty())
commit 607defef5da655ca998e0ab1285701a26d9edb5a
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
AuthorDate: Wed Jul 3 14:43:12 2019 +0200
Commit: Tamás Zolnai <tamas.zolnai at collabora.com>
CommitDate: Thu Jul 4 13:30:55 2019 +0200
MSForms: date format: better searching of date format entries
GetEntryKey and PutEntry methods are not consistent.
It can happen that GetEntryKey does not found the format
we are searching for, however the PutEntry() method finds
it among the entries and so returns with failure.
Let's check the nFormat instead, PutEntry returns the found
entry key if the entry exists.
Change-Id: Ia7e8702b03999950adfa649d1adc3a839dc5a178
diff --git a/sw/source/core/crsr/DateFormFieldButton.cxx b/sw/source/core/crsr/DateFormFieldButton.cxx
index f9586c14b3fb..db4275746176 100644
--- a/sw/source/core/crsr/DateFormFieldButton.cxx
+++ b/sw/source/core/crsr/DateFormFieldButton.cxx
@@ -56,20 +56,19 @@ SwDatePickerDialog::SwDatePickerDialog(SwEditWin* parent, sw::mark::IFieldmark*
pResult->second >>= sDateString;
sal_uInt32 nFormat = m_pNumberFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE);
- bool bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND;
if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
{
sal_Int32 nCheckPos = 0;
SvNumFormatType nType;
OUString sFormat = ODF_FORMDATE_CURRENTDATE_FORMAT;
- bValidFormat = m_pNumberFormatter->PutEntry(sFormat,
- nCheckPos,
- nType,
- nFormat,
- ODF_FORMDATE_CURRENTDATE_LANGUAGE);
+ m_pNumberFormatter->PutEntry(sFormat,
+ nCheckPos,
+ nType,
+ nFormat,
+ ODF_FORMDATE_CURRENTDATE_LANGUAGE);
}
- if (bValidFormat)
+ if (nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND)
{
double dCurrentDate = 0;
m_pNumberFormatter->IsNumberFormat(sDateString, nFormat, dCurrentDate);
@@ -100,20 +99,19 @@ IMPL_LINK(SwDatePickerDialog, ImplSelectHdl, Calendar*, pCalendar, void)
if (m_pFieldmark != nullptr)
{
sal_uInt32 nFormat = m_pNumberFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE);
- bool bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND;
if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
{
sal_Int32 nCheckPos = 0;
SvNumFormatType nType;
OUString sFormat = ODF_FORMDATE_CURRENTDATE_FORMAT;
- bValidFormat = m_pNumberFormatter->PutEntry(sFormat,
- nCheckPos,
- nType,
- nFormat,
- ODF_FORMDATE_CURRENTDATE_LANGUAGE);
+ m_pNumberFormatter->PutEntry(sFormat,
+ nCheckPos,
+ nType,
+ nFormat,
+ ODF_FORMDATE_CURRENTDATE_LANGUAGE);
}
- if (bValidFormat)
+ if (nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND)
{
Color* pCol = nullptr;
OUString sOutput;
diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx
index 9040eb3f6362..905b427c44e9 100644
--- a/sw/source/core/text/itrform2.cxx
+++ b/sw/source/core/text/itrform2.cxx
@@ -891,20 +891,19 @@ namespace sw { namespace mark {
pResult->second >>= sFormattedDate;
sal_uInt32 nFormat = pFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE);
- bool bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND;
if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
{
sal_Int32 nCheckPos = 0;
SvNumFormatType nType;
OUString sFormat = ODF_FORMDATE_CURRENTDATE_FORMAT;
- bValidFormat = pFormatter->PutEntry(sFormat,
- nCheckPos,
- nType,
- nFormat,
- ODF_FORMDATE_CURRENTDATE_LANGUAGE);
+ pFormatter->PutEntry(sFormat,
+ nCheckPos,
+ nType,
+ nFormat,
+ ODF_FORMDATE_CURRENTDATE_LANGUAGE);
}
- if (bValidFormat)
+ if (nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND)
{
pFormatter->IsNumberFormat(sFormattedDate, nFormat, dCurrentDate);
bHasCurrentDate = true;
@@ -914,20 +913,19 @@ namespace sw { namespace mark {
if (!sDateFormat.isEmpty() && !sLang.isEmpty() && bHasCurrentDate)
{
sal_uInt32 nFormat = pFormatter->GetEntryKey(sDateFormat, LanguageTag(sLang).getLanguageType());
- bool bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND;
if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
{
sal_Int32 nCheckPos = 0;
SvNumFormatType nType;
- bValidFormat = pFormatter->PutEntry(sDateFormat,
- nCheckPos,
- nType,
- nFormat,
- LanguageTag(sLang).getLanguageType());
+ pFormatter->PutEntry(sDateFormat,
+ nCheckPos,
+ nType,
+ nFormat,
+ LanguageTag(sLang).getLanguageType());
}
OUString sOutput;
- if (bValidFormat)
+ if (nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND)
{
Color* pCol = nullptr;
pFormatter->GetOutputString(dCurrentDate, nFormat, sOutput, &pCol, false);
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index abd054ce32cb..0a708d0bc6f0 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -1899,57 +1899,52 @@ void DocxAttributeOutput::WriteFormDate(const OUString& sCurrentDate, const OUSt
m_pSerializer->startElementNS(XML_w, XML_sdtContent);
m_pSerializer->startElementNS(XML_w, XML_r);
+ // Convert the current date to the right format
if (!sCurrentDate.isEmpty())
{
- // Convert the current date to the right format
- if (!sCurrentDate.isEmpty())
- {
- SvNumberFormatter* pFormatter = m_rExport.m_pDoc->GetNumberFormatter();
+ SvNumberFormatter* pFormatter = m_rExport.m_pDoc->GetNumberFormatter();
- double dCurrentDate = 0.0;
- // First get the date internal double representation
- sal_uInt32 nFormat = pFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE);
- bool bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND;
- if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
- {
- sal_Int32 nCheckPos = 0;
- SvNumFormatType nType;
- OUString sFormat = ODF_FORMDATE_CURRENTDATE_FORMAT;
- bValidFormat = pFormatter->PutEntry(sFormat,
- nCheckPos,
- nType,
- nFormat,
- ODF_FORMDATE_CURRENTDATE_LANGUAGE);
- }
- if (bValidFormat)
- {
- pFormatter->IsNumberFormat(sCurrentDate, nFormat, dCurrentDate);
- }
-
- // Then convert the date to a fromatter string
- nFormat = pFormatter->GetEntryKey(sDateFormat, LanguageTag(sLang).getLanguageType());
- bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND;
- if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
- {
- sal_Int32 nCheckPos = 0;
- SvNumFormatType nType;
- OUString sNonConstDateFormat = sDateFormat;
- bValidFormat = pFormatter->PutEntry(sNonConstDateFormat,
- nCheckPos,
- nType,
- nFormat,
- LanguageTag(sLang).getLanguageType());
- }
+ double dCurrentDate = 0.0;
+ // First get the date internal double representation
+ sal_uInt32 nFormat = pFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE);
+ if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
+ {
+ sal_Int32 nCheckPos = 0;
+ SvNumFormatType nType;
+ OUString sFormat = ODF_FORMDATE_CURRENTDATE_FORMAT;
+ pFormatter->PutEntry(sFormat,
+ nCheckPos,
+ nType,
+ nFormat,
+ ODF_FORMDATE_CURRENTDATE_LANGUAGE);
+ }
+ if (nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND)
+ {
+ pFormatter->IsNumberFormat(sCurrentDate, nFormat, dCurrentDate);
+ }
- OUString sOutput;
- if (bValidFormat)
- {
- Color* pCol = nullptr;
- pFormatter->GetOutputString(dCurrentDate, nFormat, sOutput, &pCol, false);
- }
+ // Then convert the date to a fromatter string
+ nFormat = pFormatter->GetEntryKey(sDateFormat, LanguageTag(sLang).getLanguageType());
+ if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
+ {
+ sal_Int32 nCheckPos = 0;
+ SvNumFormatType nType;
+ OUString sNonConstDateFormat = sDateFormat;
+ pFormatter->PutEntry(sNonConstDateFormat,
+ nCheckPos,
+ nType,
+ nFormat,
+ LanguageTag(sLang).getLanguageType());
+ }
- RunText(sOutput);
+ OUString sOutput;
+ if (nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND)
+ {
+ Color* pCol = nullptr;
+ pFormatter->GetOutputString(dCurrentDate, nFormat, sOutput, &pCol, false);
}
+
+ RunText(sOutput);
}
m_pSerializer->endElementNS(XML_w, XML_r);
diff --git a/sw/source/ui/fldui/DateFormFieldDialog.cxx b/sw/source/ui/fldui/DateFormFieldDialog.cxx
index 6b8fbaf35d38..30b97178f44e 100644
--- a/sw/source/ui/fldui/DateFormFieldDialog.cxx
+++ b/sw/source/ui/fldui/DateFormFieldDialog.cxx
@@ -77,19 +77,18 @@ void DateFormFieldDialog::InitControls()
{
LanguageType aLangType = LanguageTag(sLang).getLanguageType();
sal_uInt32 nFormatKey = m_pNumberFormatter->GetEntryKey(sFormatString, aLangType);
- bool bValidFormat = nFormatKey != NUMBERFORMAT_ENTRY_NOT_FOUND;
if (nFormatKey == NUMBERFORMAT_ENTRY_NOT_FOUND)
{
sal_Int32 nCheckPos = 0;
SvNumFormatType nType;
- bValidFormat = m_pNumberFormatter->PutEntry(sFormatString,
- nCheckPos,
- nType,
- nFormatKey,
- LanguageTag(sLang).getLanguageType());
+ m_pNumberFormatter->PutEntry(sFormatString,
+ nCheckPos,
+ nType,
+ nFormatKey,
+ LanguageTag(sLang).getLanguageType());
}
- if(aLangType != LANGUAGE_DONTKNOW && bValidFormat)
+ if(aLangType != LANGUAGE_DONTKNOW && nFormatKey != NUMBERFORMAT_ENTRY_NOT_FOUND)
{
if (m_xFormatLB->GetCurLanguage() == aLangType)
{
commit 796b73bd1f4319780d8e7fa4f099e02a4d9a8898
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
AuthorDate: Mon Jul 1 15:49:01 2019 +0200
Commit: Tamás Zolnai <tamas.zolnai at collabora.com>
CommitDate: Thu Jul 4 13:30:54 2019 +0200
MSForms: DOCX filter: import manually set date field as plain text
In MSO the user can add any text in the date field without having it
in the specified date format. We import this kind of date as plain text.
Change-Id: Ied4bf03a3ac4c9b6f1cfc78d91e6a52ad3d6e179
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
index 0a989161fba6..9bae9e7fab91 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
@@ -34,13 +34,19 @@ DECLARE_OOXMLIMPORT_TEST(testTdf108545_embeddedDocxIcon, "tdf108545_embeddedDocx
CPPUNIT_ASSERT_EQUAL(embed::Aspects::MSOLE_ICON, xSupplier->getAspect());
}
-/*DECLARE_OOXMLIMPORT_TEST(testTdf121203, "tdf121203.docx")
+DECLARE_OOXMLIMPORT_TEST(testTdf121203, "tdf121203.docx")
{
- // Make sure that the date SDT's content is imported as plain text, as it
- // has no ISO date, so we have no idea how to represent that with our date
- // control.
+ // Make sure that the date SDT's content is imported as plain text, as
+ // the field has no fullDate attribute which we can use to find out the actual date.
CPPUNIT_ASSERT_EQUAL(OUString("17-Oct-2018 09:00"), getRun(getParagraph(1), 1)->getString());
-}*/
+
+ // Make sure we did not import a date field.
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+ SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
+ IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), pMarkAccess->getAllMarksCount());
+}
DECLARE_OOXMLIMPORT_TEST(testTdf109053, "tdf109053.docx")
{
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 749102c4e903..b24e258645d9 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -1028,10 +1028,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
m_pImpl->m_pSdtHelper->getDropDownItems().push_back(sStringValue);
break;
case NS_ooxml::LN_CT_SdtDate_fullDate:
- if (!IsInHeaderFooter())
- m_pImpl->m_pSdtHelper->getDate().append(sStringValue);
- else
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_SdtDate_fullDate", sStringValue);
+ m_pImpl->m_pSdtHelper->getDate().append(sStringValue);
break;
case NS_ooxml::LN_CT_Background_color:
if (m_pImpl->GetSettingsTable()->GetDisplayBackgroundShape())
@@ -3219,8 +3216,16 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
// Form controls are not allowed in headers / footers; see sw::DocumentContentOperationsManager::InsertDrawObj()
else if (m_pImpl->m_pSdtHelper->validateDateFormat() && !IsInHeaderFooter())
{
- // date field is imported, we don't need the corresponding date text
- return;
+ // Date field will be imported, so we don't need the corresponding date text in most of the cases
+ // however when fullDate is not specified, but we have a date string we need to import it as
+ // simple text (this is the case when user sets date field manually in MSO).
+ if(!m_pImpl->m_pSdtHelper->getDate().toString().isEmpty() || sText.isEmpty())
+ {
+ return;
+ }
+ // Remove date field attributes to avoid to import an actual date field
+ m_pImpl->m_pSdtHelper->getDateFormat().truncate();
+ m_pImpl->m_pSdtHelper->getLocale().truncate();
}
else if (!m_pImpl->m_pSdtHelper->isInteropGrabBagEmpty())
{
commit c1e976997f6a7858f353ace7fe6aa016c991cca4
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
AuthorDate: Mon Jul 1 14:51:38 2019 +0200
Commit: Tamás Zolnai <tamas.zolnai at collabora.com>
CommitDate: Thu Jul 4 13:30:54 2019 +0200
MSForms: DOCX filter: add a test case about invalid date fields
Change-Id: I2048198d81ea4abf58b2b499b89495cd51b5c7ff
diff --git a/sw/qa/extras/ooxmlexport/data/invalid_date_form_field.docx b/sw/qa/extras/ooxmlexport/data/invalid_date_form_field.docx
new file mode 100644
index 000000000000..9dc24e768b0f
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/invalid_date_form_field.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
index 8b2cab87042e..64de29ac9175 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
@@ -351,6 +351,83 @@ DECLARE_OOXMLIMPORT_TEST(testTdf121784, "tdf121784.docx")
CPPUNIT_ASSERT_EQUAL( OUString( "i" ), getRun( getParagraph( 2 ), 3 )->getString());
}
+DECLARE_OOXMLIMPORT_TEST(testInvalidDateFormField, "invalid_date_form_field.docx")
+{
+
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+ SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
+ IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), pMarkAccess->getAllMarksCount());
+
+ int nIndex = 0;
+ for(auto aIter = pMarkAccess->getAllMarksBegin(); aIter != pMarkAccess->getAllMarksEnd(); ++aIter)
+ {
+ ::sw::mark::IFieldmark* pFieldmark = dynamic_cast<::sw::mark::IFieldmark*>(*aIter);
+
+ if(!pFieldmark)
+ continue;
+
+ CPPUNIT_ASSERT(pFieldmark);
+ CPPUNIT_ASSERT_EQUAL(OUString(ODF_FORMDATE), pFieldmark->GetFieldname());
+
+ // Check drop down field's parameters.
+ const sw::mark::IFieldmark::parameter_map_t* const pParameters = pFieldmark->GetParameters();
+ OUString sDateFormat;
+ auto pResult = pParameters->find(ODF_FORMDATE_DATEFORMAT);
+ if (pResult != pParameters->end())
+ {
+ pResult->second >>= sDateFormat;
+ }
+
+ OUString sLang;
+ pResult = pParameters->find(ODF_FORMDATE_DATEFORMAT_LANGUAGE);
+ if (pResult != pParameters->end())
+ {
+ pResult->second >>= sLang;
+ }
+
+ OUString sCurrentDate;
+ pResult = pParameters->find(ODF_FORMDATE_CURRENTDATE);
+ if (pResult != pParameters->end())
+ {
+ pResult->second >>= sCurrentDate;
+ }
+
+ // The first one has invalid date format (invalid = LO can't parse it)
+ if(nIndex == 0)
+ {
+
+ CPPUNIT_ASSERT_EQUAL(OUString("YYYY.MM.DDT00:00:00Z"), sDateFormat);
+ CPPUNIT_ASSERT_EQUAL(OUString("en-US"), sLang);
+ CPPUNIT_ASSERT_EQUAL(OUString(""), sCurrentDate);
+
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(9), pFieldmark->GetMarkStart().nNode.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pFieldmark->GetMarkStart().nContent.GetIndex());
+ }
+ else if (nIndex == 1) // The second has wrong date
+ {
+ CPPUNIT_ASSERT_EQUAL(OUString("MM/DD/YY"), sDateFormat);
+ CPPUNIT_ASSERT_EQUAL(OUString("en-US"), sLang);
+ CPPUNIT_ASSERT_EQUAL(OUString("2019.06.34"), sCurrentDate);
+
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(9), pFieldmark->GetMarkStart().nNode.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(13), pFieldmark->GetMarkStart().nContent.GetIndex());
+ }
+ else // The third one has wrong local
+ {
+ CPPUNIT_ASSERT_EQUAL(OUString("[NatNum12 MMMM=abbreviation]YYYY\". \"MMMM D."), sDateFormat);
+ CPPUNIT_ASSERT_EQUAL(OUString("xxxx"), sLang);
+ CPPUNIT_ASSERT_EQUAL(OUString("2019.06.11"), sCurrentDate);
+
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(9), pFieldmark->GetMarkStart().nNode.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(23), pFieldmark->GetMarkStart().nContent.GetIndex());
+ }
+ ++nIndex;
+ }
+ CPPUNIT_ASSERT_EQUAL(int(3), nIndex);
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 42d027e583319429d9fe2befc0f49df46c614c82
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
AuthorDate: Mon Jul 1 14:24:08 2019 +0200
Commit: Tamás Zolnai <tamas.zolnai at collabora.com>
CommitDate: Thu Jul 4 13:30:53 2019 +0200
MSForms: date form field dialog: create the format entry if it does not exist
Change-Id: I62da736efeabc2da634d9a7a38512d7e908b03fc
diff --git a/sw/source/ui/fldui/DateFormFieldDialog.cxx b/sw/source/ui/fldui/DateFormFieldDialog.cxx
index a265dc130826..6b8fbaf35d38 100644
--- a/sw/source/ui/fldui/DateFormFieldDialog.cxx
+++ b/sw/source/ui/fldui/DateFormFieldDialog.cxx
@@ -77,8 +77,19 @@ void DateFormFieldDialog::InitControls()
{
LanguageType aLangType = LanguageTag(sLang).getLanguageType();
sal_uInt32 nFormatKey = m_pNumberFormatter->GetEntryKey(sFormatString, aLangType);
+ bool bValidFormat = nFormatKey != NUMBERFORMAT_ENTRY_NOT_FOUND;
+ if (nFormatKey == NUMBERFORMAT_ENTRY_NOT_FOUND)
+ {
+ sal_Int32 nCheckPos = 0;
+ SvNumFormatType nType;
+ bValidFormat = m_pNumberFormatter->PutEntry(sFormatString,
+ nCheckPos,
+ nType,
+ nFormatKey,
+ LanguageTag(sLang).getLanguageType());
+ }
- if(aLangType != LANGUAGE_DONTKNOW && nFormatKey != NUMBERFORMAT_ENTRY_NOT_FOUND)
+ if(aLangType != LANGUAGE_DONTKNOW && bValidFormat)
{
if (m_xFormatLB->GetCurLanguage() == aLangType)
{
commit 1b60b5895a67f36bb53f5b1fee7aee7829711782
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
AuthorDate: Mon Jul 1 13:45:09 2019 +0200
Commit: Tamás Zolnai <tamas.zolnai at collabora.com>
CommitDate: Thu Jul 4 13:30:52 2019 +0200
MSForms: date field converions: better error handling
Change-Id: Ia518c7c50079e443ddf135f1c32c5c39d2c85552
diff --git a/sw/source/core/crsr/DateFormFieldButton.cxx b/sw/source/core/crsr/DateFormFieldButton.cxx
index 5ad43faf1ebb..f9586c14b3fb 100644
--- a/sw/source/core/crsr/DateFormFieldButton.cxx
+++ b/sw/source/core/crsr/DateFormFieldButton.cxx
@@ -55,24 +55,28 @@ SwDatePickerDialog::SwDatePickerDialog(SwEditWin* parent, sw::mark::IFieldmark*
OUString sDateString;
pResult->second >>= sDateString;
- double dCurrentDate = 0;
sal_uInt32 nFormat = m_pNumberFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE);
+ bool bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND;
if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
{
sal_Int32 nCheckPos = 0;
SvNumFormatType nType;
OUString sFormat = ODF_FORMDATE_CURRENTDATE_FORMAT;
- m_pNumberFormatter->PutEntry(sFormat,
- nCheckPos,
- nType,
- nFormat,
- ODF_FORMDATE_CURRENTDATE_LANGUAGE);
+ bValidFormat = m_pNumberFormatter->PutEntry(sFormat,
+ nCheckPos,
+ nType,
+ nFormat,
+ ODF_FORMDATE_CURRENTDATE_LANGUAGE);
}
- m_pNumberFormatter->IsNumberFormat(sDateString, nFormat, dCurrentDate);
+ if (bValidFormat)
+ {
+ double dCurrentDate = 0;
+ m_pNumberFormatter->IsNumberFormat(sDateString, nFormat, dCurrentDate);
- const Date& rNullDate = m_pNumberFormatter->GetNullDate();
- m_pCalendar->SetCurDate(rNullDate + dCurrentDate);
+ const Date& rNullDate = m_pNumberFormatter->GetNullDate();
+ m_pCalendar->SetCurDate(rNullDate + dCurrentDate);
+ }
}
}
m_pCalendar->SetSelectHdl(LINK(this, SwDatePickerDialog, ImplSelectHdl));
@@ -95,28 +99,33 @@ IMPL_LINK(SwDatePickerDialog, ImplSelectHdl, Calendar*, pCalendar, void)
{
if (m_pFieldmark != nullptr)
{
- Color* pCol = nullptr;
- OUString sOutput;
sal_uInt32 nFormat = m_pNumberFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE);
+ bool bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND;
if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
{
sal_Int32 nCheckPos = 0;
SvNumFormatType nType;
OUString sFormat = ODF_FORMDATE_CURRENTDATE_FORMAT;
- m_pNumberFormatter->PutEntry(sFormat,
- nCheckPos,
- nType,
- nFormat,
- ODF_FORMDATE_CURRENTDATE_LANGUAGE);
+ bValidFormat = m_pNumberFormatter->PutEntry(sFormat,
+ nCheckPos,
+ nType,
+ nFormat,
+ ODF_FORMDATE_CURRENTDATE_LANGUAGE);
}
- const Date& rNullDate = m_pNumberFormatter->GetNullDate();
- double dDate = pCalendar->GetFirstSelectedDate() - rNullDate;
+ if (bValidFormat)
+ {
+ Color* pCol = nullptr;
+ OUString sOutput;
- m_pNumberFormatter->GetOutputString(dDate, nFormat, sOutput, &pCol, false);
+ const Date& rNullDate = m_pNumberFormatter->GetNullDate();
+ double dDate = pCalendar->GetFirstSelectedDate() - rNullDate;
- sw::mark::IFieldmark::parameter_map_t* pParameters = m_pFieldmark->GetParameters();
- (*pParameters)[ODF_FORMDATE_CURRENTDATE] <<= sOutput;
+ m_pNumberFormatter->GetOutputString(dDate, nFormat, sOutput, &pCol, false);
+
+ sw::mark::IFieldmark::parameter_map_t* pParameters = m_pFieldmark->GetParameters();
+ (*pParameters)[ODF_FORMDATE_CURRENTDATE] <<= sOutput;
+ }
}
EndPopupMode();
}
diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx
index 131ef946d8a6..9040eb3f6362 100644
--- a/sw/source/core/text/itrform2.cxx
+++ b/sw/source/core/text/itrform2.cxx
@@ -890,38 +890,48 @@ namespace sw { namespace mark {
OUString sFormattedDate;
pResult->second >>= sFormattedDate;
- sal_uInt32 nFormat = pFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE); if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
+ sal_uInt32 nFormat = pFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE);
+ bool bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND;
if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
{
sal_Int32 nCheckPos = 0;
SvNumFormatType nType;
OUString sFormat = ODF_FORMDATE_CURRENTDATE_FORMAT;
- pFormatter->PutEntry(sFormat,
- nCheckPos,
- nType,
- nFormat,
- ODF_FORMDATE_CURRENTDATE_LANGUAGE);
+ bValidFormat = pFormatter->PutEntry(sFormat,
+ nCheckPos,
+ nType,
+ nFormat,
+ ODF_FORMDATE_CURRENTDATE_LANGUAGE);
+ }
+
+ if (bValidFormat)
+ {
+ pFormatter->IsNumberFormat(sFormattedDate, nFormat, dCurrentDate);
+ bHasCurrentDate = true;
}
- pFormatter->IsNumberFormat(sFormattedDate, nFormat, dCurrentDate);
- bHasCurrentDate = true;
}
- Color* pCol = nullptr;
if (!sDateFormat.isEmpty() && !sLang.isEmpty() && bHasCurrentDate)
{
- OUString sOutput;
sal_uInt32 nFormat = pFormatter->GetEntryKey(sDateFormat, LanguageTag(sLang).getLanguageType());
+ bool bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND;
if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
{
sal_Int32 nCheckPos = 0;
SvNumFormatType nType;
- pFormatter->PutEntry(sDateFormat,
- nCheckPos,
- nType,
- nFormat,
- LanguageTag(sLang).getLanguageType());
+ bValidFormat = pFormatter->PutEntry(sDateFormat,
+ nCheckPos,
+ nType,
+ nFormat,
+ LanguageTag(sLang).getLanguageType());
+ }
+
+ OUString sOutput;
+ if (bValidFormat)
+ {
+ Color* pCol = nullptr;
+ pFormatter->GetOutputString(dCurrentDate, nFormat, sOutput, &pCol, false);
}
- pFormatter->GetOutputString(dCurrentDate, nFormat, sOutput, &pCol, false);
return sOutput;
}
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 0d1864115099..abd054ce32cb 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -1908,36 +1908,45 @@ void DocxAttributeOutput::WriteFormDate(const OUString& sCurrentDate, const OUSt
double dCurrentDate = 0.0;
// First get the date internal double representation
- sal_uInt32 nFormat = pFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE); if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
+ sal_uInt32 nFormat = pFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE);
+ bool bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND;
if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
{
sal_Int32 nCheckPos = 0;
SvNumFormatType nType;
OUString sFormat = ODF_FORMDATE_CURRENTDATE_FORMAT;
- pFormatter->PutEntry(sFormat,
- nCheckPos,
- nType,
- nFormat,
- ODF_FORMDATE_CURRENTDATE_LANGUAGE);
+ bValidFormat = pFormatter->PutEntry(sFormat,
+ nCheckPos,
+ nType,
+ nFormat,
+ ODF_FORMDATE_CURRENTDATE_LANGUAGE);
+ }
+ if (bValidFormat)
+ {
+ pFormatter->IsNumberFormat(sCurrentDate, nFormat, dCurrentDate);
}
- pFormatter->IsNumberFormat(sCurrentDate, nFormat, dCurrentDate);
// Then convert the date to a fromatter string
- OUString sOutput;
- Color* pCol = nullptr;
nFormat = pFormatter->GetEntryKey(sDateFormat, LanguageTag(sLang).getLanguageType());
+ bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND;
if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND)
{
sal_Int32 nCheckPos = 0;
SvNumFormatType nType;
OUString sNonConstDateFormat = sDateFormat;
- pFormatter->PutEntry(sNonConstDateFormat,
- nCheckPos,
- nType,
- nFormat,
- LanguageTag(sLang).getLanguageType());
+ bValidFormat = pFormatter->PutEntry(sNonConstDateFormat,
+ nCheckPos,
+ nType,
+ nFormat,
+ LanguageTag(sLang).getLanguageType());
+ }
+
+ OUString sOutput;
+ if (bValidFormat)
+ {
+ Color* pCol = nullptr;
+ pFormatter->GetOutputString(dCurrentDate, nFormat, sOutput, &pCol, false);
}
- pFormatter->GetOutputString(dCurrentDate, nFormat, sOutput, &pCol, false);
RunText(sOutput);
}
diff --git a/sw/source/ui/fldui/DateFormFieldDialog.cxx b/sw/source/ui/fldui/DateFormFieldDialog.cxx
index e5cc6961b05e..a265dc130826 100644
--- a/sw/source/ui/fldui/DateFormFieldDialog.cxx
+++ b/sw/source/ui/fldui/DateFormFieldDialog.cxx
@@ -78,20 +78,23 @@ void DateFormFieldDialog::InitControls()
LanguageType aLangType = LanguageTag(sLang).getLanguageType();
sal_uInt32 nFormatKey = m_pNumberFormatter->GetEntryKey(sFormatString, aLangType);
- if (m_xFormatLB->GetCurLanguage() == aLangType)
+ if(aLangType != LANGUAGE_DONTKNOW && nFormatKey != NUMBERFORMAT_ENTRY_NOT_FOUND)
{
- m_xFormatLB->SetAutomaticLanguage(true);
- }
- else
- {
- m_xFormatLB->SetAutomaticLanguage(false);
- m_xFormatLB->SetLanguage(aLangType);
+ if (m_xFormatLB->GetCurLanguage() == aLangType)
+ {
+ m_xFormatLB->SetAutomaticLanguage(true);
+ }
+ else
+ {
+ m_xFormatLB->SetAutomaticLanguage(false);
+ m_xFormatLB->SetLanguage(aLangType);
- // Change format and change back for regenerating the list
- m_xFormatLB->SetFormatType(SvNumFormatType::ALL);
- m_xFormatLB->SetFormatType(SvNumFormatType::DATE);
+ // Change format and change back for regenerating the list
+ m_xFormatLB->SetFormatType(SvNumFormatType::ALL);
+ m_xFormatLB->SetFormatType(SvNumFormatType::DATE);
+ }
+ m_xFormatLB->SetDefFormat(nFormatKey);
}
- m_xFormatLB->SetDefFormat(nFormatKey);
}
}
}
commit af65069ebd55a295b7aa601e1eaa3ae8a2e841e4
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
AuthorDate: Mon Jul 1 13:27:31 2019 +0200
Commit: Tamás Zolnai <tamas.zolnai at collabora.com>
CommitDate: Thu Jul 4 13:30:51 2019 +0200
MSForms: DOCX filter: reenable passing test
Change-Id: Ic82e2edddce7e46740f74f7b20bb849b6735a3b8
diff --git a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
index 3b7f928facdb..3d3c528ef41a 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
@@ -510,14 +510,14 @@ DECLARE_OOXMLEXPORT_TEST(testTableStart2Sdt, "table-start-2-sdt.docx")
}
}
-/*DECLARE_OOXMLEXPORT_TEST(testSdtDateDuplicate, "sdt-date-duplicate.docx")
+DECLARE_OOXMLEXPORT_TEST(testSdtDateDuplicate, "sdt-date-duplicate.docx")
{
if (xmlDocPtr pXmlDoc = parseExport())
{
// Single <w:sdt> was exported as 2 <w:sdt> elements.
assertXPath(pXmlDoc, "//w:sdt", 1);
}
-}*/
+}
DECLARE_OOXMLEXPORT_TEST(testFdo81492, "fdo81492.docx")
{
commit 5dcc4f3508f3e8f279123de330d705f5e1d8e0f4
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
AuthorDate: Mon Jul 1 12:20:45 2019 +0200
Commit: Tamás Zolnai <tamas.zolnai at collabora.com>
CommitDate: Thu Jul 4 13:30:51 2019 +0200
MSForms: DOCX filter: handle export of empty date from control
It's converted to date content control which is imported as text-based
date control.
By now, we don't need to set a dummy text for empty date.
Change-Id: I29b2a72e3ae2722c1d765c4fcb9bd13052619372
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
index d921551e5020..8b2cab87042e 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
@@ -14,6 +14,7 @@
#include <com/sun/star/drawing/XControlShape.hpp>
#include <com/sun/star/style/ParagraphAdjust.hpp>
#include <IDocumentSettingAccess.hxx>
+#include <xmloff/odffields.hxx>
#include <editsh.hxx>
@@ -138,24 +139,51 @@ DECLARE_OOXMLEXPORT_TEST(tdf123912_protectedForm, "tdf123912_protectedForm.odt")
CPPUNIT_ASSERT_EQUAL_MESSAGE("Section1 is protected", false, getProperty<bool>(xSect, "IsProtected"));
}
-/*DECLARE_OOXMLEXPORT_TEST(testDateControl, "empty-date-control.odt")
+DECLARE_OOXMLEXPORT_TEST(testDateControl, "empty-date-control.odt")
{
- // Check that we did not lost the date control
- uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
- uno::Reference<container::XIndexAccess> xDraws(xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), xDraws->getCount());
- uno::Reference<drawing::XControlShape> xControl(getShape(1), uno::UNO_QUERY);
- CPPUNIT_ASSERT(xControl->getControl().is());
-
- // check XML
- xmlDocPtr pXmlDoc = parseExport("word/document.xml");
- if (!pXmlDoc)
- return;
+ // Check that we exported the empty date control correctly
+ // Date form field is converted to date content control.
+ if (!mbExported)
+ return ;
+
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+ SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
+ IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
+
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ ::sw::mark::IFieldmark* pFieldmark = dynamic_cast<::sw::mark::IFieldmark*>(*pMarkAccess->getAllMarksBegin());
+
+ CPPUNIT_ASSERT(pFieldmark);
+ CPPUNIT_ASSERT_EQUAL(OUString(ODF_FORMDATE), pFieldmark->GetFieldname());
- // We need to export date format and a dummy character (" ") for empty date control
- assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:date/w:dateFormat", "val", "dd/MM/yyyy");
- assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtContent/w:r/w:t", u" ");
-}*/
+ const sw::mark::IFieldmark::parameter_map_t* const pParameters = pFieldmark->GetParameters();
+ OUString sDateFormat;
+ auto pResult = pParameters->find(ODF_FORMDATE_DATEFORMAT);
+ if (pResult != pParameters->end())
+ {
+ pResult->second >>= sDateFormat;
+ }
+
+ OUString sLang;
+ pResult = pParameters->find(ODF_FORMDATE_DATEFORMAT_LANGUAGE);
+ if (pResult != pParameters->end())
+ {
+ pResult->second >>= sLang;
+ }
+
+ OUString sCurrentDate;
+ pResult = pParameters->find(ODF_FORMDATE_CURRENTDATE);
+ if (pResult != pParameters->end())
+ {
+ pResult->second >>= sCurrentDate;
+ }
+
+ CPPUNIT_ASSERT_EQUAL(OUString("dd/MM/yyyy"), sDateFormat);
+ CPPUNIT_ASSERT_EQUAL(OUString("en-US"), sLang);
+ CPPUNIT_ASSERT_EQUAL(OUString(""), sCurrentDate);
+}
DECLARE_OOXMLEXPORT_TEST(testTdf121867, "tdf121867.odt")
{
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 1aecd9474600..0d1864115099 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -5193,8 +5193,6 @@ void DocxAttributeOutput::WritePostponedFormControl(const SdrObject* pObject)
else
{
aContentText = xPropertySet->getPropertyValue("HelpText").get<OUString>();
- if(aContentText.isEmpty())
- aContentText = " "; // Need to write out something to have it imported by MS Word
if(sDateFormat.isEmpty())
sDateFormat = "dd/MM/yyyy"; // Need to set date format even if there is no date set
}
commit 128d52cda6dd3c835daa77e0c2d93eb63aac870d
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
AuthorDate: Tue Jul 2 21:09:25 2019 +0200
Commit: Tamás Zolnai <tamas.zolnai at collabora.com>
CommitDate: Thu Jul 4 13:30:32 2019 +0200
MSForms: DOCX import of text-based date field
Before the date content control was imported as LO specific
date form control, but now I changed it to be imported into
the compatible text-based date field.
Also removed the things stored in the grabbag, which are useless now.
Disabled some unit tests, I'll update them for the new field
in other patches.
Change-Id: Ide8f4b27ec6b2dbb182abb4180229736bf9c434f
diff --git a/sw/qa/extras/globalfilter/globalfilter.cxx b/sw/qa/extras/globalfilter/globalfilter.cxx
index 9bce252a7512..b25bbf7ae999 100644
--- a/sw/qa/extras/globalfilter/globalfilter.cxx
+++ b/sw/qa/extras/globalfilter/globalfilter.cxx
@@ -1244,8 +1244,7 @@ void Test::testDateFormField()
{
const OUString aFilterNames[] = {
"writer8",
- //"MS Word 97",
- //"Office Open XML Text",
+ "Office Open XML Text",
};
for (const OUString& rFilterName : aFilterNames)
@@ -1273,7 +1272,10 @@ void Test::testDateFormField()
SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
- CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(3), pMarkAccess->getAllMarksCount());
+ if(rFilterName == "Office Open XML Text")
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(6), pMarkAccess->getAllMarksCount());
+ else
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(3), pMarkAccess->getAllMarksCount());
int nIndex = 0;
for(auto aIter = pMarkAccess->getAllMarksBegin(); aIter != pMarkAccess->getAllMarksEnd(); ++aIter)
@@ -1316,18 +1318,28 @@ void Test::testDateFormField()
CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("MM/DD/YY"), sDateFormat);
CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("en-US"), sLang);
CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString(""), sCurrentDate);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_uLong(9), pFieldmark->GetMarkStart().nNode.GetIndex());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(5), pFieldmark->GetMarkStart().nContent.GetIndex());
}
else if (nIndex == 1) // The second has the default format
{
CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("MM/DD/YY"), sDateFormat);
CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("en-US"), sLang);
CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("2019-06-12"), sCurrentDate);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_uLong(9), pFieldmark->GetMarkStart().nNode.GetIndex());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(13), pFieldmark->GetMarkStart().nContent.GetIndex());
}
else // The third one has special format
{
CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("[NatNum12 MMMM=abbreviation]YYYY\". \"MMMM D."), sDateFormat);
CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("hu-HU"), sLang);
CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), OUString("2019-06-11"), sCurrentDate);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_uLong(9), pFieldmark->GetMarkStart().nNode.GetIndex());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(23), pFieldmark->GetMarkStart().nContent.GetIndex());
+
}
++nIndex;
}
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index 23eb22cb8d03..bd1cf12450af 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -71,7 +71,7 @@ DECLARE_OOXMLEXPORT_TEST(testSdtAlias, "sdt-alias.docx")
assertXPath(pXmlDoc, "/w:document/w:body/w:sdt/w:sdtPr/w:alias", "val", "Subtitle");
}
-DECLARE_OOXMLEXPORT_TEST(testSdtDateCharformat, "sdt-date-charformat.docx")
+/*DECLARE_OOXMLEXPORT_TEST(testSdtDateCharformat, "sdt-date-charformat.docx")
{
if (xmlDocPtr pXmlDoc = parseExport())
{
@@ -80,7 +80,7 @@ DECLARE_OOXMLEXPORT_TEST(testSdtDateCharformat, "sdt-date-charformat.docx")
// alias was also missing.
assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:alias", 1);
}
-}
+}*/
DECLARE_OOXMLEXPORT_TEST(testFooterBodyDistance, "footer-body-distance.docx")
{
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
index edbc0964685d..d921551e5020 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
@@ -138,7 +138,7 @@ DECLARE_OOXMLEXPORT_TEST(tdf123912_protectedForm, "tdf123912_protectedForm.odt")
CPPUNIT_ASSERT_EQUAL_MESSAGE("Section1 is protected", false, getProperty<bool>(xSect, "IsProtected"));
}
-DECLARE_OOXMLEXPORT_TEST(testDateControl, "empty-date-control.odt")
+/*DECLARE_OOXMLEXPORT_TEST(testDateControl, "empty-date-control.odt")
{
// Check that we did not lost the date control
uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
@@ -155,7 +155,7 @@ DECLARE_OOXMLEXPORT_TEST(testDateControl, "empty-date-control.odt")
// We need to export date format and a dummy character (" ") for empty date control
assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:date/w:dateFormat", "val", "dd/MM/yyyy");
assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtContent/w:r/w:t", u" ");
-}
+}*/
DECLARE_OOXMLEXPORT_TEST(testTdf121867, "tdf121867.odt")
{
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
index 9405ff7e29bc..c6d67de8bd25 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
@@ -661,7 +661,7 @@ DECLARE_OOXMLEXPORT_TEST(testTableCurruption, "tableCurrupt.docx")
CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), aHeaderBottomBorder.LineWidth);
}
-DECLARE_OOXMLEXPORT_TEST(testDateControl, "date-control.docx")
+/*DECLARE_OOXMLEXPORT_TEST(testDateControl, "date-control.docx")
{
// check XML
xmlDocPtr pXmlDoc = parseExport("word/document.xml");
@@ -671,14 +671,7 @@ DECLARE_OOXMLEXPORT_TEST(testDateControl, "date-control.docx")
assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:date/w:dateFormat", "val", "dddd, dd' de 'MMMM' de 'yyyy");
assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:date/w:lid", "val", "es-ES");
assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtContent/w:r/w:t", u"mi\u00E9rcoles, 05 de marzo de 2014");
-
- // check imported control
- uno::Reference<drawing::XControlShape> xControl(getShape(1), uno::UNO_QUERY);
- util::Date aDate = getProperty<util::Date>(xControl->getControl(), "Date");
- CPPUNIT_ASSERT_EQUAL(sal_Int32(5), sal_Int32(aDate.Day));
- CPPUNIT_ASSERT_EQUAL(sal_Int32(3), sal_Int32(aDate.Month));
- CPPUNIT_ASSERT_EQUAL(sal_Int32(2014), sal_Int32(aDate.Year));
-}
+}*/
DECLARE_OOXMLEXPORT_TEST(test_OpeningBrace, "2120112713_OpenBrace.docx")
{
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
index f798ad98000e..2d717f106b54 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
@@ -527,21 +527,21 @@ DECLARE_OOXMLEXPORT_TEST(testN780563, "n780563.docx")
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount( ));
}
-DECLARE_OOXMLEXPORT_TEST(testN780853, "n780853.docx")
-{
+/*DECLARE_OOXMLEXPORT_TEST(testN780853, "n780853.docx")
+{*/
/*
* The problem was that the table was not imported.
*
* xray ThisComponent.TextTables.Count 'was 0
*/
- uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ /*uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
//tdf#102619 - I would have expected this to be "Standard", but MSO 2013/2010/2003 all give FollowStyle==Date
uno::Reference< beans::XPropertySet > properties(getStyles("ParagraphStyles")->getByName("Date"), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(OUString("Date"), getProperty<OUString>(properties, "FollowStyle"));
-}
+}*/
DECLARE_OOXMLEXPORT_TEST(testN780843, "n780843.docx")
{
@@ -919,19 +919,10 @@ DECLARE_OOXMLEXPORT_TEST(testN592908_Picture, "n592908-picture.docx")
DECLARE_OOXMLEXPORT_TEST(testN779630, "n779630.docx")
{
- // First shape: date picker
+ // A combo box is imported
uno::Reference<drawing::XControlShape> xControlShape(getShape(1), uno::UNO_QUERY);
uno::Reference<beans::XPropertySet> xPropertySet(xControlShape->getControl(), uno::UNO_QUERY);
uno::Reference<lang::XServiceInfo> xServiceInfo(xPropertySet, uno::UNO_QUERY);
- CPPUNIT_ASSERT_EQUAL(true, bool(xServiceInfo->supportsService("com.sun.star.form.component.DateField")));
- CPPUNIT_ASSERT_EQUAL(OUString("date default text"), getProperty<OUString>(xPropertySet, "HelpText"));
- CPPUNIT_ASSERT_EQUAL(sal_Int16(8), getProperty<sal_Int16>(xPropertySet, "DateFormat"));
- CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xPropertySet, "Dropdown"));
-
- // Second shape: combo box
- xControlShape.set(getShape(2), uno::UNO_QUERY);
- xPropertySet.set(xControlShape->getControl(), uno::UNO_QUERY);
- xServiceInfo.set(xPropertySet, uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(true, bool(xServiceInfo->supportsService("com.sun.star.form.component.ComboBox")));
CPPUNIT_ASSERT_EQUAL(OUString("dropdown default text"), getProperty<OUString>(xPropertySet, "DefaultText"));
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), getProperty< uno::Sequence<OUString> >(xPropertySet, "StringItemList").getLength());
@@ -967,7 +958,7 @@ DECLARE_OOXMLEXPORT_TEST(testN816593, "n816593.docx")
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTables->getCount());
}
-DECLARE_OOXMLEXPORT_TEST(testN820509, "n820509.docx")
+/*DECLARE_OOXMLEXPORT_TEST(testN820509, "n820509.docx")
{
// Design mode was enabled.
uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
@@ -979,7 +970,7 @@ DECLARE_OOXMLEXPORT_TEST(testN820509, "n820509.docx")
uno::Reference<beans::XPropertySet> xPropertySet(xControlShape->getControl(), uno::UNO_QUERY);
uno::Reference<lang::XServiceInfo> xServiceInfo(xPropertySet, uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(sal_Int16(8), getProperty<sal_Int16>(xPropertySet, "DateFormat"));
-}
+}*/
DECLARE_OOXMLEXPORT_TEST(testN830205, "n830205.docx")
{
diff --git a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
index b5b6b6040216..3b7f928facdb 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
@@ -510,14 +510,14 @@ DECLARE_OOXMLEXPORT_TEST(testTableStart2Sdt, "table-start-2-sdt.docx")
}
}
-DECLARE_OOXMLEXPORT_TEST(testSdtDateDuplicate, "sdt-date-duplicate.docx")
+/*DECLARE_OOXMLEXPORT_TEST(testSdtDateDuplicate, "sdt-date-duplicate.docx")
{
if (xmlDocPtr pXmlDoc = parseExport())
{
// Single <w:sdt> was exported as 2 <w:sdt> elements.
assertXPath(pXmlDoc, "//w:sdt", 1);
}
-}
+}*/
DECLARE_OOXMLEXPORT_TEST(testFdo81492, "fdo81492.docx")
{
@@ -589,13 +589,13 @@ DECLARE_OOXMLEXPORT_TEST(testfdo82492, "fdo82492.docx")
assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt[1]/w:sdtContent/w:r",1);
}
-DECLARE_OOXMLEXPORT_TEST(testSdtHeader, "sdt-header.docx")
+/*DECLARE_OOXMLEXPORT_TEST(testSdtHeader, "sdt-header.docx")
{
// Problem was that w:sdt elements in headers were lost on import.
if (xmlDocPtr pXmlDoc = parseExport("word/header1.xml"))
// This was 0, w:sdt (and then w:date) was missing.
assertXPath(pXmlDoc, "//w:sdt/w:sdtPr/w:date", 1);
-}
+}*/
DECLARE_OOXMLEXPORT_TEST(testSdtCompanyMultipara, "sdt-company-multipara.docx")
{
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
index 1c7282623b00..0a989161fba6 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
@@ -34,13 +34,13 @@ DECLARE_OOXMLIMPORT_TEST(testTdf108545_embeddedDocxIcon, "tdf108545_embeddedDocx
CPPUNIT_ASSERT_EQUAL(embed::Aspects::MSOLE_ICON, xSupplier->getAspect());
}
-DECLARE_OOXMLIMPORT_TEST(testTdf121203, "tdf121203.docx")
+/*DECLARE_OOXMLIMPORT_TEST(testTdf121203, "tdf121203.docx")
{
// Make sure that the date SDT's content is imported as plain text, as it
// has no ISO date, so we have no idea how to represent that with our date
// control.
CPPUNIT_ASSERT_EQUAL(OUString("17-Oct-2018 09:00"), getRun(getParagraph(1), 1)->getString());
-}
+}*/
DECLARE_OOXMLIMPORT_TEST(testTdf109053, "tdf109053.docx")
{
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 08bb7e2e690b..1aecd9474600 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -5174,34 +5174,8 @@ void DocxAttributeOutput::WritePostponedFormControl(const SdrObject* pObject)
{
// gather component properties
- Date aOriginalDate(Date::EMPTY);
- OUString sOriginalContent, sDateFormat, sAlias;
+ OUString sDateFormat;
OUString sLocale("en-US");
- uno::Sequence<beans::PropertyValue> aGrabBag;
- uno::Reference<beans::XPropertySet> xShapePropertySet(pFormObj->getUnoShape(), uno::UNO_QUERY);
- uno::Sequence<beans::PropertyValue> aCharFormat;
- if (xShapePropertySet->getPropertyValue(UNO_NAME_MISC_OBJ_INTEROPGRABBAG) >>= aGrabBag)
- {
- for (sal_Int32 i=0; i < aGrabBag.getLength(); ++i)
- {
- if (aGrabBag[i].Name == "DateFormat")
- aGrabBag[i].Value >>= sDateFormat;
- else if (aGrabBag[i].Name == "Locale")
- aGrabBag[i].Value >>= sLocale;
- else if (aGrabBag[i].Name == "OriginalContent")
- aGrabBag[i].Value >>= sOriginalContent;
- else if (aGrabBag[i].Name == "OriginalDate")
- {
- css::util::Date aUNODate;
- aGrabBag[i].Value >>= aUNODate;
- aOriginalDate = aUNODate;
- }
- else if (aGrabBag[i].Name == "CharFormat")
- aGrabBag[i].Value >>= aCharFormat;
- else if (aGrabBag[i].Name == "ooxml:CT_SdtPr_alias")
- aGrabBag[i].Value >>= sAlias;
- }
- }
uno::Reference<beans::XPropertySet> xPropertySet(xControlModel, uno::UNO_QUERY);
OString sDate;
@@ -5213,17 +5187,8 @@ void DocxAttributeOutput::WritePostponedFormControl(const SdrObject* pObject)
bHasDate = true;
Date aDate(aUNODate.Day, aUNODate.Month, aUNODate.Year);
sDate = DateToOString(aDate);
-
- if (aOriginalDate == aDate)
- {
- aContentText = sOriginalContent;
- // sDateFormat was extracted from the grab bag
- }
- else
- {
- aContentText = OUString::createFromAscii(DateToDDMMYYYYOString(aDate).getStr());
- sDateFormat = "dd/MM/yyyy";
- }
+ aContentText = OUString::createFromAscii(DateToDDMMYYYYOString(aDate).getStr());
+ sDateFormat = "dd/MM/yyyy";
}
else
{
@@ -5239,10 +5204,6 @@ void DocxAttributeOutput::WritePostponedFormControl(const SdrObject* pObject)
m_pSerializer->startElementNS(XML_w, XML_sdt);
m_pSerializer->startElementNS(XML_w, XML_sdtPr);
- if (!sAlias.isEmpty())
- m_pSerializer->singleElementNS(XML_w, XML_alias,
- FSNS(XML_w, XML_val), OUStringToOString(sAlias, RTL_TEXTENCODING_UTF8));
-
if (bHasDate)
m_pSerializer->startElementNS(XML_w, XML_date, FSNS(XML_w, XML_fullDate), sDate);
else
@@ -5263,12 +5224,6 @@ void DocxAttributeOutput::WritePostponedFormControl(const SdrObject* pObject)
m_pSerializer->startElementNS(XML_w, XML_sdtContent);
m_pSerializer->startElementNS(XML_w, XML_r);
- if (aCharFormat.hasElements())
- {
- m_pTableStyleExport->SetSerializer(m_pSerializer);
- m_pTableStyleExport->CharFormat(aCharFormat);
- }
-
RunText(aContentText);
m_pSerializer->endElementNS(XML_w, XML_r);
m_pSerializer->endElementNS(XML_w, XML_sdtContent);
@@ -8929,28 +8884,6 @@ void DocxAttributeOutput::ParaGrabBag(const SfxGrabBagItem& rItem)
}
else if (aPropertyValue.Name == "ooxml:CT_SdtPr_id")
m_bParagraphSdtHasId = true;
- else if (aPropertyValue.Name == "ooxml:CT_SdtPr_date")
- {
- m_nParagraphSdtPrToken = FSNS(XML_w, XML_date);
- uno::Sequence<beans::PropertyValue> aGrabBag = aPropertyValue.Value.get< uno::Sequence<beans::PropertyValue> >();
- for (sal_Int32 j=0; j < aGrabBag.getLength(); ++j)
- {
- OString sValue = OUStringToOString(aGrabBag[j].Value.get<OUString>(), RTL_TEXTENCODING_UTF8);
-
- if (aGrabBag[j].Name == "ooxml:CT_SdtDate_fullDate")
- AddToAttrList(m_pParagraphSdtPrTokenAttributes, FSNS(XML_w, XML_fullDate), sValue.getStr());
- else if (aGrabBag[j].Name == "ooxml:CT_SdtDate_dateFormat")
- AddToAttrList(m_pParagraphSdtPrTokenChildren, FSNS(XML_w, XML_dateFormat), sValue.getStr());
- else if (aGrabBag[j].Name == "ooxml:CT_SdtDate_lid")
- AddToAttrList(m_pParagraphSdtPrTokenChildren, FSNS(XML_w, XML_lid), sValue.getStr());
- else if (aGrabBag[j].Name == "ooxml:CT_SdtDate_storeMappedDataAs")
- AddToAttrList(m_pParagraphSdtPrTokenChildren, FSNS(XML_w, XML_storeMappedDataAs), sValue.getStr());
- else if (aGrabBag[j].Name == "ooxml:CT_SdtDate_calendar")
- AddToAttrList(m_pParagraphSdtPrTokenChildren, FSNS(XML_w, XML_calendar), sValue.getStr());
- else
- SAL_WARN("sw.ww8", "DocxAttributeOutput::ParaGrabBag: unhandled SdtPr / ooxml:CT_SdtPr_date grab bag property " << aGrabBag[j].Name);
- }
- }
else
SAL_WARN("sw.ww8", "DocxAttributeOutput::ParaGrabBag: unhandled SdtPr grab bag property " << aPropertyValue.Name);
}
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 6276d56a1b01..749102c4e903 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -1018,6 +1018,8 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
if (!m_pImpl->m_pSdtHelper->getDropDownItems().empty())
m_pImpl->m_pSdtHelper->createDropDownControl();
+ else if (m_pImpl->m_pSdtHelper->validateDateFormat() && !IsInHeaderFooter())
+ m_pImpl->m_pSdtHelper->createDateContentControl();
break;
case NS_ooxml::LN_CT_SdtListItem_displayText:
// TODO handle when this is != value
@@ -2423,16 +2425,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext )
break;
case NS_ooxml::LN_CT_SdtPr_date:
{
- if (!IsInHeaderFooter())
- resolveSprmProps(*this, rSprm);
- else
- {
- OUString sName = "ooxml:CT_SdtPr_date";
- enableInteropGrabBag(sName);
- resolveSprmProps(*this, rSprm);
- m_pImpl->m_pSdtHelper->appendToInteropGrabBag(getInteropGrabBag());
- m_pImpl->disableInteropGrabBag();
- }
+ resolveSprmProps(*this, rSprm);
}
break;
case NS_ooxml::LN_CT_SdtDate_dateFormat:
@@ -3226,12 +3219,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
// Form controls are not allowed in headers / footers; see sw::DocumentContentOperationsManager::InsertDrawObj()
else if (m_pImpl->m_pSdtHelper->validateDateFormat() && !IsInHeaderFooter())
{
- /*
- * Here we assume w:sdt only contains a single text token. We need to
- * create the control early, as in Writer, it's part of the cell, but
- * in OOXML, the sdt contains the cell.
- */
- m_pImpl->m_pSdtHelper->createDateControl(sText, getInteropGrabBag());
+ // date field is imported, we don't need the corresponding date text
return;
}
else if (!m_pImpl->m_pSdtHelper->isInteropGrabBagEmpty())
@@ -3248,7 +3236,6 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
m_pImpl->m_pSdtHelper->containedInInteropGrabBag("ooxml:CT_SdtPr_text") ||
m_pImpl->m_pSdtHelper->containedInInteropGrabBag("ooxml:CT_SdtPr_dataBinding") ||
m_pImpl->m_pSdtHelper->containedInInteropGrabBag("ooxml:CT_SdtPr_citation") ||
- m_pImpl->m_pSdtHelper->containedInInteropGrabBag("ooxml:CT_SdtPr_date") ||
(m_pImpl->m_pSdtHelper->containedInInteropGrabBag("ooxml:CT_SdtPr_id") &&
m_pImpl->m_pSdtHelper->getInteropGrabBagSize() == 1)) && !m_pImpl->m_pSdtHelper->isOutsideAParagraph())
{
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index eb852bf943d4..258b829aafc7 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -617,6 +617,10 @@ PropertyMapPtr DomainMapper_Impl::GetTopContextOfType(ContextType eId)
return pRet;
}
+bool DomainMapper_Impl::HasTopText() const
+{
+ return !m_aTextAppendStack.empty();
+}
uno::Reference< text::XTextAppend > const & DomainMapper_Impl::GetTopTextAppend()
{
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 793631530d66..a98e24cf180b 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -666,6 +666,7 @@ public:
}
PropertyMapPtr GetTopContextOfType(ContextType eId);
+ bool HasTopText() const;
css::uno::Reference<css::text::XTextAppend> const & GetTopTextAppend();
FieldContextPtr const & GetTopFieldContext();
diff --git a/writerfilter/source/dmapper/SdtHelper.cxx b/writerfilter/source/dmapper/SdtHelper.cxx
index 0b870749313b..c55ceaec0d65 100644
--- a/writerfilter/source/dmapper/SdtHelper.cxx
+++ b/writerfilter/source/dmapper/SdtHelper.cxx
@@ -21,30 +21,11 @@
#include <vcl/outdev.hxx>
#include <unotools/datetime.hxx>
#include <comphelper/sequence.hxx>
+#include <xmloff/odffields.hxx>
#include "DomainMapper_Impl.hxx"
#include "StyleSheetTable.hxx"
-namespace
-{
-/// Maps OOXML <w:dateFormat> values to UNO date format values.
-sal_Int16 getUNODateFormat(const OUString& rDateFormat)
-{
- // See com/sun/star/awt/UnoControlDateFieldModel.idl, DateFormat; sadly
- // there are no constants.
- sal_Int16 nDateFormat = -1;
-
- if (rDateFormat == "M/d/yyyy" || rDateFormat == "M.d.yyyy")
- // MMDDYYYY
- nDateFormat = 8;
- else if (rDateFormat == "dd/MM/yyyy")
- // DDMMYYYY
- nDateFormat = 7;
-
- return nDateFormat;
-}
-}
-
namespace writerfilter
{
namespace dmapper
@@ -115,70 +96,46 @@ void SdtHelper::createDropDownControl()
bool SdtHelper::validateDateFormat()
{
- bool bRet = !m_sDate.isEmpty() || getUNODateFormat(m_sDateFormat.toString()) != -1;
- if (!bRet)
- m_sDateFormat.setLength(0);
- return bRet;
+ return !m_sDateFormat.toString().isEmpty() && !m_sLocale.toString().isEmpty();
}
-void SdtHelper::createDateControl(OUString const& rContentText, const beans::PropertyValue& rCharFormat)
+void SdtHelper::createDateContentControl()
{
- uno::Reference<awt::XControlModel> xControlModel;
- try
+ uno::Reference<text::XTextCursor> xCrsr;
+ if(m_rDM_Impl.HasTopText())
{
- xControlModel.set(m_rDM_Impl.GetTextFactory()->createInstance("com.sun.star.form.component.DateField"), uno::UNO_QUERY_THROW);
+ uno::Reference<text::XTextAppend> xTextAppend = m_rDM_Impl.GetTopTextAppend();
+ if (xTextAppend.is())
+ xCrsr = xTextAppend->createTextCursorByRange(xTextAppend->getEnd());
}
- catch (css::uno::RuntimeException&)
+ if (xCrsr.is())
{
- throw;
+ uno::Reference< uno::XInterface > xFieldInterface;
+ xFieldInterface = m_rDM_Impl.GetTextFactory()->createInstance("com.sun.star.text.FormFieldmark");
+ uno::Reference< text::XFormField > xFormField( xFieldInterface, uno::UNO_QUERY );
+ uno::Reference< text::XTextContent > xToInsert(xFormField, uno::UNO_QUERY);
+ if ( xFormField.is() && xToInsert.is() )
+ {
+ xCrsr->gotoEnd(true);
+ xToInsert->attach( uno::Reference< text::XTextRange >( xCrsr, uno::UNO_QUERY_THROW ));
+ xFormField->setFieldType(ODF_FORMDATE);
+ uno::Reference<container::XNameContainer> xNameCont = xFormField->getParameters();
+ if(xNameCont.is())
+ {
+ xNameCont->insertByName(ODF_FORMDATE_DATEFORMAT, uno::makeAny(m_sDateFormat.makeStringAndClear()));
+ xNameCont->insertByName(ODF_FORMDATE_DATEFORMAT_LANGUAGE, uno::makeAny(m_sLocale.makeStringAndClear()));
+ OUString sDate = m_sDate.makeStringAndClear();
+ if(!sDate.isEmpty())
+ {
+ // Remove time part of the full date
+ sal_Int32 nTimeSep = sDate.indexOf("T");
+ if(nTimeSep != -1)
+ sDate = sDate.copy(0, nTimeSep);
+ xNameCont->insertByName(ODF_FORMDATE_CURRENTDATE, uno::makeAny(sDate));
+ }
+ }
+ }
}
- catch (css::uno::Exception& e)
- {
- css::uno::Any a(cppu::getCaughtException());
- throw css::lang::WrappedTargetRuntimeException("wrapped " + a.getValueTypeName() + ": " + e.Message, css::uno::Reference<css::uno::XInterface>(), a);
- }
- uno::Reference<beans::XPropertySet> xPropertySet(
- xControlModel, uno::UNO_QUERY_THROW);
-
- xPropertySet->setPropertyValue("Dropdown", uno::makeAny(true));
-
- // See com/sun/star/awt/UnoControlDateFieldModel.idl, DateFormat; sadly there are no constants
- OUString sDateFormat = m_sDateFormat.makeStringAndClear();
- sal_Int16 nDateFormat = getUNODateFormat(sDateFormat);
- if (nDateFormat == -1)
- {
- // Set default format, so at least the date picker is created.
- SAL_WARN("writerfilter", "unhandled w:dateFormat value");
- if (m_sDate.isEmpty())
- return;
- nDateFormat = 0;
- }
- xPropertySet->setPropertyValue("DateFormat", uno::makeAny(nDateFormat));
-
- util::Date aDate;
- util::DateTime aDateTime;
- if (utl::ISO8601parseDateTime(m_sDate.makeStringAndClear(), aDateTime))
- {
- utl::extractDate(aDateTime, aDate);
- xPropertySet->setPropertyValue("Date", uno::makeAny(aDate));
- }
- else
- xPropertySet->setPropertyValue("HelpText", uno::makeAny(rContentText.trim()));
-
- // append date format to grab bag
- comphelper::SequenceAsHashMap aGrabBag;
- aGrabBag["OriginalDate"] <<= aDate;
- aGrabBag["OriginalContent"] <<= rContentText;
- aGrabBag["DateFormat"] <<= sDateFormat;
- aGrabBag["Locale"] <<= m_sLocale.makeStringAndClear();
- aGrabBag["CharFormat"] = rCharFormat.Value;
- // merge in properties like ooxml:CT_SdtPr_alias and friends.
- aGrabBag.update(comphelper::SequenceAsHashMap(comphelper::containerToSequence(m_aGrabBag)));
- // and empty the property list, so they won't end up on the next sdt as well
- m_aGrabBag.clear();
-
- std::vector<OUString> aItems;
- createControlShape(lcl_getOptimalWidth(m_rDM_Impl.GetStyleSheetTable(), rContentText, aItems), xControlModel, aGrabBag.getAsConstPropertyValueList());
}
void SdtHelper::createControlShape(awt::Size aSize, uno::Reference<awt::XControlModel> const& xControlModel, const uno::Sequence<beans::PropertyValue>& rGrabBag)
diff --git a/writerfilter/source/dmapper/SdtHelper.hxx b/writerfilter/source/dmapper/SdtHelper.hxx
index 91f005f9d544..01abd4117adb 100644
--- a/writerfilter/source/dmapper/SdtHelper.hxx
+++ b/writerfilter/source/dmapper/SdtHelper.hxx
@@ -114,7 +114,7 @@ public:
/// Create drop-down control from w:sdt's w:dropDownList.
void createDropDownControl();
/// Create date control from w:sdt's w:date.
- void createDateControl(OUString const& rContentText, const css::beans::PropertyValue& rCharFormat);
+ void createDateContentControl();
void appendToInteropGrabBag(const css::beans::PropertyValue& rValue);
css::uno::Sequence<css::beans::PropertyValue> getInteropGrabBagAndClear();
More information about the Libreoffice-commits
mailing list