diff options
Diffstat (limited to 'src/frontend/qt_sdl/RAMInfoDialog.h')
-rw-r--r-- | src/frontend/qt_sdl/RAMInfoDialog.h | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/src/frontend/qt_sdl/RAMInfoDialog.h b/src/frontend/qt_sdl/RAMInfoDialog.h new file mode 100644 index 0000000..f44ae93 --- /dev/null +++ b/src/frontend/qt_sdl/RAMInfoDialog.h @@ -0,0 +1,161 @@ +/* + Copyright 2016-2021 Arisotura + + This file is part of melonDS. + + melonDS is free software: you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + melonDS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with melonDS. If not, see http://www.gnu.org/licenses/. +*/ + +#ifndef RAMINFODIALOG_H +#define RAMINFODIALOG_H + +#include <QDialog> +#include <QTableWidget> +#include <QScrollBar> +#include <QThread> +#include <QTimer> + +#include "types.h" +#include "NDS.h" + +namespace Ui { class RAMInfoDialog; } +class RAMInfoDialog; +class RAMSearchThread; +class RAMUpdateThread; + +enum ramInfo_ByteType +{ + ramInfo_OneByte = 1, + ramInfo_TwoBytes = 2, + ramInfo_FourBytes = 4 +}; + +enum ramInfoSTh_SearchMode +{ + ramInfoSTh_Default, + ramInfoSTh_SearchAll +}; + +enum +{ + ramInfo_Address, + ramInfo_Value, + ramInfo_Previous +}; + +s32 GetMainRAMValue(const u32& addr, const ramInfo_ByteType& byteType); + +struct ramInfo_RowData +{ + u32 Address; + s32 Value; + s32 Previous; + + void Update(const ramInfo_ByteType& byteType) + { + Value = GetMainRAMValue(Address, byteType); + } + + void SetValue(const s32& value) + { + NDS::MainRAM[Address&NDS::MainRAMMask] = (u32)value; + Value = value; + } +}; + +class RAMInfoDialog : public QDialog +{ + Q_OBJECT + +public: + explicit RAMInfoDialog(QWidget* parent); + ~RAMInfoDialog(); + + static RAMInfoDialog* currentDlg; + static RAMInfoDialog* openDlg(QWidget* parent) + { + if (currentDlg) + { + currentDlg->activateWindow(); + return currentDlg; + } + + currentDlg = new RAMInfoDialog(parent); + currentDlg->show(); + return currentDlg; + } + static void closeDlg() + { + currentDlg = nullptr; + } + + s32 SearchValue = 0; + + void ClearTableContents(); + +private slots: + void done(int r); + + void on_btnSearch_clicked(); + void on_btnClear_clicked(); + void on_radiobtn1byte_clicked(); + void on_radiobtn2bytes_clicked(); + void on_radiobtn4bytes_clicked(); + void on_ramTable_itemChanged(QTableWidgetItem *item); + + void OnSearchFinished(); + void ShowRowsInTable(); + void SetProgressbarValue(const u32& value); + +private: + Ui::RAMInfoDialog* ui; + + RAMSearchThread* SearchThread; + QTimer* TableUpdater; +}; + +class RAMSearchThread : public QThread +{ + Q_OBJECT + +public: + explicit RAMSearchThread(RAMInfoDialog* dialog); + ~RAMSearchThread() override; + + void Start(const s32& searchValue, const ramInfoSTh_SearchMode& searchMode = ramInfoSTh_Default); + void Start(const ramInfoSTh_SearchMode& searchMode); + + void SetSearchByteType(const ramInfo_ByteType& bytetype); + ramInfo_ByteType GetSearchByteType() const; + std::vector<ramInfo_RowData>* GetResults(); + + void Stop(); + +private: + void run(); + + RAMInfoDialog* Dialog; + bool SearchRunning = false; + + ramInfoSTh_SearchMode SearchMode; + s32 SearchValue; + ramInfo_ByteType SearchByteType = ramInfo_OneByte; + std::vector<ramInfo_RowData>* RowDataVector = nullptr; + + void ClearTableContents(); + +signals: + void SetProgressbarValue(const u32& value); +}; + +#endif // RAMINFODIALOG_H |