/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef CHART2_DUMMY_XSHAPE_HXX #define CHART2_DUMMY_XSHAPE_HXX #include #include #include "OpenGLRender.hxx" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "PropertyMapper.hxx" #include "VLineProperties.hxx" #include "Stripe.hxx" #include #include #include #include using namespace com::sun::star; namespace chart { namespace dummy { class DummyChart; class TextCache { public: struct TextCacheKey { OUString maText; std::map maProperties; bool operator==(const TextCacheKey& rKey) const { return maText == rKey.maText && maProperties == rKey.maProperties; } }; struct TextCacheKeyHash { size_t operator()(const TextCacheKey& rKey) const { return rKey.maText.hashCode(); } }; bool hasEntry(const TextCacheKey& rKey); BitmapEx& getBitmap(const TextCacheKey& rKey); void insertBitmap(const TextCacheKey& rKey, const BitmapEx& rBitmap); private: boost::unordered_map maCache; }; class DummyXShape : public cppu::WeakAggImplHelper6< ::com::sun::star::drawing::XShape, com::sun::star::beans::XPropertySet, com::sun::star::beans::XMultiPropertySet, com::sun::star::container::XNamed, com::sun::star::container::XChild, com::sun::star::lang::XServiceInfo > { public: DummyXShape(); // XNamed virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL setName( const OUString& aName ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; // XShape virtual ::com::sun::star::awt::Point SAL_CALL getPosition() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL setPosition( const ::com::sun::star::awt::Point& aPosition ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual ::com::sun::star::awt::Size SAL_CALL getSize() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL setSize( const ::com::sun::star::awt::Size& aSize ) throw(::com::sun::star::beans::PropertyVetoException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; // XShapeDescriptor virtual OUString SAL_CALL getShapeType() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; // XPropertySet virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; // XMultiPropertySet virtual void SAL_CALL setPropertyValues( const ::com::sun::star::uno::Sequence< OUString >& aPropertyNames, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aValues ) throw (::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > SAL_CALL getPropertyValues( const ::com::sun::star::uno::Sequence< OUString >& aPropertyNames ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL addPropertiesChangeListener( const ::com::sun::star::uno::Sequence< OUString >& aPropertyNames, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL removePropertiesChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL firePropertiesChangeEvent( const ::com::sun::star::uno::Sequence< OUString >& aPropertyNames, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; // XChild virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getParent( ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL setParent( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& Parent ) throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; // XServiceInfo virtual OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; // normal non UNO methods virtual DummyChart* getRootShape(); /** * Implement this method for all subclasses that should be rendered */ virtual void render(); const com::sun::star::awt::Point& getPos(); // internal API protected: std::map maProperties; com::sun::star::awt::Point maPosition; com::sun::star::awt::Size maSize; private: OUString maName; com::sun::star::uno::Reference< com::sun::star::uno::XInterface > mxParent; }; class DummyCube : public DummyXShape { public: DummyCube(const drawing::Position3D &rPos, const drawing::Direction3D& rSize, const uno::Reference< beans::XPropertySet > & xPropSet, const tPropertyNameMap& rPropertyNameMap ); }; class DummyCylinder : public DummyXShape { public: DummyCylinder(const drawing::Position3D&, const drawing::Direction3D& rSize ); }; class DummyPyramid : public DummyXShape { public: DummyPyramid(const drawing::Position3D& rPosition, const drawing::Direction3D& rSize, const uno::Reference< beans::XPropertySet > & xPropSet, const tPropertyNameMap& rPropertyNameMap ); }; class DummyCone : public DummyXShape { public: DummyCone(const drawing::Position3D& rPosition, const drawing::Direction3D& rSize); }; class DummyPieSegment2D : public DummyXShape { public: DummyPieSegment2D(double fUnitCircleStartAngleDegree, double fUnitCircleWidthAngleDegree, double fUnitCircleInnerRadius, double fUnitCircleOuterRadius, const drawing::Direction3D& rOffset, const drawing::HomogenMatrix& rUnitCircleToScene); void render() SAL_OVERRIDE; private: double mfUnitCircleStartAngleDegree; double mfUnitCircleWidthAngleDegree; double mfUnitCircleInnerRadius; double mfUnitCircleOuterRadius; drawing::Direction3D maOffset; drawing::HomogenMatrix maUnitCircleToScene; }; class DummyPieSegment : public DummyXShape { public: DummyPieSegment( const drawing::Direction3D& rOffset, const drawing::HomogenMatrix& rUnitCircleToScene); private: drawing::Direction3D maOffset; drawing::HomogenMatrix maUnitCircleToScene; }; class DummyStripe : public DummyXShape { public: DummyStripe(const Stripe& rStripe, const uno::Reference< beans::XPropertySet > & xPropSet, const tPropertyNameMap& rPropertyNameMap ); private: Stripe maStripe; }; class DummyArea3D : public DummyXShape { public: DummyArea3D(const drawing::PolyPolygonShape3D& rShape); private: drawing::PolyPolygonShape3D maShapes; }; class DummyArea2D : public DummyXShape { public: DummyArea2D(const drawing::PointSequenceSequence& rShape); virtual void render() SAL_OVERRIDE; private: drawing::PointSequenceSequence maShapes; }; class DummySymbol2D : public DummyXShape { public: DummySymbol2D(const drawing::Position3D& rPosition, const drawing::Direction3D& rSize, sal_Int32 nStandardSymbol, sal_Int32 nFillColor); void render() SAL_OVERRIDE; private: drawing::Position3D mrPosition; drawing::Direction3D mrSize; sal_Int32 mnStandardSymbol; sal_Int32 mnFillColor; }; class DummyGraphic2D : public DummyXShape { public: DummyGraphic2D(const drawing::Position3D& rPosition, const drawing::Direction3D& rSize, const uno::Reference< graphic::XGraphic > xGraphic ); private: uno::Reference< graphic::XGraphic > mxGraphic; }; class DummyCircle : public DummyXShape { public: DummyCircle(const awt::Point& rPosition, const awt::Size& rSize); virtual void render() SAL_OVERRIDE; }; class DummyLine3D : public DummyXShape { public: DummyLine3D(const drawing::PolyPolygonShape3D& rPoints, const VLineProperties& rProperties); private: drawing::PolyPolygonShape3D maPoints; }; class DummyLine2D : public DummyXShape { public: DummyLine2D(const drawing::PointSequenceSequence& rPoints, const VLineProperties* pProperties); DummyLine2D(const awt::Size& rSize, const awt::Point& rPosition); virtual void render() SAL_OVERRIDE; private: drawing::PointSequenceSequence maPoints; }; class DummyRectangle : public DummyXShape { public: DummyRectangle(); DummyRectangle(const awt::Size& rSize); DummyRectangle(const awt::Size& rSize, const awt::Point& rPoint, const tNameSequence& rNames, const tAnySequence& rValues ); virtual void render() SAL_OVERRIDE; }; class DummyText : public DummyXShape { public: DummyText(const OUString& rText, const tNameSequence& rNames, const tAnySequence& rValues, const uno::Any& rTrans, com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > xTarget, double nRotation); virtual void render() SAL_OVERRIDE; virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL setPosition( const ::com::sun::star::awt::Point& aPosition ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; private: void setTransformatAsProperty(const com::sun::star::drawing::HomogenMatrix3& rMatrix); OUString maText; uno::Any maTrans; BitmapEx maBitmap; double mnRotation; }; class DummyXShapes : public DummyXShape, public com::sun::star::drawing::XShapes { public: virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual com::sun::star::uno::Any SAL_CALL queryAggregation( const com::sun::star::uno::Type& rType ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL acquire() throw() SAL_OVERRIDE; virtual void SAL_CALL release() throw() SAL_OVERRIDE; // XShapes virtual void SAL_CALL add( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL remove( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; // XElementAccess virtual ::com::sun::star::uno::Type SAL_CALL getElementType() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; // XIndexAccess virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE ; virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; // normal methods virtual void render() SAL_OVERRIDE; protected: std::vector > maUNOShapes; std::vector maShapes; }; class DummyChart : public DummyXShapes { public: DummyChart(com::sun::star::uno::Reference< com::sun::star::drawing::XShape > xDrawPage); ~DummyChart(); virtual DummyChart* getRootShape() SAL_OVERRIDE; virtual void SAL_CALL setPosition( const ::com::sun::star::awt::Point& aPosition ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL setSize( const ::com::sun::star::awt::Size& aSize ) throw(::com::sun::star::beans::PropertyVetoException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void render() SAL_OVERRIDE; void clear(); TextCache& getTextCache(); private: TextCache maTextCache; OpenGLContext m_aGLContext; public: OpenGLRender m_GLRender; }; class DummyGroup2D : public DummyXShapes { public: DummyGroup2D(const OUString& rName); virtual ::com::sun::star::awt::Point SAL_CALL getPosition() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual ::com::sun::star::awt::Size SAL_CALL getSize() throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL setPosition( const ::com::sun::star::awt::Point& aPosition ) throw(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual void SAL_CALL setSize( const ::com::sun::star::awt::Size& aSize ) throw(::com::sun::star::beans::PropertyVetoException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; }; class DummyGroup3D : public DummyXShapes { public: DummyGroup3D(const OUString& rName); }; } } #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */