// Copyright 2018 Dolphin Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include #include #include #include "Common/CommonTypes.h" #include "DolphinQt/GameList/GameListModel.h" class ARCodeWidget; class QComboBox; class QDialogButtonBox; class QLabel; class QLineEdit; class QPushButton; class QRadioButton; class QSplitter; class QTabWidget; class QTableWidget; class QTableWidgetItem; struct Result; namespace Core { enum class State; } namespace UICommon { class GameFile; } class CheatsManager : public QDialog { Q_OBJECT public: explicit CheatsManager(QWidget* parent = nullptr); ~CheatsManager(); private: QWidget* CreateCheatSearch(); void CreateWidgets(); void ConnectWidgets(); void OnStateChanged(Core::State state); size_t GetTypeSize() const; std::function CreateMatchFunction(); void Reset(); void NewSearch(); void NextSearch(); void Update(); void GenerateARCode(); void OnWatchContextMenu(); void OnMatchContextMenu(); void OnWatchItemChanged(QTableWidgetItem* item); std::string m_game_id; std::string m_game_tdb_id; u16 m_revision = 0; std::vector m_results; std::vector m_watch; QDialogButtonBox* m_button_box; QTabWidget* m_tab_widget = nullptr; QWidget* m_cheat_search; ARCodeWidget* m_ar_code = nullptr; QLabel* m_result_label; QTableWidget* m_match_table; QTableWidget* m_watch_table; QSplitter* m_option_splitter; QSplitter* m_table_splitter; QComboBox* m_match_length; QComboBox* m_match_operation; QLineEdit* m_match_value; QPushButton* m_match_new; QPushButton* m_match_next; QPushButton* m_match_refresh; QPushButton* m_match_reset; QRadioButton* m_match_decimal; QRadioButton* m_match_hexadecimal; QRadioButton* m_match_octal; bool m_updating = false; };