diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index adf1774b9..d67fb4b0f 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -308,17 +308,19 @@ void Config::ReadValues() { } UISettings::values.game_list_icon_size = icon_size; - int row_1 = ReadSetting("row1", 2).toInt(); - if (row_1 < 0 || row_1 > 3) { - row_1 = 2; + UISettings::GameListText row_1 = UISettings::GameListText{ + ReadSetting("row1", static_cast(UISettings::GameListText::TitleName)).toInt()}; + if (row_1 <= UISettings::GameListText::NoText || row_1 >= UISettings::GameListText::ListEnd) { + row_1 = UISettings::GameListText::TitleName; } - UISettings::values.game_list_row_1 = UISettings::GameListText{row_1}; + UISettings::values.game_list_row_1 = row_1; - int row_2 = ReadSetting("row2", 0).toInt(); - if (row_2 < -1 || row_2 > 3) { - row_2 = 0; + UISettings::GameListText row_2 = UISettings::GameListText{ + ReadSetting("row2", static_cast(UISettings::GameListText::FileName)).toInt()}; + if (row_2 < UISettings::GameListText::NoText || row_2 >= UISettings::GameListText::ListEnd) { + row_2 = UISettings::GameListText::FileName; } - UISettings::values.game_list_row_2 = UISettings::GameListText{row_2}; + UISettings::values.game_list_row_2 = row_2; UISettings::values.game_list_hide_no_icon = ReadSetting("hideNoIcon", false).toBool(); UISettings::values.game_list_single_line_mode = ReadSetting("singleLineMode", false).toBool(); diff --git a/src/citra_qt/configuration/configure_ui.ui b/src/citra_qt/configuration/configure_ui.ui index 4af177f3e..c9a0a659e 100644 --- a/src/citra_qt/configuration/configure_ui.ui +++ b/src/citra_qt/configuration/configure_ui.ui @@ -126,7 +126,7 @@ - Title Name + Title Name (short) @@ -134,6 +134,11 @@ Title ID + + + Title Name (long) + + @@ -166,7 +171,7 @@ - Title Name + Title Name (short) @@ -174,6 +179,11 @@ Title ID + + + Title Name (long) + + diff --git a/src/citra_qt/game_list.cpp b/src/citra_qt/game_list.cpp index 0f0325ca2..e7fbfba9c 100644 --- a/src/citra_qt/game_list.cpp +++ b/src/citra_qt/game_list.cpp @@ -215,7 +215,7 @@ void GameList::onTextChanged(const QString& newText) { child->data(GameListItemPath::FullPathRole).toString().toLower(); QString file_name = file_path.mid(file_path.lastIndexOf("/") + 1); const QString file_title = - child->data(GameListItemPath::TitleRole).toString().toLower(); + child->data(GameListItemPath::LongTitleRole).toString().toLower(); const QString file_programmid = child->data(GameListItemPath::ProgramIdRole).toString().toLower(); diff --git a/src/citra_qt/game_list_p.h b/src/citra_qt/game_list_p.h index c03c073b3..1bb26f759 100644 --- a/src/citra_qt/game_list_p.h +++ b/src/citra_qt/game_list_p.h @@ -70,6 +70,17 @@ static QString GetQStringShortTitleFromSMDH(const Loader::SMDH& smdh, return QString::fromUtf16(smdh.GetShortTitle(language).data()); } +/** + * Gets the long game title from SMDH data. + * @param smdh SMDH data + * @param language title language + * @return QString long title + */ +static QString GetQStringLongTitleFromSMDH(const Loader::SMDH& smdh, + Loader::SMDH::TitleLanguage language) { + return QString::fromUtf16(smdh.GetLongTitle(language).data()); +} + /** * Gets the game region from SMDH data. * @param smdh SMDH data @@ -139,6 +150,7 @@ public: static const int FullPathRole = SortRole + 1; static const int ProgramIdRole = SortRole + 2; static const int ExtdataIdRole = SortRole + 3; + static const int LongTitleRole = SortRole + 4; GameListItemPath() = default; GameListItemPath(const QString& game_path, const std::vector& smdh_data, u64 program_id, @@ -173,6 +185,10 @@ public: // Get title from SMDH setData(GetQStringShortTitleFromSMDH(smdh, Loader::SMDH::TitleLanguage::English), TitleRole); + + // Get long title from SMDH + setData(GetQStringLongTitleFromSMDH(smdh, Loader::SMDH::TitleLanguage::English), + LongTitleRole); } int type() const override { @@ -189,11 +205,12 @@ public: {UISettings::GameListText::FileName, QString::fromStdString(filename + extension)}, {UISettings::GameListText::FullPath, data(FullPathRole).toString()}, {UISettings::GameListText::TitleName, data(TitleRole).toString()}, + {UISettings::GameListText::LongTitleName, data(LongTitleRole).toString()}, {UISettings::GameListText::TitleID, QString::fromStdString(fmt::format("{:016X}", data(ProgramIdRole).toULongLong()))}, }; - const QString& row1 = display_texts.at(UISettings::values.game_list_row_1); + const QString& row1 = display_texts.at(UISettings::values.game_list_row_1).simplified(); QString row2; auto row_2_id = UISettings::values.game_list_row_2; @@ -203,7 +220,7 @@ public: ? QStringLiteral(" ") : QStringLiteral("\n "); } - row2 += display_texts.at(row_2_id); + row2 += display_texts.at(row_2_id).simplified(); } return QString(row1 + row2); } else { diff --git a/src/citra_qt/uisettings.h b/src/citra_qt/uisettings.h index 573b4d975..31be267c6 100644 --- a/src/citra_qt/uisettings.h +++ b/src/citra_qt/uisettings.h @@ -46,11 +46,13 @@ enum class GameListIconSize { }; enum class GameListText { - NoText = -1, ///< No text - FileName, ///< Display the file name of the entry - FullPath, ///< Display the full path of the entry - TitleName, ///< Display the name of the title - TitleID, ///< Display the title ID + NoText = -1, ///< No text + FileName, ///< Display the file name of the entry + FullPath, ///< Display the full path of the entry + TitleName, ///< Display the name of the title + TitleID, ///< Display the title ID + LongTitleName, ///< Display the long name of the title + ListEnd, ///< Keep this at the end of the enum. }; struct Values { diff --git a/src/core/loader/smdh.cpp b/src/core/loader/smdh.cpp index 1b9503d1d..4773d08e5 100644 --- a/src/core/loader/smdh.cpp +++ b/src/core/loader/smdh.cpp @@ -48,6 +48,10 @@ std::array SMDH::GetShortTitle(Loader::SMDH::TitleLanguage language) return titles[static_cast(language)].short_title; } +std::array SMDH::GetLongTitle(Loader::SMDH::TitleLanguage language) const { + return titles[static_cast(language)].long_title; +} + std::vector SMDH::GetRegions() const { constexpr u32 REGION_COUNT = 7; std::vector result; diff --git a/src/core/loader/smdh.h b/src/core/loader/smdh.h index 2156dec9c..63626f732 100644 --- a/src/core/loader/smdh.h +++ b/src/core/loader/smdh.h @@ -86,6 +86,13 @@ struct SMDH { */ std::array GetShortTitle(Loader::SMDH::TitleLanguage language) const; + /** + * Gets the long game title from SMDH + * @param language title language + * @return UTF-16 array of the long title + */ + std::array GetLongTitle(Loader::SMDH::TitleLanguage language) const; + std::vector GetRegions() const; }; static_assert(sizeof(SMDH) == 0x36C0, "SMDH structure size is wrong");