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 <vmiklos@collabora.com>
diff --git a/include/oox/export/drawingml.hxx b/include/oox/export/drawingml.hxx
index 2876d59..7f6de9f 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 5f42dc1..2659863 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)