Merge pull request #4917 from vitor-k/long-title
Allow displaying the long_title of the game
This commit is contained in:
commit
176b8b4a0b
|
@ -308,17 +308,19 @@ void Config::ReadValues() {
|
||||||
}
|
}
|
||||||
UISettings::values.game_list_icon_size = icon_size;
|
UISettings::values.game_list_icon_size = icon_size;
|
||||||
|
|
||||||
int row_1 = ReadSetting("row1", 2).toInt();
|
UISettings::GameListText row_1 = UISettings::GameListText{
|
||||||
if (row_1 < 0 || row_1 > 3) {
|
ReadSetting("row1", static_cast<int>(UISettings::GameListText::TitleName)).toInt()};
|
||||||
row_1 = 2;
|
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();
|
UISettings::GameListText row_2 = UISettings::GameListText{
|
||||||
if (row_2 < -1 || row_2 > 3) {
|
ReadSetting("row2", static_cast<int>(UISettings::GameListText::FileName)).toInt()};
|
||||||
row_2 = 0;
|
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_hide_no_icon = ReadSetting("hideNoIcon", false).toBool();
|
||||||
UISettings::values.game_list_single_line_mode = ReadSetting("singleLineMode", false).toBool();
|
UISettings::values.game_list_single_line_mode = ReadSetting("singleLineMode", false).toBool();
|
||||||
|
|
|
@ -126,7 +126,7 @@
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Title Name</string>
|
<string>Title Name (short)</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
@ -134,6 +134,11 @@
|
||||||
<string>Title ID</string>
|
<string>Title ID</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Title Name (long)</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -166,7 +171,7 @@
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Title Name</string>
|
<string>Title Name (short)</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
@ -174,6 +179,11 @@
|
||||||
<string>Title ID</string>
|
<string>Title ID</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Title Name (long)</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
|
|
@ -215,7 +215,7 @@ void GameList::onTextChanged(const QString& newText) {
|
||||||
child->data(GameListItemPath::FullPathRole).toString().toLower();
|
child->data(GameListItemPath::FullPathRole).toString().toLower();
|
||||||
QString file_name = file_path.mid(file_path.lastIndexOf("/") + 1);
|
QString file_name = file_path.mid(file_path.lastIndexOf("/") + 1);
|
||||||
const QString file_title =
|
const QString file_title =
|
||||||
child->data(GameListItemPath::TitleRole).toString().toLower();
|
child->data(GameListItemPath::LongTitleRole).toString().toLower();
|
||||||
const QString file_programmid =
|
const QString file_programmid =
|
||||||
child->data(GameListItemPath::ProgramIdRole).toString().toLower();
|
child->data(GameListItemPath::ProgramIdRole).toString().toLower();
|
||||||
|
|
||||||
|
|
|
@ -70,6 +70,17 @@ static QString GetQStringShortTitleFromSMDH(const Loader::SMDH& smdh,
|
||||||
return QString::fromUtf16(smdh.GetShortTitle(language).data());
|
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.
|
* Gets the game region from SMDH data.
|
||||||
* @param smdh SMDH data
|
* @param smdh SMDH data
|
||||||
|
@ -139,6 +150,7 @@ public:
|
||||||
static const int FullPathRole = SortRole + 1;
|
static const int FullPathRole = SortRole + 1;
|
||||||
static const int ProgramIdRole = SortRole + 2;
|
static const int ProgramIdRole = SortRole + 2;
|
||||||
static const int ExtdataIdRole = SortRole + 3;
|
static const int ExtdataIdRole = SortRole + 3;
|
||||||
|
static const int LongTitleRole = SortRole + 4;
|
||||||
|
|
||||||
GameListItemPath() = default;
|
GameListItemPath() = default;
|
||||||
GameListItemPath(const QString& game_path, const std::vector<u8>& smdh_data, u64 program_id,
|
GameListItemPath(const QString& game_path, const std::vector<u8>& smdh_data, u64 program_id,
|
||||||
|
@ -173,6 +185,10 @@ public:
|
||||||
// Get title from SMDH
|
// Get title from SMDH
|
||||||
setData(GetQStringShortTitleFromSMDH(smdh, Loader::SMDH::TitleLanguage::English),
|
setData(GetQStringShortTitleFromSMDH(smdh, Loader::SMDH::TitleLanguage::English),
|
||||||
TitleRole);
|
TitleRole);
|
||||||
|
|
||||||
|
// Get long title from SMDH
|
||||||
|
setData(GetQStringLongTitleFromSMDH(smdh, Loader::SMDH::TitleLanguage::English),
|
||||||
|
LongTitleRole);
|
||||||
}
|
}
|
||||||
|
|
||||||
int type() const override {
|
int type() const override {
|
||||||
|
@ -189,11 +205,12 @@ public:
|
||||||
{UISettings::GameListText::FileName, QString::fromStdString(filename + extension)},
|
{UISettings::GameListText::FileName, QString::fromStdString(filename + extension)},
|
||||||
{UISettings::GameListText::FullPath, data(FullPathRole).toString()},
|
{UISettings::GameListText::FullPath, data(FullPathRole).toString()},
|
||||||
{UISettings::GameListText::TitleName, data(TitleRole).toString()},
|
{UISettings::GameListText::TitleName, data(TitleRole).toString()},
|
||||||
|
{UISettings::GameListText::LongTitleName, data(LongTitleRole).toString()},
|
||||||
{UISettings::GameListText::TitleID,
|
{UISettings::GameListText::TitleID,
|
||||||
QString::fromStdString(fmt::format("{:016X}", data(ProgramIdRole).toULongLong()))},
|
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;
|
QString row2;
|
||||||
auto row_2_id = UISettings::values.game_list_row_2;
|
auto row_2_id = UISettings::values.game_list_row_2;
|
||||||
|
@ -203,7 +220,7 @@ public:
|
||||||
? QStringLiteral(" ")
|
? QStringLiteral(" ")
|
||||||
: QStringLiteral("\n ");
|
: QStringLiteral("\n ");
|
||||||
}
|
}
|
||||||
row2 += display_texts.at(row_2_id);
|
row2 += display_texts.at(row_2_id).simplified();
|
||||||
}
|
}
|
||||||
return QString(row1 + row2);
|
return QString(row1 + row2);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -51,6 +51,8 @@ enum class GameListText {
|
||||||
FullPath, ///< Display the full path of the entry
|
FullPath, ///< Display the full path of the entry
|
||||||
TitleName, ///< Display the name of the title
|
TitleName, ///< Display the name of the title
|
||||||
TitleID, ///< Display the title ID
|
TitleID, ///< Display the title ID
|
||||||
|
LongTitleName, ///< Display the long name of the title
|
||||||
|
ListEnd, ///< Keep this at the end of the enum.
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Values {
|
struct Values {
|
||||||
|
|
|
@ -48,6 +48,10 @@ std::array<u16, 0x40> SMDH::GetShortTitle(Loader::SMDH::TitleLanguage language)
|
||||||
return titles[static_cast<int>(language)].short_title;
|
return titles[static_cast<int>(language)].short_title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::array<u16, 0x80> SMDH::GetLongTitle(Loader::SMDH::TitleLanguage language) const {
|
||||||
|
return titles[static_cast<int>(language)].long_title;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<SMDH::GameRegion> SMDH::GetRegions() const {
|
std::vector<SMDH::GameRegion> SMDH::GetRegions() const {
|
||||||
constexpr u32 REGION_COUNT = 7;
|
constexpr u32 REGION_COUNT = 7;
|
||||||
std::vector<GameRegion> result;
|
std::vector<GameRegion> result;
|
||||||
|
|
|
@ -86,6 +86,13 @@ struct SMDH {
|
||||||
*/
|
*/
|
||||||
std::array<u16, 0x40> GetShortTitle(Loader::SMDH::TitleLanguage language) const;
|
std::array<u16, 0x40> 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<u16, 0x80> GetLongTitle(Loader::SMDH::TitleLanguage language) const;
|
||||||
|
|
||||||
std::vector<GameRegion> GetRegions() const;
|
std::vector<GameRegion> GetRegions() const;
|
||||||
};
|
};
|
||||||
static_assert(sizeof(SMDH) == 0x36C0, "SMDH structure size is wrong");
|
static_assert(sizeof(SMDH) == 0x36C0, "SMDH structure size is wrong");
|
||||||
|
|
Reference in New Issue