mirror of
https://github.com/stenzek/duckstation.git
synced 2025-06-30 07:10:15 +00:00
146 lines
3.9 KiB
C++
146 lines
3.9 KiB
C++
// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
|
|
// SPDX-License-Identifier: CC-BY-NC-ND-4.0
|
|
|
|
#pragma once
|
|
|
|
#include "ui_gamecheatcodechoiceeditordialog.h"
|
|
#include "ui_gamecheatcodeeditordialog.h"
|
|
#include "ui_gamecheatsettingswidget.h"
|
|
|
|
#include "core/cheats.h"
|
|
|
|
#include "common/heterogeneous_containers.h"
|
|
|
|
#include <QtCore/QStringList>
|
|
#include <QtWidgets/QDialog>
|
|
#include <QtWidgets/QWidget>
|
|
|
|
#include <string>
|
|
#include <string_view>
|
|
#include <vector>
|
|
|
|
namespace GameList {
|
|
struct Entry;
|
|
}
|
|
|
|
class SettingsWindow;
|
|
|
|
class QStandardItem;
|
|
class QStandardItemModel;
|
|
|
|
class GameCheatSettingsWidget : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
GameCheatSettingsWidget(SettingsWindow* dialog, QWidget* parent);
|
|
~GameCheatSettingsWidget() override;
|
|
|
|
const Cheats::CodeInfo* getCodeInfo(const std::string_view name) const;
|
|
void setCodeOption(const std::string_view name, u32 value);
|
|
std::string getPathForSavingCheats() const;
|
|
QStringList getGroupNames() const;
|
|
bool hasCodeWithName(const std::string_view name) const;
|
|
void disableAllCheats();
|
|
|
|
protected:
|
|
void resizeEvent(QResizeEvent* event) override;
|
|
|
|
private Q_SLOTS:
|
|
void onEnableCheatsChanged(Qt::CheckState state);
|
|
void onSortCheatsToggled(bool checked);
|
|
void onSearchFilterChanged(const QString& text);
|
|
void onLoadDatabaseCheatsChanged(Qt::CheckState state);
|
|
void onCheatListItemDoubleClicked(const QModelIndex& index);
|
|
void onCheatListItemChanged(QStandardItem* item);
|
|
void onCheatListContextMenuRequested(const QPoint& pos);
|
|
void onRemoveCodeClicked();
|
|
void onReloadClicked();
|
|
void onImportClicked();
|
|
void onImportFromFileTriggered();
|
|
void onImportFromTextTriggered();
|
|
void onExportClicked();
|
|
void onClearClicked();
|
|
void reloadList();
|
|
|
|
private:
|
|
bool shouldLoadFromDatabase() const;
|
|
void checkForMasterDisable();
|
|
|
|
Cheats::CodeInfo* getSelectedCode();
|
|
QStandardItem* getTreeWidgetParent(const std::string_view parent);
|
|
void populateTreeWidgetItem(QStandardItem* parent, const Cheats::CodeInfo& pi, bool enabled);
|
|
void expandAllItems();
|
|
void resizeColumns();
|
|
|
|
void setCheatEnabled(std::string name, bool enabled, bool save_and_reload_settings);
|
|
void setStateForAll(bool enabled);
|
|
void setStateRecursively(QStandardItem* parent, bool enabled);
|
|
void importCodes(const std::string& file_contents);
|
|
void newCode();
|
|
void editCode(const std::string_view code_name);
|
|
void removeCode(const std::string_view code_name, bool confirm);
|
|
|
|
Ui::GameCheatSettingsWidget m_ui;
|
|
SettingsWindow* m_dialog;
|
|
|
|
UnorderedStringMap<QStandardItem*> m_parent_map;
|
|
Cheats::CodeInfoList m_codes;
|
|
QStandardItemModel* m_codes_model;
|
|
QSortFilterProxyModel* m_sort_model;
|
|
std::vector<std::string> m_enabled_codes;
|
|
|
|
bool m_master_enable_ignored = false;
|
|
};
|
|
|
|
class CheatCodeEditorDialog : public QDialog
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
CheatCodeEditorDialog(GameCheatSettingsWidget* parent, Cheats::CodeInfo* code, const QStringList& group_names);
|
|
~CheatCodeEditorDialog() override;
|
|
|
|
private Q_SLOTS:
|
|
void onGroupSelectedIndexChanged(int index);
|
|
void saveClicked();
|
|
void cancelClicked();
|
|
|
|
void onOptionTypeChanged(int index);
|
|
void onRangeMinChanged(int value);
|
|
void onRangeMaxChanged(int value);
|
|
void onEditChoiceClicked();
|
|
|
|
private:
|
|
void setupAdditionalUi(const QStringList& group_names);
|
|
void fillUi();
|
|
|
|
GameCheatSettingsWidget* m_parent;
|
|
Ui::GameCheatCodeEditorDialog m_ui;
|
|
|
|
Cheats::CodeInfo* m_code;
|
|
Cheats::CodeOptionList m_new_options;
|
|
};
|
|
|
|
class GameCheatCodeChoiceEditorDialog : public QDialog
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
GameCheatCodeChoiceEditorDialog(QWidget* parent, const Cheats::CodeOptionList& options);
|
|
~GameCheatCodeChoiceEditorDialog() override;
|
|
|
|
Cheats::CodeOptionList getNewOptions() const;
|
|
|
|
protected:
|
|
void resizeEvent(QResizeEvent* event) override;
|
|
|
|
private Q_SLOTS:
|
|
void onAddClicked();
|
|
void onRemoveClicked();
|
|
void onSaveClicked();
|
|
|
|
private:
|
|
Ui::GameCheatCodeChoiceEditorDialog m_ui;
|
|
};
|