summaryrefslogtreecommitdiff
path: root/src/ivicore
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@pelagicore.com>2016-07-12 11:42:41 +0200
committerDominik Holland <dominik.holland@pelagicore.com>2016-07-19 07:54:21 +0000
commit7d19fe1173aa9776304bce79a9450e6a87fec4aa (patch)
tree433eff5e6ce471dbb75d452462a83a660bfb9b03 /src/ivicore
parent441fbcf26af10af9f0c9395faf512eb4fb154377 (diff)
downloadqtivi-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.h23
-rw-r--r--src/ivicore/qivisearchandbrowsemodel.cpp29
-rw-r--r--src/ivicore/qivisearchandbrowsemodel_p.h3
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);