diff --git a/shadPS4/emulator/gameInfo.h b/shadPS4/emulator/gameInfo.h new file mode 100644 index 00000000..1f0ba4ee --- /dev/null +++ b/shadPS4/emulator/gameInfo.h @@ -0,0 +1,17 @@ +#pragma once +#include + +struct GameInfo +{ + std::string path; //root path of game directory (normaly directory that contains eboot.bin) + std::string icon_path;//path of icon0.png + + //variables extracted from param.sfo + std::string name = "Unknown"; + std::string serial = "Unknown"; + std::string app_ver = "Unknown"; + std::string version = "Unknown"; + std::string category = "Unknown"; + std::string fw = "Unknown"; + +}; \ No newline at end of file diff --git a/shadPS4/gui/custom_table_widget_item.cpp b/shadPS4/gui/custom_table_widget_item.cpp new file mode 100644 index 00000000..6b418046 --- /dev/null +++ b/shadPS4/gui/custom_table_widget_item.cpp @@ -0,0 +1,70 @@ +#include "custom_table_widget_item.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(); + + 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: + throw std::runtime_error("unsupported type"); + } +} + +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/shadPS4/gui/custom_table_widget_item.h b/shadPS4/gui/custom_table_widget_item.h new file mode 100644 index 00000000..00ffc18a --- /dev/null +++ b/shadPS4/gui/custom_table_widget_item.h @@ -0,0 +1,19 @@ +#pragma once +#include + +class custom_table_widget_item : public QTableWidgetItem +{ +private: + int m_sort_role = Qt::DisplayRole; + +public: + using QTableWidgetItem::setData; + + custom_table_widget_item() = default; + 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 override; + + void setData(int role, const QVariant& value, bool assign_sort_role); +}; diff --git a/shadPS4/shadPS4.vcxproj b/shadPS4/shadPS4.vcxproj index ccf22e67..c847d5f9 100644 --- a/shadPS4/shadPS4.vcxproj +++ b/shadPS4/shadPS4.vcxproj @@ -15,6 +15,7 @@ + @@ -33,7 +34,9 @@ + +