/************************************************************** * * 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 REPORTDESIGN_TOOLS_HXX #define REPORTDESIGN_TOOLS_HXX #include #include #include #include #include #include #include #include #include #include "Section.hxx" #include "corestrings.hrc" namespace reportdesign { template void lcl_createSectionIfNeeded(sal_Bool _bOn,const T& _xParent,::com::sun::star::uno::Reference< ::com::sun::star::report::XSection>& _xSection/*in/out*/,bool _bPageSection = false) { if ( _bOn && !_xSection.is() ) _xSection = new OSection(_xParent,_xParent->getContext(),_bPageSection); else if ( !_bOn ) //_xSection.clear(); ::comphelper::disposeComponent(_xSection); } /** gets the properties which should be removed form the property set implementation. * * \return A sequence of all properties which should be removed for none char able implementations. */ ::com::sun::star::uno::Sequence< ::rtl::OUString > lcl_getCharOptionals(); /** uses the XChild interface to get the section from any child of it. * * \param _xReportComponent A report component which is a child of the section. * \return The sectin where this report component resists in. */ ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection> lcl_getSection(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& _xReportComponent); /** throws an illegal argument exception. The message text is the resource RID_STR_ERROR_WRONG_ARGUMENT + the type as reference. * * \param _sTypeName The reference where to look for the correct values. * \param ExceptionContext_ The exception context. * \param ArgumentPosition_ The argument position. * \param Context_ The context to get the factory service. */ void throwIllegallArgumentException(const ::rtl::OUString& _sTypeName ,const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& ExceptionContext_ ,const ::sal_Int16& ArgumentPosition_ ,const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& Context_); /** clones the given object * * \param _xReportComponent the object to be cloned * \param _xFactory the factory to create the clone * \param _sServiceName the service of the to be cloned object * \return the clone */ ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > cloneObject( const ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent>& _xReportComponent ,const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _xFactory ,const ::rtl::OUString& _sServiceName); class OShapeHelper { public: template static void setSize(const ::com::sun::star::awt::Size& aSize,T* _pShape) { OSL_ENSURE(aSize.Width >= 0 && aSize.Height >= 0,"Illegal with or height!"); ::osl::MutexGuard aGuard(_pShape->m_aMutex); if ( _pShape->m_aProps.aComponent.m_xShape.is() ) { ::com::sun::star::awt::Size aOldSize = _pShape->m_aProps.aComponent.m_xShape->getSize(); if ( aOldSize.Height != aSize.Height || aOldSize.Width != aSize.Width ) { _pShape->m_aProps.aComponent.m_nWidth = aOldSize.Width; _pShape->m_aProps.aComponent.m_nHeight = aOldSize.Height; _pShape->m_aProps.aComponent.m_xShape->setSize(aSize); } } _pShape->set(PROPERTY_WIDTH,aSize.Width,_pShape->m_aProps.aComponent.m_nWidth); _pShape->set(PROPERTY_HEIGHT,aSize.Height,_pShape->m_aProps.aComponent.m_nHeight); } template static ::com::sun::star::awt::Size getSize( T* _pShape ) { ::osl::MutexGuard aGuard(_pShape->m_aMutex); if ( _pShape->m_aProps.aComponent.m_xShape.is() ) { ::com::sun::star::awt::Size aSize = _pShape->m_aProps.aComponent.m_xShape->getSize(); OSL_ENSURE(aSize.Width >= 0 && aSize.Height >= 0,"Illegal with or height!"); return aSize; } return ::com::sun::star::awt::Size(_pShape->m_aProps.aComponent.m_nWidth,_pShape->m_aProps.aComponent.m_nHeight); } template static void setPosition( const ::com::sun::star::awt::Point& _aPosition ,T* _pShape) { // we know it is not allowed that the position in smaller 0, but in NbcMove() it will handled right. // only at 'Undo' it is possible to short set the position smaller 0 // OSL_ENSURE(_aPosition.X >= 0 && _aPosition.Y >= 0,"set to Illegal position!"); ::osl::MutexGuard aGuard(_pShape->m_aMutex); ::com::sun::star::awt::Point aOldPos; aOldPos.X = _pShape->m_aProps.aComponent.m_nPosX; aOldPos.Y = _pShape->m_aProps.aComponent.m_nPosY; ::com::sun::star::awt::Point aPosition(_aPosition); if ( _pShape->m_aProps.aComponent.m_xShape.is() ) { aOldPos = _pShape->m_aProps.aComponent.m_xShape->getPosition(); if ( aOldPos.X != aPosition.X || aOldPos.Y != aPosition.Y ) { _pShape->m_aProps.aComponent.m_nPosX = aOldPos.X; _pShape->m_aProps.aComponent.m_nPosY = aOldPos.Y; _pShape->m_aProps.aComponent.m_xShape->setPosition(aPosition); } } _pShape->set(PROPERTY_POSITIONX,aPosition.X,aOldPos.X); _pShape->set(PROPERTY_POSITIONY,aPosition.Y,aOldPos.Y); } template static ::com::sun::star::awt::Point getPosition(T* _pShape) { ::osl::MutexGuard aGuard(_pShape->m_aMutex); if ( _pShape->m_aProps.aComponent.m_xShape.is() ) { ::com::sun::star::awt::Point aPosition = _pShape->m_aProps.aComponent.m_xShape->getPosition(); // OSL_ENSURE(aPosition.X >= 0 && aPosition.Y >= 0,"Illegal position!"); return aPosition; } return ::com::sun::star::awt::Point(_pShape->m_aProps.aComponent.m_nPosX,_pShape->m_aProps.aComponent.m_nPosY); } template static void setParent( const com::sun::star::uno::Reference< com::sun::star::uno::XInterface >& Parent, T* _pShape) { ::osl::MutexGuard aGuard(_pShape->m_aMutex); _pShape->m_aProps.aComponent.m_xParent = ::com::sun::star::uno::Reference< ::com::sun::star::container::XChild >(Parent,::com::sun::star::uno::UNO_QUERY); ::com::sun::star::uno::Reference< ::com::sun::star::container::XChild > xChild; comphelper::query_aggregation(_pShape->m_aProps.aComponent.m_xProxy,xChild); if ( xChild.is() ) xChild->setParent(Parent); } template static com::sun::star::uno::Reference< com::sun::star::uno::XInterface > getParent( T* _pShape ) { ::osl::MutexGuard aGuard(_pShape->m_aMutex); ::com::sun::star::uno::Reference< ::com::sun::star::container::XChild > xChild; comphelper::query_aggregation(_pShape->m_aProps.aComponent.m_xProxy,xChild); if ( xChild.is() ) return xChild->getParent(); return _pShape->m_aProps.aComponent.m_xParent; } }; // ============================================================================= } // namespace reportdesign // ============================================================================= #endif // REPORTDESIGN_TOOLS_HXX