CheatSearchWidget: Add checkbox to toggle Current Value autoupdate
This commit is contained in:
parent
fdb7328c73
commit
9230266529
|
@ -69,6 +69,9 @@ CheatSearchWidget::~CheatSearchWidget()
|
||||||
auto& settings = Settings::GetQSettings();
|
auto& settings = Settings::GetQSettings();
|
||||||
settings.setValue(QStringLiteral("cheatsearchwidget/displayhex"),
|
settings.setValue(QStringLiteral("cheatsearchwidget/displayhex"),
|
||||||
m_display_values_in_hex_checkbox->isChecked());
|
m_display_values_in_hex_checkbox->isChecked());
|
||||||
|
settings.setValue(QStringLiteral("cheatsearchwidget/autoupdatecurrentvalues"),
|
||||||
|
m_autoupdate_current_values->isChecked());
|
||||||
|
|
||||||
if (m_session->IsIntegerType())
|
if (m_session->IsIntegerType())
|
||||||
{
|
{
|
||||||
settings.setValue(QStringLiteral("cheatsearchwidget/parsehex"),
|
settings.setValue(QStringLiteral("cheatsearchwidget/parsehex"),
|
||||||
|
@ -229,16 +232,25 @@ void CheatSearchWidget::CreateWidgets()
|
||||||
m_info_label_1 = new QLabel(tr("Waiting for first scan..."));
|
m_info_label_1 = new QLabel(tr("Waiting for first scan..."));
|
||||||
m_info_label_2 = new QLabel();
|
m_info_label_2 = new QLabel();
|
||||||
|
|
||||||
|
auto* const checkboxes_layout = new QHBoxLayout();
|
||||||
m_display_values_in_hex_checkbox = new QCheckBox(tr("Display values in Hex"));
|
m_display_values_in_hex_checkbox = new QCheckBox(tr("Display values in Hex"));
|
||||||
m_display_values_in_hex_checkbox->setChecked(
|
m_display_values_in_hex_checkbox->setChecked(
|
||||||
settings.value(QStringLiteral("cheatsearchwidget/displayhex")).toBool());
|
settings.value(QStringLiteral("cheatsearchwidget/displayhex")).toBool());
|
||||||
|
checkboxes_layout->addWidget(m_display_values_in_hex_checkbox);
|
||||||
|
checkboxes_layout->setStretchFactor(m_display_values_in_hex_checkbox, 1);
|
||||||
|
|
||||||
|
m_autoupdate_current_values = new QCheckBox(tr("Automatically update Current Values"));
|
||||||
|
m_autoupdate_current_values->setChecked(
|
||||||
|
settings.value(QStringLiteral("cheatsearchwidget/autoupdatecurrentvalues"), true).toBool());
|
||||||
|
checkboxes_layout->addWidget(m_autoupdate_current_values);
|
||||||
|
checkboxes_layout->setStretchFactor(m_autoupdate_current_values, 2);
|
||||||
|
|
||||||
QVBoxLayout* layout = new QVBoxLayout();
|
QVBoxLayout* layout = new QVBoxLayout();
|
||||||
layout->addWidget(session_info_label);
|
layout->addWidget(session_info_label);
|
||||||
layout->addWidget(instructions_label);
|
layout->addWidget(instructions_label);
|
||||||
layout->addLayout(value_layout);
|
layout->addLayout(value_layout);
|
||||||
layout->addLayout(button_layout);
|
layout->addLayout(button_layout);
|
||||||
layout->addWidget(m_display_values_in_hex_checkbox);
|
layout->addLayout(checkboxes_layout);
|
||||||
layout->addWidget(m_info_label_1);
|
layout->addWidget(m_info_label_1);
|
||||||
layout->addWidget(m_info_label_2);
|
layout->addWidget(m_info_label_2);
|
||||||
layout->addWidget(m_address_table);
|
layout->addWidget(m_address_table);
|
||||||
|
@ -372,8 +384,10 @@ void CheatSearchWidget::OnNextScanClicked()
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CheatSearchWidget::UpdateTableRows(const Core::CPUThreadGuard& guard, const size_t begin_index,
|
bool CheatSearchWidget::UpdateTableRows(const Core::CPUThreadGuard& guard, const size_t begin_index,
|
||||||
const size_t end_index)
|
const size_t end_index, const UpdateSource source)
|
||||||
{
|
{
|
||||||
|
const bool update_status_text = source == UpdateSource::User;
|
||||||
|
|
||||||
std::unique_ptr<Cheats::CheatSearchSessionBase> tmp =
|
std::unique_ptr<Cheats::CheatSearchSessionBase> tmp =
|
||||||
m_session->ClonePartial(begin_index, end_index);
|
m_session->ClonePartial(begin_index, end_index);
|
||||||
tmp->SetFilterType(Cheats::FilterType::DoNotFilter);
|
tmp->SetFilterType(Cheats::FilterType::DoNotFilter);
|
||||||
|
@ -385,7 +399,8 @@ bool CheatSearchWidget::UpdateTableRows(const Core::CPUThreadGuard& guard, const
|
||||||
|
|
||||||
if (error_code != Cheats::SearchErrorCode::Success)
|
if (error_code != Cheats::SearchErrorCode::Success)
|
||||||
{
|
{
|
||||||
m_info_label_1->setText(tr("Refresh failed. Please run the game for a bit and try again."));
|
if (update_status_text)
|
||||||
|
m_info_label_1->setText(tr("Refresh failed. Please run the game for a bit and try again."));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -398,35 +413,43 @@ bool CheatSearchWidget::UpdateTableRows(const Core::CPUThreadGuard& guard, const
|
||||||
}
|
}
|
||||||
|
|
||||||
RefreshGUICurrentValues(begin_index, end_index);
|
RefreshGUICurrentValues(begin_index, end_index);
|
||||||
m_info_label_1->setText(tr("Refreshed current values."));
|
if (update_status_text)
|
||||||
|
m_info_label_1->setText(tr("Refreshed current values."));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheatSearchWidget::UpdateTableVisibleCurrentValues()
|
void CheatSearchWidget::UpdateTableVisibleCurrentValues(const UpdateSource source)
|
||||||
{
|
{
|
||||||
|
if (source == UpdateSource::Auto && !m_autoupdate_current_values->isChecked())
|
||||||
|
return;
|
||||||
|
|
||||||
Core::CPUThreadGuard guard(Core::System::GetInstance());
|
Core::CPUThreadGuard guard(Core::System::GetInstance());
|
||||||
if (m_address_table->rowCount() == 0)
|
if (m_address_table->rowCount() == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
UpdateTableRows(guard, GetVisibleRowsBeginIndex(), GetVisibleRowsEndIndex());
|
UpdateTableRows(guard, GetVisibleRowsBeginIndex(), GetVisibleRowsEndIndex(), source);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CheatSearchWidget::UpdateTableAllCurrentValues()
|
bool CheatSearchWidget::UpdateTableAllCurrentValues(const UpdateSource source)
|
||||||
{
|
{
|
||||||
|
if (source == UpdateSource::Auto && !m_autoupdate_current_values->isChecked())
|
||||||
|
return false;
|
||||||
|
|
||||||
Core::CPUThreadGuard guard(Core::System::GetInstance());
|
Core::CPUThreadGuard guard(Core::System::GetInstance());
|
||||||
const size_t result_count = m_address_table->rowCount();
|
const size_t result_count = m_address_table->rowCount();
|
||||||
if (result_count == 0)
|
if (result_count == 0)
|
||||||
{
|
{
|
||||||
m_info_label_1->setText(tr("Cannot refresh without results."));
|
if (source == UpdateSource::User)
|
||||||
|
m_info_label_1->setText(tr("Cannot refresh without results."));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return UpdateTableRows(guard, 0, result_count);
|
return UpdateTableRows(guard, 0, result_count, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheatSearchWidget::OnRefreshClicked()
|
void CheatSearchWidget::OnRefreshClicked()
|
||||||
{
|
{
|
||||||
UpdateTableAllCurrentValues();
|
UpdateTableAllCurrentValues(UpdateSource::User);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheatSearchWidget::OnResetClicked()
|
void CheatSearchWidget::OnResetClicked()
|
||||||
|
@ -504,7 +527,7 @@ void CheatSearchWidget::OnDisplayHexCheckboxStateChanged()
|
||||||
|
|
||||||
// If the game is running CheatsManager::OnFrameEnd will update values automatically.
|
// If the game is running CheatsManager::OnFrameEnd will update values automatically.
|
||||||
if (Core::GetState() != Core::State::Running)
|
if (Core::GetState() != Core::State::Running)
|
||||||
UpdateTableAllCurrentValues();
|
UpdateTableAllCurrentValues(UpdateSource::User);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheatSearchWidget::GenerateARCode()
|
void CheatSearchWidget::GenerateARCode()
|
||||||
|
|
|
@ -39,8 +39,14 @@ public:
|
||||||
explicit CheatSearchWidget(std::unique_ptr<Cheats::CheatSearchSessionBase> session);
|
explicit CheatSearchWidget(std::unique_ptr<Cheats::CheatSearchSessionBase> session);
|
||||||
~CheatSearchWidget() override;
|
~CheatSearchWidget() override;
|
||||||
|
|
||||||
bool UpdateTableAllCurrentValues();
|
enum class UpdateSource
|
||||||
void UpdateTableVisibleCurrentValues();
|
{
|
||||||
|
User,
|
||||||
|
Auto,
|
||||||
|
};
|
||||||
|
|
||||||
|
bool UpdateTableAllCurrentValues(UpdateSource source);
|
||||||
|
void UpdateTableVisibleCurrentValues(UpdateSource source);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void ActionReplayCodeGenerated(const ActionReplay::ARCode& ar_code);
|
void ActionReplayCodeGenerated(const ActionReplay::ARCode& ar_code);
|
||||||
|
@ -61,7 +67,8 @@ private:
|
||||||
|
|
||||||
void RefreshCurrentValueTableItem(QTableWidgetItem* current_value_table_item);
|
void RefreshCurrentValueTableItem(QTableWidgetItem* current_value_table_item);
|
||||||
void RefreshGUICurrentValues(size_t begin_index, size_t end_index);
|
void RefreshGUICurrentValues(size_t begin_index, size_t end_index);
|
||||||
bool UpdateTableRows(const Core::CPUThreadGuard& guard, size_t begin_index, size_t end_index);
|
bool UpdateTableRows(const Core::CPUThreadGuard& guard, size_t begin_index, size_t end_index,
|
||||||
|
UpdateSource source);
|
||||||
void RecreateGUITable();
|
void RecreateGUITable();
|
||||||
void GenerateARCode();
|
void GenerateARCode();
|
||||||
int GetVisibleRowsBeginIndex() const;
|
int GetVisibleRowsBeginIndex() const;
|
||||||
|
@ -86,5 +93,6 @@ private:
|
||||||
QPushButton* m_reset_button;
|
QPushButton* m_reset_button;
|
||||||
QCheckBox* m_parse_values_as_hex_checkbox;
|
QCheckBox* m_parse_values_as_hex_checkbox;
|
||||||
QCheckBox* m_display_values_in_hex_checkbox;
|
QCheckBox* m_display_values_in_hex_checkbox;
|
||||||
|
QCheckBox* m_autoupdate_current_values;
|
||||||
QTableWidget* m_address_table;
|
QTableWidget* m_address_table;
|
||||||
};
|
};
|
||||||
|
|
|
@ -62,7 +62,10 @@ void CheatsManager::OnFrameEnd()
|
||||||
auto* const selected_cheat_search_widget =
|
auto* const selected_cheat_search_widget =
|
||||||
qobject_cast<CheatSearchWidget*>(m_tab_widget->currentWidget());
|
qobject_cast<CheatSearchWidget*>(m_tab_widget->currentWidget());
|
||||||
if (selected_cheat_search_widget != nullptr)
|
if (selected_cheat_search_widget != nullptr)
|
||||||
selected_cheat_search_widget->UpdateTableVisibleCurrentValues();
|
{
|
||||||
|
selected_cheat_search_widget->UpdateTableVisibleCurrentValues(
|
||||||
|
CheatSearchWidget::UpdateSource::Auto);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheatsManager::UpdateAllCheatSearchWidgetCurrentValues()
|
void CheatsManager::UpdateAllCheatSearchWidgetCurrentValues()
|
||||||
|
@ -71,7 +74,7 @@ void CheatsManager::UpdateAllCheatSearchWidgetCurrentValues()
|
||||||
{
|
{
|
||||||
auto* const cheat_search_widget = qobject_cast<CheatSearchWidget*>(m_tab_widget->widget(i));
|
auto* const cheat_search_widget = qobject_cast<CheatSearchWidget*>(m_tab_widget->widget(i));
|
||||||
if (cheat_search_widget != nullptr)
|
if (cheat_search_widget != nullptr)
|
||||||
cheat_search_widget->UpdateTableAllCurrentValues();
|
cheat_search_widget->UpdateTableAllCurrentValues(CheatSearchWidget::UpdateSource::Auto);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue