diff options
author | Dominik Holland <dominik.holland@pelagicore.com> | 2016-07-12 11:42:41 +0200 |
---|---|---|
committer | Dominik Holland <dominik.holland@pelagicore.com> | 2016-07-19 07:54:21 +0000 |
commit | 7d19fe1173aa9776304bce79a9450e6a87fec4aa (patch) | |
tree | 433eff5e6ce471dbb75d452462a83a660bfb9b03 /src/ivicore | |
parent | 441fbcf26af10af9f0c9395faf512eb4fb154377 (diff) | |
download | qtivi-7d19fe1173aa9776304bce79a9450e6a87fec4aa.tar.gz |
Added a new qtivi_gadgetFromVariant to the qmlconversion_helper header
Removed the copies of the implementation from various classes and created
an template version of it instead.
Change-Id: I5c5fb2357c574ce8e75a465857f94cb8da639dfa
Reviewed-by: Robert Griebl <robert.griebl@pelagicore.com>
Diffstat (limited to 'src/ivicore')
-rw-r--r-- | src/ivicore/qiviqmlconversion_helper.h | 23 | ||||
-rw-r--r-- | src/ivicore/qivisearchandbrowsemodel.cpp | 29 | ||||
-rw-r--r-- | src/ivicore/qivisearchandbrowsemodel_p.h | 3 |
3 files changed, 28 insertions, 27 deletions
diff --git a/src/ivicore/qiviqmlconversion_helper.h b/src/ivicore/qiviqmlconversion_helper.h index 7d8ff78..796d6b5 100644 --- a/src/ivicore/qiviqmlconversion_helper.h +++ b/src/ivicore/qiviqmlconversion_helper.h @@ -45,6 +45,7 @@ #include <QtCore/QVariant> #include <QtCore/QVector> #include <QtCore/QMetaEnum> +#include <QtCore/QtDebug> QT_BEGIN_NAMESPACE @@ -78,6 +79,28 @@ template <typename T> QVariantList qtivi_convertAvailableValues(const QVector<T> return list; } +template <class T> const T *qtivi_gadgetFromVariant(const QVariant &var) +{ + const void *data = var.constData(); + + QMetaType type(var.userType()); + if (!type.flags().testFlag(QMetaType::IsGadget)) { + qCritical("The passed QVariant needs to use the Q_GADGET macro"); + return nullptr; + } + + const QMetaObject *mo = type.metaObject(); + while (mo) { + if (mo->className() == T::staticMetaObject.className()) + return reinterpret_cast<const T*>(data); + mo = mo->superClass(); + } + + qCritical("The passed QVariant is not derived from %s", T::staticMetaObject.className()); + + return nullptr; +} + QT_END_NAMESPACE #endif // QIVIQMLCONVERSION_HELPER_H diff --git a/src/ivicore/qivisearchandbrowsemodel.cpp b/src/ivicore/qivisearchandbrowsemodel.cpp index 7dbc23f..1091b13 100644 --- a/src/ivicore/qivisearchandbrowsemodel.cpp +++ b/src/ivicore/qivisearchandbrowsemodel.cpp @@ -44,6 +44,7 @@ #include "qivisearchandbrowsemodelinterface.h" #include "queryparser/qiviqueryparser_p.h" +#include "qiviqmlconversion_helper.h" #include <QMetaObject> #include <QDebug> @@ -287,29 +288,7 @@ const QIviSearchAndBrowseModelItem *QIviSearchAndBrowseModelPrivate::itemAt(int if (!var.isValid()) return nullptr; - return itemFromVariant(var); -} - -const QIviSearchAndBrowseModelItem *QIviSearchAndBrowseModelPrivate::itemFromVariant(const QVariant &var) const -{ - const void *data = var.constData(); - - QMetaType type(var.userType()); - if (!type.flags().testFlag(QMetaType::IsGadget)) { - qCritical() << "The passed QVariant needs to use the Q_GADGET macro"; - return nullptr; - } - - const QMetaObject *mo = type.metaObject(); - while (mo) { - if (mo->className() == QIviSearchAndBrowseModelItem::staticMetaObject.className()) - return reinterpret_cast<const QIviSearchAndBrowseModelItem*>(data); - mo = mo->superClass(); - } - - qCritical() << "The passed QVariant is not derived from QIviSearchAndBrowseModelItem"; - - return nullptr; + return qtivi_gadgetFromVariant<QIviSearchAndBrowseModelItem>(var); } QIviSearchAndBrowseModelInterface *QIviSearchAndBrowseModelPrivate::searchBackend() const @@ -968,7 +947,7 @@ QIviSearchAndBrowseModel *QIviSearchAndBrowseModel::goForward(int i, NavigationT void QIviSearchAndBrowseModel::insert(int index, const QVariant &variant) { Q_D(QIviSearchAndBrowseModel); - const QIviSearchAndBrowseModelItem *item = d->itemFromVariant(variant); + const QIviSearchAndBrowseModelItem *item = qtivi_gadgetFromVariant<QIviSearchAndBrowseModelItem>(variant); if (!item) return; @@ -1070,7 +1049,7 @@ void QIviSearchAndBrowseModel::move(int cur_index, int new_index) void QIviSearchAndBrowseModel::indexOf(const QVariant &variant, const QJSValue &functor) { Q_D(QIviSearchAndBrowseModel); - const QIviSearchAndBrowseModelItem *item = d->itemFromVariant(variant); + const QIviSearchAndBrowseModelItem *item = qtivi_gadgetFromVariant<QIviSearchAndBrowseModelItem>(variant); if (!item) return; diff --git a/src/ivicore/qivisearchandbrowsemodel_p.h b/src/ivicore/qivisearchandbrowsemodel_p.h index b6ffa1f..5f41906 100644 --- a/src/ivicore/qivisearchandbrowsemodel_p.h +++ b/src/ivicore/qivisearchandbrowsemodel_p.h @@ -53,7 +53,7 @@ // We mean it. // -#include <qiviabstractfeaturelistmodel_p.h> +#include <QtIviCore/private/qiviabstractfeaturelistmodel_p.h> #include "qivisearchandbrowsemodelinterface.h" #include "qivisearchandbrowsemodel.h" @@ -83,7 +83,6 @@ public: void clearToDefaults(); void setCanGoBack(bool canGoBack); const QIviSearchAndBrowseModelItem *itemAt(int i) const; - const QIviSearchAndBrowseModelItem *itemFromVariant(const QVariant &var) const; QIviSearchAndBrowseModelInterface* searchBackend() const; void updateContentType(const QString &contentType); |