| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| #ifndef _XMLOFF_SHAPEEXPORT_HXX_ |
| #define _XMLOFF_SHAPEEXPORT_HXX_ |
| |
| #include "sal/config.h" |
| #include "xmloff/dllapi.h" |
| #include "sal/types.h" |
| |
| #include <rtl/ref.hxx> |
| #include <rtl/ustring.hxx> |
| #include <rtl/ustrbuf.hxx> |
| #include <xmloff/uniref.hxx> |
| |
| #include <com/sun/star/drawing/XShape.hpp> |
| #include <com/sun/star/drawing/XShapes.hpp> |
| #include <com/sun/star/awt/Point.hpp> |
| #include <com/sun/star/beans/PropertyValue.hpp> |
| |
| #include <map> |
| #include <xmloff/xmlprmap.hxx> |
| #include <xmloff/xmlexppr.hxx> |
| #include <xmloff/animexp.hxx> |
| #include <xmloff/families.hxx> |
| |
| #include "xmloff/table/XMLTableExport.hxx" |
| |
| // shape export features are bits used for the nFeature |
| // parameter of XMLShapeExport::exportShape |
| |
| #define SEF_EXPORT_X 0x0001 |
| #define SEF_EXPORT_Y 0x0002 |
| #define SEF_EXPORT_POSITION 0x0003 |
| |
| #define SEF_EXPORT_WIDTH 0x0004 |
| #define SEF_EXPORT_HEIGHT 0x0008 |
| #define SEF_EXPORT_SIZE 0x000c |
| |
| // when you set this flag a chart does NOT export its own data as table element |
| #define SEF_EXPORT_NO_CHART_DATA 0x0010 |
| |
| // When setting the flag below no ignorableWhiteSpace will be called around |
| // the drawing object elements |
| #define SEF_EXPORT_NO_WS 0x0020 |
| |
| // When setting the flag below a callout shape is exported as office:annotation |
| #define SEF_EXPORT_ANNOTATION 0x0040 |
| |
| #define SEF_DEFAULT SEF_EXPORT_POSITION|SEF_EXPORT_SIZE |
| |
| enum XmlShapeType |
| { |
| XmlShapeTypeUnknown, // not known |
| |
| XmlShapeTypeDrawRectangleShape, // "com.sun.star.drawing.RectangleShape" |
| XmlShapeTypeDrawEllipseShape, // "com.sun.star.drawing.EllipseShape" |
| XmlShapeTypeDrawControlShape, // "com.sun.star.drawing.ControlShape" |
| XmlShapeTypeDrawConnectorShape, // "com.sun.star.drawing.ConnectorShape" |
| XmlShapeTypeDrawMeasureShape, // "com.sun.star.drawing.MeasureShape" |
| XmlShapeTypeDrawLineShape, // "com.sun.star.drawing.LineShape" |
| XmlShapeTypeDrawPolyPolygonShape, // "com.sun.star.drawing.PolyPolygonShape" |
| XmlShapeTypeDrawPolyLineShape, // "com.sun.star.drawing.PolyLineShape" |
| XmlShapeTypeDrawOpenBezierShape, // "com.sun.star.drawing.OpenBezierShape" |
| XmlShapeTypeDrawClosedBezierShape, // "com.sun.star.drawing.ClosedBezierShape" |
| XmlShapeTypeDrawGraphicObjectShape, // "com.sun.star.drawing.GraphicObjectShape" |
| XmlShapeTypeDrawGroupShape, // "com.sun.star.drawing.GroupShape" |
| XmlShapeTypeDrawTextShape, // "com.sun.star.drawing.TextShape" |
| XmlShapeTypeDrawOLE2Shape, // "com.sun.star.drawing.OLE2Shape" |
| XmlShapeTypeDrawChartShape, // embedded com.sun.star.chart |
| XmlShapeTypeDrawSheetShape, // embedded com.sun.star.sheet |
| XmlShapeTypeDrawPageShape, // "com.sun.star.drawing.PageShape" |
| XmlShapeTypeDrawFrameShape, // "com.sun.star.drawing.FrameShape" |
| XmlShapeTypeDrawCaptionShape, // "com.sun.star.drawing.CaptionShape" |
| XmlShapeTypeDrawAppletShape, // "com.sun.star.drawing.AppletShape" |
| XmlShapeTypeDrawPluginShape, // "com.sun.star.drawing.PlugginShape" |
| |
| XmlShapeTypeDraw3DSceneObject, // "com.sun.star.drawing.Shape3DSceneObject" |
| XmlShapeTypeDraw3DCubeObject, // "com.sun.star.drawing.Shape3DCubeObject" |
| XmlShapeTypeDraw3DSphereObject, // "com.sun.star.drawing.Shape3DSphereObject" |
| XmlShapeTypeDraw3DLatheObject, // "com.sun.star.drawing.Shape3DLatheObject" |
| XmlShapeTypeDraw3DExtrudeObject, // "com.sun.star.drawing.Shape3DExtrudeObject" |
| |
| XmlShapeTypePresTitleTextShape, // "com.sun.star.presentation.TitleTextShape" |
| XmlShapeTypePresOutlinerShape, // "com.sun.star.presentation.OutlinerShape" |
| XmlShapeTypePresSubtitleShape, // "com.sun.star.presentation.SubtitleShape" |
| XmlShapeTypePresGraphicObjectShape, // "com.sun.star.presentation.GraphicObjectShape" |
| XmlShapeTypePresPageShape, // "com.sun.star.presentation.PageShape" |
| XmlShapeTypePresOLE2Shape, // "com.sun.star.presentation.OLE2Shape" |
| XmlShapeTypePresChartShape, // "com.sun.star.presentation.ChartShape" |
| XmlShapeTypePresSheetShape, // "com.sun.star.presentation.CalcShape" |
| XmlShapeTypePresTableShape, // "com.sun.star.presentation.TableShape" |
| XmlShapeTypePresOrgChartShape, // "com.sun.star.presentation.OrgChartShape" |
| XmlShapeTypePresNotesShape, // "com.sun.star.presentation.NotesShape" |
| XmlShapeTypeHandoutShape, // "com.sun.star.presentation.HandoutShape" |
| |
| XmlShapeTypePresHeaderShape, // "com.sun.star.presentation.HeaderShape" |
| XmlShapeTypePresFooterShape, // "com.sun.star.presentation.FooterShape" |
| XmlShapeTypePresSlideNumberShape, // "com.sun.star.presentation.SlideNumberShape" |
| XmlShapeTypePresDateTimeShape, // "com.sun.star.presentation.DateTimeShape" |
| |
| XmlShapeTypeDrawCustomShape, // "com.sun.star.drawing.CustomShape" |
| XmlShapeTypeDrawMediaShape, // "com.sun.star.drawing.MediaShape" |
| XmlShapeTypePresMediaShape, // "com.sun.star.presentation.MediaShape" |
| |
| XmlShapeTypeDrawTableShape, // "com.sun.star.drawing.TableShape" |
| |
| XmlShapeTypeNotYetSet |
| }; |
| |
| /** caches style and type info after a collectShapeAutostyle for later use in exportShape */ |
| struct ImplXMLShapeExportInfo |
| { |
| rtl::OUString msStyleName; |
| rtl::OUString msTextStyleName; |
| sal_Int32 mnFamily; |
| XmlShapeType meShapeType; |
| |
| com::sun::star::uno::Reference< com::sun::star::drawing::XShape > xCustomShapeReplacement; |
| |
| ImplXMLShapeExportInfo() : mnFamily( XML_STYLE_FAMILY_SD_GRAPHICS_ID ), meShapeType( XmlShapeTypeNotYetSet ) {} |
| }; |
| |
| /** a vector for shape style and type cache information */ |
| typedef std::vector< ImplXMLShapeExportInfo > ImplXMLShapeExportInfoVector; |
| |
| /** a map to store all cache data for already collected XShapes */ |
| typedef std::map< com::sun::star::uno::Reference < com::sun::star::drawing::XShapes >, ImplXMLShapeExportInfoVector > ShapesInfos; |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| // predeclarations |
| |
| class SvXMLExport; |
| class SvXMLExportPropertyMapper; |
| |
| namespace basegfx |
| { |
| class B2DTuple; |
| class B2DHomMatrix; |
| } // end of namespace basegfx |
| |
| class XMLOFF_DLLPUBLIC XMLShapeExport : public UniRefBase |
| { |
| private: |
| |
| SvXMLExport& mrExport; |
| UniReference< XMLPropertyHandlerFactory > mxSdPropHdlFactory; |
| UniReference< SvXMLExportPropertyMapper > mxPropertySetMapper; |
| UniReference< XMLAnimationsExporter > mxAnimationsExporter; |
| sal_Int32 mnNextUniqueShapeId; |
| ShapesInfos maShapesInfos; |
| ShapesInfos::iterator maCurrentShapesIter; |
| sal_Bool mbExportLayer; |
| ImplXMLShapeExportInfoVector maShapeInfos; |
| ImplXMLShapeExportInfoVector::iterator maCurrentInfo; |
| rtl::OUString msPresentationStylePrefix; |
| |
| // #88546# possibility to swich progress bar handling on/off |
| sal_Bool mbHandleProgressBar; |
| |
| rtl::Reference< XMLTableExport > mxShapeTableExport; |
| |
| protected: |
| SvXMLExport& GetExport() { return mrExport; } |
| const SvXMLExport& GetExport() const { return mrExport; } |
| private: |
| |
| SAL_DLLPRIVATE UniReference< SvXMLExportPropertyMapper > GetPropertySetMapper() const { return mxPropertySetMapper; } |
| |
| const rtl::OUString msZIndex; |
| const rtl::OUString msPrintable; |
| const rtl::OUString msVisible; |
| |
| const rtl::OUString msEmptyPres; |
| const rtl::OUString msModel; |
| const rtl::OUString msStartShape; |
| const rtl::OUString msEndShape; |
| const rtl::OUString msOnClick; |
| #ifdef ISSUE66550_HLINK_FOR_SHAPES |
| const rtl::OUString msOnAction; |
| const rtl::OUString msAction; |
| const rtl::OUString msURL; |
| #endif |
| const rtl::OUString msEventType; |
| const rtl::OUString msPresentation; |
| const rtl::OUString msMacroName; |
| const rtl::OUString msScript; |
| const rtl::OUString msLibrary; |
| const rtl::OUString msClickAction; |
| const rtl::OUString msBookmark; |
| const rtl::OUString msEffect; |
| const rtl::OUString msPlayFull; |
| const rtl::OUString msVerb; |
| const rtl::OUString msSoundURL; |
| const rtl::OUString msSpeed; |
| const rtl::OUString msStarBasic; |
| |
| rtl::OUStringBuffer msBuffer; |
| |
| SAL_DLLPRIVATE void ImpCalcShapeType(const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType& eShapeType); |
| |
| SAL_DLLPRIVATE void ImpExportNewTrans(const com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet >& xPropSet, sal_Int32 nFeatures, com::sun::star::awt::Point* pRefPoint); |
| SAL_DLLPRIVATE void ImpExportNewTrans_GetB2DHomMatrix(::basegfx::B2DHomMatrix& rMatrix, const com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet >& xPropSet); |
| SAL_DLLPRIVATE void ImpExportNewTrans_DecomposeAndRefPoint(const ::basegfx::B2DHomMatrix& rMat, ::basegfx::B2DTuple& rTRScale, double& fTRShear, double& fTRRotate, ::basegfx::B2DTuple& rTRTranslate, com::sun::star::awt::Point* pRefPoint); |
| SAL_DLLPRIVATE void ImpExportNewTrans_FeaturesAndWrite(::basegfx::B2DTuple& rTRScale, double fTRShear, double fTRRotate, ::basegfx::B2DTuple& rTRTranslate, const sal_Int32 nFeatures); |
| SAL_DLLPRIVATE sal_Bool ImpExportPresentationAttributes( const com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet >& xPropSet, const rtl::OUString& rClass ); |
| SAL_DLLPRIVATE void ImpExportText( const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape ); |
| SAL_DLLPRIVATE void ImpExportEvents( const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape ); |
| SAL_DLLPRIVATE void ImpExportDescription( const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape ); // #i68101# |
| SAL_DLLPRIVATE void ImpExportGluePoints( const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape ); |
| |
| // single shape exporters |
| SAL_DLLPRIVATE void ImpExportGroupShape( const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExport3DSceneShape( const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportRectangleShape( const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportLineShape(const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportEllipseShape(const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportPolygonShape(const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportTextBoxShape(const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportGraphicObjectShape(const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportChartShape(const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL, SvXMLAttributeList* pAttrList = NULL ); |
| SAL_DLLPRIVATE void ImpExportControlShape(const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportConnectorShape(const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportMeasureShape(const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportOLE2Shape(const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL, SvXMLAttributeList* pAttrList = NULL ); |
| SAL_DLLPRIVATE void ImpExportPageShape(const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportCaptionShape(const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExport3DShape(const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportFrameShape( const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportPluginShape( const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportAppletShape( const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportCustomShape( const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportMediaShape( const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| SAL_DLLPRIVATE void ImpExportTableShape(const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape, XmlShapeType eShapeType, sal_Int32 nFeatures = SEF_DEFAULT, com::sun::star::awt::Point* pRefPoint = NULL ); |
| public: |
| XMLShapeExport(SvXMLExport& rExp, SvXMLExportPropertyMapper *pExtMapper=0 ); |
| virtual ~XMLShapeExport(); |
| |
| // This method collects all automatic styles for the given XShape |
| void collectShapeAutoStyles( |
| const com::sun::star::uno::Reference < com::sun::star::drawing::XShape >& xShape); |
| |
| // This method exports the given XShape |
| void exportShape( |
| const com::sun::star::uno::Reference < com::sun::star::drawing::XShape >& xShape, |
| sal_Int32 nFeatures = SEF_DEFAULT, |
| com::sun::star::awt::Point* pRefPoint = NULL, |
| SvXMLAttributeList* pAttrList = NULL |
| ); |
| |
| // This method collects all automatic styles for the shapes inside the given XShapes collection |
| void collectShapesAutoStyles( |
| const com::sun::star::uno::Reference < com::sun::star::drawing::XShapes >& xShapes); |
| |
| // This method exports all XShape inside the given XShapes collection |
| void exportShapes( |
| const com::sun::star::uno::Reference < com::sun::star::drawing::XShapes >& xShapes, |
| sal_Int32 nFeatures = SEF_DEFAULT, |
| com::sun::star::awt::Point* pRefPoint = NULL |
| ); |
| |
| /** initializes some internal structures for fast access to the given XShapes collection |
| |
| <p>This method has to be called before you use exportShape or collectShapeAutoStyles. |
| It is automatically called if you use collectShapesAutoStyles and exportShapes. |
| |
| @see collectShapeAutoStyles |
| @see exportShape |
| @see collectShapesAutoStyles |
| @see exportShapes |
| */ |
| void seekShapes( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& xShapes ) throw(); |
| |
| void exportAutoStyles(); |
| |
| /** sets a new reference to an XMLAnimationExporter. |
| If this is a non NULL reference, the animation information from all shapes given to exportShape() |
| from now on are collected. |
| */ |
| void setAnimationsExporter( UniReference< XMLAnimationsExporter > xAnimExport ) { mxAnimationsExporter = xAnimExport; } |
| |
| /** returns the last set XMLAnimationExport */ |
| UniReference< XMLAnimationsExporter > getAnimationsExporter() const { return mxAnimationsExporter; } |
| |
| /// returns the export property mapper for external chaining |
| static SvXMLExportPropertyMapper* CreateShapePropMapper( SvXMLExport& rExport ); |
| |
| void enableLayerExport( sal_Bool bEnable = sal_True ) { mbExportLayer = bEnable; } |
| sal_Bool IsLayerExportEnabled() const { return mbExportLayer; } |
| |
| // #88546# |
| /** defines if the export should increment the progress bar or not */ |
| void enableHandleProgressBar( sal_Bool bEnable = sal_True ) { mbHandleProgressBar = bEnable; } |
| sal_Bool IsHandleProgressBarEnabled() const { return mbHandleProgressBar; } |
| |
| void setPresentationStylePrefix( const rtl::OUString& rPrefix ) { msPresentationStylePrefix = rPrefix; } |
| |
| /** helper for chart that adds all attributes of a 3d scene element to the export */ |
| void export3DSceneAttributes( const com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet >& xPropSet ); |
| |
| /** helper for chart that exports all lamps from the propertyset */ |
| void export3DLamps( const com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet >& xPropSet ); |
| |
| /** sj: replacing CustomShapes with standard objects that are also supported in OpenOffice.org format */ |
| com::sun::star::uno::Reference < com::sun::star::drawing::XShape > checkForCustomShapeReplacement( |
| const com::sun::star::uno::Reference < com::sun::star::drawing::XShape >& ); |
| |
| /** helper to export the style for graphic defaults */ |
| void ExportGraphicDefaults(); |
| |
| /** is called before a shape element for the given XShape is exported */ |
| virtual void onExport( const com::sun::star::uno::Reference < com::sun::star::drawing::XShape >& xShape ); |
| |
| const rtl::Reference< XMLTableExport >& GetShapeTableExport(); |
| }; |
| |
| |
| #endif |