diff options
author | Jacobo Aragunde Pérez <jaragunde@igalia.com> | 2014-03-07 13:20:55 +0100 |
---|---|---|
committer | Jacobo Aragunde Pérez <jaragunde@igalia.com> | 2014-03-08 17:50:59 +0100 |
commit | 4dcad28a5e2415c81d018bf38b4e8ed10f42da79 (patch) | |
tree | d4da1cdf142806587cc09be920b72f6a9b4c7cfc | |
parent | 09c3b8ab70b115aaea8fe68557da2cc5edde4181 (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.cxx | 3 | ||||
-rw-r--r-- | writerfilter/source/dmapper/SdtHelper.cxx | 14 | ||||
-rw-r--r-- | writerfilter/source/dmapper/SdtHelper.hxx | 3 | ||||
-rw-r--r-- | writerfilter/source/ooxml/model.xml | 1 |
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"> |