2023-02-17 14:36:58 +01:00
|
|
|
#include "StatusQ/modelutilsinternal.h"
|
|
|
|
|
|
|
|
#include <QAbstractItemModel>
|
2023-07-04 17:11:41 +02:00
|
|
|
#include <QDebug>
|
2023-02-17 14:36:58 +01:00
|
|
|
|
2023-07-20 12:23:02 +02:00
|
|
|
|
2023-02-17 14:36:58 +01:00
|
|
|
ModelUtilsInternal::ModelUtilsInternal(QObject* parent)
|
|
|
|
: QObject(parent)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2023-07-27 00:30:31 +02:00
|
|
|
bool ModelUtilsInternal::isModel(const QVariant &obj) const
|
|
|
|
{
|
|
|
|
if (!obj.canConvert<QObject*>())
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return qobject_cast<QAbstractItemModel*>(obj.value<QObject*>()) != nullptr;
|
|
|
|
}
|
|
|
|
|
2023-02-17 14:36:58 +01:00
|
|
|
QStringList ModelUtilsInternal::roleNames(QAbstractItemModel *model) const
|
|
|
|
{
|
|
|
|
if (model == nullptr)
|
|
|
|
return {};
|
|
|
|
|
2023-06-27 21:20:32 +02:00
|
|
|
const auto roles = model->roleNames();
|
|
|
|
return {roles.cbegin(), roles.cend()};
|
2023-02-17 14:36:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
int ModelUtilsInternal::roleByName(QAbstractItemModel* model,
|
|
|
|
const QString &roleName) const
|
|
|
|
{
|
|
|
|
if (model == nullptr)
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
return model->roleNames().key(roleName.toUtf8(), -1);
|
|
|
|
}
|
|
|
|
|
|
|
|
QVariantMap ModelUtilsInternal::get(QAbstractItemModel *model, int row) const
|
|
|
|
{
|
|
|
|
QVariantMap map;
|
|
|
|
|
|
|
|
if (model == nullptr)
|
|
|
|
return map;
|
|
|
|
|
2023-06-27 21:20:32 +02:00
|
|
|
const auto modelIndex = model->index(row, 0);
|
|
|
|
const auto roles = model->roleNames();
|
2023-02-17 14:36:58 +01:00
|
|
|
|
|
|
|
for (auto it = roles.begin(); it != roles.end(); ++it)
|
|
|
|
map.insert(it.value(), model->data(modelIndex, it.key()));
|
|
|
|
|
|
|
|
return map;
|
|
|
|
}
|
|
|
|
|
|
|
|
QVariant ModelUtilsInternal::get(QAbstractItemModel *model,
|
|
|
|
int row, const QString &roleName) const
|
|
|
|
{
|
2023-07-20 12:23:02 +02:00
|
|
|
if (auto role = roleByName(model, roleName); role != -1)
|
|
|
|
return model->data(model->index(row, 0), roleByName(model, roleName));
|
|
|
|
|
|
|
|
return {};
|
2023-02-17 14:36:58 +01:00
|
|
|
}
|
2023-06-27 21:20:32 +02:00
|
|
|
|
|
|
|
bool ModelUtilsInternal::contains(QAbstractItemModel* model,
|
|
|
|
const QString& roleName,
|
|
|
|
const QVariant& value,
|
|
|
|
int mode) const
|
|
|
|
{
|
|
|
|
if(!model) return false;
|
|
|
|
|
|
|
|
Qt::MatchFlags flags = Qt::MatchFixedString; // Qt::CaseInsensitive by default
|
|
|
|
if(mode == Qt::CaseSensitive) flags |= Qt::MatchCaseSensitive;
|
|
|
|
const auto indexes = model->match(model->index(0, 0), roleByName(model, roleName), value, 1, flags);
|
|
|
|
return !indexes.isEmpty();
|
|
|
|
}
|