From e172825b535da17c1a1d70ee1caebf43c933f39a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacobo=20Aragunde=20P=C3=A9rez?= Date: Mon, 10 Mar 2014 17:53:44 +0100 Subject: [PATCH] ooxml: preserve dateFormat for unchanged date controls When saving a date control in a docx document, we were overwriting its date format with "dd/MM/yyyy" because it's tricky to support all the possible combinations. Nonetheless, there is no need to overwrite it if the date in the control remains unchanged during edition. We preserve the original date of the control, its date format and the formatted date string on import, and we compare the date in the control with the original one on export to check if we can write the old values or we have to re-generate them. Only in case the date has changed the format will be reset to "dd/MM/yyyy". We had to add an InteropGrabBag field to the XControlShape because it didn't have one, unlike other shapes. Unit tests were modified to check that the dateFormat field is preserved unchanged. Change-Id: I01e5c990e90ff190b5a6d7ea3853e049ff24ef0a --- svx/source/unodraw/unoprov.cxx | 1 + .../extras/ooxmlexport/data/date-control.docx | Bin 21367 -> 20936 bytes sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 3 +- sw/source/filter/ww8/docxattributeoutput.cxx | 34 ++++++++++++++++-- writerfilter/source/dmapper/SdtHelper.cxx | 20 ++++++++++- writerfilter/source/dmapper/SdtHelper.hxx | 2 ++ 6 files changed, 56 insertions(+), 4 deletions(-) diff --git a/svx/source/unodraw/unoprov.cxx b/svx/source/unodraw/unoprov.cxx index 986c290e4544..da19e34fb04e 100644 --- a/svx/source/unodraw/unoprov.cxx +++ b/svx/source/unodraw/unoprov.cxx @@ -618,6 +618,7 @@ SfxItemPropertyMapEntry const * ImplGetSvxControlShapePropertyMap() // #i112587# { OUString(UNO_NAME_MISC_OBJ_PRINTABLE), SDRATTR_OBJPRINTABLE , ::getBooleanCppuType(), 0, 0}, { OUString("Visible"), SDRATTR_OBJVISIBLE , ::getBooleanCppuType(), 0, 0}, + { OUString(UNO_NAME_MISC_OBJ_INTEROPGRABBAG), OWN_ATTR_INTEROPGRABBAG, ::getCppuType((::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >*)0), 0, 0}, { OUString(), 0, css::uno::Type(), 0, 0 } }; diff --git a/sw/qa/extras/ooxmlexport/data/date-control.docx b/sw/qa/extras/ooxmlexport/data/date-control.docx index 0563d56aac35818c2926482b9edc80dc766fd0b1..fdf22991370246b2fae814b5899a3754f7d051ff 100644 GIT binary patch delta 15467 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 Z?+Oo$ztH~Ux|9@1RpSF}hT{9#{|9F|8$SR5 delta 15972 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 G_P+pF5xt@S diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index 80189af85323..957dfbe9430d 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -2963,7 +2963,8 @@ DECLARE_OOXMLEXPORT_TEST(testDateControl, "date-control.docx") if (!pXmlDoc) return; assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:date", "fullDate", "2014-03-05T00:00:00Z"); - assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtContent/w:r/w:t", "05/03/2014"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:date/w:dateFormat", "val", "dddd, dd' de 'MMMM' de 'yyyy"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtContent/w:r/w:t", "miƩrcoles, 05 de marzo de 2014"); // check imported control uno::Reference xControl(getShape(1), uno::UNO_QUERY); diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 294927108bc3..a233c2317adc 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -3599,6 +3599,25 @@ void DocxAttributeOutput::WritePostponedFormControl(const SdrObject* pObject) { // gather component properties + Date aOriginalDate(Date::EMPTY); + OUString sOriginalContent, sDateFormat; + uno::Sequence aGrabBag; + uno::Reference xShapePropertySet(pFormObj->getUnoShape(), uno::UNO_QUERY); + 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 == "OriginalContent") + aGrabBag[i].Value >>= sOriginalContent; + else if (aGrabBag[i].Name == "OriginalDate") + { + css::util::Date aUNODate; + aGrabBag[i].Value >>= aUNODate; + aOriginalDate.SetDay(aUNODate.Day); + aOriginalDate.SetMonth(aUNODate.Month); + aOriginalDate.SetYear(aUNODate.Year); + } + uno::Reference xPropertySet(xControlModel, uno::UNO_QUERY); OString sDate; @@ -3610,7 +3629,17 @@ void DocxAttributeOutput::WritePostponedFormControl(const SdrObject* pObject) bHasDate = true; Date aDate(aUNODate.Day, aUNODate.Month, aUNODate.Year); sDate = DateToOString(aDate); - aContentText = OUString::createFromAscii(DateToDDMMYYYYOString(aDate).getStr()); + + if (aOriginalDate == aDate) + { + aContentText = sOriginalContent; + // sDateFormat was extracted from the grab bag + } + else + { + aContentText = OUString::createFromAscii(DateToDDMMYYYYOString(aDate).getStr()); + sDateFormat = "dd/MM/yyyy"; + } } else aContentText = xPropertySet->getPropertyValue("HelpText").get(); @@ -3628,7 +3657,8 @@ void DocxAttributeOutput::WritePostponedFormControl(const SdrObject* pObject) m_pSerializer->startElementNS(XML_w, XML_date, FSEND); m_pSerializer->singleElementNS(XML_w, XML_dateFormat, - FSNS(XML_w, XML_val), "dd/MM/yyyy", //TODO: hardwired + FSNS(XML_w, XML_val), + rtl::OUStringToOString( sDateFormat, RTL_TEXTENCODING_UTF8 ).getStr(), FSEND); m_pSerializer->singleElementNS(XML_w, XML_lid, FSNS(XML_w, XML_val), "en-US", //TODO: hardwired diff --git a/writerfilter/source/dmapper/SdtHelper.cxx b/writerfilter/source/dmapper/SdtHelper.cxx index 63b726aad03c..29ccf477bb2b 100644 --- a/writerfilter/source/dmapper/SdtHelper.cxx +++ b/writerfilter/source/dmapper/SdtHelper.cxx @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -120,11 +121,25 @@ void SdtHelper::createDateControl(OUString& rContentText) else xPropertySet->setPropertyValue("HelpText", uno::makeAny(rContentText)); + // append date format to grab bag + uno::Sequence aGrabBag(3); + aGrabBag[0].Name = "OriginalDate"; + aGrabBag[0].Value = uno::makeAny(aDate); + aGrabBag[1].Name = "OriginalContent"; + aGrabBag[1].Value = uno::makeAny(rContentText); + aGrabBag[2].Name = "DateFormat"; + aGrabBag[2].Value = uno::makeAny(sDateFormat); + std::vector aItems; - createControlShape(lcl_getOptimalWidth(m_rDM_Impl.GetStyleSheetTable(), rContentText, aItems), xControlModel); + createControlShape(lcl_getOptimalWidth(m_rDM_Impl.GetStyleSheetTable(), rContentText, aItems), xControlModel, aGrabBag); } void SdtHelper::createControlShape(awt::Size aSize, uno::Reference xControlModel) +{ + createControlShape(aSize, xControlModel, uno::Sequence()); +} + +void SdtHelper::createControlShape(awt::Size aSize, uno::Reference xControlModel, uno::Sequence rGrabBag) { uno::Reference xControlShape(m_rDM_Impl.GetTextFactory()->createInstance("com.sun.star.drawing.ControlShape"), uno::UNO_QUERY); xControlShape->setSize(aSize); @@ -133,6 +148,9 @@ void SdtHelper::createControlShape(awt::Size aSize, uno::Reference xPropertySet(xControlShape, uno::UNO_QUERY); xPropertySet->setPropertyValue("VertOrient", uno::makeAny(text::VertOrientation::CENTER)); + if(rGrabBag.hasElements()) + xPropertySet->setPropertyValue(UNO_NAME_MISC_OBJ_INTEROPGRABBAG, uno::makeAny(rGrabBag)); + uno::Reference xTextContent(xControlShape, uno::UNO_QUERY); m_rDM_Impl.appendTextContent(xTextContent, uno::Sequence< beans::PropertyValue >()); m_bHasElements = true; diff --git a/writerfilter/source/dmapper/SdtHelper.hxx b/writerfilter/source/dmapper/SdtHelper.hxx index e91d9b747901..8d89deabbd8c 100644 --- a/writerfilter/source/dmapper/SdtHelper.hxx +++ b/writerfilter/source/dmapper/SdtHelper.hxx @@ -60,6 +60,8 @@ class SdtHelper /// Create and append the drawing::XControlShape, containing the various models. void createControlShape(com::sun::star::awt::Size aSize, com::sun::star::uno::Reference); + void createControlShape(com::sun::star::awt::Size aSize, com::sun::star::uno::Reference, + com::sun::star::uno::Sequence rGrabBag); public: SdtHelper(DomainMapper_Impl& rDM_Impl); virtual ~SdtHelper();