diff options
Diffstat (limited to 'sc/source/ui/vba/vbashapes.cxx')
-rw-r--r-- | sc/source/ui/vba/vbashapes.cxx | 394 |
1 files changed, 0 insertions, 394 deletions
diff --git a/sc/source/ui/vba/vbashapes.cxx b/sc/source/ui/vba/vbashapes.cxx deleted file mode 100644 index 8aac090d0337..000000000000 --- a/sc/source/ui/vba/vbashapes.cxx +++ /dev/null @@ -1,394 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: vbashapes.cxx,v $ - * $Revision: 1.3.32.1 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#include <com/sun/star/container/XNamed.hpp> -#include <com/sun/star/view/XSelectionSupplier.hpp> -#include <com/sun/star/text/WrapTextMode.hpp> -#include <ooo/vba/msforms/XShapeRange.hpp> -#include <ooo/vba/office/MsoAutoShapeType.hpp> - -#include "vbashapes.hxx" -#include "vbashape.hxx" -#include "vbashaperange.hxx" - -using namespace ::ooo::vba; -using namespace ::com::sun::star; - -class VbShapeEnumHelper : public EnumerationHelper_BASE -{ - uno::Reference<msforms::XShapes > m_xParent; - uno::Reference<container::XIndexAccess > m_xIndexAccess; - sal_Int32 nIndex; -public: - VbShapeEnumHelper( const uno::Reference< msforms::XShapes >& xParent, const uno::Reference< container::XIndexAccess >& xIndexAccess ) : m_xParent( xParent ), m_xIndexAccess( xIndexAccess ), nIndex( 0 ) {} - virtual ::sal_Bool SAL_CALL hasMoreElements( ) throw (uno::RuntimeException) - { - return ( nIndex < m_xIndexAccess->getCount() ); - } - virtual uno::Any SAL_CALL nextElement( ) throw (container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException) - { - ScVbaShapes* pShapes = dynamic_cast< ScVbaShapes* >(m_xParent.get()); - if ( pShapes && hasMoreElements() ) - return pShapes->createCollectionObject( m_xIndexAccess->getByIndex( nIndex++ ) ); - throw container::NoSuchElementException(); - } - -}; - -void ScVbaShapes::initBaseCollection() -{ - if ( m_xNameAccess.is() ) // already has NameAccess - return; - // no NameAccess then use ShapeCollectionHelper - XNamedObjectCollectionHelper< drawing::XShape >::XNamedVec mShapes; - sal_Int32 nLen = m_xIndexAccess->getCount(); - mShapes.reserve( nLen ); - for ( sal_Int32 index=0; index<nLen; ++index ) - mShapes.push_back( uno::Reference< drawing::XShape >( m_xIndexAccess->getByIndex( index ) , uno::UNO_QUERY ) ); - uno::Reference< container::XIndexAccess > xShapes( new XNamedObjectCollectionHelper< drawing::XShape >( mShapes ) ); - m_xIndexAccess.set( xShapes, uno::UNO_QUERY ); - m_xNameAccess.set( xShapes, uno::UNO_QUERY ); -} - -ScVbaShapes::ScVbaShapes( const css::uno::Reference< ov::XHelperInterface >& xParent, const css::uno::Reference< css::uno::XComponentContext >& xContext, const css::uno::Reference< css::container::XIndexAccess > xShapes ): ScVbaShapes_BASE( xParent, xContext, xShapes ), m_nNewShapeCount(0) -{ - m_xShapes.set( xShapes, uno::UNO_QUERY_THROW ); - m_xDrawPage.set( xShapes, uno::UNO_QUERY_THROW ); - initBaseCollection(); -} - -uno::Reference< container::XEnumeration > -ScVbaShapes::createEnumeration() throw (uno::RuntimeException) -{ - return new VbShapeEnumHelper( this, m_xIndexAccess ); -} - -uno::Any -ScVbaShapes::createCollectionObject( const css::uno::Any& aSource ) -{ - if( aSource.hasValue() ) - { - uno::Reference< drawing::XShape > xShape( aSource, uno::UNO_QUERY_THROW ); - return uno::makeAny( uno::Reference< msforms::XShape >( new ScVbaShape( getParent(), mxContext, xShape, m_xShapes, ScVbaShape::getType( xShape ) ) ) ); - } - return uno::Any(); -} - -uno::Type -ScVbaShapes::getElementType() throw (uno::RuntimeException) -{ - return ooo::vba::msforms::XShape::static_type(0); -} -rtl::OUString& -ScVbaShapes::getServiceImplName() -{ - static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM("ScVbaShapes") ); - return sImplName; -} - -uno::Sequence< rtl::OUString > -ScVbaShapes::getServiceNames() -{ - static uno::Sequence< rtl::OUString > aServiceNames; - if ( aServiceNames.getLength() == 0 ) - { - aServiceNames.realloc( 1 ); - aServiceNames[ 0 ] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ooo.vba.msform.Shapes" ) ); - } - return aServiceNames; -} - -css::uno::Reference< css::container::XIndexAccess > -ScVbaShapes::getShapesByArrayIndices( const uno::Any& Index ) throw (uno::RuntimeException) -{ - if ( Index.getValueTypeClass() != uno::TypeClass_SEQUENCE ) - throw uno::RuntimeException(); - - uno::Reference< script::XTypeConverter > xConverter = getTypeConverter(mxContext); - uno::Any aConverted; - aConverted = xConverter->convertTo( Index, getCppuType((uno::Sequence< uno::Any >*)0) ); - - uno::Sequence< uno::Any > sIndices; - aConverted >>= sIndices; - XNamedObjectCollectionHelper< drawing::XShape >::XNamedVec mShapes; - sal_Int32 nElems = sIndices.getLength(); - for( sal_Int32 index = 0; index < nElems; ++index ) - { - uno::Reference< drawing::XShape > xShape; - if ( sIndices[ index ].getValueTypeClass() == uno::TypeClass_STRING ) - { - rtl::OUString sName; - sIndices[ index ] >>= sName; - xShape.set( m_xNameAccess->getByName( sName ), uno::UNO_QUERY ); - } - else - { - sal_Int32 nIndex = 0; - sIndices[ index ] >>= nIndex; - // adjust for 1 based mso indexing - xShape.set( m_xIndexAccess->getByIndex( nIndex - 1 ), uno::UNO_QUERY ); - - } - // populate map with drawing::XShapes - if ( xShape.is() ) - mShapes.push_back( xShape ); - } - uno::Reference< container::XIndexAccess > xIndexAccess( new XNamedObjectCollectionHelper< drawing::XShape >( mShapes ) ); - return xIndexAccess; -} - -uno::Any SAL_CALL -ScVbaShapes::Item( const uno::Any& Index, const uno::Any& Index2 ) throw (uno::RuntimeException) -{ - // I don't think we need to support Array of indices for shapes -/* - if ( Index.getValueTypeClass() == uno::TypeClass_SEQUENCE ) - { - uno::Reference< container::XIndexAccess > xIndexAccess( getShapesByArrayIndices( Index ) ); - // return new collection instance - uno::Reference< XCollection > xShapesCollection( new ScVbaShapes( this->getParent(), mxContext, xIndexAccess ) ); - return uno::makeAny( xShapesCollection ); - } -*/ - return ScVbaShapes_BASE::Item( Index, Index2 ); -} - -uno::Reference< msforms::XShapeRange > SAL_CALL -ScVbaShapes::Range( const uno::Any& shapes ) throw (css::uno::RuntimeException) -{ - // shapes, can be an index or an array of indices - uno::Reference< container::XIndexAccess > xShapes; - if ( shapes.getValueTypeClass() == uno::TypeClass_SEQUENCE ) - xShapes = getShapesByArrayIndices( shapes ); - else - { - // wrap single index into a sequence - uno::Sequence< uno::Any > sIndices(1); - sIndices[ 0 ] = shapes; - uno::Any aIndex; - aIndex <<= sIndices; - xShapes = getShapesByArrayIndices( aIndex ); - } - return new ScVbaShapeRange( getParent(), mxContext, xShapes, m_xDrawPage ); -} - -void SAL_CALL -ScVbaShapes::SelectAll() throw (uno::RuntimeException) -{ - uno::Reference< frame::XModel > xModel( getCurrentDocument(), uno::UNO_QUERY_THROW ); - uno::Reference< view::XSelectionSupplier > xSelectSupp( xModel->getCurrentController(), uno::UNO_QUERY_THROW ); - try - { - xSelectSupp->select( uno::makeAny( m_xShapes ) ); - } - // viewuno.cxx ScTabViewObj::select will throw IllegalArgumentException - // if one of the shapes is no 'markable' e.g. a button - // the method still works - catch( lang::IllegalArgumentException& ) - { - } -} - -uno::Reference< drawing::XShape > -ScVbaShapes::createShape( rtl::OUString service ) throw (css::uno::RuntimeException) -{ - uno::Reference< lang::XMultiServiceFactory > xMSF( getCurrentDocument(), uno::UNO_QUERY_THROW ); - uno::Reference< drawing::XShape > xShape( xMSF->createInstance( service ), uno::UNO_QUERY_THROW ); - return xShape; -} - -uno::Any -ScVbaShapes::AddRectangle( sal_Int32 startX, sal_Int32 startY, sal_Int32 nLineWidth, sal_Int32 nLineHeight, uno::Any aRange ) throw (css::uno::RuntimeException) -{ - rtl::OUString sCreateShapeName( rtl::OUString::createFromAscii( "com.sun.star.drawing.RectangleShape" ) ); - sal_Int32 nXPos = Millimeter::getInHundredthsOfOneMillimeter( startX ); - sal_Int32 nYPos = Millimeter::getInHundredthsOfOneMillimeter( startY ); - sal_Int32 nWidth = Millimeter::getInHundredthsOfOneMillimeter( nLineWidth ); - sal_Int32 nHeight = Millimeter::getInHundredthsOfOneMillimeter( nLineHeight ); - - uno::Reference< drawing::XShape > xShape( createShape( sCreateShapeName ), uno::UNO_QUERY_THROW ); - m_xShapes->add( xShape ); - - rtl::OUString sName = createName( rtl::OUString::createFromAscii( "Rectangle" ) ); - setDefaultShapeProperties( xShape ); - setShape_NameProperty( xShape, sName ); - - awt::Point aMovePositionIfRange(0, 0); - awt::Point position; - position.X = nXPos - aMovePositionIfRange.X; - position.Y = nYPos - aMovePositionIfRange.Y; - xShape->setPosition( position ); - - awt::Size size; - size.Height = nHeight; - size.Width = nWidth; - xShape->setSize( size ); - - ScVbaShape *pScVbaShape = new ScVbaShape( getParent(), mxContext, xShape, m_xShapes, ScVbaShape::getType( xShape ) ); - pScVbaShape->setRange( aRange ); - return uno::makeAny( uno::Reference< msforms::XShape > ( pScVbaShape ) ); -} - -uno::Any -ScVbaShapes::AddEllipse( sal_Int32 startX, sal_Int32 startY, sal_Int32 nLineWidth, sal_Int32 nLineHeight, uno::Any aRange ) throw (css::uno::RuntimeException) -{ - rtl::OUString sCreateShapeName( rtl::OUString::createFromAscii( "com.sun.star.drawing.EllipseShape" ) ); - sal_Int32 nXPos = Millimeter::getInHundredthsOfOneMillimeter( startX ); - sal_Int32 nYPos = Millimeter::getInHundredthsOfOneMillimeter( startY ); - sal_Int32 nWidth = Millimeter::getInHundredthsOfOneMillimeter( nLineWidth ); - sal_Int32 nHeight = Millimeter::getInHundredthsOfOneMillimeter( nLineHeight ); - - uno::Reference< drawing::XShape > xShape( createShape( sCreateShapeName ), uno::UNO_QUERY_THROW ); - m_xShapes->add( xShape ); - - awt::Point aMovePositionIfRange( 0, 0 ); - //TODO helperapi using a writer document - /* - XDocument xDocument = (XDocument)getParent(); - if (AnyConverter.isVoid(_aRange)) - { - _aRange = xDocument.Range(new Integer(0), new Integer(1)); - // Top&Left in Word is Top&Left of the paper and not the writeable area. - aMovePositionIfRange = calculateTopLeftMargin((HelperInterfaceAdaptor)xDocument); - } - - setShape_AnchorTypeAndRangeProperty(xShape, _aRange); - */ - rtl::OUString name = createName( rtl::OUString::createFromAscii( "Oval" )); - setDefaultShapeProperties(xShape); - setShape_NameProperty(xShape, name); - - awt::Point position; - position.X = nXPos - aMovePositionIfRange.X; - position.Y = nYPos - aMovePositionIfRange.Y; - xShape->setPosition(position); - - awt::Size size; - size.Height = nHeight; - size.Width = nWidth; - xShape->setSize(size); - - ScVbaShape *pScVbaShape = new ScVbaShape( getParent(), mxContext, xShape, m_xShapes, ScVbaShape::getType( xShape ) ); - pScVbaShape->setRange( aRange ); - return uno::makeAny( uno::Reference< msforms::XShape > ( pScVbaShape ) ); -} - -//helpeapi calc -uno::Any SAL_CALL -ScVbaShapes::AddLine( sal_Int32 StartX, sal_Int32 StartY, sal_Int32 endX, sal_Int32 endY ) throw (uno::RuntimeException) -{ - sal_Int32 nLineWidth = endX - StartX; - sal_Int32 nLineHeight = endY - StartY; - - sal_Int32 nHeight = Millimeter::getInHundredthsOfOneMillimeter( nLineHeight ); - sal_Int32 nWidth = Millimeter::getInHundredthsOfOneMillimeter( nLineWidth ); - sal_Int32 nXPos = Millimeter::getInHundredthsOfOneMillimeter( StartX ); - sal_Int32 nYPos = Millimeter::getInHundredthsOfOneMillimeter( StartY ); - - uno::Reference< drawing::XShape > xShape( createShape( rtl::OUString::createFromAscii("com.sun.star.drawing.LineShape") ), uno::UNO_QUERY_THROW ); - m_xShapes->add( xShape ); - - awt::Point aMovePositionIfRange( 0, 0 ); - - rtl::OUString name = createName( rtl::OUString::createFromAscii( "Line" ) ); - setDefaultShapeProperties(xShape); - setShape_NameProperty(xShape, name); - - awt::Point position; - position.X = nXPos - aMovePositionIfRange.X; - position.Y = nYPos - aMovePositionIfRange.Y; - xShape->setPosition(position); - - awt::Size size; - size.Height = nHeight; - size.Width = nWidth; - xShape->setSize(size); - - ScVbaShape *pScVbaShape = new ScVbaShape( getParent(), mxContext, xShape, m_xShapes, ScVbaShape::getType( xShape ) ); - return uno::makeAny( uno::Reference< msforms::XShape > ( pScVbaShape ) ); -} - -uno::Any SAL_CALL -ScVbaShapes::AddShape( sal_Int32 _nType, sal_Int32 _nLeft, sal_Int32 _nTop, sal_Int32 _nWidth, sal_Int32 _nHeight ) throw (uno::RuntimeException) -{ - uno::Any _aAnchor; - if (_nType == office::MsoAutoShapeType::msoShapeRectangle) - { - return AddRectangle(_nLeft, _nTop, _nWidth, _nHeight, _aAnchor); - } - else if (_nType == office::MsoAutoShapeType::msoShapeOval) - { - return AddEllipse(_nLeft, _nTop, _nWidth, _nHeight, _aAnchor); - } - return uno::Any(); -} - -void -ScVbaShapes::setDefaultShapeProperties( uno::Reference< drawing::XShape > xShape ) throw (uno::RuntimeException) -{ - uno::Reference< beans::XPropertySet > xPropertySet( xShape, uno::UNO_QUERY_THROW ); - xPropertySet->setPropertyValue( rtl::OUString::createFromAscii( "FillStyle" ), uno::makeAny( rtl::OUString::createFromAscii( "SOLID" ) ) ); - xPropertySet->setPropertyValue( rtl::OUString::createFromAscii( "FillColor"), uno::makeAny( sal_Int32(0xFFFFFF) ) ); - xPropertySet->setPropertyValue( rtl::OUString::createFromAscii( "TextWordWrap"), uno::makeAny( text::WrapTextMode_THROUGHT ) ); - //not find in OOo2.3 - //xPropertySet->setPropertyValue( rtl::OUString::createFromAscii( "Opaque"), uno::makeAny( sal_True ) ); -} - -void -ScVbaShapes::setShape_NameProperty( uno::Reference< css::drawing::XShape > xShape, rtl::OUString sName ) -{ - uno::Reference< beans::XPropertySet > xPropertySet( xShape, uno::UNO_QUERY_THROW ); - try - { - xPropertySet->setPropertyValue( rtl::OUString::createFromAscii( "Name" ), uno::makeAny( sName ) ); - } - catch( script::BasicErrorException e ) - { - } -} - -rtl::OUString -ScVbaShapes::createName( rtl::OUString sName ) -{ - sal_Int32 nActNumber = 1 + m_nNewShapeCount; - m_nNewShapeCount++; - sName += rtl::OUString::valueOf( nActNumber ); - return sName; -} - -#if 0 -//TODO helperapi using a writer document -awt::Point -calculateTopLeftMargin( uno::Reference< XHelperInterface > xDocument ) -{ - awt::Point aPoint( 0, 0 ); - uno::Reference< frame::XModel > xModel( xDocument, uno::UNO_QUERY_THROW ); - return awt::Point(); -} -#endif |