diff --git a/include/svx/xfltrit.hxx b/include/svx/xfltrit.hxx index 1f2a9b08052b..68c5b81dc9ac 100644 --- a/include/svx/xfltrit.hxx +++ b/include/svx/xfltrit.hxx @@ -20,8 +20,9 @@ #ifndef INCLUDED_SVX_XFLTRIT_HXX #define INCLUDED_SVX_XFLTRIT_HXX -#include +#include #include +#include /************************************************************************* |* @@ -29,17 +30,36 @@ |* \************************************************************************/ -class SVXCORE_DLLPUBLIC XFillTransparenceItem final : public SfxUInt16Item +class SVXCORE_DLLPUBLIC XFillTransparenceItem final : public SfxPoolItem { + sal_uInt16 m_nValue; public: - DECLARE_ITEM_TYPE_FUNCTION(XFillTransparenceItem) - XFillTransparenceItem(sal_uInt16 nFillTransparence = 0); +// static SfxPoolItem* CreateDefault(); + + DECLARE_ITEM_TYPE_FUNCTION(XFillTransparenceItem) + XFillTransparenceItem(sal_uInt16 nFillTransparence = 0); virtual XFillTransparenceItem* Clone(SfxItemPool* pPool = nullptr) const override; virtual bool GetPresentation( SfxItemPresentation ePres, MapUnit eCoreMetric, MapUnit ePresMetric, OUString &rText, const IntlWrapper& ) const override; void dumpAsXml(xmlTextWriterPtr pWriter) const override; + virtual boost::property_tree::ptree dumpAsJSON() const override; + + sal_uInt16 GetValue() const { return m_nValue; } + void SetValue(sal_uInt16 nTheValue) { ASSERT_CHANGE_REFCOUNTED_ITEM; assert(nTheValue <= 100); m_nValue = nTheValue; } + + virtual bool operator ==(const SfxPoolItem & rItem) const override; + + virtual bool supportsHashCode() const override final; + virtual size_t hashCode() const override final; + + virtual bool QueryValue(css::uno::Any& rVal, + sal_uInt8 nMemberId = 0) const override; + + virtual bool PutValue(const css::uno::Any& rVal, + sal_uInt8 nMemberId) override; + }; #endif diff --git a/svx/source/xoutdev/xattr2.cxx b/svx/source/xoutdev/xattr2.cxx index 47bc2ecc9587..1131408e4bf5 100644 --- a/svx/source/xoutdev/xattr2.cxx +++ b/svx/source/xoutdev/xattr2.cxx @@ -22,7 +22,9 @@ #include #include +#include #include +#include #include #include #include @@ -49,6 +51,7 @@ #include #include +#include XLineTransparenceItem::XLineTransparenceItem(sal_uInt16 nLineTransparence) : SfxUInt16Item(XATTR_LINETRANSPARENCE, nLineTransparence) @@ -317,8 +320,9 @@ css::drawing::LineCap XLineCapItem::GetValue() const } XFillTransparenceItem::XFillTransparenceItem(sal_uInt16 nFillTransparence) : - SfxUInt16Item(XATTR_FILLTRANSPARENCE, nFillTransparence) + SfxPoolItem(XATTR_FILLTRANSPARENCE), m_nValue(nFillTransparence) { + assert(m_nValue <= 100); } XFillTransparenceItem* XFillTransparenceItem::Clone(SfxItemPool* /*pPool*/) const @@ -358,6 +362,65 @@ void XFillTransparenceItem::dumpAsXml(xmlTextWriterPtr pWriter) const (void)xmlTextWriterEndElement(pWriter); } +boost::property_tree::ptree XFillTransparenceItem::dumpAsJSON() const +{ + boost::property_tree::ptree aTree = SfxPoolItem::dumpAsJSON(); + aTree.put("state", GetValue()); + return aTree; +} + +// virtual +bool XFillTransparenceItem::operator ==(const SfxPoolItem & rItem) const +{ + assert(SfxPoolItem::operator==(rItem)); + return m_nValue == static_cast(&rItem)->m_nValue; +} + +// virtual +bool XFillTransparenceItem::supportsHashCode() const +{ + return true; +} + +// virtual +bool XFillTransparenceItem::QueryValue(css::uno::Any& rVal, sal_uInt8) const +{ + rVal <<= m_nValue; + return true; +} + +// virtual +bool XFillTransparenceItem::PutValue(const css::uno::Any& rVal, sal_uInt8) +{ + if (rVal >>= m_nValue) + { + assert(m_nValue <= 100); + return true; + } + // Legacy: for a long time, XFillTransparenceItem::PutValue accepted sal_Int32; play safe and accept + // if someone passes that + if (sal_Int32 nValue; rVal >>= nValue) + { + SAL_WARN("svl.items", "Passing sal_uInt16 in sal_Int32!"); + SAL_WARN_IF(nValue < 0 || nValue > SAL_MAX_UINT16, "svl.items", + "Overflow in UInt16 value!"); + m_nValue = static_cast(nValue); + assert(m_nValue <= 100); + return true; + } + SAL_WARN("svl.items", "XFillTransparenceItem::PutValue - Wrong type!"); + return false; +} + + +// virtual +size_t XFillTransparenceItem::hashCode() const +{ + std::size_t seed(0); + o3tl::hash_combine(seed, Which()); + o3tl::hash_combine(seed, m_nValue); + return seed; +} XFormTextShadowTranspItem::XFormTextShadowTranspItem(sal_uInt16 nShdwTransparence) : SfxUInt16Item(XATTR_FORMTXTSHDWTRANSP, nShdwTransparence)