diff --git a/CHANGES b/CHANGES index 056692109..aef829f98 100644 --- a/CHANGES +++ b/CHANGES @@ -22,6 +22,7 @@ Other fixes: Misc: - Core: Suspend runloop when a core crashes - Qt: Rearrange menus some + - Qt: Clean up cheats dialog - Util: Improve speed of UPS patch loading 0.9.1: (2021-04-18) diff --git a/src/platform/qt/CheatsView.cpp b/src/platform/qt/CheatsView.cpp index 9120e358b..4dc617458 100644 --- a/src/platform/qt/CheatsView.cpp +++ b/src/platform/qt/CheatsView.cpp @@ -8,8 +8,10 @@ #include "GBAApp.h" #include "CoreController.h" +#include +#include #include -#include +#include #include #ifdef M_CORE_GBA @@ -30,58 +32,30 @@ CheatsView::CheatsView(std::shared_ptr controller, QWidget* pare m_ui.cheatList->installEventFilter(this); m_ui.cheatList->setModel(&m_model); + m_ui.codeEntry->setFont(GBAApp::app()->monospaceFont()); - connect(m_ui.load, &QPushButton::clicked, this, &CheatsView::load); - connect(m_ui.save, &QPushButton::clicked, this, &CheatsView::save); - connect(m_ui.addSet, &QPushButton::clicked, this, &CheatsView::addSet); - connect(m_ui.remove, &QPushButton::clicked, this, &CheatsView::removeSet); + connect(m_ui.load, &QAbstractButton::clicked, this, &CheatsView::load); + connect(m_ui.save, &QAbstractButton::clicked, this, &CheatsView::save); + connect(m_ui.addSet, &QAbstractButton::clicked, this, &CheatsView::addSet); + connect(m_ui.remove, &QAbstractButton::clicked, this, &CheatsView::removeSet); + connect(m_ui.add, &QAbstractButton::clicked, this, &CheatsView::enterCheat); connect(controller.get(), &CoreController::stopping, this, &CheatsView::close); connect(controller.get(), &CoreController::stateLoaded, &m_model, &CheatsModel::invalidated); - QPushButton* add; switch (controller->platform()) { #ifdef M_CORE_GBA case mPLATFORM_GBA: - connect(m_ui.add, &QPushButton::clicked, [this]() { - enterCheat(GBA_CHEAT_AUTODETECT); - }); - - add = new QPushButton(tr("Add GameShark")); - m_ui.gridLayout->addWidget(add, m_ui.gridLayout->rowCount(), 2, 1, 2); - connect(add, &QPushButton::clicked, [this]() { - enterCheat(GBA_CHEAT_GAMESHARK); - }); - - add = new QPushButton(tr("Add Pro Action Replay")); - m_ui.gridLayout->addWidget(add, m_ui.gridLayout->rowCount(), 2, 1, 2); - connect(add, &QPushButton::clicked, [this]() { - enterCheat(GBA_CHEAT_PRO_ACTION_REPLAY); - }); - - add = new QPushButton(tr("Add CodeBreaker")); - m_ui.gridLayout->addWidget(add, m_ui.gridLayout->rowCount(), 2, 1, 2); - connect(add, &QPushButton::clicked, [this]() { - enterCheat(GBA_CHEAT_CODEBREAKER); - }); + registerCodeType(tr("Autodetect (recommended)"), GBA_CHEAT_AUTODETECT); + registerCodeType(tr("GameShark"), GBA_CHEAT_GAMESHARK); + registerCodeType(tr("Action Replay MAX"), GBA_CHEAT_PRO_ACTION_REPLAY); + registerCodeType(tr("CodeBreaker"), GBA_CHEAT_CODEBREAKER); break; #endif #ifdef M_CORE_GB case mPLATFORM_GB: - connect(m_ui.add, &QPushButton::clicked, [this]() { - enterCheat(GB_CHEAT_AUTODETECT); - }); - - add = new QPushButton(tr("Add GameShark")); - m_ui.gridLayout->addWidget(add, m_ui.gridLayout->rowCount(), 2, 1, 2); - connect(add, &QPushButton::clicked, [this]() { - enterCheat(GB_CHEAT_GAMESHARK); - }); - - add = new QPushButton(tr("Add GameGenie")); - m_ui.gridLayout->addWidget(add, m_ui.gridLayout->rowCount(), 2, 1, 2); - connect(add, &QPushButton::clicked, [this]() { - enterCheat(GB_CHEAT_GAME_GENIE); - }); + registerCodeType(tr("Autodetect (recommended)"), GB_CHEAT_AUTODETECT); + registerCodeType(tr("GameShark"), GB_CHEAT_GAMESHARK); + registerCodeType(tr("Game Genie"), GB_CHEAT_GAME_GENIE); break; #endif default: @@ -127,6 +101,7 @@ void CheatsView::addSet() { mCheatSet* set = m_controller->cheatDevice()->createSet(m_controller->cheatDevice(), nullptr); m_model.addSet(set); m_ui.cheatList->selectionModel()->select(m_model.index(m_model.rowCount() - 1, 0, QModelIndex()), QItemSelectionModel::ClearAndSelect); + enterCheat(); } void CheatsView::removeSet() { @@ -140,7 +115,21 @@ void CheatsView::removeSet() { } } -void CheatsView::enterCheat(int codeType) { +void CheatsView::registerCodeType(const QString& label, int type) { + QRadioButton* add = new QRadioButton(label); + m_ui.typeLayout->addWidget(add); + connect(add, &QAbstractButton::clicked, [this, type]() { + m_codeType = type; + }); + if (!m_typeGroup) { + m_typeGroup = new QButtonGroup(this); + m_codeType = type; + add->setChecked(true); + } + m_typeGroup->addButton(add); +} + +void CheatsView::enterCheat() { mCheatSet* set = nullptr; QModelIndexList selection = m_ui.cheatList->selectionModel()->selectedIndexes(); QModelIndex index; @@ -163,7 +152,7 @@ void CheatsView::enterCheat(int codeType) { QStringList cheats = m_ui.codeEntry->toPlainText().split('\n', QString::SkipEmptyParts); for (const QString& string : cheats) { m_model.beginAppendRow(index); - mCheatAddLine(set, string.toUtf8().constData(), codeType); + mCheatAddLine(set, string.toUtf8().constData(), m_codeType); m_model.endAppendRow(); } if (set->refresh) { diff --git a/src/platform/qt/CheatsView.h b/src/platform/qt/CheatsView.h index 7e47ef07e..a6b9db848 100644 --- a/src/platform/qt/CheatsView.h +++ b/src/platform/qt/CheatsView.h @@ -33,13 +33,17 @@ private slots: void save(); void addSet(); void removeSet(); + void enterCheat(); private: - void enterCheat(int codeType); + void registerCodeType(const QString& label, int type); Ui::CheatsView m_ui; std::shared_ptr m_controller; CheatsModel m_model; + QButtonGroup* m_typeGroup = nullptr; + + int m_codeType = 0; }; } diff --git a/src/platform/qt/CheatsView.ui b/src/platform/qt/CheatsView.ui index e712f281c..fe2124022 100644 --- a/src/platform/qt/CheatsView.ui +++ b/src/platform/qt/CheatsView.ui @@ -6,60 +6,18 @@ 0 0 - 629 - 428 + 520 + 455 Cheats - - - - - Remove - - - - - - - Qt::Horizontal - - - - - - - Save - - - - - - - Load - - - - - - - Add New Set - - - - - - - Add - - - - + + - + 0 0 @@ -75,18 +33,51 @@ - + + + + Add New Code + + + + + + + Load + + + + + + + Save + + + + + + + Remove + + + + + + + Qt::Horizontal + + + + - + 1 0 - - - Courier New - + + true QPlainTextEdit::NoWrap @@ -96,6 +87,21 @@ + + + + Add Lines + + + + + + + Code type + + + +