cheatcodeeditordialog.cpp (2816B)
1 // SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin <stenzek@gmail.com> 2 // SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0) 3 4 #include "cheatcodeeditordialog.h" 5 #include <QtWidgets/QMessageBox> 6 7 CheatCodeEditorDialog::CheatCodeEditorDialog(const QStringList& group_names, CheatCode* code, QWidget* parent) 8 : QDialog(parent), m_code(code) 9 { 10 m_ui.setupUi(this); 11 setupAdditionalUi(group_names); 12 fillUi(); 13 connectUi(); 14 } 15 16 CheatCodeEditorDialog::~CheatCodeEditorDialog() = default; 17 18 void CheatCodeEditorDialog::saveClicked() 19 { 20 std::string new_description = m_ui.description->text().toStdString(); 21 if (new_description.empty()) 22 { 23 QMessageBox::critical(this, tr("Error"), tr("Description cannot be empty.")); 24 return; 25 } 26 27 if (!m_code->SetInstructionsFromString(m_ui.instructions->toPlainText().toStdString())) 28 { 29 QMessageBox::critical(this, tr("Error"), tr("Instructions are invalid.")); 30 return; 31 } 32 33 m_code->description = std::move(new_description); 34 m_code->type = static_cast<CheatCode::Type>(m_ui.type->currentIndex()); 35 m_code->activation = static_cast<CheatCode::Activation>(m_ui.activation->currentIndex()); 36 m_code->group = m_ui.group->currentText().toStdString(); 37 38 done(1); 39 } 40 41 void CheatCodeEditorDialog::cancelClicked() 42 { 43 done(0); 44 } 45 46 void CheatCodeEditorDialog::setupAdditionalUi(const QStringList& group_names) 47 { 48 for (u32 i = 0; i < static_cast<u32>(CheatCode::Type::Count); i++) 49 { 50 m_ui.type->addItem(qApp->translate("Cheats", CheatCode::GetTypeDisplayName(static_cast<CheatCode::Type>(i)))); 51 } 52 53 for (u32 i = 0; i < static_cast<u32>(CheatCode::Activation::Count); i++) 54 { 55 m_ui.activation->addItem( 56 qApp->translate("Cheats", CheatCode::GetActivationDisplayName(static_cast<CheatCode::Activation>(i)))); 57 } 58 59 if (!group_names.isEmpty()) 60 m_ui.group->addItems(group_names); 61 else 62 m_ui.group->addItem(QStringLiteral("Ungrouped")); 63 } 64 65 void CheatCodeEditorDialog::fillUi() 66 { 67 m_ui.description->setText(QString::fromStdString(m_code->description)); 68 69 const QString group_qstr(QString::fromStdString(m_code->group)); 70 int index = m_ui.group->findText(group_qstr); 71 if (index >= 0) 72 { 73 m_ui.group->setCurrentIndex(index); 74 } 75 else 76 { 77 index = m_ui.group->count(); 78 m_ui.group->addItem(group_qstr); 79 m_ui.group->setCurrentIndex(index); 80 } 81 82 m_ui.type->setCurrentIndex(static_cast<int>(m_code->type)); 83 m_ui.activation->setCurrentIndex(static_cast<int>(m_code->activation)); 84 85 m_ui.instructions->setPlainText(QString::fromStdString(m_code->GetInstructionsAsString())); 86 } 87 88 void CheatCodeEditorDialog::connectUi() 89 { 90 connect(m_ui.buttonBox, &QDialogButtonBox::accepted, this, &CheatCodeEditorDialog::saveClicked); 91 connect(m_ui.buttonBox, &QDialogButtonBox::rejected, this, &CheatCodeEditorDialog::cancelClicked); 92 }