diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index a2006a95e4..6b5509c6d4 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -1570,6 +1570,7 @@ + diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters index 5b5b4075e1..d797365bc7 100644 --- a/rpcs3/rpcs3.vcxproj.filters +++ b/rpcs3/rpcs3.vcxproj.filters @@ -1108,6 +1108,9 @@ Io\DualSense + + Gui\game list + diff --git a/rpcs3/rpcs3qt/CMakeLists.txt b/rpcs3/rpcs3qt/CMakeLists.txt index 4d01dcc4f9..dbd8fc13ac 100644 --- a/rpcs3/rpcs3qt/CMakeLists.txt +++ b/rpcs3/rpcs3qt/CMakeLists.txt @@ -12,6 +12,7 @@ set(SRC_FILES config_adapter.cpp curl_handle.cpp custom_dialog.cpp + custom_table_widget_item.cpp debugger_frame.cpp debugger_list.cpp downloader.cpp diff --git a/rpcs3/rpcs3qt/custom_table_widget_item.cpp b/rpcs3/rpcs3qt/custom_table_widget_item.cpp new file mode 100644 index 0000000000..e6dbb27418 --- /dev/null +++ b/rpcs3/rpcs3qt/custom_table_widget_item.cpp @@ -0,0 +1,72 @@ +#include "custom_table_widget_item.h" +#include "Utilities/StrFmt.h" + +#include + +custom_table_widget_item::custom_table_widget_item(const std::string& text, int sort_role, const QVariant& sort_value) + : QTableWidgetItem(QString::fromStdString(text).simplified()) // simplified() forces single line text +{ + 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) + : QTableWidgetItem(text.simplified()) // simplified() forces single line text +{ + 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); + } + + const QVariant data_l = data(m_sort_role); + const QVariant data_r = other.data(m_sort_role); + const QVariant::Type type_l = data_l.type(); + const QVariant::Type type_r = data_r.type(); + + assert(type_l == type_r); + + switch (type_l) + { + case QVariant::Type::Bool: + case QVariant::Type::Int: + return data_l.toInt() < data_r.toInt(); + case QVariant::Type::UInt: + return data_l.toUInt() < data_r.toUInt(); + case QVariant::Type::LongLong: + return data_l.toLongLong() < data_r.toLongLong(); + case QVariant::Type::ULongLong: + return data_l.toULongLong() < data_r.toULongLong(); + case QVariant::Type::Double: + return data_l.toDouble() < data_r.toDouble(); + case QVariant::Type::Date: + return data_l.toDate() < data_r.toDate(); + case QVariant::Type::Time: + return data_l.toTime() < data_r.toTime(); + case QVariant::Type::DateTime: + return data_l.toDateTime() < data_r.toDateTime(); + case QVariant::Type::Char: + case QVariant::Type::String: + return data_l.toString() < data_r.toString(); + default: + fmt::throw_exception("Unimplemented type %s", QVariant::typeToName(type_l)); + } +} + +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); +} diff --git a/rpcs3/rpcs3qt/custom_table_widget_item.h b/rpcs3/rpcs3qt/custom_table_widget_item.h index 9c69573893..f465fa908f 100644 --- a/rpcs3/rpcs3qt/custom_table_widget_item.h +++ b/rpcs3/rpcs3qt/custom_table_widget_item.h @@ -11,41 +11,10 @@ public: using QTableWidgetItem::setData; custom_table_widget_item(){} - custom_table_widget_item(const std::string& text, int sort_role = Qt::DisplayRole, const QVariant& sort_value = 0) - : QTableWidgetItem(QString::fromStdString(text).simplified()) // simplified() forces single line text - { - if (sort_role != Qt::DisplayRole) - { - setData(sort_role, sort_value, true); - } - } - custom_table_widget_item(const QString& text, int sort_role = Qt::DisplayRole, const QVariant& sort_value = 0) - : QTableWidgetItem(text.simplified()) // simplified() forces single line text - { - if (sort_role != Qt::DisplayRole) - { - setData(sort_role, sort_value, true); - } - } + custom_table_widget_item(const std::string& text, int sort_role = Qt::DisplayRole, const QVariant& sort_value = 0); + custom_table_widget_item(const QString& text, int sort_role = Qt::DisplayRole, const QVariant& sort_value = 0); - bool operator <(const QTableWidgetItem& other) const - { -#ifndef _MSC_VER -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - return data(m_sort_role) < other.data(m_sort_role); -#ifndef _MSC_VER -#pragma GCC diagnostic pop -#endif - } + bool operator<(const QTableWidgetItem& other) const; - void setData(int role, const QVariant& value, bool assign_sort_role) - { - if (assign_sort_role) - { - m_sort_role = role; - } - QTableWidgetItem::setData(role, value); - } + void setData(int role, const QVariant& value, bool assign_sort_role); };