include/oox/export/drawingml.hxx | 18 ++++++ oox/source/export/drawingml.cxx | 108 ++++++++++++++++++++++++++++----------- 2 files changed, 97 insertions(+), 29 deletions(-)
New commits: commit ba66d49db89678628975b29612c0caab49457adf Author: Sarper Akdemir <sarper.akde...@collabora.com> AuthorDate: Wed Jun 9 07:34:32 2021 +0300 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Wed Jun 16 14:34:14 2021 +0200 tdf#59323: pptx export: add datetime field type helpers Creates helper functions to convert from LO time and date formats to datetime fields on OOXML Change-Id: Ibbfefa18d0422eddb6c37539294ed23e77fe5f22 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117009 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmik...@collabora.com> diff --git a/include/oox/export/drawingml.hxx b/include/oox/export/drawingml.hxx index 2876d59c5367..7f6de9f99006 100644 --- a/include/oox/export/drawingml.hxx +++ b/include/oox/export/drawingml.hxx @@ -46,6 +46,8 @@ class Graphic; class SdrObjCustomShape; +enum class SvxDateFormat; +enum class SvxTimeFormat; namespace com::sun::star { namespace awt { @@ -166,6 +168,22 @@ protected: const css::uno::Reference< css::beans::XPropertyState >& rXPropState, const OUString& aName, css::beans::PropertyState& eState ); OUString GetFieldValue( const css::uno::Reference< css::text::XTextRange >& rRun, bool& bIsURLField ); + /** Gets OOXML datetime field type from LO Date format + + @param eDate LO Date format + */ + static OUString GetDatetimeTypeFromDate(SvxDateFormat eDate); + /** Gets OOXML datetime field type from LO Time format + + @param eTime LO Time format + */ + static OUString GetDatetimeTypeFromTime(SvxTimeFormat eTime); + /** Gets OOXML datetime field type from combination of LO Time and Date formats + + @param eDate LO Date format + @param eTime LO Time format + */ + static OUString GetDatetimeTypeFromDateTime(SvxDateFormat eDate, SvxTimeFormat eTime); /// Output the media (including copying a video from vnd.sun.star.Package: to the output if necessary). void WriteMediaNonVisualProperties(const css::uno::Reference<css::drawing::XShape>& xShape); diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index 5f42dc18cd75..26598636efbd 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -2286,40 +2286,13 @@ OUString DrawingML::GetFieldValue( const css::uno::Reference< css::text::XTextRa { sal_Int32 nNumFmt = -1; rXPropSet->getPropertyValue(UNO_TC_PROP_NUMFORMAT) >>= nNumFmt; - switch(static_cast<SvxDateFormat>(nNumFmt)) - { - case SvxDateFormat::StdSmall: - case SvxDateFormat::A: aFieldValue = "datetime"; // 13/02/96 - break; - case SvxDateFormat::B: aFieldValue = "datetime1"; // 13/02/1996 - break; - case SvxDateFormat::StdBig: - case SvxDateFormat::D: aFieldValue = "datetime3"; // 13 February 1996 - break; - default: break; - } + aFieldValue = GetDatetimeTypeFromDate(static_cast<SvxDateFormat>(nNumFmt)); } else if(aFieldKind == "ExtTime") { sal_Int32 nNumFmt = -1; rXPropSet->getPropertyValue(UNO_TC_PROP_NUMFORMAT) >>= nNumFmt; - switch(static_cast<SvxTimeFormat>(nNumFmt)) - { - case SvxTimeFormat::Standard: - case SvxTimeFormat::HH24_MM_SS: - aFieldValue = "datetime11"; // 13:49:38 - break; - case SvxTimeFormat::HH24_MM: - aFieldValue = "datetime10"; // 13:49 - break; - case SvxTimeFormat::HH12_MM: - aFieldValue = "datetime12"; // 01:49 PM - break; - case SvxTimeFormat::HH12_MM_SS: - aFieldValue = "datetime13"; // 01:49:38 PM - break; - default: break; - } + aFieldValue = GetDatetimeTypeFromTime(static_cast<SvxTimeFormat>(nNumFmt)); } else if(aFieldKind == "ExtFile") { @@ -2346,6 +2319,83 @@ OUString DrawingML::GetFieldValue( const css::uno::Reference< css::text::XTextRa return aFieldValue; } +OUString DrawingML::GetDatetimeTypeFromDate(SvxDateFormat eDate) +{ + return GetDatetimeTypeFromDateTime(eDate, SvxTimeFormat::AppDefault); +} + +OUString DrawingML::GetDatetimeTypeFromTime(SvxTimeFormat eTime) +{ + return GetDatetimeTypeFromDateTime(SvxDateFormat::AppDefault, eTime); +} + +OUString DrawingML::GetDatetimeTypeFromDateTime(SvxDateFormat eDate, SvxTimeFormat eTime) +{ + OUString aDateField; + switch (eDate) + { + case SvxDateFormat::StdSmall: + case SvxDateFormat::A: + aDateField = "datetime"; + break; + case SvxDateFormat::B: + aDateField = "datetime1"; // 13/02/1996 + break; + case SvxDateFormat::StdBig: + case SvxDateFormat::C: + case SvxDateFormat::D: + aDateField = "datetime3"; // 13 February 1996 + break; + case SvxDateFormat::E: + case SvxDateFormat::F: + aDateField = "datetime2"; + break; + default: + break; + } + + OUString aTimeField; + switch (eTime) + { + case SvxTimeFormat::Standard: + case SvxTimeFormat::HH24_MM_SS: + case SvxTimeFormat::HH24_MM_SS_00: + aTimeField = "datetime11"; // 13:49:38 + break; + case SvxTimeFormat::HH24_MM: + aTimeField = "datetime10"; // 13:49 + break; + case SvxTimeFormat::HH12_MM: + case SvxTimeFormat::HH12_MM_AMPM: + aTimeField = "datetime12"; // 01:49 PM + break; + case SvxTimeFormat::HH12_MM_SS: + case SvxTimeFormat::HH12_MM_SS_AMPM: + case SvxTimeFormat::HH12_MM_SS_00: + case SvxTimeFormat::HH12_MM_SS_00_AMPM: + aTimeField = "datetime13"; // 01:49:38 PM + break; + default: + break; + } + + if (!aDateField.isEmpty() && aTimeField.isEmpty()) + return aDateField; + else if (!aTimeField.isEmpty() && aDateField.isEmpty()) + return aTimeField; + else if (!aDateField.isEmpty() && !aTimeField.isEmpty()) + { + if (aTimeField == "datetime11" || aTimeField == "datetime13") + // only datetime format that has Date and HH:MM:SS + return "datetime9"; // dd/mm/yyyy H:MM:SS + else + // only datetime format that has Date and HH:MM + return "datetime8"; // dd/mm/yyyy H:MM + } + else + return ""; +} + void DrawingML::WriteRun( const Reference< XTextRange >& rRun, bool& rbOverridingCharHeight, sal_Int32& rnCharHeight, const css::uno::Reference< css::beans::XPropertySet >& rXShapePropSet) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits