blob: e9adae8edc0a77560505768e5fc35b51d98e3830 [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 _ESCHESDO_HXX
#define _ESCHESDO_HXX
#include <filter/msfilter/escherex.hxx>
#include <svx/unopage.hxx>
#include <vcl/mapmod.hxx>
// ===================================================================
// fractions of Draw PPTWriter etc.
enum ImplEESdrPageType { NORMAL = 0, MASTER = 1, NOTICE = 2, UNDEFINED = 3 };
class ImplEESdrWriter;
class ImplEscherExSdr;
class ImplEESdrObject
{
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > mXShape;
// XTextRef mXText; // TextRef des globalen Text
::com::sun::star::uno::Any mAny;
Rectangle maRect;
String mType;
sal_uInt32 mnShapeId;
sal_uInt32 mnTextSize;
sal_Int32 mnAngle;
sal_Bool mbValid : 1;
sal_Bool mbPresObj : 1;
sal_Bool mbEmptyPresObj : 1;
void Init( ImplEESdrWriter& rEx );
public:
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > mXPropSet;
ImplEESdrObject( ImplEscherExSdr& rEx, const SdrObject& rObj );
ImplEESdrObject( ImplEESdrWriter& rEx, const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& rShape );
~ImplEESdrObject();
sal_Bool ImplGetPropertyValue( const sal_Unicode* pString );
sal_Int32 ImplGetInt32PropertyValue( const sal_Unicode* pStr, sal_uInt32 nDef = 0 )
{ return ImplGetPropertyValue( pStr ) ? *(sal_Int32*)mAny.getValue() : nDef; }
sal_Bool ImplGetPropertyValue( const rtl::OUString& rStr ) { return ImplGetPropertyValue( rStr.getStr() ); }
sal_Bool ImplGetInt32PropertyValue( const rtl::OUString& rStr ) { return ImplGetInt32PropertyValue( rStr.getStr() ); }
const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& GetShapeRef() const { return mXShape; }
const ::com::sun::star::uno::Any& GetUsrAny() const { return mAny; }
const String& GetType() const { return mType; }
void SetType( const String& rS ) { mType = rS; }
const Rectangle& GetRect() const { return maRect; }
void SetRect( const Point& rPos, const Size& rSz );
void SetRect( const Rectangle& rRect )
{ maRect = rRect; }
sal_Int32 GetAngle() const { return mnAngle; }
void SetAngle( sal_Int32 nVal ) { mnAngle = nVal; }
sal_uInt32 GetTextSize() const { return mnTextSize; }
sal_Bool IsValid() const { return mbValid; }
sal_Bool IsPresObj() const { return mbPresObj; }
sal_Bool IsEmptyPresObj() const { return mbEmptyPresObj; }
sal_uInt32 GetShapeId() const { return mnShapeId; }
void SetShapeId( sal_uInt32 nVal ) { mnShapeId = nVal; }
const SdrObject* GetSdrObject() const;
sal_uInt32 ImplGetText();
sal_Bool ImplHasText() const;
};
// -------------------------------------------------------------------
// fractions of the Draw PPTWriter
class EscherEx;
namespace com { namespace sun { namespace star {
namespace drawing {
class XDrawPage;
class XShape;
}
namespace task {
class XStatusIndicator;
}
}}}
class EscherExHostAppData;
class Polygon;
class ImplEESdrWriter
{
protected:
EscherEx* mpEscherEx;
MapMode maMapModeSrc;
MapMode maMapModeDest;
::com::sun::star::uno::Reference< ::com::sun::star::task::XStatusIndicator > mXStatusIndicator;
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage > mXDrawPage;
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes > mXShapes;
SvStream* mpPicStrm;
// own extensions
EscherExHostAppData* mpHostAppData;
sal_uInt32 mnPagesWritten;
sal_uInt32 mnShapeMasterTitle;
sal_uInt32 mnShapeMasterBody;
// per page values
sal_uInt32 mnIndices;
sal_uInt32 mnOutlinerCount;
sal_uInt32 mnPrevTextStyle;
sal_uInt32 mnStatMaxValue;
sal_uInt16 mnEffectCount;
sal_Bool mbIsTitlePossible;
sal_Bool mbStatusIndicator;
sal_Bool mbStatus;
ImplEESdrWriter( EscherEx& rEx );
sal_Bool ImplInitPageValues();
void ImplWritePage(
EscherSolverContainer& rSolver,
ImplEESdrPageType ePageType,
sal_Bool bBackGround = sal_False );
sal_uInt32 ImplWriteShape( ImplEESdrObject& rObj,
EscherSolverContainer& rSolver,
ImplEESdrPageType ePageType ); // returns ShapeID
void ImplFlipBoundingBox( ImplEESdrObject& rObj, EscherPropertyContainer& rPropOpt );
sal_Bool ImplGetText( ImplEESdrObject& rObj );
void ImplWriteAdditionalText(
ImplEESdrObject& rObj,
const Point& rTextRefPoint );
sal_uInt32 ImplEnterAdditionalTextGroup(
const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& rShape,
const Rectangle* pBoundRect = NULL );
public:
Point ImplMapPoint( const Point& rPoint );
Size ImplMapSize( const Size& rSize );
EscherExHostAppData* ImplGetHostData() { return mpHostAppData; }
void MapRect(ImplEESdrObject& rObj);
};
// ===================================================================
class SdrObject;
class SdrPage;
class ImplEscherExSdr : public ImplEESdrWriter
{
private:
const SdrPage* mpSdrPage;
EscherSolverContainer* mpSolverContainer;
public:
ImplEscherExSdr( EscherEx& rEx );
virtual ~ImplEscherExSdr();
bool ImplInitPage( const SdrPage& rPage );
bool ImplInitUnoShapes( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes );
void ImplWriteCurrentPage();
sal_uInt32 ImplWriteTheShape( ImplEESdrObject& rObj );
void ImplExitPage();
void ImplFlushSolverContainer();
};
#endif // _ESCHESDO_HXX