diff --git a/Source/Core/DolphinQt/Achievements/AchievementHeaderWidget.cpp b/Source/Core/DolphinQt/Achievements/AchievementHeaderWidget.cpp index 8e7977b504..b6eeb09897 100644 --- a/Source/Core/DolphinQt/Achievements/AchievementHeaderWidget.cpp +++ b/Source/Core/DolphinQt/Achievements/AchievementHeaderWidget.cpp @@ -30,45 +30,44 @@ AchievementHeaderWidget::AchievementHeaderWidget(QWidget* parent) : QWidget(parent) { - m_user_name = new QLabel(); - m_user_points = new QLabel(); - m_game_name = new QLabel(); - m_game_points = new QLabel(); + m_user_icon = new QLabel(); + m_game_icon = new QLabel(); + m_name = new QLabel(); + m_points = new QLabel(); m_game_progress_hard = new QProgressBar(); m_game_progress_soft = new QProgressBar(); m_rich_presence = new QLabel(); - QVBoxLayout* m_user_right_col = new QVBoxLayout(); - m_user_right_col->addWidget(m_user_name); - m_user_right_col->addWidget(m_user_points); - QHBoxLayout* m_user_layout = new QHBoxLayout(); - // TODO: player badge goes here - m_user_layout->addLayout(m_user_right_col); - m_user_box = new QGroupBox(); - m_user_box->setLayout(m_user_layout); + QSizePolicy sp_retain = m_game_progress_hard->sizePolicy(); + sp_retain.setRetainSizeWhenHidden(true); + m_game_progress_hard->setSizePolicy(sp_retain); + sp_retain = m_game_progress_soft->sizePolicy(); + sp_retain.setRetainSizeWhenHidden(true); + m_game_progress_soft->setSizePolicy(sp_retain); - QVBoxLayout* m_game_right_col = new QVBoxLayout(); - m_game_right_col->addWidget(m_game_name); - m_game_right_col->addWidget(m_game_points); - m_game_right_col->addWidget(m_game_progress_hard); - m_game_right_col->addWidget(m_game_progress_soft); - QHBoxLayout* m_game_upper_row = new QHBoxLayout(); - // TODO: player badge and game badge go here - m_game_upper_row->addLayout(m_game_right_col); - QVBoxLayout* m_game_layout = new QVBoxLayout(); - m_game_layout->addLayout(m_game_upper_row); - m_game_layout->addWidget(m_rich_presence); - m_game_box = new QGroupBox(); - m_game_box->setLayout(m_game_layout); + QVBoxLayout* icon_col = new QVBoxLayout(); + icon_col->addWidget(m_user_icon); + icon_col->addWidget(m_game_icon); + QVBoxLayout* text_col = new QVBoxLayout(); + text_col->addWidget(m_name); + text_col->addWidget(m_points); + text_col->addWidget(m_game_progress_hard); + text_col->addWidget(m_game_progress_soft); + text_col->addWidget(m_rich_presence); + QHBoxLayout* header_layout = new QHBoxLayout(); + header_layout->addLayout(icon_col); + header_layout->addLayout(text_col); + m_header_box = new QGroupBox(); + m_header_box->setLayout(header_layout); QVBoxLayout* m_total = new QVBoxLayout(); - m_total->addWidget(m_user_box); - m_total->addWidget(m_game_box); + m_total->addWidget(m_header_box); m_total->setContentsMargins(0, 0, 0, 0); m_total->setAlignment(Qt::AlignTop); setLayout(m_total); + std::lock_guard lg{*AchievementManager::GetInstance()->GetLock()}; UpdateData(); } @@ -76,38 +75,83 @@ void AchievementHeaderWidget::UpdateData() { if (!AchievementManager::GetInstance()->IsLoggedIn()) { - m_user_box->setVisible(false); - m_game_box->setVisible(false); - return; - } - - QString user_name = - QString::fromStdString(AchievementManager::GetInstance()->GetPlayerDisplayName()); - m_user_name->setText(user_name); - m_user_points->setText(tr("%1 points").arg(AchievementManager::GetInstance()->GetPlayerScore())); - - if (!AchievementManager::GetInstance()->IsGameLoaded()) - { - m_user_box->setVisible(true); - m_game_box->setVisible(false); + m_header_box->setVisible(false); return; } AchievementManager::PointSpread point_spread = AchievementManager::GetInstance()->TallyScore(); - m_game_name->setText( - QString::fromStdString(AchievementManager::GetInstance()->GetGameDisplayName())); - m_game_points->setText(GetPointsString(user_name, point_spread)); - m_game_progress_hard = new QProgressBar(); - m_game_progress_hard->setRange(0, point_spread.total_count); - m_game_progress_soft->setValue(point_spread.hard_unlocks); - m_game_progress_soft->setRange(0, point_spread.total_count); - m_game_progress_soft->setValue(point_spread.hard_unlocks + point_spread.soft_unlocks); - m_rich_presence->setText( - QString::fromUtf8(AchievementManager::GetInstance()->GetRichPresence().data())); - m_rich_presence->setVisible(Config::Get(Config::RA_RICH_PRESENCE_ENABLED)); + QString user_name = + QString::fromStdString(AchievementManager::GetInstance()->GetPlayerDisplayName()); + QString game_name = + QString::fromStdString(AchievementManager::GetInstance()->GetGameDisplayName()); + AchievementManager::BadgeStatus player_badge = + AchievementManager::GetInstance()->GetPlayerBadge(); + AchievementManager::BadgeStatus game_badge = AchievementManager::GetInstance()->GetGameBadge(); - m_user_box->setVisible(false); - m_game_box->setVisible(true); + m_user_icon->setVisible(false); + m_user_icon->clear(); + m_user_icon->setText({}); + if (Config::Get(Config::RA_BADGES_ENABLED)) + { + if (player_badge.name != "") + { + QImage i_user_icon{}; + if (i_user_icon.loadFromData(&player_badge.badge.front(), (int)player_badge.badge.size())) + { + m_user_icon->setPixmap(QPixmap::fromImage(i_user_icon) + .scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + m_user_icon->adjustSize(); + m_user_icon->setStyleSheet(QStringLiteral("border: 4px solid transparent")); + m_user_icon->setVisible(true); + } + } + } + m_game_icon->setVisible(false); + m_game_icon->clear(); + m_game_icon->setText({}); + if (Config::Get(Config::RA_BADGES_ENABLED)) + { + if (game_badge.name != "") + { + QImage i_game_icon{}; + if (i_game_icon.loadFromData(&game_badge.badge.front(), (int)game_badge.badge.size())) + { + m_game_icon->setPixmap(QPixmap::fromImage(i_game_icon) + .scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + m_game_icon->adjustSize(); + m_game_icon->setStyleSheet(QStringLiteral("border: 4px solid transparent")); + m_game_icon->setVisible(true); + } + } + } + + if (!game_name.isEmpty()) + { + m_name->setText(tr("%1 is playing %2").arg(user_name).arg(game_name)); + m_points->setText(GetPointsString(user_name, point_spread)); + + m_game_progress_hard->setRange(0, point_spread.total_count); + if (!m_game_progress_hard->isVisible()) + m_game_progress_hard->setVisible(true); + m_game_progress_soft->setValue(point_spread.hard_unlocks); + m_game_progress_soft->setRange(0, point_spread.total_count); + m_game_progress_soft->setValue(point_spread.hard_unlocks + point_spread.soft_unlocks); + if (!m_game_progress_soft->isVisible()) + m_game_progress_soft->setVisible(true); + m_rich_presence->setText( + QString::fromUtf8(AchievementManager::GetInstance()->GetRichPresence().data())); + if (!m_rich_presence->isVisible()) + m_rich_presence->setVisible(Config::Get(Config::RA_RICH_PRESENCE_ENABLED)); + } + else + { + m_name->setText(user_name); + m_points->setText(tr("%1 points").arg(AchievementManager::GetInstance()->GetPlayerScore())); + + m_game_progress_hard->setVisible(false); + m_game_progress_soft->setVisible(false); + m_rich_presence->setVisible(false); + } } QString diff --git a/Source/Core/DolphinQt/Achievements/AchievementHeaderWidget.h b/Source/Core/DolphinQt/Achievements/AchievementHeaderWidget.h index b99457f2f1..b8cbf9c9e1 100644 --- a/Source/Core/DolphinQt/Achievements/AchievementHeaderWidget.h +++ b/Source/Core/DolphinQt/Achievements/AchievementHeaderWidget.h @@ -27,16 +27,14 @@ private: QGroupBox* m_common_box; QVBoxLayout* m_common_layout; - QLabel* m_user_name; - QLabel* m_user_points; - QLabel* m_game_name; - QLabel* m_game_points; + QLabel* m_user_icon; + QLabel* m_game_icon; + QLabel* m_name; + QLabel* m_points; QProgressBar* m_game_progress_hard; QProgressBar* m_game_progress_soft; QLabel* m_rich_presence; - - QGroupBox* m_user_box; - QGroupBox* m_game_box; + QGroupBox* m_header_box; }; #endif // USE_RETRO_ACHIEVEMENTS