LibreOffice Module sc (master) 1
vbasheetobjects.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include "vbasheetobjects.hxx"
21#include <utility>
22#include <vector>
24#include <rtl/math.hxx>
25#include <com/sun/star/beans/XPropertySet.hpp>
26#include <com/sun/star/container/XIndexContainer.hpp>
27#include <com/sun/star/container/XNamed.hpp>
28#include <com/sun/star/drawing/XControlShape.hpp>
29#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
30#include <com/sun/star/drawing/XShapes.hpp>
31#include <com/sun/star/form/FormComponentType.hpp>
32#include <com/sun/star/form/XForm.hpp>
33#include <com/sun/star/form/XFormComponent.hpp>
34#include <com/sun/star/form/XFormsSupplier.hpp>
35#include <com/sun/star/frame/XModel.hpp>
36#include <com/sun/star/lang/XMultiServiceFactory.hpp>
37#include <com/sun/star/sheet/XSpreadsheet.hpp>
38#include "vbasheetobject.hxx"
40
41using namespace ::com::sun::star;
42using namespace ::ooo::vba;
43
44namespace {
45
46template< typename Type >
47bool lclGetProperty( Type& orValue, const uno::Reference< beans::XPropertySet >& rxPropSet, const OUString& rPropName )
48{
49 try
50 {
51 return rxPropSet->getPropertyValue( rPropName ) >>= orValue;
52 }
53 catch( uno::Exception& )
54 {
55 }
56 return false;
57}
58
63sal_Int32 lclPointsToHmm( const uno::Any& rPoints )
64{
65 return std::round(o3tl::convert(::rtl::math::approxFloor(rPoints.get<double>() / 0.75) * 0.75,
67}
68
69} // namespace
70
71// Base implementations
72
78class ScVbaObjectContainer : public ::cppu::WeakImplHelper< container::XIndexAccess >
79{
80public:
82 explicit ScVbaObjectContainer(
83 uno::Reference< XHelperInterface > xParent,
84 uno::Reference< uno::XComponentContext > xContext,
85 const uno::Reference< frame::XModel >& rxModel,
86 const uno::Reference< sheet::XSpreadsheet >& rxSheet,
87 const uno::Type& rVbaType );
88
90 const uno::Reference< XHelperInterface >& getParent() const { return mxParent; }
92 const uno::Reference< uno::XComponentContext >& getContext() const { return mxContext; }
94 const uno::Type& getVbaType() const { return maVbaType; }
95
101 void collectShapes();
106 uno::Reference< drawing::XShape > createShape( const awt::Point& rPos, const awt::Size& rSize );
111 sal_Int32 insertShape( const uno::Reference< drawing::XShape >& rxShape );
116 ::rtl::Reference< ScVbaSheetObjectBase > createVbaObject( const uno::Reference< drawing::XShape >& rxShape );
121 uno::Any createCollectionObject( const uno::Any& rSource );
126 uno::Any getItemByStringIndex( const OUString& rIndex );
127
128 // XIndexAccess
129 virtual sal_Int32 SAL_CALL getCount() override;
130 virtual uno::Any SAL_CALL getByIndex( sal_Int32 nIndex ) override;
131
132 // XElementAccess
133 virtual uno::Type SAL_CALL getElementType() override;
134 virtual sal_Bool SAL_CALL hasElements() override;
135
136protected:
138 virtual bool implPickShape( const uno::Reference< drawing::XShape >& rxShape ) const = 0;
143 virtual rtl::Reference<ScVbaSheetObjectBase> implCreateVbaObject( const uno::Reference< drawing::XShape >& rxShape ) = 0;
145 virtual OUString implGetShapeServiceName() const = 0;
146
151 virtual OUString implGetShapeName( const uno::Reference< drawing::XShape >& rxShape ) const;
156 virtual void implOnShapeCreated( const uno::Reference< drawing::XShape >& rxShape );
157
158protected:
159 uno::Reference< XHelperInterface > mxParent;
160 uno::Reference< uno::XComponentContext > mxContext;
161 uno::Reference< frame::XModel > mxModel;
162 uno::Reference< lang::XMultiServiceFactory > mxFactory;
163 uno::Reference< drawing::XShapes > mxShapes;
164
165private:
166 typedef ::std::vector< uno::Reference< drawing::XShape > > ShapeVector;
169};
170
172 uno::Reference< XHelperInterface > xParent,
173 uno::Reference< uno::XComponentContext > xContext,
174 const uno::Reference< frame::XModel >& rxModel,
175 const uno::Reference< sheet::XSpreadsheet >& rxSheet,
176 const uno::Type& rVbaType ) :
177 mxParent(std::move( xParent )),
178 mxContext(std::move( xContext )),
179 mxModel( rxModel, uno::UNO_SET_THROW ),
180 mxFactory( rxModel, uno::UNO_QUERY_THROW ),
181 maVbaType( rVbaType )
182{
183 uno::Reference< drawing::XDrawPageSupplier > xDrawPageSupp( rxSheet, uno::UNO_QUERY_THROW );
184 mxShapes.set( xDrawPageSupp->getDrawPage(), uno::UNO_QUERY_THROW );
185}
186
188{
189 maShapes.clear();
190 for( sal_Int32 nIndex = 0, nCount = mxShapes->getCount(); nIndex < nCount; ++nIndex )
191 {
192 uno::Reference< drawing::XShape > xShape( mxShapes->getByIndex( nIndex ), uno::UNO_QUERY_THROW );
193 if( implPickShape( xShape ) )
194 maShapes.push_back( xShape );
195 }
196}
197
198uno::Reference< drawing::XShape > ScVbaObjectContainer::createShape( const awt::Point& rPos, const awt::Size& rSize )
199{
200 uno::Reference< drawing::XShape > xShape( mxFactory->createInstance( implGetShapeServiceName() ), uno::UNO_QUERY_THROW );
201 xShape->setPosition( rPos );
202 xShape->setSize( rSize );
203 implOnShapeCreated( xShape );
204 return xShape;
205}
206
207sal_Int32 ScVbaObjectContainer::insertShape( const uno::Reference< drawing::XShape >& rxShape )
208{
209 mxShapes->add( rxShape );
210 maShapes.push_back( rxShape );
211 return mxShapes->getCount() - 1;
212}
213
215 const uno::Reference< drawing::XShape >& rxShape )
216{
217 return implCreateVbaObject( rxShape );
218}
219
221{
222 uno::Reference< drawing::XShape > xShape( rSource, uno::UNO_QUERY_THROW );
223 uno::Reference< excel::XSheetObject > xSheetObject( implCreateVbaObject( xShape ) );
224 return uno::Any( xSheetObject );
225}
226
228{
229 auto aIt = std::find_if(maShapes.begin(), maShapes.end(),
230 [&rIndex, this](const ShapeVector::value_type& rxShape) { return rIndex == implGetShapeName( rxShape ); });
231 if (aIt != maShapes.end())
232 return createCollectionObject( uno::Any( *aIt ) );
233 throw uno::RuntimeException();
234}
235
236// XIndexAccess
237
239{
240 return static_cast< sal_Int32 >( maShapes.size() );
241}
242
243uno::Any SAL_CALL ScVbaObjectContainer::getByIndex( sal_Int32 nIndex )
244{
245 if( (0 <= nIndex) && (nIndex < getCount()) )
246 return uno::Any( maShapes[ static_cast< size_t >( nIndex ) ] );
247 throw lang::IndexOutOfBoundsException();
248}
249
250// XElementAccess
251
253{
255}
256
258{
259 return !maShapes.empty();
260}
261
262// private
263
264OUString ScVbaObjectContainer::implGetShapeName( const uno::Reference< drawing::XShape >& rxShape ) const
265{
266 uno::Reference< beans::XPropertySet > xPropSet( rxShape, uno::UNO_QUERY_THROW );
267 return xPropSet->getPropertyValue( "Name" ).get< OUString >();
268}
269
270void ScVbaObjectContainer::implOnShapeCreated( const uno::Reference< drawing::XShape >& /*rxShape*/ )
271{
272}
273
274namespace {
275
276class ScVbaObjectEnumeration : public SimpleEnumerationBase
277{
278public:
279 explicit ScVbaObjectEnumeration( const ScVbaObjectContainerRef& rxContainer );
280 virtual uno::Any createCollectionObject( const uno::Any& rSource ) override;
281
282private:
284};
285
286}
287
288ScVbaObjectEnumeration::ScVbaObjectEnumeration( const ScVbaObjectContainerRef& rxContainer ) :
289 SimpleEnumerationBase( rxContainer ),
290 mxContainer( rxContainer )
291{
292}
293
294uno::Any ScVbaObjectEnumeration::createCollectionObject( const uno::Any& rSource )
295{
296 return mxContainer->createCollectionObject( rSource );
297}
298
300 ScVbaSheetObjects_BASE( rxContainer->getParent(), rxContainer->getContext(), rxContainer ),
301 mxContainer( rxContainer )
302{
303 mxContainer->collectShapes();
304}
305
307{
308}
309
311{
312 mxContainer->collectShapes();
313}
314
315// XEnumerationAccess
316
317uno::Reference< container::XEnumeration > SAL_CALL ScVbaSheetObjectsBase::createEnumeration()
318{
319 return new ScVbaObjectEnumeration( mxContainer );
320}
321
322// XElementAccess
323
325{
326 return mxContainer->getVbaType();
327}
328
329// ScVbaCollectionBase
330
332{
333 return mxContainer->createCollectionObject( rSource );
334}
335
337{
338 return mxContainer->getItemByStringIndex( rIndex );
339}
340
341// Graphic object containers supporting ooo.vba.excel.XGraphicObject
342
344 ScVbaGraphicObjects_BASE( rxContainer )
345{
346}
347
348// XGraphicObjects
349
350uno::Any SAL_CALL ScVbaGraphicObjectsBase::Add( const uno::Any& rLeft, const uno::Any& rTop, const uno::Any& rWidth, const uno::Any& rHeight )
351{
352 /* Extract double values from passed Anys (the lclPointsToHmm() helper
353 function will throw a RuntimeException on any error), and convert from
354 points to 1/100 mm. */
355 awt::Point aPos( lclPointsToHmm( rLeft ), lclPointsToHmm( rTop ) );
356 awt::Size aSize( lclPointsToHmm( rWidth ), lclPointsToHmm( rHeight ) );
357 // TODO: translate coordinates for RTL sheets
358 if( (aPos.X < 0) || (aPos.Y < 0) || (aSize.Width <= 0) || (aSize.Height <= 0) )
359 throw uno::RuntimeException();
360
361 // create the UNO shape
362 uno::Reference< drawing::XShape > xShape( mxContainer->createShape( aPos, aSize ), uno::UNO_SET_THROW );
363 sal_Int32 nIndex = mxContainer->insertShape( xShape );
364
365 // create and return the VBA object
366 ::rtl::Reference< ScVbaSheetObjectBase > xVbaObject = mxContainer->createVbaObject( xShape );
367 xVbaObject->setDefaultProperties( nIndex );
368 return uno::Any( uno::Reference< excel::XSheetObject >( xVbaObject ) );
369}
370
371// Drawing controls
372
373namespace {
374
375class ScVbaControlContainer : public ScVbaObjectContainer
376{
377public:
379 explicit ScVbaControlContainer(
380 const uno::Reference< XHelperInterface >& rxParent,
381 const uno::Reference< uno::XComponentContext >& rxContext,
382 const uno::Reference< frame::XModel >& rxModel,
383 const uno::Reference< sheet::XSpreadsheet >& rxSheet,
384 const uno::Type& rVbaType,
385 OUString aModelServiceName,
386 sal_Int16 /* css::form::FormComponentType */ eType );
387
388protected:
390 uno::Reference< container::XIndexContainer > const & createForm();
391
392 virtual bool implPickShape( const uno::Reference< drawing::XShape >& rxShape ) const override;
393 virtual OUString implGetShapeServiceName() const override;
394 virtual bool implCheckProperties( const uno::Reference< beans::XPropertySet >& rxModelProps ) const;
395 virtual OUString implGetShapeName( const uno::Reference< drawing::XShape >& rxShape ) const override;
396 virtual void implOnShapeCreated( const uno::Reference< drawing::XShape >& rxShape ) override;
397
398protected:
399 uno::Reference< container::XIndexContainer > mxFormIC;
400 OUString maModelServiceName;
401 sal_Int16 /* css::form::FormComponentType */ meType;
402};
403
404}
405
406ScVbaControlContainer::ScVbaControlContainer(
407 const uno::Reference< XHelperInterface >& rxParent,
408 const uno::Reference< uno::XComponentContext >& rxContext,
409 const uno::Reference< frame::XModel >& rxModel,
410 const uno::Reference< sheet::XSpreadsheet >& rxSheet,
411 const uno::Type& rVbaType,
412 OUString aModelServiceName,
413 sal_Int16 /* css::form::FormComponentType */ eType ) :
414 ScVbaObjectContainer( rxParent, rxContext, rxModel, rxSheet, rVbaType ),
415 maModelServiceName(std::move( aModelServiceName )),
416 meType( eType )
417{
418}
419
420uno::Reference< container::XIndexContainer > const & ScVbaControlContainer::createForm()
421{
422 if( !mxFormIC.is() )
423 {
424 uno::Reference< form::XFormsSupplier > xFormsSupp( mxShapes, uno::UNO_QUERY_THROW );
425 uno::Reference< container::XNameContainer > xFormsNC( xFormsSupp->getForms(), uno::UNO_SET_THROW );
426 OUString aFormName = "Standard";
427 if( xFormsNC->hasByName( aFormName ) )
428 {
429 mxFormIC.set( xFormsNC->getByName( aFormName ), uno::UNO_QUERY_THROW );
430 }
431 else
432 {
433 uno::Reference< form::XForm > xForm( mxFactory->createInstance( "com.sun.star.form.component.Form" ), uno::UNO_QUERY_THROW );
434 xFormsNC->insertByName( aFormName, uno::Any( xForm ) );
435 mxFormIC.set( xForm, uno::UNO_QUERY_THROW );
436 }
437 }
438 return mxFormIC;
439}
440
441bool ScVbaControlContainer::implPickShape( const uno::Reference< drawing::XShape >& rxShape ) const
442{
443 try
444 {
445 uno::Reference< drawing::XControlShape > xControlShape( rxShape, uno::UNO_QUERY_THROW );
446 uno::Reference< beans::XPropertySet > xModelProps( xControlShape->getControl(), uno::UNO_QUERY_THROW );
447 sal_Int16 nClassId = -1;
448 return lclGetProperty( nClassId, xModelProps, "ClassId" ) &&
449 (nClassId == meType) && implCheckProperties( xModelProps );
450 }
451 catch( uno::Exception& )
452 {
453 }
454 return false;
455}
456
457OUString ScVbaControlContainer::implGetShapeServiceName() const
458{
459 return "com.sun.star.drawing.ControlShape";
460}
461
462bool ScVbaControlContainer::implCheckProperties( const uno::Reference< beans::XPropertySet >& /*rxModelProps*/ ) const
463{
464 return true;
465}
466
467OUString ScVbaControlContainer::implGetShapeName( const uno::Reference< drawing::XShape >& rxShape ) const
468{
469 uno::Reference< drawing::XControlShape > xControlShape( rxShape, uno::UNO_QUERY_THROW );
470 return uno::Reference< container::XNamed >( xControlShape->getControl(), uno::UNO_QUERY_THROW )->getName();
471}
472
473void ScVbaControlContainer::implOnShapeCreated( const uno::Reference< drawing::XShape >& rxShape )
474{
475 // passed shape must be a control shape
476 uno::Reference< drawing::XControlShape > xControlShape( rxShape, uno::UNO_QUERY_THROW );
477
478 // create the UNO control model
479 uno::Reference< form::XFormComponent > xFormComponent( mxFactory->createInstance( maModelServiceName ), uno::UNO_QUERY_THROW );
480 uno::Reference< awt::XControlModel > xControlModel( xFormComponent, uno::UNO_QUERY_THROW );
481
482 // insert the control model into the form and the shape
483 createForm();
484 mxFormIC->insertByIndex( mxFormIC->getCount(), uno::Any( xFormComponent ) );
485 xControlShape->setControl( xControlModel );
486}
487
488// Push button
489
490namespace {
491
492class ScVbaButtonContainer : public ScVbaControlContainer
493{
494 bool mbOptionButtons;
495public:
497 explicit ScVbaButtonContainer(
498 const uno::Reference< XHelperInterface >& rxParent,
499 const uno::Reference< uno::XComponentContext >& rxContext,
500 const uno::Reference< frame::XModel >& rxModel,
501 const uno::Reference< sheet::XSpreadsheet >& rxSheet,
502 bool bOptionButtons);
503
504protected:
505 virtual rtl::Reference<ScVbaSheetObjectBase> implCreateVbaObject( const uno::Reference< drawing::XShape >& rxShape ) override;
506 virtual bool implCheckProperties( const uno::Reference< beans::XPropertySet >& rxModelProps ) const override;
507};
508
509}
510
511ScVbaButtonContainer::ScVbaButtonContainer(
512 const uno::Reference< XHelperInterface >& rxParent,
513 const uno::Reference< uno::XComponentContext >& rxContext,
514 const uno::Reference< frame::XModel >& rxModel,
515 const uno::Reference< sheet::XSpreadsheet >& rxSheet,
516 bool bOptionButtons ) :
517 ScVbaControlContainer(
518 rxParent, rxContext, rxModel, rxSheet,
519 cppu::UnoType<excel::XButton>::get(),
520 ( bOptionButtons ?
521 OUString( "com.sun.star.form.component.RadioButton" ) :
522 OUString( "com.sun.star.form.component.CommandButton" ) ),
523 ( bOptionButtons ?
524 form::FormComponentType::RADIOBUTTON :
525 form::FormComponentType::COMMANDBUTTON) ),
526 mbOptionButtons(bOptionButtons)
527{
528}
529
530rtl::Reference<ScVbaSheetObjectBase> ScVbaButtonContainer::implCreateVbaObject( const uno::Reference< drawing::XShape >& rxShape )
531{
532 uno::Reference< drawing::XControlShape > xControlShape( rxShape, uno::UNO_QUERY_THROW );
533 return new ScVbaButton( mxParent, mxContext, mxModel, createForm(), xControlShape );
534}
535
536bool ScVbaButtonContainer::implCheckProperties( const uno::Reference< beans::XPropertySet >& rxModelProps ) const
537{
538 if (mbOptionButtons)
539 return true;
540
541 // do not insert toggle buttons into the 'Buttons' collection
542 bool bToggle = false;
543 return lclGetProperty( bToggle, rxModelProps, "Toggle" ) && !bToggle;
544}
545
547 const uno::Reference< XHelperInterface >& rxParent,
548 const uno::Reference< uno::XComponentContext >& rxContext,
549 const uno::Reference< frame::XModel >& rxModel,
550 const uno::Reference< sheet::XSpreadsheet >& rxSheet,
551 bool bOptionButtons) :
552 ScVbaGraphicObjectsBase( new ScVbaButtonContainer( rxParent, rxContext, rxModel, rxSheet, bOptionButtons ) )
553{
554}
555
556VBAHELPER_IMPL_XHELPERINTERFACE( ScVbaButtons, "ooo.vba.excel.Buttons" )
557
558/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
css::uno::Reference< css::frame::XModel2 > mxModel
Reference< container::XNameAccess > mxContainer
WeakReference< XInterface > mxParent
Collection containing all button controls from a sheet (not ActiveX controls).
ScVbaButtons(const css::uno::Reference< ov::XHelperInterface > &rxParent, const css::uno::Reference< css::uno::XComponentContext > &rxContext, const css::uno::Reference< css::frame::XModel > &rxModel, const css::uno::Reference< css::sheet::XSpreadsheet > &rxSheet, bool bOptionButtons)
Base class for collections containing a specific type of graphic object from a sheet.
ScVbaGraphicObjectsBase(const ScVbaObjectContainerRef &rxContainer)
virtual css::uno::Any SAL_CALL Add(const css::uno::Any &rLeft, const css::uno::Any &rTop, const css::uno::Any &rWidth, const css::uno::Any &rHeight) override
Container for a specific type of drawing object in a spreadsheet.
virtual rtl::Reference< ScVbaSheetObjectBase > implCreateVbaObject(const uno::Reference< drawing::XShape > &rxShape)=0
Derived classes create and return a new VBA implementation object for the passed shape.
virtual uno::Any SAL_CALL getByIndex(sal_Int32 nIndex) override
virtual uno::Type SAL_CALL getElementType() override
::std::vector< uno::Reference< drawing::XShape > > ShapeVector
const uno::Type maVbaType
uno::Any createCollectionObject(const uno::Any &rSource)
Creates and returns a new VBA implementation object for the passed shape in an Any.
uno::Reference< frame::XModel > mxModel
virtual sal_Bool SAL_CALL hasElements() override
ScVbaObjectContainer(uno::Reference< XHelperInterface > xParent, uno::Reference< uno::XComponentContext > xContext, const uno::Reference< frame::XModel > &rxModel, const uno::Reference< sheet::XSpreadsheet > &rxSheet, const uno::Type &rVbaType)
uno::Any getItemByStringIndex(const OUString &rIndex)
Returns the VBA implementation object with the specified name.
virtual OUString implGetShapeName(const uno::Reference< drawing::XShape > &rxShape) const
Returns the shape name via 'Name' property of the UNO shape.
uno::Reference< drawing::XShapes > mxShapes
uno::Reference< uno::XComponentContext > mxContext
virtual OUString implGetShapeServiceName() const =0
Derived classes return the service name of the UNO shape.
virtual sal_Int32 SAL_CALL getCount() override
const uno::Reference< XHelperInterface > & getParent() const
Returns the VBA helper interface of the VBA collection object.
const uno::Reference< uno::XComponentContext > & getContext() const
Returns the component context of the VBA collection object.
uno::Reference< lang::XMultiServiceFactory > mxFactory
const uno::Type & getVbaType() const
Returns the VBA type information of the objects in this container.
::rtl::Reference< ScVbaSheetObjectBase > createVbaObject(const uno::Reference< drawing::XShape > &rxShape)
Creates and returns a new VBA implementation object for the passed shape.
uno::Reference< drawing::XShape > createShape(const awt::Point &rPos, const awt::Size &rSize)
Creates and returns a new UNO shape.
sal_Int32 insertShape(const uno::Reference< drawing::XShape > &rxShape)
Inserts the passed shape into the draw page and into this container, and returns its index in the dra...
uno::Reference< XHelperInterface > mxParent
virtual bool implPickShape(const uno::Reference< drawing::XShape > &rxShape) const =0
Derived classes return true, if the passed shape is supported by the instance.
void collectShapes()
Collects all shapes supported by this instance and inserts them into the internal shape vector.
virtual void implOnShapeCreated(const uno::Reference< drawing::XShape > &rxShape)
Is called when a new UNO shape has been created but not yet inserted into the drawing page.
virtual ~ScVbaSheetObjectsBase() override
ScVbaObjectContainerRef mxContainer
virtual css::uno::Any getItemByStringIndex(const OUString &rIndex) override
void collectShapes()
Updates the collection by fetching all shapes from the draw page.
ScVbaSheetObjectsBase(const ScVbaObjectContainerRef &rxContainer)
virtual css::uno::Any createCollectionObject(const css::uno::Any &rSource) override
virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() override
virtual css::uno::Type SAL_CALL getElementType() override
virtual css::uno::Any createCollectionObject(const css::uno::Any &rSource)=0
css::uno::Type const & get()
int nCount
uno::Reference< uno::XComponentContext > mxContext
DocumentType eType
sal_Int32 nIndex
Type
constexpr Point convert(const Point &rPoint, o3tl::Length eFrom, o3tl::Length eTo)
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
uno::Reference< presentation::XTransitionFactory > mxFactory
unsigned char sal_Bool
#define VBAHELPER_IMPL_XHELPERINTERFACE(classname, servicename)
::cppu::ImplInheritanceHelper< ScVbaSheetObjectsBase, ov::excel::XGraphicObjects > ScVbaGraphicObjects_BASE
RedlineType meType