dolphin/Source/Core/DolphinQt/Config/CheatWarningWidget.cpp
JosJuice 6ca2da53e8 Partially revert "Revert "Audit uses of IsRunning and GetState""
This reverts the revert commit bc67fc97c3,
except for the changes in BaseConfigLoader.cpp, which caused the bug
that made us revert 72cf2bdb87. PR 12917
contains an improved change to BaseConfigLoader.cpp, which can be merged
(or rejected) independently.

A few changes have also been made based on review comments.
2024-10-04 18:35:41 +02:00

87 lines
2.3 KiB
C++

// Copyright 2017 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "DolphinQt/Config/CheatWarningWidget.h"
#include <QHBoxLayout>
#include <QLabel>
#include <QPixmap>
#include <QPushButton>
#include <QStyle>
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/System.h"
#include "DolphinQt/Settings.h"
CheatWarningWidget::CheatWarningWidget(const std::string& game_id, bool restart_required,
QWidget* parent)
: QWidget(parent), m_game_id(game_id), m_restart_required(restart_required)
{
CreateWidgets();
ConnectWidgets();
connect(&Settings::Instance(), &Settings::EnableCheatsChanged, this,
[this] { Update(Core::IsRunning(Core::System::GetInstance())); });
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, [this](Core::State state) {
Update(state == Core::State::Running || state == Core::State::Paused);
});
Update(Core::IsRunning(Core::System::GetInstance()));
}
void CheatWarningWidget::CreateWidgets()
{
auto* icon = new QLabel;
const auto size = 1.5 * QFontMetrics(font()).height();
QPixmap warning_icon = style()->standardIcon(QStyle::SP_MessageBoxWarning).pixmap(size, size);
icon->setPixmap(warning_icon);
m_text = new QLabel();
m_config_button = new QPushButton(tr("Configure Dolphin"));
m_config_button->setHidden(true);
auto* layout = new QHBoxLayout;
layout->addWidget(icon);
layout->addWidget(m_text, 1);
layout->addWidget(m_config_button);
layout->setContentsMargins(0, 0, 0, 0);
setLayout(layout);
}
void CheatWarningWidget::Update(bool running)
{
bool hide_widget = true;
bool hide_config_button = true;
if (running && SConfig::GetInstance().GetGameID() == m_game_id && m_restart_required)
{
hide_widget = false;
m_text->setText(tr("Changing cheats will only take effect when the game is restarted."));
}
if (!Settings::Instance().GetCheatsEnabled())
{
hide_widget = false;
hide_config_button = false;
m_text->setText(tr("Dolphin's cheat system is currently disabled."));
}
setHidden(hide_widget);
m_config_button->setHidden(hide_config_button);
}
void CheatWarningWidget::ConnectWidgets()
{
connect(m_config_button, &QPushButton::clicked, this,
&CheatWarningWidget::OpenCheatEnableSettings);
}