duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

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 }