summaryrefslogtreecommitdiff
path: root/Source/Core/DolphinQt2/Config/GeckoCodeWidget.cpp
diff options
context:
space:
mode:
authorLéo Lam <leolino.lam@gmail.com>2018-01-26 13:33:15 +0100
committerGitHub <noreply@github.com>2018-01-26 13:33:15 +0100
commit0eaf3deb1e3e904794c0be17fcb25538fb12d3da (patch)
tree4bc37fc8369448e53092088b2421338a6182f0ec /Source/Core/DolphinQt2/Config/GeckoCodeWidget.cpp
parent28176d011700f5cdda82b636e496b4d12f78cacf (diff)
parentee90893bfe959611aea31a364d674e5842155822 (diff)
Merge pull request #6322 from spycrab/qt_gecko_input
Qt/GeckoCodeWidget: Add option to add/remove gecko codes from UI
Diffstat (limited to 'Source/Core/DolphinQt2/Config/GeckoCodeWidget.cpp')
-rw-r--r--Source/Core/DolphinQt2/Config/GeckoCodeWidget.cpp73
1 files changed, 71 insertions, 2 deletions
diff --git a/Source/Core/DolphinQt2/Config/GeckoCodeWidget.cpp b/Source/Core/DolphinQt2/Config/GeckoCodeWidget.cpp
index 0b04439e92..92f2c03af2 100644
--- a/Source/Core/DolphinQt2/Config/GeckoCodeWidget.cpp
+++ b/Source/Core/DolphinQt2/Config/GeckoCodeWidget.cpp
@@ -6,6 +6,7 @@
#include <QFontDatabase>
#include <QFormLayout>
+#include <QHBoxLayout>
#include <QLabel>
#include <QListWidget>
#include <QMessageBox>
@@ -17,6 +18,7 @@
#include "Common/IniFile.h"
#include "Core/ConfigManager.h"
#include "Core/GeckoCodeConfig.h"
+#include "DolphinQt2/Config/CheatCodeEditor.h"
#include "DolphinQt2/Config/CheatWarningWidget.h"
#include "DolphinQt2/GameList/GameFile.h"
@@ -59,9 +61,14 @@ void GeckoCodeWidget::CreateWidgets()
m_code_view->setReadOnly(true);
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->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;
@@ -85,7 +92,15 @@ void GeckoCodeWidget::CreateWidgets()
layout->addLayout(info_layout);
layout->addWidget(m_code_description);
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);
}
@@ -96,6 +111,8 @@ void GeckoCodeWidget::ConnectWidgets()
&GeckoCodeWidget::OnSelectionChanged);
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_warning, &CheatWarningWidget::OpenCheatEnableSettings, this,
@@ -106,6 +123,9 @@ void GeckoCodeWidget::OnSelectionChanged()
{
auto items = m_code_list->selectedItems();
+ m_edit_code->setEnabled(!items.empty());
+ m_remove_code->setEnabled(!items.empty());
+
if (items.empty())
return;
@@ -136,6 +156,55 @@ void GeckoCodeWidget::OnItemChanged(QListWidgetItem* item)
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()
{
IniFile game_ini_local;