diff options
-rw-r--r-- | chart2/source/view/inc/AbstractShapeFactory.hxx | 17 | ||||
-rw-r--r-- | chart2/source/view/inc/OpenglShapeFactory.hxx | 13 | ||||
-rw-r--r-- | chart2/source/view/inc/ShapeFactory.hxx | 13 | ||||
-rw-r--r-- | chart2/source/view/main/OpenglShapeFactory.cxx | 12 | ||||
-rw-r--r-- | chart2/source/view/main/ShapeFactory.cxx | 21 | ||||
-rw-r--r-- | chart2/source/view/main/VLegend.cxx | 2 | ||||
-rw-r--r-- | include/svx/unoshape.hxx | 14 | ||||
-rwxr-xr-x | offapi/UnoApi_offapi.mk | 1 | ||||
-rw-r--r-- | offapi/com/sun/star/drawing/XShapes2.idl | 38 | ||||
-rw-r--r-- | svx/source/unodraw/unoshap2.cxx | 39 |
10 files changed, 127 insertions, 43 deletions
diff --git a/chart2/source/view/inc/AbstractShapeFactory.hxx b/chart2/source/view/inc/AbstractShapeFactory.hxx index 36b255457baa..73fbf6989736 100644 --- a/chart2/source/view/inc/AbstractShapeFactory.hxx +++ b/chart2/source/view/inc/AbstractShapeFactory.hxx @@ -23,7 +23,7 @@ #include <com/sun/star/drawing/PolyPolygonShape3D.hpp> #include <com/sun/star/drawing/Position3D.hpp> #include <com/sun/star/drawing/XDrawPage.hpp> -#include <com/sun/star/drawing/XShapes.hpp> +#include <com/sun/star/drawing/XShapes2.hpp> #include <com/sun/star/graphic/XGraphic.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> @@ -60,6 +60,8 @@ class AbstractShapeFactory { public: + enum StackPosition { Top, Bottom }; + static AbstractShapeFactory* getOrCreateShapeFactory(::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory> xFactory); virtual ~AbstractShapeFactory() {}; @@ -211,12 +213,13 @@ public: virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > createRectangle( - const ::com::sun::star::uno::Reference< - ::com::sun::star::drawing::XShapes >& xTarget - , const ::com::sun::star::awt::Size& rSize - , const ::com::sun::star::awt::Point& rPosition - , const tNameSequence& rPropNames - , const tAnySequence& rPropValues ) = 0; + const com::sun::star::uno::Reference< + com::sun::star::drawing::XShapes >& xTarget, + const com::sun::star::awt::Size& rSize, + const com::sun::star::awt::Point& rPosition, + const tNameSequence& rPropNames, + const tAnySequence& rPropValues, + StackPosition ePos = Top ) = 0; virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > createRectangle( diff --git a/chart2/source/view/inc/OpenglShapeFactory.hxx b/chart2/source/view/inc/OpenglShapeFactory.hxx index 7d8ebdc2b083..164ba93bc400 100644 --- a/chart2/source/view/inc/OpenglShapeFactory.hxx +++ b/chart2/source/view/inc/OpenglShapeFactory.hxx @@ -162,12 +162,13 @@ public: virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > createRectangle( - const ::com::sun::star::uno::Reference< - ::com::sun::star::drawing::XShapes >& xTarget - , const ::com::sun::star::awt::Size& rSize - , const ::com::sun::star::awt::Point& rPosition - , const tNameSequence& rPropNames - , const tAnySequence& rPropValues ); + const com::sun::star::uno::Reference< + com::sun::star::drawing::XShapes >& xTarget, + const com::sun::star::awt::Size& rSize, + const com::sun::star::awt::Point& rPosition, + const tNameSequence& rPropNames, + const tAnySequence& rPropValues, + StackPosition ePos = Top ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > createRectangle( diff --git a/chart2/source/view/inc/ShapeFactory.hxx b/chart2/source/view/inc/ShapeFactory.hxx index 5afb686c2d63..ed592d2a277b 100644 --- a/chart2/source/view/inc/ShapeFactory.hxx +++ b/chart2/source/view/inc/ShapeFactory.hxx @@ -177,12 +177,13 @@ public: virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > createRectangle( - const ::com::sun::star::uno::Reference< - ::com::sun::star::drawing::XShapes >& xTarget - , const ::com::sun::star::awt::Size& rSize - , const ::com::sun::star::awt::Point& rPosition - , const tNameSequence& rPropNames - , const tAnySequence& rPropValues ); + const com::sun::star::uno::Reference< + com::sun::star::drawing::XShapes >& xTarget, + const com::sun::star::awt::Size& rSize, + const com::sun::star::awt::Point& rPosition, + const tNameSequence& rPropNames, + const tAnySequence& rPropValues, + StackPosition ePos = Top ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > createRectangle( diff --git a/chart2/source/view/main/OpenglShapeFactory.cxx b/chart2/source/view/main/OpenglShapeFactory.cxx index 2f4b6cfd625b..126707b3e474 100644 --- a/chart2/source/view/main/OpenglShapeFactory.cxx +++ b/chart2/source/view/main/OpenglShapeFactory.cxx @@ -364,15 +364,17 @@ uno::Reference< drawing::XShape > OpenglShapeFactory::createInvisibleRectangle( } uno::Reference< drawing::XShape > OpenglShapeFactory::createRectangle( - const uno::Reference< drawing::XShapes >& xTarget - , const awt::Size& rSize - , const awt::Point& rPosition - , const tNameSequence& rPropNames - , const tAnySequence& rPropValues ) + const uno::Reference< drawing::XShapes >& xTarget, + const awt::Size& rSize, + const awt::Point& rPosition, + const tNameSequence& rPropNames, + const tAnySequence& rPropValues, + StackPosition /*ePos*/ ) { dummy::DummyRectangle* pRectangle = new dummy::DummyRectangle(rSize, rPosition, rPropNames, rPropValues); + // TODO : Honor stack position. xTarget->add(pRectangle); return pRectangle; } diff --git a/chart2/source/view/main/ShapeFactory.cxx b/chart2/source/view/main/ShapeFactory.cxx index 17a89cb9cef5..30c1bff03a24 100644 --- a/chart2/source/view/main/ShapeFactory.cxx +++ b/chart2/source/view/main/ShapeFactory.cxx @@ -2047,17 +2047,26 @@ uno::Reference< drawing::XShape > ShapeFactory::createInvisibleRectangle( } uno::Reference< drawing::XShape > ShapeFactory::createRectangle( - const uno::Reference< drawing::XShapes >& xTarget - , const awt::Size& rSize - , const awt::Point& rPosition - , const tNameSequence& rPropNames - , const tAnySequence& rPropValues ) + const uno::Reference< drawing::XShapes >& xTarget, + const awt::Size& rSize, + const awt::Point& rPosition, + const tNameSequence& rPropNames, + const tAnySequence& rPropValues, + StackPosition ePos ) { uno::Reference< drawing::XShape > xShape( m_xShapeFactory->createInstance( "com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY ); if( xShape.is()) { - xTarget->add( xShape ); + if (ePos == Bottom) + { + uno::Reference<drawing::XShapes2> xTarget2(xTarget, uno::UNO_QUERY); + if (xTarget2.is()) + xTarget2->addBottom(xShape); + } + else + xTarget->add(xShape); + xShape->setSize( rSize ); xShape->setPosition( rPosition ); uno::Reference< beans::XPropertySet > xPropSet( xShape, uno::UNO_QUERY_THROW ); diff --git a/chart2/source/view/main/VLegend.cxx b/chart2/source/view/main/VLegend.cxx index 3cdc50514c95..1f7b46e3c793 100644 --- a/chart2/source/view/main/VLegend.cxx +++ b/chart2/source/view/main/VLegend.cxx @@ -913,7 +913,7 @@ void VLegend::createShapes( aLegendSize, awt::Point(0,0), aLineFillProperties.first, - aLineFillProperties.second ); + aLineFillProperties.second, AbstractShapeFactory::Bottom ); //because of this name this border will be used for marking the legend AbstractShapeFactory::setShapeName( xBorder, "MarkHandles" ); diff --git a/include/svx/unoshape.hxx b/include/svx/unoshape.hxx index c27f8b7c6bf1..538bc130639f 100644 --- a/include/svx/unoshape.hxx +++ b/include/svx/unoshape.hxx @@ -33,6 +33,9 @@ #include <com/sun/star/lang/XUnoTunnel.hpp> #include <com/sun/star/awt/Point.hpp> #include <com/sun/star/drawing/PolygonKind.hpp> +#include <com/sun/star/drawing/XShapes2.hpp> +#include <com/sun/star/drawing/XShapeGroup.hpp> +#include <com/sun/star/container/XIndexAccess.hpp> #include <com/sun/star/container/XNamed.hpp> #include <com/sun/star/container/XChild.hpp> #include <com/sun/star/beans/XMultiPropertySet.hpp> @@ -374,20 +377,19 @@ public: // XServiceInfo virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); }; -#include <com/sun/star/drawing/XShapes.hpp> -#include <com/sun/star/drawing/XShapeGroup.hpp> -#include <com/sun/star/container/XIndexAccess.hpp> /*********************************************************************** * * ***********************************************************************/ class SvxShapeGroup : public SvxShape, public ::com::sun::star::drawing::XShapeGroup, - public ::com::sun::star::drawing::XShapes + public ::com::sun::star::drawing::XShapes2 { private: rtl::Reference< SvxDrawPage> mxPage; + void addUnoShape( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape, sal_uIntPtr nPos ); + public: SvxShapeGroup( SdrObject* pObj,SvxDrawPage* pDrawPage ) throw (); virtual ~SvxShapeGroup() throw (); @@ -404,6 +406,10 @@ public: virtual void SAL_CALL add( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(::com::sun::star::uno::RuntimeException); virtual void SAL_CALL remove( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(::com::sun::star::uno::RuntimeException); + // XShapes2 + virtual void SAL_CALL addTop( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addBottom( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(::com::sun::star::uno::RuntimeException); + // XElementAccess virtual ::com::sun::star::uno::Type SAL_CALL getElementType() throw(::com::sun::star::uno::RuntimeException); virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException); diff --git a/offapi/UnoApi_offapi.mk b/offapi/UnoApi_offapi.mk index 0ad045111ad7..66d1b6e5b435 100755 --- a/offapi/UnoApi_offapi.mk +++ b/offapi/UnoApi_offapi.mk @@ -2342,6 +2342,7 @@ $(eval $(call gb_UnoApi_add_idlfiles,offapi,com/sun/star/drawing,\ XShapeGrouper \ XShapeMirror \ XShapes \ + XShapes2 \ XSlidePreviewCache \ XSlidePreviewCacheListener \ XSlideRenderer \ diff --git a/offapi/com/sun/star/drawing/XShapes2.idl b/offapi/com/sun/star/drawing/XShapes2.idl new file mode 100644 index 000000000000..c63981cdcf64 --- /dev/null +++ b/offapi/com/sun/star/drawing/XShapes2.idl @@ -0,0 +1,38 @@ +/* -*- 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 __com_sun_star_drawing_XShapes2_idl__ +#define __com_sun_star_drawing_XShapes2_idl__ + +#include <com/sun/star/drawing/XShapes.idl> + +module com { module sun { module star { module drawing { + +interface XShapes2 : com::sun::star::drawing::XShapes +{ + /** + * Insert a new shape to the top of the stack. + * + * @param xShape shape to be inserted. + */ + void addTop( [in] com::sun::star::drawing::XShape xShape ); + + /** + * Insert a new shape to the bottom of the stack. + * + * @param xShape shape to be inserted. + */ + void addBottom( [in] com::sun::star::drawing::XShape xShape ); +}; + +}; }; }; }; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/unodraw/unoshap2.cxx b/svx/source/unodraw/unoshap2.cxx index ec959efbc193..a3c42bdebca3 100644 --- a/svx/source/unodraw/unoshap2.cxx +++ b/svx/source/unodraw/unoshap2.cxx @@ -106,6 +106,7 @@ uno::Any SAL_CALL SvxShapeGroup::queryAggregation( const uno::Type & rType ) thr QUERYINT( drawing::XShapeGroup ); else QUERYINT( drawing::XShapes ); + else QUERYINT( drawing::XShapes2 ); else QUERYINT( container::XIndexAccess ); else QUERYINT( container::XElementAccess ); else @@ -192,14 +193,8 @@ void SAL_CALL SvxShapeGroup::leaveGroup( ) throw(uno::RuntimeException) // pDrView->LeaveOneGroup(); } -//---------------------------------------------------------------------- - -// XShapes -void SAL_CALL SvxShapeGroup::add( const uno::Reference< drawing::XShape >& xShape ) - throw( uno::RuntimeException ) +void SvxShapeGroup::addUnoShape( const uno::Reference< drawing::XShape >& xShape, sal_uIntPtr nPos ) { - ::SolarMutexGuard aGuard; - SvxShape* pShape = SvxShape::getImplementation( xShape ); if( mpObj.is()&& mxPage.is() && pShape ) @@ -211,7 +206,7 @@ void SAL_CALL SvxShapeGroup::add( const uno::Reference< drawing::XShape >& xShap if( pSdrShape->IsInserted() ) pSdrShape->GetObjList()->RemoveObject( pSdrShape->GetOrdNum() ); - mpObj->GetSubList()->InsertObject( pSdrShape ); + mpObj->GetSubList()->InsertObject(pSdrShape, nPos); pSdrShape->SetModel(mpObj->GetModel()); // #85922# It makes no sense to set the layer asked @@ -236,6 +231,16 @@ void SAL_CALL SvxShapeGroup::add( const uno::Reference< drawing::XShape >& xShap } } +// XShapes +void SAL_CALL SvxShapeGroup::add( const uno::Reference< drawing::XShape >& xShape ) + throw( uno::RuntimeException ) +{ + ::SolarMutexGuard aGuard; + + // Add to the top of the stack (i.e. bottom of the list) by default. + addUnoShape(xShape, 0xFFFF); +} + //---------------------------------------------------------------------- void SAL_CALL SvxShapeGroup::remove( const uno::Reference< drawing::XShape >& xShape ) throw( uno::RuntimeException ) @@ -289,6 +294,24 @@ void SAL_CALL SvxShapeGroup::remove( const uno::Reference< drawing::XShape >& xS mpModel->SetChanged(); } +void SAL_CALL SvxShapeGroup::addTop( const uno::Reference< drawing::XShape >& xShape ) + throw( uno::RuntimeException ) +{ + SolarMutexGuard aGuard; + + // Add to the top of the stack (i.e. bottom of the list). + addUnoShape(xShape, 0xFFFF); +} + +void SAL_CALL SvxShapeGroup::addBottom( const uno::Reference< drawing::XShape >& xShape ) + throw( uno::RuntimeException ) +{ + SolarMutexGuard aGuard; + + // Add to the bottom of the stack (i.e. top of the list). + addUnoShape(xShape, 0); +} + // XIndexAccess //---------------------------------------------------------------------- |