make XFillTransparenceItem extend SfxPoolItem
so that we can assert when its value is out of range Change-Id: Icfca58777af4f03bc996630e0702d5ce4196e1fd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194964 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
committed by
Noel Grandin
parent
17afa314fe
commit
953219b811
+24
-4
@@ -20,8 +20,9 @@
|
||||
#ifndef INCLUDED_SVX_XFLTRIT_HXX
|
||||
#define INCLUDED_SVX_XFLTRIT_HXX
|
||||
|
||||
#include <svl/intitem.hxx>
|
||||
#include <svl/poolitem.hxx>
|
||||
#include <svx/svxdllapi.h>
|
||||
#include <boost/property_tree/ptree_fwd.hpp>
|
||||
|
||||
/*************************************************************************
|
||||
|*
|
||||
@@ -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
|
||||
|
||||
@@ -22,7 +22,9 @@
|
||||
#include <com/sun/star/uno/Any.hxx>
|
||||
|
||||
#include <osl/diagnose.h>
|
||||
#include <o3tl/hash_combine.hxx>
|
||||
#include <i18nutil/unicode.hxx>
|
||||
#include <sal/log.hxx>
|
||||
#include <svx/strings.hrc>
|
||||
#include <svx/svxids.hrc>
|
||||
#include <svx/xlinjoit.hxx>
|
||||
@@ -49,6 +51,7 @@
|
||||
#include <comphelper/lok.hxx>
|
||||
|
||||
#include <libxml/xmlwriter.h>
|
||||
#include <boost/property_tree/ptree.hpp>
|
||||
|
||||
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<const XFillTransparenceItem *>(&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<sal_uInt16>(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)
|
||||
|
||||
Reference in New Issue
Block a user