2021-01-07 20:00:48 +01:00
|
|
|
#include "custom_table_widget_item.h"
|
|
|
|
|
#include "Utilities/StrFmt.h"
|
|
|
|
|
|
|
|
|
|
#include <QDateTime>
|
|
|
|
|
|
|
|
|
|
custom_table_widget_item::custom_table_widget_item(const std::string& text, int sort_role, const QVariant& sort_value)
|
2025-04-05 21:50:45 +02:00
|
|
|
: movie_item(QString::fromStdString(text).simplified()) // simplified() forces single line text
|
2021-01-07 20:00:48 +01:00
|
|
|
{
|
|
|
|
|
if (sort_role != Qt::DisplayRole)
|
|
|
|
|
{
|
|
|
|
|
setData(sort_role, sort_value, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
custom_table_widget_item::custom_table_widget_item(const QString& text, int sort_role, const QVariant& sort_value)
|
2025-04-05 21:50:45 +02:00
|
|
|
: movie_item(text.simplified()) // simplified() forces single line text
|
2021-01-07 20:00:48 +01:00
|
|
|
{
|
|
|
|
|
if (sort_role != Qt::DisplayRole)
|
|
|
|
|
{
|
|
|
|
|
setData(sort_role, sort_value, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool custom_table_widget_item::operator<(const QTableWidgetItem& other) const
|
|
|
|
|
{
|
|
|
|
|
if (m_sort_role == Qt::DisplayRole)
|
|
|
|
|
{
|
|
|
|
|
return QTableWidgetItem::operator<(other);
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-05 21:50:45 +02:00
|
|
|
const QVariant data_l = data(m_sort_role);
|
|
|
|
|
const QVariant data_r = other.data(m_sort_role);
|
2021-05-22 10:42:05 +02:00
|
|
|
const int type_l = data_l.metaType().id();
|
|
|
|
|
const int type_r = data_r.metaType().id();
|
2021-01-07 20:00:48 +01:00
|
|
|
|
2021-01-12 11:01:06 +01:00
|
|
|
ensure(type_l == type_r);
|
2021-01-07 20:00:48 +01:00
|
|
|
|
|
|
|
|
switch (type_l)
|
|
|
|
|
{
|
2021-05-22 10:42:05 +02:00
|
|
|
case QMetaType::Type::Bool:
|
|
|
|
|
case QMetaType::Type::Int:
|
2021-01-07 20:00:48 +01:00
|
|
|
return data_l.toInt() < data_r.toInt();
|
2021-05-22 10:42:05 +02:00
|
|
|
case QMetaType::Type::UInt:
|
2021-01-07 20:00:48 +01:00
|
|
|
return data_l.toUInt() < data_r.toUInt();
|
2021-05-22 10:42:05 +02:00
|
|
|
case QMetaType::Type::LongLong:
|
2021-01-07 20:00:48 +01:00
|
|
|
return data_l.toLongLong() < data_r.toLongLong();
|
2021-05-22 10:42:05 +02:00
|
|
|
case QMetaType::Type::ULongLong:
|
2021-01-07 20:00:48 +01:00
|
|
|
return data_l.toULongLong() < data_r.toULongLong();
|
2021-05-22 10:42:05 +02:00
|
|
|
case QMetaType::Type::Double:
|
2021-01-07 20:00:48 +01:00
|
|
|
return data_l.toDouble() < data_r.toDouble();
|
2021-05-22 10:42:05 +02:00
|
|
|
case QMetaType::Type::QDate:
|
2021-01-07 20:00:48 +01:00
|
|
|
return data_l.toDate() < data_r.toDate();
|
2021-05-22 10:42:05 +02:00
|
|
|
case QMetaType::Type::QTime:
|
2021-01-07 20:00:48 +01:00
|
|
|
return data_l.toTime() < data_r.toTime();
|
2021-05-22 10:42:05 +02:00
|
|
|
case QMetaType::Type::QDateTime:
|
2021-01-07 20:00:48 +01:00
|
|
|
return data_l.toDateTime() < data_r.toDateTime();
|
2021-05-22 10:42:05 +02:00
|
|
|
case QMetaType::Type::Char:
|
|
|
|
|
case QMetaType::Type::QString:
|
2021-01-07 20:00:48 +01:00
|
|
|
return data_l.toString() < data_r.toString();
|
|
|
|
|
default:
|
2021-05-22 10:42:05 +02:00
|
|
|
fmt::throw_exception("Unimplemented type %s", QMetaType(type_l).name());
|
2021-01-07 20:00:48 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void custom_table_widget_item::setData(int role, const QVariant& value, bool assign_sort_role)
|
|
|
|
|
{
|
|
|
|
|
if (assign_sort_role)
|
|
|
|
|
{
|
|
|
|
|
m_sort_role = role;
|
|
|
|
|
}
|
|
|
|
|
QTableWidgetItem::setData(role, value);
|
|
|
|
|
}
|