blob: 87382d514aad6cdd22b549c062aebfb7bb9145e2 [file] [log] [blame]
/**************************************************************
*
* 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 OOX_DRAWINGML_SHAPE_HXX
#define OOX_DRAWINGML_SHAPE_HXX
#include "oox/helper/propertymap.hxx"
#include "oox/drawingml/drawingmltypes.hxx"
#include "oox/drawingml/customshapeproperties.hxx"
#include "oox/drawingml/textliststyle.hxx"
#include <com/sun/star/frame/XModel.hpp>
#include <com/sun/star/drawing/XDrawPage.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <vector>
#include <map>
namespace oox { namespace vml {
struct OleObjectInfo;
} }
namespace oox { namespace drawingml {
class CustomShapeProperties;
typedef boost::shared_ptr< CustomShapeProperties > CustomShapePropertiesPtr;
typedef ::std::map< ::rtl::OUString, ShapePtr > ShapeIdMap;
struct ShapeStyleRef
{
Color maPhClr;
sal_Int32 mnThemedIdx;
};
typedef ::std::map< sal_Int32, ShapeStyleRef > ShapeStyleRefMap;
// ============================================================================
/** Additional information for a chart embedded in a drawing shape. */
struct ChartShapeInfo
{
::rtl::OUString maFragmentPath; /// Path to related XML stream, e.g. for charts.
bool mbEmbedShapes; /// True = load chart shapes into chart, false = load into parent drawpage.
inline explicit ChartShapeInfo( bool bEmbedShapes ) : mbEmbedShapes( bEmbedShapes ) {}
};
// ============================================================================
class Shape
: public boost::enable_shared_from_this< Shape >
{
public:
explicit Shape( const sal_Char* pServiceType = 0 );
virtual ~Shape();
rtl::OUString& getServiceName(){ return msServiceName; }
void setServiceName( const sal_Char* pServiceName );
PropertyMap& getShapeProperties(){ return maShapeProperties; }
inline LineProperties& getLineProperties() { return *mpLinePropertiesPtr; }
inline const LineProperties& getLineProperties() const { return *mpLinePropertiesPtr; }
inline FillProperties& getFillProperties() { return *mpFillPropertiesPtr; }
inline const FillProperties& getFillProperties() const { return *mpFillPropertiesPtr; }
inline GraphicProperties& getGraphicProperties() { return *mpGraphicPropertiesPtr; }
inline const GraphicProperties& getGraphicProperties() const { return *mpGraphicPropertiesPtr; }
CustomShapePropertiesPtr getCustomShapeProperties(){ return mpCustomShapePropertiesPtr; }
table::TablePropertiesPtr getTableProperties();
void setPosition( com::sun::star::awt::Point nPosition ){ maPosition = nPosition; }
void setSize( com::sun::star::awt::Size aSize ){ maSize = aSize; }
void setRotation( sal_Int32 nRotation ) { mnRotation = nRotation; }
void setFlip( sal_Bool bFlipH, sal_Bool bFlipV ) { mbFlipH = bFlipH; mbFlipV = bFlipV; }
void addChild( const ShapePtr pChildPtr ) { maChildren.push_back( pChildPtr ); }
std::vector< ShapePtr >& getChildren() { return maChildren; }
void setName( const rtl::OUString& rName ) { msName = rName; }
::rtl::OUString getName( ) { return msName; }
void setId( const rtl::OUString& rId ) { msId = rId; }
void setHidden( sal_Bool bHidden ) { mbHidden = bHidden; }
sal_Bool getHidden() const { return mbHidden; };
void setSubType( sal_Int32 nSubType ) { mnSubType = nSubType; }
sal_Int32 getSubType() const { return mnSubType; }
void setSubTypeIndex( sal_uInt32 nSubTypeIndex ) { mnSubTypeIndex = nSubTypeIndex; }
sal_Int32 getSubTypeIndex() const { return mnSubTypeIndex; }
// setDefaults has to be called if styles are imported (OfficeXML is not storing properties having the default value)
void setDefaults();
::oox::vml::OleObjectInfo& setOleObjectType();
ChartShapeInfo& setChartType( bool bEmbedShapes );
void setDiagramType();
void setTableType();
void setTextBody(const TextBodyPtr & pTextBody);
TextBodyPtr getTextBody();
void setMasterTextListStyle( const TextListStylePtr& pMasterTextListStyle );
TextListStylePtr getMasterTextListStyle() const { return mpMasterTextListStyle; }
inline ShapeStyleRefMap& getShapeStyleRefs() { return maShapeStyleRefs; }
inline const ShapeStyleRefMap& getShapeStyleRefs() const { return maShapeStyleRefs; }
const ShapeStyleRef* getShapeStyleRef( sal_Int32 nRefType ) const;
// addShape is creating and inserting the corresponding XShape.
void addShape(
::oox::core::XmlFilterBase& rFilterBase,
const Theme* pTheme,
const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes,
const ::com::sun::star::awt::Rectangle* pShapeRect = 0,
ShapeIdMap* pShapeMap = 0 );
void setXShape( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& rXShape )
{ mxShape = rXShape; };
const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > &
getXShape() const { return mxShape; }
virtual void applyShapeReference( const Shape& rReferencedShape );
protected:
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >
createAndInsert(
::oox::core::XmlFilterBase& rFilterBase,
const ::rtl::OUString& rServiceName,
const Theme* pTheme,
const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes,
const ::com::sun::star::awt::Rectangle* pShapeRect,
sal_Bool bClearText );
void addChildren(
::oox::core::XmlFilterBase& rFilterBase,
Shape& rMaster,
const Theme* pTheme,
const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes,
const ::com::sun::star::awt::Rectangle& rClientRect,
ShapeIdMap* pShapeMap );
virtual ::rtl::OUString finalizeServiceName(
::oox::core::XmlFilterBase& rFilter,
const ::rtl::OUString& rServiceName,
const ::com::sun::star::awt::Rectangle& rShapeRect );
virtual void finalizeXShape(
::oox::core::XmlFilterBase& rFilter,
const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes );
std::vector< ShapePtr > maChildren; // only used for group shapes
TextBodyPtr mpTextBody;
LinePropertiesPtr mpLinePropertiesPtr;
FillPropertiesPtr mpFillPropertiesPtr;
GraphicPropertiesPtr mpGraphicPropertiesPtr;
CustomShapePropertiesPtr mpCustomShapePropertiesPtr;
table::TablePropertiesPtr mpTablePropertiesPtr;
PropertyMap maShapeProperties;
TextListStylePtr mpMasterTextListStyle;
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > mxShape;
rtl::OUString msServiceName;
rtl::OUString msName;
rtl::OUString msId;
sal_Int32 mnSubType; // if this type is not zero, then the shape is a placeholder
sal_Int32 mnSubTypeIndex;
ShapeStyleRefMap maShapeStyleRefs;
com::sun::star::awt::Size maSize;
com::sun::star::awt::Point maPosition;
private:
enum FrameType
{
FRAMETYPE_GENERIC, /// Generic shape, no special type.
FRAMETYPE_OLEOBJECT, /// OLE object embedded in a shape.
FRAMETYPE_CHART, /// Chart embedded in a shape.
FRAMETYPE_DIAGRAM, /// Complex diagram drawing shape.
FRAMETYPE_TABLE /// A table embedded in a shape.
};
typedef ::boost::shared_ptr< ::oox::vml::OleObjectInfo > OleObjectInfoRef;
typedef ::boost::shared_ptr< ChartShapeInfo > ChartShapeInfoRef;
FrameType meFrameType; /// Type for graphic frame shapes.
OleObjectInfoRef mxOleObjectInfo; /// Additional data for OLE objects.
ChartShapeInfoRef mxChartShapeInfo; /// Additional data for chart shapes.
sal_Int32 mnRotation;
sal_Bool mbFlipH;
sal_Bool mbFlipV;
sal_Bool mbHidden;
};
::rtl::OUString GetShapeType( sal_Int32 nType );
// ============================================================================
} }
#endif // OOX_DRAWINGML_SHAPE_HXX