Qt/GeckoCodeWidget: Option to add/remove gecko codes from UI

This commit is contained in:
spycrab 2018-01-24 13:36:16 +01:00
parent d9d75c27f0
commit ee90893bfe
2 changed files with 78 additions and 2 deletions

View File

@ -6,6 +6,7 @@
#include <QFontDatabase> #include <QFontDatabase>
#include <QFormLayout> #include <QFormLayout>
#include <QHBoxLayout>
#include <QLabel> #include <QLabel>
#include <QListWidget> #include <QListWidget>
#include <QMessageBox> #include <QMessageBox>
@ -17,6 +18,7 @@
#include "Common/IniFile.h" #include "Common/IniFile.h"
#include "Core/ConfigManager.h" #include "Core/ConfigManager.h"
#include "Core/GeckoCodeConfig.h" #include "Core/GeckoCodeConfig.h"
#include "DolphinQt2/Config/CheatCodeEditor.h"
#include "DolphinQt2/Config/CheatWarningWidget.h" #include "DolphinQt2/Config/CheatWarningWidget.h"
#include "DolphinQt2/GameList/GameFile.h" #include "DolphinQt2/GameList/GameFile.h"
@ -59,9 +61,14 @@ void GeckoCodeWidget::CreateWidgets()
m_code_view->setReadOnly(true); m_code_view->setReadOnly(true);
m_code_view->setFixedHeight(line_height * 10); m_code_view->setFixedHeight(line_height * 10);
m_add_code = new QPushButton(tr("&Add New Code..."));
m_edit_code = new QPushButton(tr("&Edit Code..."));
m_remove_code = new QPushButton(tr("&Remove Code"));
m_download_codes = new QPushButton(tr("Download Codes (WiiRD Database)")); m_download_codes = new QPushButton(tr("Download Codes (WiiRD Database)"));
m_download_codes->setEnabled(!m_game_id.empty()); m_download_codes->setEnabled(!m_game_id.empty());
m_download_codes->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); m_edit_code->setEnabled(false);
m_remove_code->setEnabled(false);
auto* layout = new QVBoxLayout; auto* layout = new QVBoxLayout;
@ -85,7 +92,15 @@ void GeckoCodeWidget::CreateWidgets()
layout->addLayout(info_layout); layout->addLayout(info_layout);
layout->addWidget(m_code_description); layout->addWidget(m_code_description);
layout->addWidget(m_code_view); layout->addWidget(m_code_view);
layout->addWidget(m_download_codes, 0, Qt::AlignRight);
QHBoxLayout* btn_layout = new QHBoxLayout;
btn_layout->addWidget(m_add_code);
btn_layout->addWidget(m_edit_code);
btn_layout->addWidget(m_remove_code);
btn_layout->addWidget(m_download_codes);
layout->addLayout(btn_layout);
setLayout(layout); setLayout(layout);
} }
@ -96,6 +111,8 @@ void GeckoCodeWidget::ConnectWidgets()
&GeckoCodeWidget::OnSelectionChanged); &GeckoCodeWidget::OnSelectionChanged);
connect(m_code_list, &QListWidget::itemChanged, this, &GeckoCodeWidget::OnItemChanged); connect(m_code_list, &QListWidget::itemChanged, this, &GeckoCodeWidget::OnItemChanged);
connect(m_add_code, &QPushButton::pressed, this, &GeckoCodeWidget::AddCode);
connect(m_edit_code, &QPushButton::pressed, this, &GeckoCodeWidget::EditCode);
connect(m_download_codes, &QPushButton::pressed, this, &GeckoCodeWidget::DownloadCodes); connect(m_download_codes, &QPushButton::pressed, this, &GeckoCodeWidget::DownloadCodes);
connect(m_warning, &CheatWarningWidget::OpenCheatEnableSettings, this, connect(m_warning, &CheatWarningWidget::OpenCheatEnableSettings, this,
@ -106,6 +123,9 @@ void GeckoCodeWidget::OnSelectionChanged()
{ {
auto items = m_code_list->selectedItems(); auto items = m_code_list->selectedItems();
m_edit_code->setEnabled(!items.empty());
m_remove_code->setEnabled(!items.empty());
if (items.empty()) if (items.empty())
return; return;
@ -136,6 +156,55 @@ void GeckoCodeWidget::OnItemChanged(QListWidgetItem* item)
SaveCodes(); SaveCodes();
} }
void GeckoCodeWidget::AddCode()
{
Gecko::GeckoCode code;
code.enabled = true;
CheatCodeEditor ed;
ed.SetGeckoCode(&code);
if (ed.exec())
{
m_gecko_codes.push_back(std::move(code));
SaveCodes();
UpdateList();
}
}
void GeckoCodeWidget::EditCode()
{
const auto* item = m_code_list->currentItem();
if (item == nullptr)
return;
int row = m_code_list->row(item);
CheatCodeEditor ed;
ed.SetGeckoCode(&m_gecko_codes[row]);
if (ed.exec())
{
SaveCodes();
UpdateList();
}
}
void GeckoCodeWidget::RemoveCode()
{
const auto* item = m_code_list->currentItem();
if (item == nullptr)
return;
m_gecko_codes.erase(m_gecko_codes.begin() + m_code_list->row(item));
UpdateList();
SaveCodes();
}
void GeckoCodeWidget::SaveCodes() void GeckoCodeWidget::SaveCodes()
{ {
IniFile game_ini_local; IniFile game_ini_local;

View File

@ -32,10 +32,14 @@ signals:
private: private:
void OnSelectionChanged(); void OnSelectionChanged();
void OnItemChanged(QListWidgetItem* item); void OnItemChanged(QListWidgetItem* item);
void OnDelete();
void CreateWidgets(); void CreateWidgets();
void ConnectWidgets(); void ConnectWidgets();
void UpdateList(); void UpdateList();
void AddCode();
void EditCode();
void RemoveCode();
void DownloadCodes(); void DownloadCodes();
void SaveCodes(); void SaveCodes();
@ -49,6 +53,9 @@ private:
QLabel* m_creator_label; QLabel* m_creator_label;
QTextEdit* m_code_description; QTextEdit* m_code_description;
QTextEdit* m_code_view; QTextEdit* m_code_view;
QPushButton* m_add_code;
QPushButton* m_edit_code;
QPushButton* m_remove_code;
QPushButton* m_download_codes; QPushButton* m_download_codes;
std::vector<Gecko::GeckoCode> m_gecko_codes; std::vector<Gecko::GeckoCode> m_gecko_codes;
}; };