mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-31 21:15:33 +08:00
refs #413 Moved "maybe" functions into a dedicated class Private::MetaTypeHelper.
This commit is contained in:
@@ -362,13 +362,13 @@ namespace BlackMisc
|
||||
//! Virtual method to return QVariant, used with DBus QVariant lists
|
||||
virtual QVariant toQVariant() const
|
||||
{
|
||||
return maybeToQVariant<Derived>();
|
||||
return Private::MetaTypeHelper<Derived>::maybeToQVariant(*derived());
|
||||
}
|
||||
|
||||
//! Set from QVariant
|
||||
virtual void convertFromQVariant(const QVariant &variant)
|
||||
{
|
||||
return maybeConvertFromQVariant<Derived>(variant);
|
||||
Private::MetaTypeHelper<Derived>::maybeConvertFromQVariant(*derived(), variant);
|
||||
}
|
||||
|
||||
//! Set property by index
|
||||
@@ -413,7 +413,7 @@ namespace BlackMisc
|
||||
//! Returns the Qt meta type ID of this object.
|
||||
virtual int getMetaTypeId() const
|
||||
{
|
||||
return maybeGetMetaTypeId<Derived>();
|
||||
return Private::MetaTypeHelper<Derived>::maybeGetMetaTypeId();
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -445,44 +445,6 @@ namespace BlackMisc
|
||||
private:
|
||||
const Derived *derived() const { return static_cast<const Derived *>(this); }
|
||||
Derived *derived() { return static_cast<Derived *>(this); }
|
||||
|
||||
// fallbacks in case Derived is not a registered meta type
|
||||
|
||||
template <typename T, typename std::enable_if<!QMetaTypeId2<T>::Defined>::type* = nullptr>
|
||||
static int maybeGetMetaTypeId()
|
||||
{
|
||||
return QMetaType::UnknownType;
|
||||
}
|
||||
|
||||
template <class T, typename std::enable_if<QMetaTypeId2<T>::Defined>::type* = nullptr>
|
||||
static int maybeGetMetaTypeId()
|
||||
{
|
||||
return qMetaTypeId<T>();
|
||||
}
|
||||
|
||||
template <class T, typename std::enable_if<!QMetaTypeId2<T>::Defined>::type* = nullptr>
|
||||
QVariant maybeToQVariant() const
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
template <class T, typename std::enable_if<QMetaTypeId2<T>::Defined>::type* = nullptr>
|
||||
QVariant maybeToQVariant() const
|
||||
{
|
||||
return QVariant::fromValue(*derived());
|
||||
}
|
||||
|
||||
template <class T, typename std::enable_if<!QMetaTypeId2<T>::Defined>::type* = nullptr>
|
||||
void maybeConvertFromQVariant(const QVariant &variant)
|
||||
{
|
||||
Q_UNUSED(variant);
|
||||
}
|
||||
|
||||
template <class T, typename std::enable_if<QMetaTypeId2<T>::Defined>::type* = nullptr>
|
||||
void maybeConvertFromQVariant(const QVariant &variant)
|
||||
{
|
||||
BlackMisc::setFromQVariant(derived(), variant);
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -127,6 +127,28 @@ namespace BlackMisc
|
||||
//! \private Getter to obtain the IValueObjectMetaInfo which was stored by BlackMisc::registerMetaValueType.
|
||||
template <typename T>
|
||||
IValueObjectMetaInfo *getValueObjectMetaInfo() { return getValueObjectMetaInfo(qMetaTypeId<T>()); }
|
||||
|
||||
//! \private
|
||||
template <typename T, bool IsRegisteredMetaType /* = true */>
|
||||
struct MetaTypeHelperImpl
|
||||
{
|
||||
static Q_DECL_CONSTEXPR int maybeGetMetaTypeId() { return qMetaTypeId<T>(); }
|
||||
static QVariant maybeToQVariant(const T &obj) { return QVariant::fromValue(obj); }
|
||||
static void maybeConvertFromQVariant(T &obj, const QVariant &var) { BlackMisc::setFromQVariant(&obj, var); }
|
||||
};
|
||||
|
||||
//! \private
|
||||
template <typename T>
|
||||
struct MetaTypeHelperImpl<T, /* IsRegisteredMetaType = */ false>
|
||||
{
|
||||
static Q_DECL_CONSTEXPR int maybeGetMetaTypeId() { return QMetaType::UnknownType; }
|
||||
static QVariant maybeToQVariant(const T &) { return {}; }
|
||||
static void maybeConvertFromQVariant(T &, const QVariant &) {}
|
||||
};
|
||||
|
||||
//! \private
|
||||
template <typename T>
|
||||
using MetaTypeHelper = MetaTypeHelperImpl<T, QMetaTypeId<T>::Defined>;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user