From f9cded05fd621e5c37c478b2819ec6f6bcba99b2 Mon Sep 17 00:00:00 2001 From: vitor-k Date: Wed, 4 Sep 2019 23:15:37 -0300 Subject: [PATCH] Allow displaying of the full title in the interface, as well as use the full title in the search filter --- src/citra_qt/configuration/configure_ui.ui | 14 ++++++++++++-- src/citra_qt/game_list.cpp | 2 +- src/citra_qt/game_list_p.h | 19 ++++++++++++++++++- src/citra_qt/uisettings.h | 1 + src/core/loader/smdh.cpp | 4 ++++ src/core/loader/smdh.h | 7 +++++++ 6 files changed, 43 insertions(+), 4 deletions(-) diff --git a/src/citra_qt/configuration/configure_ui.ui b/src/citra_qt/configuration/configure_ui.ui index 4af177f3e..82a5a4283 100644 --- a/src/citra_qt/configuration/configure_ui.ui +++ b/src/citra_qt/configuration/configure_ui.ui @@ -126,7 +126,12 @@ - Title Name + Title Name (short) + + + + + Title Name (long) @@ -166,7 +171,12 @@ - Title Name + Title Name (short) + + + + + 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..3411445e7 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; diff --git a/src/citra_qt/uisettings.h b/src/citra_qt/uisettings.h index 573b4d975..eaef36f3e 100644 --- a/src/citra_qt/uisettings.h +++ b/src/citra_qt/uisettings.h @@ -50,6 +50,7 @@ enum class GameListText { FileName, ///< Display the file name of the entry FullPath, ///< Display the full path of the entry TitleName, ///< Display the name of the title + LongTitleName, ///< Display the long name of the title TitleID, ///< Display the title ID }; 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");