23 #include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp>
24 #include <com/sun/star/drawing/LineDash.hpp>
25 #include <com/sun/star/awt/Gradient.hpp>
26 #include <com/sun/star/awt/XBitmap.hpp>
27 #include <com/sun/star/graphic/XGraphic.hpp>
28 #include <com/sun/star/drawing/Hatch.hpp>
29 #include <com/sun/star/lang/XServiceInfo.hpp>
30 #include <com/sun/star/container/XNameContainer.hpp>
44 using namespace ::
cppu;
48 class SvxUnoXPropertyTable :
public WeakImplHelper< container::XNameContainer, lang::XServiceInfo >
52 sal_Int16
const mnWhich;
54 long getCount()
const {
return mpList ? mpList->
Count() : 0; }
57 SvxUnoXPropertyTable( sal_Int16 nWhich,
XPropertyList* pList )
throw();
63 virtual std::unique_ptr<XPropertyEntry> createEntry(
const OUString& rName,
const uno::Any& rAny)
const = 0;
69 virtual void SAL_CALL insertByName(
const OUString& aName,
const uno::Any& aElement )
override;
70 virtual void SAL_CALL removeByName(
const OUString& Name )
override;
73 virtual void SAL_CALL replaceByName(
const OUString& aName,
const uno::Any& aElement )
override;
76 virtual uno::Any SAL_CALL getByName(
const OUString& aName )
override;
77 virtual uno::Sequence< OUString > SAL_CALL getElementNames( )
override;
78 virtual sal_Bool SAL_CALL hasByName(
const OUString& aName )
override;
81 virtual sal_Bool SAL_CALL hasElements( )
override;
86 SvxUnoXPropertyTable::SvxUnoXPropertyTable( sal_Int16 nWhich,
XPropertyList* pList )
throw()
87 : mpList( pList ), mnWhich( nWhich )
94 return mpList->
Get(index);
100 sal_Bool SAL_CALL SvxUnoXPropertyTable::supportsService(
const OUString& ServiceName )
106 void SAL_CALL SvxUnoXPropertyTable::insertByName(
const OUString& aName,
const uno::Any& aElement )
110 if(
nullptr == mpList )
111 throw lang::IllegalArgumentException();
113 if( hasByName( aName ) )
114 throw container::ElementExistException();
118 std::unique_ptr<XPropertyEntry> pNewEntry(createEntry(aInternalName, aElement));
120 throw lang::IllegalArgumentException();
122 mpList->
Insert(std::move(pNewEntry));
125 void SAL_CALL SvxUnoXPropertyTable::removeByName(
const OUString& Name )
131 const long nCount = getCount();
133 for( i = 0; i < nCount; i++ )
136 if (pEntry && aInternalName == pEntry->
GetName())
143 throw container::NoSuchElementException();
147 void SAL_CALL SvxUnoXPropertyTable::replaceByName(
const OUString& aName,
const uno::Any& aElement )
153 const long nCount = getCount();
155 for( i = 0; i < nCount; i++ )
158 if (pEntry && aInternalName == pEntry->
GetName())
160 std::unique_ptr<XPropertyEntry> pNewEntry(createEntry(aInternalName, aElement));
162 throw lang::IllegalArgumentException();
164 mpList->
Replace(std::move(pNewEntry), i);
169 throw container::NoSuchElementException();
173 uno::Any SAL_CALL SvxUnoXPropertyTable::getByName(
const OUString& aName )
179 const long nCount = getCount();
181 for( i = 0; i < nCount; i++ )
185 if (pEntry && aInternalName == pEntry->
GetName())
186 return getAny( pEntry );
189 throw container::NoSuchElementException();
192 uno::Sequence< OUString > SAL_CALL SvxUnoXPropertyTable::getElementNames()
196 const long nCount = getCount();
197 uno::Sequence< OUString > aNames( nCount );
198 OUString* pNames = aNames.getArray();
200 for( i = 0; i < nCount; i++ )
211 sal_Bool SAL_CALL SvxUnoXPropertyTable::hasByName(
const OUString& aName )
217 const long nCount = mpList?mpList->
Count():0;
219 for( i = 0; i < nCount; i++ )
222 if (pEntry && aInternalName == pEntry->
GetName())
230 sal_Bool SAL_CALL SvxUnoXPropertyTable::hasElements( )
234 return getCount() != 0;
239 class SvxUnoXColorTable :
public SvxUnoXPropertyTable
246 virtual std::unique_ptr<XPropertyEntry> createEntry(
const OUString& rName,
const uno::Any& rAny)
const override;
249 virtual uno::Type SAL_CALL getElementType()
override;
260 return static_cast<OWeakObject*
>(
new SvxUnoXColorTable( pList ));
266 return uno::Any( static_cast<sal_Int32>(static_cast<const XColorEntry*>(pEntry)->GetColor()) );
269 std::unique_ptr<XPropertyEntry> SvxUnoXColorTable::createEntry(
const OUString& rName,
const uno::Any& rAny)
const
272 if( !(rAny >>= aColor) )
273 return std::unique_ptr<XPropertyEntry>();
275 return std::make_unique<XColorEntry>(aColor, rName);
279 uno::Type SAL_CALL SvxUnoXColorTable::getElementType()
281 return ::cppu::UnoType<sal_Int32>::get();
285 OUString SAL_CALL SvxUnoXColorTable::getImplementationName( )
287 return "SvxUnoXColorTable";
290 uno::Sequence< OUString > SAL_CALL SvxUnoXColorTable::getSupportedServiceNames( )
292 return {
"com.sun.star.drawing.ColorTable" };
297 class SvxUnoXLineEndTable :
public SvxUnoXPropertyTable
304 virtual std::unique_ptr<XPropertyEntry> createEntry(
const OUString& rName,
const uno::Any& rAny)
const override;
307 virtual uno::Type SAL_CALL getElementType()
override;
318 return static_cast<OWeakObject*
>(
new SvxUnoXLineEndTable( pTable ));
324 drawing::PolyPolygonBezierCoords aBezier;
330 std::unique_ptr<XPropertyEntry> SvxUnoXLineEndTable::createEntry(
const OUString& rName,
const uno::Any& rAny)
const
332 auto pCoords = o3tl::tryAccess<drawing::PolyPolygonBezierCoords>(rAny);
334 return std::unique_ptr<XLineEndEntry>();
337 if( pCoords->Coordinates.getLength() > 0 )
343 return std::make_unique<XLineEndEntry>(aPolyPolygon, rName);
347 uno::Type SAL_CALL SvxUnoXLineEndTable::getElementType()
353 OUString SAL_CALL SvxUnoXLineEndTable::getImplementationName( )
355 return "SvxUnoXLineEndTable";
358 uno::Sequence< OUString > SAL_CALL SvxUnoXLineEndTable::getSupportedServiceNames( )
360 return {
"com.sun.star.drawing.LineEndTable" };
365 class SvxUnoXDashTable :
public SvxUnoXPropertyTable
372 virtual std::unique_ptr<XPropertyEntry> createEntry(
const OUString& rName,
const uno::Any& rAny)
const override;
375 virtual uno::Type SAL_CALL getElementType()
override;
386 return static_cast<OWeakObject*
>(
new SvxUnoXDashTable( pTable ));
394 drawing::LineDash aLineDash;
396 aLineDash.Style =
static_cast<css::drawing::DashStyle
>(
static_cast<sal_uInt16
>(rXD.
GetDashStyle()));
397 aLineDash.Dots = rXD.
GetDots();
406 std::unique_ptr<XPropertyEntry> SvxUnoXDashTable::createEntry(
const OUString& rName,
const uno::Any& rAny)
const
408 drawing::LineDash aLineDash;
409 if(!(rAny >>= aLineDash))
410 return std::unique_ptr<XDashEntry>();
414 aXDash.
SetDashStyle(static_cast<css::drawing::DashStyle>(static_cast<sal_uInt16>(aLineDash.Style)));
415 aXDash.SetDots(aLineDash.Dots);
416 aXDash.SetDotLen(aLineDash.DotLen);
417 aXDash.SetDashes(aLineDash.Dashes);
418 aXDash.SetDashLen(aLineDash.DashLen);
419 aXDash.SetDistance(aLineDash.Distance);
421 return std::make_unique<XDashEntry>(aXDash, rName);
425 uno::Type SAL_CALL SvxUnoXDashTable::getElementType()
431 OUString SAL_CALL SvxUnoXDashTable::getImplementationName( )
433 return "SvxUnoXDashTable";
436 uno::Sequence< OUString > SAL_CALL SvxUnoXDashTable::getSupportedServiceNames( )
438 return {
"com.sun.star.drawing.DashTable" };
443 class SvxUnoXHatchTable :
public SvxUnoXPropertyTable
450 virtual std::unique_ptr<XPropertyEntry> createEntry(
const OUString& rName,
const uno::Any& rAny)
const override;
453 virtual uno::Type SAL_CALL getElementType()
override;
464 return static_cast<OWeakObject*
>(
new SvxUnoXHatchTable( pTable ));
472 drawing::Hatch aUnoHatch;
475 aUnoHatch.Color = sal_Int32(aHatch.
GetColor());
477 aUnoHatch.Angle = aHatch.
GetAngle();
482 std::unique_ptr<XPropertyEntry> SvxUnoXHatchTable::createEntry(
const OUString& rName,
const uno::Any& rAny)
const
484 drawing::Hatch aUnoHatch;
485 if(!(rAny >>= aUnoHatch))
486 return std::unique_ptr<XHatchEntry>();
490 aXHatch.SetColor(
Color(aUnoHatch.Color) );
491 aXHatch.SetDistance( aUnoHatch.Distance );
492 aXHatch.SetAngle( aUnoHatch.Angle );
494 return std::make_unique<XHatchEntry>(aXHatch, rName);
498 uno::Type SAL_CALL SvxUnoXHatchTable::getElementType()
504 OUString SAL_CALL SvxUnoXHatchTable::getImplementationName( )
506 return "SvxUnoXHatchTable";
509 uno::Sequence< OUString > SAL_CALL SvxUnoXHatchTable::getSupportedServiceNames( )
511 return {
"com.sun.star.drawing.HatchTable" };
516 class SvxUnoXGradientTable :
public SvxUnoXPropertyTable
523 virtual std::unique_ptr<XPropertyEntry> createEntry(
const OUString& rName,
const uno::Any& rAny)
const override;
526 virtual uno::Type SAL_CALL getElementType()
override;
537 return static_cast<OWeakObject*
>(
new SvxUnoXGradientTable( pTable ));
544 awt::Gradient aGradient;
547 aGradient.StartColor =
static_cast<sal_Int32
>(aXGradient.
GetStartColor());
548 aGradient.EndColor =
static_cast<sal_Int32
>(aXGradient.
GetEndColor());
549 aGradient.Angle =
static_cast<short>(aXGradient.
GetAngle());
550 aGradient.Border = aXGradient.
GetBorder();
555 aGradient.StepCount = aXGradient.
GetSteps();
560 std::unique_ptr<XPropertyEntry> SvxUnoXGradientTable::createEntry(
const OUString& rName,
const uno::Any& rAny)
const
562 awt::Gradient aGradient;
563 if(!(rAny >>= aGradient))
564 return std::unique_ptr<XPropertyEntry>();
569 aXGradient.SetStartColor(
Color(aGradient.StartColor) );
570 aXGradient.SetEndColor(
Color(aGradient.EndColor) );
571 aXGradient.SetAngle( aGradient.Angle );
572 aXGradient.SetBorder( aGradient.Border );
573 aXGradient.SetXOffset( aGradient.XOffset );
574 aXGradient.SetYOffset( aGradient.YOffset );
575 aXGradient.SetStartIntens( aGradient.StartIntensity );
576 aXGradient.SetEndIntens( aGradient.EndIntensity );
577 aXGradient.SetSteps( aGradient.StepCount );
579 return std::make_unique<XGradientEntry>(aXGradient, rName);
583 uno::Type SAL_CALL SvxUnoXGradientTable::getElementType()
589 OUString SAL_CALL SvxUnoXGradientTable::getImplementationName( )
591 return "SvxUnoXGradientTable";
594 uno::Sequence< OUString > SAL_CALL SvxUnoXGradientTable::getSupportedServiceNames( )
596 return {
"com.sun.star.drawing.GradientTable" };
601 class SvxUnoXBitmapTable :
public SvxUnoXPropertyTable
608 virtual std::unique_ptr<XPropertyEntry> createEntry(
const OUString& rName,
const uno::Any& rAny)
const override;
611 virtual uno::Type SAL_CALL getElementType()
override;
622 return static_cast<OWeakObject*
>(
new SvxUnoXBitmapTable( pTable ));
628 auto xBitmapEntry =
static_cast<const XBitmapEntry*
>(pEntry);
629 css::uno::Reference<css::awt::XBitmap> xBitmap(xBitmapEntry->GetGraphicObject().GetGraphic().GetXGraphic(), uno::UNO_QUERY);
633 std::unique_ptr<XPropertyEntry> SvxUnoXBitmapTable::createEntry(
const OUString& rName,
const uno::Any& rAny)
const
635 if (!rAny.has<uno::Reference<awt::XBitmap>>())
636 return std::unique_ptr<XPropertyEntry>();
638 auto xBitmap = rAny.get<uno::Reference<awt::XBitmap>>();
642 uno::Reference<graphic::XGraphic>
xGraphic(xBitmap, uno::UNO_QUERY);
647 if (aGraphic.IsNone())
651 return std::make_unique<XBitmapEntry>(aGraphicObject, rName);
655 uno::Type SAL_CALL SvxUnoXBitmapTable::getElementType()
657 return ::cppu::UnoType<awt::XBitmap>::get();
661 OUString SAL_CALL SvxUnoXBitmapTable::getImplementationName( )
663 return "SvxUnoXBitmapTable";
666 uno::Sequence< OUString > SAL_CALL SvxUnoXBitmapTable::getSupportedServiceNames( )
668 return {
"com.sun.star.drawing.BitmapTable" };
XPropertyEntry * Get(long nIndex) const
void SetHatchStyle(css::drawing::HatchStyle eNewStyle)
void setClosed(bool bNew)
sal_uInt32 GetDistance() const
#define XATTR_FILLGRADIENT
OUString getImplementationName()
OUString SvxUnogetApiNameForItem(const sal_uInt16 nWhich, const OUString &rInternalName)
if the given name is a predefined name for the current language it is replaced by the corresponding a...
sal_uInt16 GetStartIntens() const
void Insert(std::unique_ptr< XPropertyEntry > pEntry, long nIndex=std::numeric_limits< long >::max())
uno::Reference< uno::XInterface > SvxUnoXLineEndTable_createInstance(XPropertyList *pTable)
const Color & GetStartColor() const
void Replace(std::unique_ptr< XPropertyEntry > pEntry, long nIndex)
sal_uInt16 GetYOffset() const
uno::Reference< uno::XInterface > SvxUnoXBitmapTable_createInstance(XPropertyList *pTable)
OUString SvxUnogetInternalNameForItem(const sal_uInt16 nWhich, const OUString &rApiName)
if the given name is a predefined api name it is replaced by the predefined name for the current lang...
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
sal_uInt16 GetDots() const
css::drawing::DashStyle GetDashStyle() const
sal_uInt16 GetXOffset() const
const OUString & GetName() const
uno::Reference< uno::XInterface > SvxUnoXDashTable_createInstance(XPropertyList *pTable)
sal_uInt16 GetBorder() const
css::uno::Sequence< OUString > getSupportedServiceNames()
css::drawing::HatchStyle GetHatchStyle() const
B2DPolyPolygon UnoPolyPolygonBezierCoordsToB2DPolyPolygon(const css::drawing::PolyPolygonBezierCoords &rPolyPolygonBezierCoordsSource)
void SetGradientStyle(css::awt::GradientStyle eNewStyle)
sal_uInt16 GetSteps() const
void SetDashStyle(css::drawing::DashStyle eNewStyle)
css::uno::Type const & get()
const Color & GetColor() const
css::awt::GradientStyle GetGradientStyle() const
sal_uInt32 GetDotLen() const
uno::Reference< uno::XInterface > SvxUnoXGradientTable_createInstance(XPropertyList *pTable)
uno::Reference< uno::XInterface > SvxUnoXHatchTable_createInstance(XPropertyList *pTable)
void B2DPolyPolygonToUnoPolyPolygonBezierCoords(const B2DPolyPolygon &rPolyPolygon, css::drawing::PolyPolygonBezierCoords &rPolyPolygonBezierCoordsRetval)
sal_uInt32 GetDashLen() const
sal_uInt16 GetEndIntens() const
Reference< XGraphic > xGraphic
uno::Reference< uno::XInterface > SvxUnoXColorTable_createInstance(XPropertyList *pList)
const Color & GetEndColor() const
sal_uInt16 GetDashes() const