mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-20 15:40:23 +00:00
GUI: show game icons in GameViewer
This commit is contained in:
parent
0e81313477
commit
6bd041f800
@ -4,6 +4,7 @@ struct GameInfo
|
|||||||
{
|
{
|
||||||
std::string root;
|
std::string root;
|
||||||
|
|
||||||
|
std::string icon_path;
|
||||||
std::string name;
|
std::string name;
|
||||||
std::string serial;
|
std::string serial;
|
||||||
std::string app_ver;
|
std::string app_ver;
|
||||||
|
@ -24,7 +24,7 @@ public:
|
|||||||
bool operator()(const GameInfo& game1, const GameInfo& game2) const
|
bool operator()(const GameInfo& game1, const GameInfo& game2) const
|
||||||
{
|
{
|
||||||
// Note that the column index has to match the appropriate GameInfo member
|
// Note that the column index has to match the appropriate GameInfo member
|
||||||
switch (sortColumn)
|
switch (sortColumn - 1) // skip *icon* column
|
||||||
{
|
{
|
||||||
case 0: return sortAscending ? (game1.name < game2.name) : (game1.name > game2.name);
|
case 0: return sortAscending ? (game1.name < game2.name) : (game1.name > game2.name);
|
||||||
case 1: return sortAscending ? (game1.serial < game2.serial) : (game1.serial > game2.serial);
|
case 1: return sortAscending ? (game1.serial < game2.serial) : (game1.serial > game2.serial);
|
||||||
@ -149,6 +149,7 @@ void GameViewer::LoadPSF()
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
GameInfo game;
|
GameInfo game;
|
||||||
|
game.icon_path = wxGetCwd() + m_path + m_games[i] + "/ICON0.PNG";
|
||||||
game.root = m_games[i];
|
game.root = m_games[i];
|
||||||
game.serial = psf.GetString("TITLE_ID");
|
game.serial = psf.GetString("TITLE_ID");
|
||||||
game.name = psf.GetString("TITLE");
|
game.name = psf.GetString("TITLE");
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <wx/listctrl.h>
|
#include <wx/listctrl.h>
|
||||||
|
#include <wx/imaglist.h>
|
||||||
#include "rpcs3/Ini.h"
|
#include "rpcs3/Ini.h"
|
||||||
#include "Emu/GameInfo.h"
|
#include "Emu/GameInfo.h"
|
||||||
|
|
||||||
@ -69,6 +70,7 @@ struct ColumnsArr
|
|||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
Column* m_col_icon;
|
||||||
Column* m_col_name;
|
Column* m_col_name;
|
||||||
Column* m_col_serial;
|
Column* m_col_serial;
|
||||||
Column* m_col_fw;
|
Column* m_col_fw;
|
||||||
@ -76,36 +78,46 @@ public:
|
|||||||
Column* m_col_category;
|
Column* m_col_category;
|
||||||
Column* m_col_path;
|
Column* m_col_path;
|
||||||
|
|
||||||
|
wxImageList* m_img_list;
|
||||||
|
std::vector<int> m_icon_indexes;
|
||||||
|
|
||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
|
m_img_list = new wxImageList(80, 44);
|
||||||
|
|
||||||
m_columns.clear();
|
m_columns.clear();
|
||||||
|
m_columns.emplace_back(m_columns.size(), 100, "Icon");
|
||||||
m_columns.emplace_back(m_columns.size(), 160, "Name");
|
m_columns.emplace_back(m_columns.size(), 160, "Name");
|
||||||
m_columns.emplace_back(m_columns.size(), 85, "Serial");
|
m_columns.emplace_back(m_columns.size(), 85, "Serial");
|
||||||
m_columns.emplace_back(m_columns.size(), 55, "FW");
|
m_columns.emplace_back(m_columns.size(), 55, "FW");
|
||||||
m_columns.emplace_back(m_columns.size(), 55, "App version");
|
m_columns.emplace_back(m_columns.size(), 55, "App version");
|
||||||
m_columns.emplace_back(m_columns.size(), 55, "Category");
|
m_columns.emplace_back(m_columns.size(), 55, "Category");
|
||||||
m_columns.emplace_back(m_columns.size(), 160, "Path");
|
m_columns.emplace_back(m_columns.size(), 160, "Path");
|
||||||
m_col_name = &m_columns[0];
|
m_col_icon = &m_columns[0];
|
||||||
m_col_serial = &m_columns[1];
|
m_col_name = &m_columns[1];
|
||||||
m_col_fw = &m_columns[2];
|
m_col_serial = &m_columns[2];
|
||||||
m_col_app_ver = &m_columns[3];
|
m_col_fw = &m_columns[3];
|
||||||
m_col_category = &m_columns[4];
|
m_col_app_ver = &m_columns[4];
|
||||||
m_col_path = &m_columns[5];
|
m_col_category = &m_columns[5];
|
||||||
|
m_col_path = &m_columns[6];
|
||||||
}
|
}
|
||||||
|
|
||||||
void Update(const std::vector<GameInfo>& game_data)
|
void Update(const std::vector<GameInfo>& game_data)
|
||||||
{
|
{
|
||||||
|
m_col_icon->data.clear();
|
||||||
m_col_name->data.clear();
|
m_col_name->data.clear();
|
||||||
m_col_serial->data.clear();
|
m_col_serial->data.clear();
|
||||||
m_col_fw->data.clear();
|
m_col_fw->data.clear();
|
||||||
m_col_app_ver->data.clear();
|
m_col_app_ver->data.clear();
|
||||||
m_col_category->data.clear();
|
m_col_category->data.clear();
|
||||||
m_col_path->data.clear();
|
m_col_path->data.clear();
|
||||||
|
m_icon_indexes.clear();
|
||||||
|
|
||||||
if(m_columns.size() == 0) return;
|
if(m_columns.size() == 0) return;
|
||||||
|
|
||||||
for(const auto& game : game_data)
|
for(const auto& game : game_data)
|
||||||
{
|
{
|
||||||
|
m_col_icon->data.push_back(game.icon_path);
|
||||||
m_col_name->data.push_back(game.name);
|
m_col_name->data.push_back(game.name);
|
||||||
m_col_serial->data.push_back(game.serial);
|
m_col_serial->data.push_back(game.serial);
|
||||||
m_col_fw->data.push_back(game.fw);
|
m_col_fw->data.push_back(game.fw);
|
||||||
@ -113,11 +125,25 @@ public:
|
|||||||
m_col_category->data.push_back(game.category);
|
m_col_category->data.push_back(game.category);
|
||||||
m_col_path->data.push_back(game.root);
|
m_col_path->data.push_back(game.root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// load icons
|
||||||
|
for (const auto& path : m_col_icon->data)
|
||||||
|
{
|
||||||
|
wxImage game_icon(80, 44);
|
||||||
|
{
|
||||||
|
wxLogNull logNo; // temporary disable wx warnings ("iCCP: known incorrect sRGB profile" spamming)
|
||||||
|
if (game_icon.LoadFile(fmt::FromUTF8(path), wxBITMAP_TYPE_PNG))
|
||||||
|
game_icon.Rescale(80, 44);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_icon_indexes.push_back(m_img_list->Add(game_icon));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Show(wxListView* list)
|
void Show(wxListView* list)
|
||||||
{
|
{
|
||||||
list->DeleteAllColumns();
|
list->DeleteAllColumns();
|
||||||
|
list->SetImageList(m_img_list, wxIMAGE_LIST_SMALL);
|
||||||
std::vector<Column *> c_col = GetSortedColumnsByPos();
|
std::vector<Column *> c_col = GetSortedColumnsByPos();
|
||||||
for(u32 i=0, c=0; i<c_col.size(); ++i)
|
for(u32 i=0, c=0; i<c_col.size(); ++i)
|
||||||
{
|
{
|
||||||
@ -129,6 +155,7 @@ public:
|
|||||||
void ShowData(wxListView* list)
|
void ShowData(wxListView* list)
|
||||||
{
|
{
|
||||||
list->DeleteAllItems();
|
list->DeleteAllItems();
|
||||||
|
list->SetImageList(m_img_list, wxIMAGE_LIST_SMALL);
|
||||||
for(int c=0; c<list->GetColumnCount(); ++c)
|
for(int c=0; c<list->GetColumnCount(); ++c)
|
||||||
{
|
{
|
||||||
Column* col = GetColumnByPos(c);
|
Column* col = GetColumnByPos(c);
|
||||||
@ -147,7 +174,8 @@ public:
|
|||||||
list->SetItemData(i, i);
|
list->SetItemData(i, i);
|
||||||
}
|
}
|
||||||
list->SetItem(i, c, fmt::FromUTF8(col->data[i]));
|
list->SetItem(i, c, fmt::FromUTF8(col->data[i]));
|
||||||
|
list->SetItem(i, 0, wxEmptyString); // don't insert icon path
|
||||||
|
list->SetItemColumnImage(i, 0, m_icon_indexes[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user