From 8e8c789742874ac823e68f6154050c64b6fc5b85 Mon Sep 17 00:00:00 2001 From: Tamas Bunth Date: Thu, 7 Sep 2017 22:00:01 +0200 Subject: oovbaapi: create XOval and XLine shape types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is needed in order to make "TypeOf myLine Is Line" or similar expressions return the expected "true" value. The implementation of the basic interpreter of TypeOf uses XTypeProvider to determine the type of an object by getting the last part of the type name. E.g. "ooo:vba::msforms::XLine" is determined as a "Line". That's why I created the XLine and XOval blank classes. TypeOf doc: https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/typeof-operator Change-Id: Ia49cc92d672e30d0126f02d61a55a956ac1425f0 Reviewed-on: https://gerrit.libreoffice.org/42083 Tested-by: Jenkins Reviewed-by: Tamás Bunth --- sc/Library_vbaobj.mk | 2 ++ sc/source/ui/vba/vbaapplication.cxx | 21 +++++++++++++++++++-- sc/source/ui/vba/vbalineshape.cxx | 34 ++++++++++++++++++++++++++++++++++ sc/source/ui/vba/vbalineshape.hxx | 37 +++++++++++++++++++++++++++++++++++++ sc/source/ui/vba/vbaovalshape.cxx | 34 ++++++++++++++++++++++++++++++++++ sc/source/ui/vba/vbaovalshape.hxx | 37 +++++++++++++++++++++++++++++++++++++ 6 files changed, 163 insertions(+), 2 deletions(-) create mode 100644 sc/source/ui/vba/vbalineshape.cxx create mode 100644 sc/source/ui/vba/vbalineshape.hxx create mode 100644 sc/source/ui/vba/vbaovalshape.cxx create mode 100644 sc/source/ui/vba/vbaovalshape.hxx (limited to 'sc') diff --git a/sc/Library_vbaobj.mk b/sc/Library_vbaobj.mk index 2d04d28d5bb5..082b254c88df 100644 --- a/sc/Library_vbaobj.mk +++ b/sc/Library_vbaobj.mk @@ -84,6 +84,7 @@ $(eval $(call gb_Library_add_exception_objects,vbaobj,\ sc/source/ui/vba/vbahyperlink \ sc/source/ui/vba/vbahyperlinks \ sc/source/ui/vba/vbainterior \ + sc/source/ui/vba/vbalineshape \ sc/source/ui/vba/vbamenubar \ sc/source/ui/vba/vbamenubars \ sc/source/ui/vba/vbamenu \ @@ -95,6 +96,7 @@ $(eval $(call gb_Library_add_exception_objects,vbaobj,\ sc/source/ui/vba/vbaoleobject \ sc/source/ui/vba/vbaoleobjects \ sc/source/ui/vba/vbaoutline \ + sc/source/ui/vba/vbaovalshape \ sc/source/ui/vba/vbapagebreak \ sc/source/ui/vba/vbapagebreaks \ sc/source/ui/vba/vbapagesetup \ diff --git a/sc/source/ui/vba/vbaapplication.cxx b/sc/source/ui/vba/vbaapplication.cxx index bab488c48b5d..1c915d15ae3b 100644 --- a/sc/source/ui/vba/vbaapplication.cxx +++ b/sc/source/ui/vba/vbaapplication.cxx @@ -33,6 +33,7 @@ #include #include #include +#include #include "service.hxx" #include "vbaapplication.hxx" @@ -51,6 +52,8 @@ #include "vbanames.hxx" #include #include "vbatextboxshape.hxx" +#include "vbaovalshape.hxx" +#include "vbalineshape.hxx" #include "vbaassistant.hxx" #include "sc.hrc" #include "macromgr.hxx" @@ -259,13 +262,27 @@ ScVbaApplication::getSelection() // if ScVbaShape::getType( xShape ) == office::MsoShapeType::msoAutoShape // and the uno object implements the com.sun.star.drawing.Text service // return a textboxshape object - if ( ScVbaShape::getType( xShape ) == office::MsoShapeType::msoAutoShape ) + sal_Int32 nType = ScVbaShape::getType( xShape ); + if ( nType == office::MsoShapeType::msoAutoShape ) { + // TODO Oval with text box + if( ScVbaShape::getAutoShapeType( xShape ) == office::MsoAutoShapeType::msoShapeOval ) + { + return uno::makeAny( uno::Reference< msforms::XOval >(new ScVbaOvalShape( mxContext, xShape, xShapes, xModel ) ) ); + } + + uno::Reference< lang::XServiceInfo > xShapeServiceInfo( xShape, uno::UNO_QUERY_THROW ); if ( xShapeServiceInfo->supportsService("com.sun.star.drawing.Text") ) { - return uno::makeAny( uno::Reference< msforms::XTextBoxShape >(new ScVbaTextBoxShape( mxContext, xShape, xShapes, xModel ) ) ); + return uno::makeAny( uno::Reference< msforms::XTextBoxShape >( + new ScVbaTextBoxShape( mxContext, xShape, xShapes, xModel ) ) ); } + } + else if ( nType == office::MsoShapeType::msoLine ) + { + return uno::makeAny( uno::Reference< msforms::XLine >( new ScVbaLineShape( + mxContext, xShape, xShapes, xModel ) ) ); } return uno::makeAny( uno::Reference< msforms::XShape >(new ScVbaShape( this, mxContext, xShape, xShapes, xModel, ScVbaShape::getType( xShape ) ) ) ); } diff --git a/sc/source/ui/vba/vbalineshape.cxx b/sc/source/ui/vba/vbalineshape.cxx new file mode 100644 index 000000000000..fac0f17155c9 --- /dev/null +++ b/sc/source/ui/vba/vbalineshape.cxx @@ -0,0 +1,34 @@ +/* -*- 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/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#include "vbalineshape.hxx" + +using namespace com::sun::star; +using namespace ooo::vba; + +/* + * This is implemented as a new class in order to provide XTypeProvider + * interface. This is needed by TypeOf ... Is ... basic operator. + */ + +ScVbaLineShape::ScVbaLineShape( const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< drawing::XShape >& xShape, const uno::Reference< drawing::XShapes >& xShapes, const uno::Reference< frame::XModel >& xModel ) : LineShapeImpl_BASE( uno::Reference< XHelperInterface >(), xContext, xShape, xShapes, xModel, ScVbaShape::getType( xShape ) ) +{} + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/vba/vbalineshape.hxx b/sc/source/ui/vba/vbalineshape.hxx new file mode 100644 index 000000000000..08ce5f17b841 --- /dev/null +++ b/sc/source/ui/vba/vbalineshape.hxx @@ -0,0 +1,37 @@ +/* -*- 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/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +#ifndef INCLUDED_SC_SOURCE_UI_VBA_VBALINESHAPE_HXX +#define INCLUDED_SC_SOURCE_UI_VBA_VBALINESHAPE_HXX + +#include +#include +#include + +typedef cppu::ImplInheritanceHelper< ScVbaShape, ov::msforms::XLine > LineShapeImpl_BASE; + +class ScVbaLineShape : public LineShapeImpl_BASE +{ +public: + ScVbaLineShape( const css::uno::Reference< css::uno::XComponentContext >& xContext, const css::uno::Reference< css::drawing::XShape >& xShape, const css::uno::Reference< css::drawing::XShapes >& xShapes, const css::uno::Reference< css::frame::XModel >& xModel ); + +}; + +#endif // INCLUDED_SC_SOURCE_UI_VBA_VBALINESHAPE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/vba/vbaovalshape.cxx b/sc/source/ui/vba/vbaovalshape.cxx new file mode 100644 index 000000000000..8efc877ee104 --- /dev/null +++ b/sc/source/ui/vba/vbaovalshape.cxx @@ -0,0 +1,34 @@ +/* -*- 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/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#include "vbaovalshape.hxx" + +using namespace com::sun::star; +using namespace ooo::vba; + +/* + * This is implemented as a new class in order to provide XTypeProvider + * interface. This is needed by TypeOf ... Is ... basic operator. + */ + +ScVbaOvalShape::ScVbaOvalShape( const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< drawing::XShape >& xShape, const uno::Reference< drawing::XShapes >& xShapes, const uno::Reference< frame::XModel >& xModel ) : OvalShapeImpl_BASE( uno::Reference< XHelperInterface >(), xContext, xShape, xShapes, xModel, ScVbaShape::getType( xShape ) ) +{} + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/vba/vbaovalshape.hxx b/sc/source/ui/vba/vbaovalshape.hxx new file mode 100644 index 000000000000..72ec0996af38 --- /dev/null +++ b/sc/source/ui/vba/vbaovalshape.hxx @@ -0,0 +1,37 @@ +/* -*- 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/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +#ifndef INCLUDED_SC_SOURCE_UI_VBA_VBAOVALSHAPE_HXX +#define INCLUDED_SC_SOURCE_UI_VBA_VBAOVALSHAPE_HXX + +#include +#include +#include + +typedef cppu::ImplInheritanceHelper< ScVbaShape, ov::msforms::XOval > OvalShapeImpl_BASE; + +class ScVbaOvalShape : public OvalShapeImpl_BASE +{ +public: + ScVbaOvalShape( const css::uno::Reference< css::uno::XComponentContext >& xContext, const css::uno::Reference< css::drawing::XShape >& xShape, const css::uno::Reference< css::drawing::XShapes >& xShapes, const css::uno::Reference< css::frame::XModel >& xModel ); + +}; + +#endif // INCLUDED_SC_SOURCE_UI_VBA_VBAOVALSHAPE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit