summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacobo Aragunde Pérez <jaragunde@igalia.com>2014-03-07 13:20:55 +0100
committerJacobo Aragunde Pérez <jaragunde@igalia.com>2014-03-08 17:50:59 +0100
commit4dcad28a5e2415c81d018bf38b4e8ed10f42da79 (patch)
treed4da1cdf142806587cc09be920b72f6a9b4c7cfc
parent09c3b8ab70b115aaea8fe68557da2cc5edde4181 (diff)
writerfilter: import date into docx date controls
Date controls specified by <sdt> tags in docx documents were being imported but the date was being discarded. To import the date, we added an attribute to the CT_SdtDate resource in the ooxml model file to be able to read the date ISO definition contained by the fullDate attribute. We store it in the SdtHelper class and we transform it in a Date when the control is created. Change-Id: Iac2d4f99c31188848c109fafb54121bfcdde060d
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx3
-rw-r--r--writerfilter/source/dmapper/SdtHelper.cxx14
-rw-r--r--writerfilter/source/dmapper/SdtHelper.hxx3
-rw-r--r--writerfilter/source/ooxml/model.xml1
4 files changed, 21 insertions, 0 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index f414f7c5f854..c7e63442c62c 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -878,6 +878,9 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
case NS_ooxml::LN_CT_SdtListItem_value:
m_pImpl->m_pSdtHelper->getDropDownItems().push_back(sStringValue);
break;
+ case NS_ooxml::LN_CT_SdtDate_fullDate:
+ m_pImpl->m_pSdtHelper->getDate().append(sStringValue);
+ break;
case NS_ooxml::LN_CT_Background_color:
m_pImpl->m_oBackgroundColor.reset(nIntValue);
break;
diff --git a/writerfilter/source/dmapper/SdtHelper.cxx b/writerfilter/source/dmapper/SdtHelper.cxx
index 5f84ba8968a1..1e1aa4c6dd88 100644
--- a/writerfilter/source/dmapper/SdtHelper.cxx
+++ b/writerfilter/source/dmapper/SdtHelper.cxx
@@ -14,6 +14,7 @@
#include <vcl/outdev.hxx>
#include <vcl/svapp.hxx>
+#include <unotools/datetime.hxx>
#include <DomainMapper_Impl.hxx>
#include <StyleSheetTable.hxx>
@@ -99,6 +100,14 @@ void SdtHelper::createDateControl(OUString& rDefaultText)
xPropertySet->setPropertyValue("DateFormat", uno::makeAny(*m_oDateFormat));
m_oDateFormat.reset();
+ util::Date aDate;
+ util::DateTime aDateTime;
+ if(utl::ISO8601parseDateTime(m_sDate.makeStringAndClear(), aDateTime))
+ {
+ utl::extractDate(aDateTime, aDate);
+ xPropertySet->setPropertyValue("Date", uno::makeAny(aDate));
+ }
+
std::vector<OUString> aItems;
createControlShape(lcl_getOptimalWidth(m_rDM_Impl.GetStyleSheetTable(), rDefaultText, aItems), xControlModel);
}
@@ -127,6 +136,11 @@ OUStringBuffer& SdtHelper::getSdtTexts()
return m_aSdtTexts;
}
+OUStringBuffer& SdtHelper::getDate()
+{
+ return m_sDate;
+}
+
boost::optional<sal_Int16>& SdtHelper::getDateFormat()
{
return m_oDateFormat;
diff --git a/writerfilter/source/dmapper/SdtHelper.hxx b/writerfilter/source/dmapper/SdtHelper.hxx
index 96f44bb84f06..f58f00807fe4 100644
--- a/writerfilter/source/dmapper/SdtHelper.hxx
+++ b/writerfilter/source/dmapper/SdtHelper.hxx
@@ -51,6 +51,8 @@ class SdtHelper
std::vector<OUString> m_aDropDownItems;
/// Pieces of the default text -- currently used only by the dropdown control.
OUStringBuffer m_aSdtTexts;
+ /// Date ISO string contained in the w:date element, used by the date control.
+ OUStringBuffer m_sDate;
/// Date format, see com/sun/star/awt/UnoControlDateFieldModel.idl
boost::optional<sal_Int16> m_oDateFormat;
@@ -64,6 +66,7 @@ public:
std::vector<OUString>& getDropDownItems();
OUStringBuffer& getSdtTexts();
+ OUStringBuffer& getDate();
boost::optional<sal_Int16>& getDateFormat();
/// If createControlShape() was ever called.
bool hasElements();
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index 2933d548673f..34eb59d5d251 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -24563,6 +24563,7 @@
<element name="listItem" tokenid="ooxml:CT_SdtDropDownList_listItem"/>
</resource>
<resource name="CT_SdtDate" resource="Properties" tag="field">
+ <attribute name="fullDate" tokenid="ooxml:CT_SdtDate_fullDate"/>
<element name="dateFormat" tokenid="ooxml:CT_SdtDate_dateFormat"/>
</resource>
<resource name="CT_SdtListItem" resource="Properties" tag="field">