mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-05-14 08:12:16 +00:00
Trophy Viewer - Select Game (#2678)
* Trophy Viewer - Select Game * TR - Button in Utils +icon TR - Button in Utils +icon I also made a small correction to the game folder list, where the checkboxes were being filled in incorrectly.
This commit is contained in:
parent
4f8e5dfd7c
commit
16a68d78eb
10 changed files with 193 additions and 14 deletions
|
@ -30,6 +30,7 @@ path = [
|
||||||
"src/images/dump_icon.png",
|
"src/images/dump_icon.png",
|
||||||
"src/images/exit_icon.png",
|
"src/images/exit_icon.png",
|
||||||
"src/images/file_icon.png",
|
"src/images/file_icon.png",
|
||||||
|
"src/images/trophy_icon.png",
|
||||||
"src/images/flag_china.png",
|
"src/images/flag_china.png",
|
||||||
"src/images/flag_eu.png",
|
"src/images/flag_eu.png",
|
||||||
"src/images/flag_jp.png",
|
"src/images/flag_jp.png",
|
||||||
|
|
|
@ -645,7 +645,11 @@ const std::vector<std::filesystem::path> getGameInstallDirs() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<bool> getGameInstallDirsEnabled() {
|
const std::vector<bool> getGameInstallDirsEnabled() {
|
||||||
return install_dirs_enabled;
|
std::vector<bool> enabled_dirs;
|
||||||
|
for (const auto& dir : settings_install_dirs) {
|
||||||
|
enabled_dirs.push_back(dir.enabled);
|
||||||
|
}
|
||||||
|
return enabled_dirs;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::filesystem::path getAddonInstallDir() {
|
std::filesystem::path getAddonInstallDir() {
|
||||||
|
|
BIN
src/images/trophy_icon.png
Normal file
BIN
src/images/trophy_icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
|
@ -331,7 +331,33 @@ public:
|
||||||
Common::FS::PathToQString(gameTrpPath, game_update_path);
|
Common::FS::PathToQString(gameTrpPath, game_update_path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TrophyViewer* trophyViewer = new TrophyViewer(trophyPath, gameTrpPath);
|
|
||||||
|
// Array with all games and their trophy information
|
||||||
|
QVector<TrophyGameInfo> allTrophyGames;
|
||||||
|
for (const auto& game : m_games) {
|
||||||
|
TrophyGameInfo gameInfo;
|
||||||
|
gameInfo.name = QString::fromStdString(game.name);
|
||||||
|
Common::FS::PathToQString(gameInfo.trophyPath, game.serial);
|
||||||
|
Common::FS::PathToQString(gameInfo.gameTrpPath, game.path);
|
||||||
|
|
||||||
|
auto update_path = Common::FS::PathFromQString(gameInfo.gameTrpPath);
|
||||||
|
update_path += "-UPDATE";
|
||||||
|
if (std::filesystem::exists(update_path)) {
|
||||||
|
Common::FS::PathToQString(gameInfo.gameTrpPath, update_path);
|
||||||
|
} else {
|
||||||
|
update_path = Common::FS::PathFromQString(gameInfo.gameTrpPath);
|
||||||
|
update_path += "-patch";
|
||||||
|
if (std::filesystem::exists(update_path)) {
|
||||||
|
Common::FS::PathToQString(gameInfo.gameTrpPath, update_path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
allTrophyGames.append(gameInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString gameName = QString::fromStdString(m_games[itemID].name);
|
||||||
|
TrophyViewer* trophyViewer =
|
||||||
|
new TrophyViewer(trophyPath, gameTrpPath, gameName, allTrophyGames);
|
||||||
trophyViewer->show();
|
trophyViewer->show();
|
||||||
connect(widget->parent(), &QWidget::destroyed, trophyViewer,
|
connect(widget->parent(), &QWidget::destroyed, trophyViewer,
|
||||||
[trophyViewer]() { trophyViewer->deleteLater(); });
|
[trophyViewer]() { trophyViewer->deleteLater(); });
|
||||||
|
|
|
@ -593,6 +593,60 @@ void MainWindow::CreateConnects() {
|
||||||
pkgViewer->show();
|
pkgViewer->show();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Trophy Viewer
|
||||||
|
connect(ui->trophyViewerAct, &QAction::triggered, this, [this]() {
|
||||||
|
if (m_game_info->m_games.empty()) {
|
||||||
|
QMessageBox::information(
|
||||||
|
this, tr("Trophy Viewer"),
|
||||||
|
tr("No games found. Please add your games to your library first."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto& firstGame = m_game_info->m_games[0];
|
||||||
|
QString trophyPath, gameTrpPath;
|
||||||
|
Common::FS::PathToQString(trophyPath, firstGame.serial);
|
||||||
|
Common::FS::PathToQString(gameTrpPath, firstGame.path);
|
||||||
|
|
||||||
|
auto game_update_path = Common::FS::PathFromQString(gameTrpPath);
|
||||||
|
game_update_path += "-UPDATE";
|
||||||
|
if (std::filesystem::exists(game_update_path)) {
|
||||||
|
Common::FS::PathToQString(gameTrpPath, game_update_path);
|
||||||
|
} else {
|
||||||
|
game_update_path = Common::FS::PathFromQString(gameTrpPath);
|
||||||
|
game_update_path += "-patch";
|
||||||
|
if (std::filesystem::exists(game_update_path)) {
|
||||||
|
Common::FS::PathToQString(gameTrpPath, game_update_path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<TrophyGameInfo> allTrophyGames;
|
||||||
|
for (const auto& game : m_game_info->m_games) {
|
||||||
|
TrophyGameInfo gameInfo;
|
||||||
|
gameInfo.name = QString::fromStdString(game.name);
|
||||||
|
Common::FS::PathToQString(gameInfo.trophyPath, game.serial);
|
||||||
|
Common::FS::PathToQString(gameInfo.gameTrpPath, game.path);
|
||||||
|
|
||||||
|
auto update_path = Common::FS::PathFromQString(gameInfo.gameTrpPath);
|
||||||
|
update_path += "-UPDATE";
|
||||||
|
if (std::filesystem::exists(update_path)) {
|
||||||
|
Common::FS::PathToQString(gameInfo.gameTrpPath, update_path);
|
||||||
|
} else {
|
||||||
|
update_path = Common::FS::PathFromQString(gameInfo.gameTrpPath);
|
||||||
|
update_path += "-patch";
|
||||||
|
if (std::filesystem::exists(update_path)) {
|
||||||
|
Common::FS::PathToQString(gameInfo.gameTrpPath, update_path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
allTrophyGames.append(gameInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString gameName = QString::fromStdString(firstGame.name);
|
||||||
|
TrophyViewer* trophyViewer =
|
||||||
|
new TrophyViewer(trophyPath, gameTrpPath, gameName, allTrophyGames);
|
||||||
|
trophyViewer->show();
|
||||||
|
});
|
||||||
|
|
||||||
// Themes
|
// Themes
|
||||||
connect(ui->setThemeDark, &QAction::triggered, &m_window_themes, [this]() {
|
connect(ui->setThemeDark, &QAction::triggered, &m_window_themes, [this]() {
|
||||||
m_window_themes.SetWindowTheme(Theme::Dark, ui->mw_searchbar);
|
m_window_themes.SetWindowTheme(Theme::Dark, ui->mw_searchbar);
|
||||||
|
@ -1169,6 +1223,7 @@ void MainWindow::SetUiIcons(bool isWhite) {
|
||||||
ui->refreshGameListAct->setIcon(RecolorIcon(ui->refreshGameListAct->icon(), isWhite));
|
ui->refreshGameListAct->setIcon(RecolorIcon(ui->refreshGameListAct->icon(), isWhite));
|
||||||
ui->menuGame_List_Mode->setIcon(RecolorIcon(ui->menuGame_List_Mode->icon(), isWhite));
|
ui->menuGame_List_Mode->setIcon(RecolorIcon(ui->menuGame_List_Mode->icon(), isWhite));
|
||||||
ui->pkgViewerAct->setIcon(RecolorIcon(ui->pkgViewerAct->icon(), isWhite));
|
ui->pkgViewerAct->setIcon(RecolorIcon(ui->pkgViewerAct->icon(), isWhite));
|
||||||
|
ui->trophyViewerAct->setIcon(RecolorIcon(ui->trophyViewerAct->icon(), isWhite));
|
||||||
ui->configureAct->setIcon(RecolorIcon(ui->configureAct->icon(), isWhite));
|
ui->configureAct->setIcon(RecolorIcon(ui->configureAct->icon(), isWhite));
|
||||||
ui->addElfFolderAct->setIcon(RecolorIcon(ui->addElfFolderAct->icon(), isWhite));
|
ui->addElfFolderAct->setIcon(RecolorIcon(ui->addElfFolderAct->icon(), isWhite));
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ public:
|
||||||
QAction* downloadCheatsPatchesAct;
|
QAction* downloadCheatsPatchesAct;
|
||||||
QAction* dumpGameListAct;
|
QAction* dumpGameListAct;
|
||||||
QAction* pkgViewerAct;
|
QAction* pkgViewerAct;
|
||||||
|
QAction* trophyViewerAct;
|
||||||
#ifdef ENABLE_UPDATER
|
#ifdef ENABLE_UPDATER
|
||||||
QAction* updaterAct;
|
QAction* updaterAct;
|
||||||
#endif
|
#endif
|
||||||
|
@ -139,6 +140,10 @@ public:
|
||||||
pkgViewerAct = new QAction(MainWindow);
|
pkgViewerAct = new QAction(MainWindow);
|
||||||
pkgViewerAct->setObjectName("pkgViewer");
|
pkgViewerAct->setObjectName("pkgViewer");
|
||||||
pkgViewerAct->setIcon(QIcon(":images/file_icon.png"));
|
pkgViewerAct->setIcon(QIcon(":images/file_icon.png"));
|
||||||
|
trophyViewerAct = new QAction(MainWindow);
|
||||||
|
trophyViewerAct->setObjectName("trophyViewer");
|
||||||
|
trophyViewerAct->setIcon(QIcon(":images/trophy_icon.png"));
|
||||||
|
|
||||||
#ifdef ENABLE_UPDATER
|
#ifdef ENABLE_UPDATER
|
||||||
updaterAct = new QAction(MainWindow);
|
updaterAct = new QAction(MainWindow);
|
||||||
updaterAct->setObjectName("updaterAct");
|
updaterAct->setObjectName("updaterAct");
|
||||||
|
@ -321,6 +326,7 @@ public:
|
||||||
menuUtils->addAction(downloadCheatsPatchesAct);
|
menuUtils->addAction(downloadCheatsPatchesAct);
|
||||||
menuUtils->addAction(dumpGameListAct);
|
menuUtils->addAction(dumpGameListAct);
|
||||||
menuUtils->addAction(pkgViewerAct);
|
menuUtils->addAction(pkgViewerAct);
|
||||||
|
menuUtils->addAction(trophyViewerAct);
|
||||||
#ifdef ENABLE_UPDATER
|
#ifdef ENABLE_UPDATER
|
||||||
menuHelp->addAction(updaterAct);
|
menuHelp->addAction(updaterAct);
|
||||||
#endif
|
#endif
|
||||||
|
@ -379,6 +385,8 @@ public:
|
||||||
dumpGameListAct->setText(
|
dumpGameListAct->setText(
|
||||||
QCoreApplication::translate("MainWindow", "Dump Game List", nullptr));
|
QCoreApplication::translate("MainWindow", "Dump Game List", nullptr));
|
||||||
pkgViewerAct->setText(QCoreApplication::translate("MainWindow", "PKG Viewer", nullptr));
|
pkgViewerAct->setText(QCoreApplication::translate("MainWindow", "PKG Viewer", nullptr));
|
||||||
|
trophyViewerAct->setText(
|
||||||
|
QCoreApplication::translate("MainWindow", "Trophy Viewer", nullptr));
|
||||||
mw_searchbar->setPlaceholderText(
|
mw_searchbar->setPlaceholderText(
|
||||||
QCoreApplication::translate("MainWindow", "Search...", nullptr));
|
QCoreApplication::translate("MainWindow", "Search...", nullptr));
|
||||||
menuFile->setTitle(QCoreApplication::translate("MainWindow", "File", nullptr));
|
menuFile->setTitle(QCoreApplication::translate("MainWindow", "File", nullptr));
|
||||||
|
|
|
@ -1306,6 +1306,14 @@
|
||||||
<source>Dump Game List</source>
|
<source>Dump Game List</source>
|
||||||
<translation>Dump Game List</translation>
|
<translation>Dump Game List</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Trophy Viewer</source>
|
||||||
|
<translation>Trophy Viewer</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>No games found. Please add your games to your library first.</source>
|
||||||
|
<translation>No games found. Please add your games to your library first.</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>PKG Viewer</source>
|
<source>PKG Viewer</source>
|
||||||
<translation>PKG Viewer</translation>
|
<translation>PKG Viewer</translation>
|
||||||
|
@ -2191,6 +2199,10 @@
|
||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trophy Viewer</translation>
|
<translation>Trophy Viewer</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Select Game:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Progress</source>
|
<source>Progress</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
|
|
|
@ -104,8 +104,10 @@ void TrophyViewer::updateTableFilters() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TrophyViewer::TrophyViewer(QString trophyPath, QString gameTrpPath) : QMainWindow() {
|
TrophyViewer::TrophyViewer(QString trophyPath, QString gameTrpPath, QString gameName,
|
||||||
this->setWindowTitle(tr("Trophy Viewer"));
|
const QVector<TrophyGameInfo>& allTrophyGames)
|
||||||
|
: QMainWindow(), allTrophyGames_(allTrophyGames), currentGameName_(gameName) {
|
||||||
|
this->setWindowTitle(tr("Trophy Viewer") + " - " + currentGameName_);
|
||||||
this->setAttribute(Qt::WA_DeleteOnClose);
|
this->setAttribute(Qt::WA_DeleteOnClose);
|
||||||
tabWidget = new QTabWidget(this);
|
tabWidget = new QTabWidget(this);
|
||||||
|
|
||||||
|
@ -127,11 +129,40 @@ TrophyViewer::TrophyViewer(QString trophyPath, QString gameTrpPath) : QMainWindo
|
||||||
<< "PID";
|
<< "PID";
|
||||||
PopulateTrophyWidget(trophyPath);
|
PopulateTrophyWidget(trophyPath);
|
||||||
|
|
||||||
QDockWidget* trophyInfoDock = new QDockWidget("", this);
|
trophyInfoDock = new QDockWidget("", this);
|
||||||
QWidget* dockWidget = new QWidget(trophyInfoDock);
|
QWidget* dockWidget = new QWidget(trophyInfoDock);
|
||||||
QVBoxLayout* dockLayout = new QVBoxLayout(dockWidget);
|
QVBoxLayout* dockLayout = new QVBoxLayout(dockWidget);
|
||||||
dockLayout->setAlignment(Qt::AlignTop);
|
dockLayout->setAlignment(Qt::AlignTop);
|
||||||
|
|
||||||
|
// ComboBox for game selection
|
||||||
|
if (!allTrophyGames_.isEmpty()) {
|
||||||
|
QLabel* gameSelectionLabel = new QLabel(tr("Select Game:"), dockWidget);
|
||||||
|
dockLayout->addWidget(gameSelectionLabel);
|
||||||
|
|
||||||
|
gameSelectionComboBox = new QComboBox(dockWidget);
|
||||||
|
for (const auto& game : allTrophyGames_) {
|
||||||
|
gameSelectionComboBox->addItem(game.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select current game in ComboBox
|
||||||
|
if (!currentGameName_.isEmpty()) {
|
||||||
|
int index = gameSelectionComboBox->findText(currentGameName_);
|
||||||
|
if (index >= 0) {
|
||||||
|
gameSelectionComboBox->setCurrentIndex(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dockLayout->addWidget(gameSelectionComboBox);
|
||||||
|
|
||||||
|
connect(gameSelectionComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
|
||||||
|
&TrophyViewer::onGameSelectionChanged);
|
||||||
|
|
||||||
|
QFrame* line = new QFrame(dockWidget);
|
||||||
|
line->setFrameShape(QFrame::HLine);
|
||||||
|
line->setFrameShadow(QFrame::Sunken);
|
||||||
|
dockLayout->addWidget(line);
|
||||||
|
}
|
||||||
|
|
||||||
trophyInfoLabel = new QLabel(tr("Progress") + ": 0% (0/0)", dockWidget);
|
trophyInfoLabel = new QLabel(tr("Progress") + ": 0% (0/0)", dockWidget);
|
||||||
trophyInfoLabel->setStyleSheet(
|
trophyInfoLabel->setStyleSheet(
|
||||||
"font-weight: bold; font-size: 16px; color: white; background: #333; padding: 5px;");
|
"font-weight: bold; font-size: 16px; color: white; background: #333; padding: 5px;");
|
||||||
|
@ -162,7 +193,7 @@ TrophyViewer::TrophyViewer(QString trophyPath, QString gameTrpPath) : QMainWindo
|
||||||
expandButton->setGeometry(80, 0, 27, 27);
|
expandButton->setGeometry(80, 0, 27, 27);
|
||||||
expandButton->hide();
|
expandButton->hide();
|
||||||
|
|
||||||
connect(expandButton, &QPushButton::clicked, this, [this, trophyInfoDock] {
|
connect(expandButton, &QPushButton::clicked, this, [this] {
|
||||||
trophyInfoDock->setVisible(true);
|
trophyInfoDock->setVisible(true);
|
||||||
expandButton->hide();
|
expandButton->hide();
|
||||||
});
|
});
|
||||||
|
@ -184,13 +215,13 @@ TrophyViewer::TrophyViewer(QString trophyPath, QString gameTrpPath) : QMainWindo
|
||||||
updateTrophyInfo();
|
updateTrophyInfo();
|
||||||
updateTableFilters();
|
updateTableFilters();
|
||||||
|
|
||||||
connect(trophyInfoDock, &QDockWidget::topLevelChanged, this, [this, trophyInfoDock] {
|
connect(trophyInfoDock, &QDockWidget::topLevelChanged, this, [this] {
|
||||||
if (!trophyInfoDock->isVisible()) {
|
if (!trophyInfoDock->isVisible()) {
|
||||||
expandButton->show();
|
expandButton->show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(trophyInfoDock, &QDockWidget::visibilityChanged, this, [this, trophyInfoDock] {
|
connect(trophyInfoDock, &QDockWidget::visibilityChanged, this, [this] {
|
||||||
if (!trophyInfoDock->isVisible()) {
|
if (!trophyInfoDock->isVisible()) {
|
||||||
expandButton->show();
|
expandButton->show();
|
||||||
} else {
|
} else {
|
||||||
|
@ -199,6 +230,29 @@ TrophyViewer::TrophyViewer(QString trophyPath, QString gameTrpPath) : QMainWindo
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TrophyViewer::onGameSelectionChanged(int index) {
|
||||||
|
if (index < 0 || index >= allTrophyGames_.size()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (tabWidget->count() > 0) {
|
||||||
|
QWidget* widget = tabWidget->widget(0);
|
||||||
|
tabWidget->removeTab(0);
|
||||||
|
delete widget;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TrophyGameInfo& selectedGame = allTrophyGames_[index];
|
||||||
|
currentGameName_ = selectedGame.name;
|
||||||
|
gameTrpPath_ = selectedGame.gameTrpPath;
|
||||||
|
|
||||||
|
this->setWindowTitle(tr("Trophy Viewer") + " - " + currentGameName_);
|
||||||
|
|
||||||
|
PopulateTrophyWidget(selectedGame.trophyPath);
|
||||||
|
|
||||||
|
updateTrophyInfo();
|
||||||
|
updateTableFilters();
|
||||||
|
}
|
||||||
|
|
||||||
void TrophyViewer::onDockClosed() {
|
void TrophyViewer::onDockClosed() {
|
||||||
if (!trophyInfoDock->isVisible()) {
|
if (!trophyInfoDock->isVisible()) {
|
||||||
reopenButton->setVisible(true);
|
reopenButton->setVisible(true);
|
||||||
|
@ -389,13 +443,15 @@ void TrophyViewer::PopulateTrophyWidget(QString title) {
|
||||||
tabWidget->addTab(tableWidget,
|
tabWidget->addTab(tableWidget,
|
||||||
tabName.insert(6, " ").replace(0, 1, tabName.at(0).toUpper()));
|
tabName.insert(6, " ").replace(0, 1, tabName.at(0).toUpper()));
|
||||||
|
|
||||||
this->resize(width + 400, 720);
|
if (!this->isMaximized()) {
|
||||||
QSize mainWindowSize = QApplication::activeWindow()->size();
|
this->resize(width + 400, 720);
|
||||||
this->resize(mainWindowSize.width() * 0.8, mainWindowSize.height() * 0.8);
|
QSize mainWindowSize = QApplication::activeWindow()->size();
|
||||||
|
this->resize(mainWindowSize.width() * 0.8, mainWindowSize.height() * 0.8);
|
||||||
|
}
|
||||||
this->show();
|
this->show();
|
||||||
|
|
||||||
tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed);
|
tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed);
|
||||||
tableWidget->setColumnWidth(3, 650);
|
tableWidget->setColumnWidth(3, 500);
|
||||||
}
|
}
|
||||||
this->setCentralWidget(tabWidget);
|
this->setCentralWidget(tabWidget);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
|
#include <QComboBox>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QDockWidget>
|
#include <QDockWidget>
|
||||||
#include <QFileInfoList>
|
#include <QFileInfoList>
|
||||||
|
@ -12,26 +13,38 @@
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
#include <QPair>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QTableWidget>
|
#include <QTableWidget>
|
||||||
#include <QTableWidgetItem>
|
#include <QTableWidgetItem>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
#include <QVector>
|
||||||
#include <QXmlStreamReader>
|
#include <QXmlStreamReader>
|
||||||
|
|
||||||
#include "common/types.h"
|
#include "common/types.h"
|
||||||
#include "core/file_format/trp.h"
|
#include "core/file_format/trp.h"
|
||||||
|
|
||||||
|
struct TrophyGameInfo {
|
||||||
|
QString name;
|
||||||
|
QString trophyPath;
|
||||||
|
QString gameTrpPath;
|
||||||
|
};
|
||||||
|
|
||||||
class TrophyViewer : public QMainWindow {
|
class TrophyViewer : public QMainWindow {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit TrophyViewer(QString trophyPath, QString gameTrpPath);
|
explicit TrophyViewer(
|
||||||
|
QString trophyPath, QString gameTrpPath, QString gameName = "",
|
||||||
|
const QVector<TrophyGameInfo>& allTrophyGames = QVector<TrophyGameInfo>());
|
||||||
|
|
||||||
void updateTrophyInfo();
|
void updateTrophyInfo();
|
||||||
|
|
||||||
void updateTableFilters();
|
void updateTableFilters();
|
||||||
void onDockClosed();
|
void onDockClosed();
|
||||||
void reopenLeftDock();
|
void reopenLeftDock();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onGameSelectionChanged(int index);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void PopulateTrophyWidget(QString title);
|
void PopulateTrophyWidget(QString title);
|
||||||
void SetTableItem(QTableWidget* parent, int row, int column, QString str);
|
void SetTableItem(QTableWidget* parent, int row, int column, QString str);
|
||||||
|
@ -39,14 +52,17 @@ private:
|
||||||
QTabWidget* tabWidget = nullptr;
|
QTabWidget* tabWidget = nullptr;
|
||||||
QStringList headers;
|
QStringList headers;
|
||||||
QString gameTrpPath_;
|
QString gameTrpPath_;
|
||||||
|
QString currentGameName_;
|
||||||
TRP trp;
|
TRP trp;
|
||||||
QLabel* trophyInfoLabel;
|
QLabel* trophyInfoLabel;
|
||||||
QCheckBox* showEarnedCheck;
|
QCheckBox* showEarnedCheck;
|
||||||
QCheckBox* showNotEarnedCheck;
|
QCheckBox* showNotEarnedCheck;
|
||||||
QCheckBox* showHiddenCheck;
|
QCheckBox* showHiddenCheck;
|
||||||
|
QComboBox* gameSelectionComboBox;
|
||||||
QPushButton* expandButton;
|
QPushButton* expandButton;
|
||||||
QDockWidget* trophyInfoDock;
|
QDockWidget* trophyInfoDock;
|
||||||
QPushButton* reopenButton;
|
QPushButton* reopenButton;
|
||||||
|
QVector<TrophyGameInfo> allTrophyGames_;
|
||||||
|
|
||||||
std::string GetTrpType(const QChar trp_) {
|
std::string GetTrpType(const QChar trp_) {
|
||||||
switch (trp_.toLatin1()) {
|
switch (trp_.toLatin1()) {
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
<file>images/stop_icon.png</file>
|
<file>images/stop_icon.png</file>
|
||||||
<file>images/utils_icon.png</file>
|
<file>images/utils_icon.png</file>
|
||||||
<file>images/file_icon.png</file>
|
<file>images/file_icon.png</file>
|
||||||
|
<file>images/trophy_icon.png</file>
|
||||||
<file>images/folder_icon.png</file>
|
<file>images/folder_icon.png</file>
|
||||||
<file>images/themes_icon.png</file>
|
<file>images/themes_icon.png</file>
|
||||||
<file>images/iconsize_icon.png</file>
|
<file>images/iconsize_icon.png</file>
|
||||||
|
|
Loading…
Add table
Reference in a new issue