42 #include <com/sun/star/awt/Size.hpp>
43 #include <com/sun/star/drawing/LineStyle.hpp>
44 #include <com/sun/star/drawing/FillStyle.hpp>
45 #include <com/sun/star/chart/ChartAxisMarks.hpp>
46 #include <com/sun/star/chart/ChartDataCaption.hpp>
47 #include <com/sun/star/chart2/MovingAverageType.hpp>
48 #include <com/sun/star/chart2/XChartDocument.hpp>
49 #include <com/sun/star/chart2/data/XRangeXMLConversion.hpp>
50 #include <com/sun/star/graphic/XGraphic.hpp>
52 #include <rtl/ustrbuf.hxx>
54 #define SCH_XML_SETFLAG( status, flag ) (status)|= (flag)
55 #define SCH_XML_UNSETFLAG( status, flag ) (status) = ((status) | (flag)) - (flag)
62 #define MAP_FULL( ApiName, NameSpace, XMLTokenName, XMLType, ContextId, EarliestODFVersionForExport ) { ApiName, XML_NAMESPACE_##NameSpace, xmloff::token::XMLTokenName, XMLType|XML_TYPE_PROP_CHART, ContextId, EarliestODFVersionForExport, false }
63 #define MAP_ENTRY( a, ns, nm, t ) { a, XML_NAMESPACE_##ns, xmloff::token::nm, t|XML_TYPE_PROP_CHART, 0, SvtSaveOptions::ODFSVER_010, false }
64 #define MAP_ENTRY_ODF12( a, ns, nm, t ) { a, XML_NAMESPACE_##ns, xmloff::token::nm, t|XML_TYPE_PROP_CHART, 0, SvtSaveOptions::ODFSVER_012, false }
65 #define MAP_ENTRY_ODF13( a, ns, nm, t ) { a, ns, xmloff::token::nm, t|XML_TYPE_PROP_CHART, 0, SvtSaveOptions::ODFSVER_013, false }
66 #define MAP_ENTRY_ODF_EXT( a, ns, nm, t ) { a, XML_NAMESPACE_##ns, xmloff::token::nm, t|XML_TYPE_PROP_CHART, 0, SvtSaveOptions::ODFSVER_FUTURE_EXTENDED, false }
67 #define MAP_ENTRY_ODF_EXT_IMPORT( a, ns, nm, t ) { a, XML_NAMESPACE_##ns, xmloff::token::nm, t|XML_TYPE_PROP_CHART, 0, SvtSaveOptions::ODFSVER_FUTURE_EXTENDED, true }
68 #define MAP_CONTEXT( a, ns, nm, t, c ) { a, XML_NAMESPACE_##ns, xmloff::token::nm, t|XML_TYPE_PROP_CHART, c, SvtSaveOptions::ODFSVER_010, false }
69 #define MAP_SPECIAL( a, ns, nm, t, c ) { a, XML_NAMESPACE_##ns, xmloff::token::nm, t|XML_TYPE_PROP_CHART | MID_FLAG_SPECIAL_ITEM, c, SvtSaveOptions::ODFSVER_010, false }
70 #define MAP_SPECIAL_ODF12( a, ns, nm, t, c ) { a, XML_NAMESPACE_##ns, xmloff::token::nm, t|XML_TYPE_PROP_CHART | MID_FLAG_SPECIAL_ITEM, c, SvtSaveOptions::ODFSVER_012, false }
71 #define MAP_SPECIAL_ODF13( a, ns, nm, t, c ) { a, XML_NAMESPACE_##ns, xmloff::token::nm, t|XML_TYPE_PROP_CHART | MID_FLAG_SPECIAL_ITEM, c, SvtSaveOptions::ODFSVER_013, false }
72 #define MAP_ENTRY_END { nullptr,0,xmloff::token::XML_TOKEN_INVALID,0,0,SvtSaveOptions::ODFSVER_010, false }
359 {
XML_NONE, drawing::LineStyle_NONE },
361 {
XML_DASH, drawing::LineStyle_DASH },
367 {
XML_NONE, drawing::FillStyle_NONE },
510 bool bEnableFoFontFamily,
511 std::vector< XMLPropertyState >& rProperties,
512 const uno::Reference< beans::XPropertySet >& rPropSet )
const
514 OUString aAutoPropName;
515 bool bCheckAuto =
false;
518 for(
auto& rProperty : rProperties )
527 aAutoPropName =
"AutoMin";
531 aAutoPropName =
"AutoMax";
535 aAutoPropName =
"AutoStepMain";
539 aAutoPropName =
"AutoStepHelp";
544 aAutoPropName =
"AutoOrigin";
550 rProperty.mnIndex = -1;
560 rProperty.mnIndex = -1;
571 uno::Any aAny = rPropSet->getPropertyValue( aAutoPropName );
574 rProperty.mnIndex = -1;
576 catch(
const beans::UnknownPropertyException&)
590 const ::std::vector< XMLPropertyState > *pProperties,
591 sal_uInt32 nIdx )
const
597 uno::Reference<graphic::XGraphic> xGraphic;
598 rProperty.
maValue >>= xGraphic;
600 OUString sInternalURL;
605 OUString aOutMimeType;
608 if (!sInternalURL.isEmpty())
614 sal_uInt32 nPropIndex = rProperty.
mnIndex;
632 rProperty.
maValue >>= aSeparator;
634 if( !aSeparator.isEmpty() )
636 sal_uInt32 nPropIndex = rProperty.
mnIndex;
650 nFlags, pProperties, nIdx );
657 OUString convertRange(
const OUString & rRange,
const uno::Reference< chart2::XChartDocument > & xDoc )
659 OUString aResult = rRange;
662 uno::Reference< chart2::data::XRangeXMLConversion > xConversion(
663 xDoc->getDataProvider(), uno::UNO_QUERY );
666 if( xConversion.is())
667 aResult = xConversion->convertRangeToXML( rRange );
669 catch (css::lang::IllegalArgumentException&)
682 const ::std::vector< XMLPropertyState > *pProperties,
683 sal_uInt32 nIdx )
const
685 bool bHandled =
false;
695 OUStringBuffer sValueBuffer;
705 bValue = (( nValue & chart::ChartAxisMarks::INNER ) == chart::ChartAxisMarks::INNER );
711 bValue = (( nValue & chart::ChartAxisMarks::OUTER ) == chart::ChartAxisMarks::OUTER );
718 double fVal =
static_cast<double>(nValue) / 100.0;
725 if( ( nValue & chart::ChartDataCaption::VALUE ) == chart::ChartDataCaption::VALUE )
727 if( ( nValue & chart::ChartDataCaption::PERCENT ) == chart::ChartDataCaption::PERCENT )
739 else if(( nValue & chart::ChartDataCaption::PERCENT ) == chart::ChartDataCaption::PERCENT )
747 bValue = (( nValue & chart::ChartDataCaption::TEXT ) == chart::ChartDataCaption::TEXT );
752 bValue = (( nValue & chart::ChartDataCaption::SYMBOL ) == chart::ChartDataCaption::SYMBOL );
757 bValue = (( nValue & chart::ChartDataCaption::DATA_SERIES ) == chart::ChartDataCaption::DATA_SERIES );
781 rProperty.
maValue >>= aRangeStr;
782 sValueBuffer.append(convertRange(aRangeStr,
mxChartDoc));
790 OUString aServiceName;
791 rProperty.
maValue >>= aServiceName;
792 if (aServiceName ==
"com.sun.star.chart2.LinearRegressionCurve")
794 else if (aServiceName ==
"com.sun.star.chart2.LogarithmicRegressionCurve")
796 else if (aServiceName ==
"com.sun.star.chart2.ExponentialRegressionCurve")
798 else if (aServiceName ==
"com.sun.star.chart2.PotentialRegressionCurve")
814 if (nValue == MovingAverageType::Prior)
816 else if (nValue == MovingAverageType::Central)
818 else if (nValue == MovingAverageType::AveragedAbscissa)
830 if( !sValueBuffer.isEmpty())
832 OUString sValue = sValueBuffer.makeStringAndClear();
833 sAttrName = rNamespaceMap.
GetQNameByKey( nNameSpace, sAttrName );
853 mrImport( const_cast<
SvXMLImport & > ( _rImport ))
858 uno::Reference< frame::XModel > xEmptyModel;
877 ::std::vector< XMLPropertyState >& rProperties,
878 const OUString& rValue,
883 bool bRet = (nContextId != 0);
919 nValue =
static_cast<sal_Int32
>( fVal * 100.0 );
928 SCH_XML_UNSETFLAG( nValue, chart::ChartDataCaption::VALUE | chart::ChartDataCaption::PERCENT );
930 SCH_XML_SETFLAG( nValue, chart::ChartDataCaption::VALUE | chart::ChartDataCaption::PERCENT );
993 rProperty.
maValue <<= OUString(
"com.sun.star.chart2.LinearRegressionCurve");
995 rProperty.
maValue <<= OUString(
"com.sun.star.chart2.LogarithmicRegressionCurve");
997 rProperty.
maValue <<= OUString(
"com.sun.star.chart2.ExponentialRegressionCurve");
999 rProperty.
maValue <<= OUString(
"com.sun.star.chart2.PotentialRegressionCurve");
1001 rProperty.
maValue <<= OUString(
"com.sun.star.chart2.PolynomialRegressionCurve");
1003 rProperty.
maValue <<= OUString(
"com.sun.star.chart2.MovingAverageRegressionCurve");
1010 rProperty.
maValue <<= MovingAverageType::Prior;
1012 rProperty.
maValue <<= MovingAverageType::Central;
1014 rProperty.
maValue <<= MovingAverageType::AveragedAbscissa;
1016 rProperty.
maValue <<= MovingAverageType::Prior;
#define XML_SCH_CONTEXT_SPECIAL_TICKS_MIN_OUTER
virtual const XMLPropertyHandler * GetPropertyHandler(sal_Int32 nType) const override
This method retrieves a PropertyHandler for the given XML-type.
const SvXMLEnumMapEntry< css::chart::ChartAxisLabelPosition > aXMLChartAxisLabelPositionEnumMap[]
bool convertMeasureToCore(sal_Int32 &rValue, std::u16string_view rString, sal_Int32 nMin=SAL_MIN_INT32, sal_Int32 nMax=SAL_MAX_INT32) const
convert string to measure with meCoreMeasureUnit, using optional min and max values ...
#define XML_SCH_TYPE_SYMBOL_TYPE
#define XML_SCH_TYPE_ERROR_BAR_STYLE
#define XML_SCH_CONTEXT_SPECIAL_LABEL_SEPARATOR
virtual void handleElementItem(SvXMLExport &rExport, const XMLPropertyState &rProperty, SvXmlExportFlags nFlags, const ::std::vector< XMLPropertyState > *pProperties, sal_uInt32 nIdx) const
this method is called for every item that has the MID_FLAG_ELEMENT_EXPORT flag set ...
virtual const XMLPropertyHandler * GetPropertyHandler(sal_Int32 nType) const
This method retrieves a PropertyHandler for the given XML-type.
#define XML_SCH_CONTEXT_SPECIAL_MOVING_AVERAGE_TYPE
constexpr sal_uInt16 XML_NAMESPACE_CHART
the SvXMLTypeConverter converts values of various types from their internal representation to the tex...
#define XML_SCH_TYPE_AXIS_POSITION_VALUE
#define XML_SCH_TYPE_TEXT_ORIENTATION
#define XML_SCH_TYPE_NAMED_SYMBOL
constexpr sal_uInt16 XML_NAMESPACE_XLINK
constexpr sal_uInt16 XML_NAMESPACE_LO_EXT
bool IsXMLToken(std::u16string_view rString, enum XMLTokenEnum eToken)
compare eToken to the string
const SvXMLEnumMapEntry< sal_Int32 > aXMLChartMissingValueTreatmentEnumMap[]
static SvXMLExportPropertyMapper * CreateShapePropMapper(SvXMLExport &rExport)
returns the export property mapper for external chaining
XMLChartExportPropertyMapper(const rtl::Reference< XMLPropertySetMapper > &rMapper, SvXMLExport &rExport)
css::uno::Reference< css::graphic::XGraphic > loadGraphicByURL(OUString const &rURL)
virtual void handleSpecialItem(SvXMLAttributeList &rAttrList, const XMLPropertyState &rProperty, const SvXMLUnitConverter &rUnitConverter, const SvXMLNamespaceMap &rNamespaceMap, const ::std::vector< XMLPropertyState > *pProperties, sal_uInt32 nIdx) const
this method is called for every item that has the MID_FLAG_SPECIAL_ITEM_EXPORT flag set ...
#define XML_SCH_CONTEXT_SPECIAL_DATA_LABEL_NUMBER
#define XML_SCH_CONTEXT_SPECIAL_DATA_LABEL_TEXT
#define XML_SCH_TYPE_TICK_MARK_POSITION
const SvXMLEnumMapEntry< sal_Int32 > g_XMLChartInterpolationTypeEnumMap_ODF12[]
#define XML_SCH_CONTEXT_STEP_HELP_COUNT
static void convertDouble(OUStringBuffer &rBuffer, double fNumber, bool bWriteUnits, sal_Int16 nSourceUnit, sal_Int16 nTargetUnit)
PropertyHandler for a generic xml enumeration type:
#define XML_SCH_CONTEXT_LINES_USED
#define MAP_ENTRY(a, ns, nm, t)
#define MID_FLAG_MERGE_ATTRIBUTE
#define XML_TYPE_STYLENAME
#define XML_SCH_CONTEXT_SPECIAL_TICKS_MAJ_INNER
#define MAP_ENTRY_ODF_EXT(a, ns, nm, t)
#define XML_SCH_CONTEXT_SPECIAL_SYMBOL_IMAGE
#define XML_SCH_TYPE_SOLID_TYPE
#define XML_SCH_CONTEXT_LOGARITHMIC
virtual void ContextFilter(bool bEnableFoFontFamily,::std::vector< XMLPropertyState > &rProperties, const css::uno::Reference< css::beans::XPropertySet > &rPropSet) const
Application-specific filter.
#define MAP_SPECIAL_ODF13(a, ns, nm, t, c)
const SvXMLEnumMapEntry< css::chart::ChartAxisArrangeOrderType > aXMLChartAxisArrangementEnumMap[]
void AddAttribute(sal_uInt16 nPrefix, const OUString &rName, const OUString &rValue)
#define XML_SCH_CONTEXT_SPECIAL_TEXT_ROTATION
#define XML_SCH_TYPE_LABEL_BORDER_OPACITY
#define XML_SCH_CONTEXT_SPECIAL_SYMBOL_IMAGE_NAME
virtual ~XMLChartPropHdlFactory() override
#define MID_FLAG_MULTI_PROPERTY
#define MAP_ENTRY_ODF12(a, ns, nm, t)
#define XML_SCH_CONTEXT_STEP_MAIN
#define XML_SCH_CONTEXT_SPECIAL_SYMBOL_WIDTH
OUString AddEmbeddedXGraphic(css::uno::Reference< css::graphic::XGraphic > const &rxGraphic, OUString &rOutMimeType, OUString const &rRequestedName=OUString())
#define MID_FLAG_ELEMENT_ITEM
#define XML_SCH_TYPE_LABEL_PLACEMENT_TYPE
#define XML_SCH_CONTEXT_MIN
#define XML_SCH_TYPE_ERROR_INDICATOR_UPPER
virtual bool handleSpecialItem(XMLPropertyState &rProperty,::std::vector< XMLPropertyState > &rProperties, const OUString &rValue, const SvXMLUnitConverter &rUnitConverter, const SvXMLNamespaceMap &rNamespaceMap) const override
this method is called for every item that has the MID_FLAG_SPECIAL_ITEM_IMPORT flag set ...
#define MAP_CONTEXT(a, ns, nm, t, c)
const SvXMLEnumMapEntry< sal_Int32 > aXMLChartSolidTypeEnumMap[]
SvtSaveOptions::ODFSaneDefaultVersion getSaneDefaultVersion() const
returns the deterministic version for odf export
#define XML_SCH_TYPE_INTERPOLATION
virtual void handleElementItem(SvXMLExport &rExport, const XMLPropertyState &rProperty, SvXmlExportFlags nFlags, const ::std::vector< XMLPropertyState > *pProperties, sal_uInt32 nIdx) const override
this method is called for every item that has the MID_FLAG_ELEMENT_EXPORT flag set ...
#define XML_SCH_CONTEXT_ORIGIN
virtual bool handleSpecialItem(XMLPropertyState &rProperty,::std::vector< XMLPropertyState > &rProperties, const OUString &rValue, const SvXMLUnitConverter &rUnitConverter, const SvXMLNamespaceMap &rNamespaceMap) const
this method is called for every item that has the MID_FLAG_SPECIAL_ITEM_IMPORT flag set ...
#define MAP_ENTRY_ODF13(a, ns, nm, t)
void setChartDoc(const css::uno::Reference< css::chart2::XChartDocument > &xChartDoc)
SvXMLExport const *const m_pExport
#define XML_SCH_CONTEXT_SPECIAL_ERRORBAR_RANGE
virtual ~XMLChartExportPropertyMapper() override
#define XML_SCH_TYPE_LABEL_BORDER_STYLE
#define XML_TYPE_ATTRIBUTE_CONTAINER
#define MAP_SPECIAL_ODF12(a, ns, nm, t, c)
Represents a property with its API-name, its XML-name and the type of its value.
#define XML_SCH_TYPE_LABEL_FILL_STYLE
rtl::Reference< XMLPropertySetMapper > maPropMapper
#define MID_FLAG_SPECIAL_ITEM
OUString GetQNameByKey(sal_uInt16 nKey, const OUString &rLocalName, bool bCache=true) const
#define XML_SCH_TYPE_AXIS_POSITION
void ChainExportMapper(const rtl::Reference< SvXMLExportPropertyMapper > &rMapper)
#define XML_SCH_TYPE_DATAROWSOURCE
static bool convertBool(bool &rBool, std::u16string_view rString)
virtual void finished(::std::vector< XMLPropertyState > &rProperties, sal_Int32 nStartIndex, sal_Int32 nEndIndex) const override
This method is called when all attributes have benn processed.
#define MID_FLAG_MERGE_PROPERTY
const XMLPropertyMapEntry aXMLChartPropMap[]
#define XML_SCH_CONTEXT_SPECIAL_DATA_LABEL_SERIES
#define XML_SCH_CONTEXT_MAX
Map an XMLTokenEnum to an enum value.
const SvXMLEnumMapEntry< sal_Int32 > aXMLChartDataLabelPlacementEnumMap[]
#define MAP_FULL(ApiName, NameSpace, XMLTokenName, XMLType, ContextId, EarliestODFVersionForExport)
XMLChartPropHdlFactory(SvXMLExport const *)
#define XML_SCH_CONTEXT_SPECIAL_REGRESSION_TYPE
#define MAP_ENTRY_ODF_EXT_IMPORT(a, ns, nm, t)
XMLChartPropertySetMapper(SvXMLExport const *pExport)
const OUString & GetXMLToken(enum XMLTokenEnum eToken)
return the OUString representation for eToken
#define SCH_XML_UNSETFLAG(status, flag)
Handling of tokens in XML:
const SvXMLEnumMapEntry< css::chart::ChartDataRowSource > aXMLChartDataRowSourceTypeEnumMap[]
#define XML_SCH_CONTEXT_SPECIAL_TICKS_MAJ_OUTER
Smart struct to transport an Any with an index to the appropriate property-name.
virtual ~XMLChartImportPropertyMapper() override
virtual ~XMLChartPropertySetMapper() override
#define XML_SCH_CONTEXT_SPECIAL_NUMBER_FORMAT
#define XML_SCH_CONTEXT_STOCK_WITH_VOLUME
#define MAP_SPECIAL(a, ns, nm, t, c)
virtual void handleSpecialItem(SvXMLAttributeList &rAttrList, const XMLPropertyState &rProperty, const SvXMLUnitConverter &rUnitConverter, const SvXMLNamespaceMap &rNamespaceMap, const ::std::vector< XMLPropertyState > *pProperties, sal_uInt32 nIdx) const override
this method is called for every item that has the MID_FLAG_SPECIAL_ITEM_EXPORT flag set ...
bool AddEmbeddedXGraphicAsBase64(css::uno::Reference< css::graphic::XGraphic > const &rxGraphic)
#define XML_SCH_CONTEXT_SPECIAL_DATA_LABEL_SYMBOL
void AddAttribute(const OUString &sName, const OUString &sValue)
static SvXMLExportPropertyMapper * CreateParaExtPropMapper(SvXMLExport &rExport)
Abstract base-class for different XML-types.
virtual void ContextFilter(bool bEnableFoFontFamily,::std::vector< XMLPropertyState > &rProperties, const css::uno::Reference< css::beans::XPropertySet > &rPropSet) const override
Application-specific filter.
#define XML_SCH_TYPE_AXIS_ARRANGEMENT
const SvXMLEnumMapEntry< sal_Int32 > g_XMLChartInterpolationTypeEnumMap[]
#define XML_SCH_TYPE_AXIS_LABEL_POSITION
#define SCH_XML_SETFLAG(status, flag)
#define XML_SCH_CONTEXT_SPECIAL_TICKS_MIN_INNER
const SvXMLEnumMapEntry< sal_Int32 > aXMLChartErrorBarStyleEnumMap[]
#define XML_SCH_CONTEXT_SPECIAL_SYMBOL_HEIGHT
void ChainImportMapper(const rtl::Reference< SvXMLImportPropertyMapper > &rMapper)
#define XML_SCH_TYPE_ERROR_INDICATOR_LOWER
SvXMLExportFlags getExportFlags() const
#define XML_SCH_TYPE_MISSING_VALUE_TREATMENT
css::uno::Reference< css::chart2::XChartDocument > mxChartDoc
static SvXMLImportPropertyMapper * CreateShapePropMapper(const css::uno::Reference< css::frame::XModel > &rModel, SvXMLImport &rImport)
creates a property mapper for external chaining
void convertMeasureToXML(OUStringBuffer &rBuffer, sal_Int32 nMeasure) const
convert measure to string: from meCoreMeasureUnit to meXMLMeasureUnit
constexpr sal_uInt16 XML_NAMESPACE_STYLE
const SvXMLEnumMapEntry< css::chart::ChartAxisMarkPosition > aXMLChartAxisMarkPositionEnumMap[]
const rtl::Reference< XMLPropertySetMapper > & getPropertySetMapper() const
XMLChartImportPropertyMapper(const rtl::Reference< XMLPropertySetMapper > &rMapper, const SvXMLImport &rImport)
void PutHdlCache(sal_Int32 nType, const XMLPropertyHandler *pHdl) const
Puts a PropertyHandler into the internal cache.