diff options
author | 2jun0 <soo28819@naver.com> | 2022-03-07 06:33:11 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-06 22:33:11 +0100 |
commit | c66df57256b0eecc09a49a960457d32a10b7cb00 (patch) | |
tree | 2135a01d6536eefaeda2fbf58ee41d68481b07bc /src/frontend/qt_sdl/RAMInfoDialog.h | |
parent | 38c8b886ea2feefac1a707df52c122b01dca2dd8 (diff) |
Implement MainRAM management dialog😁 (#1248)
* Implement MainRAM management dialog
* Modify RAMInfoDialog
- use emuThread to avoid a race condition.
- replace RAMUpdateThread to QTimer
Co-Authored-By: RSDuck <RSDuck@users.noreply.github.com>
* Update src/frontend/qt_sdl/RAMInfoDialog.cpp
small typo
Co-authored-by: Rayyan Ansari <68647953+RayyanAnsari@users.noreply.github.com>
* Update src/frontend/qt_sdl/RAMInfoDialog.h
small typo
Co-authored-by: Rayyan Ansari <68647953+RayyanAnsari@users.noreply.github.com>
* typo errors in RAMInfoDialog
Rrevious->Previous
* add new line to the end of the file
Co-authored-by: Rayyan Ansari <rayyan@ansari.sh>
* enable raminfo when cart is inserted
* Modify that only the 'value' item can be edited in RAMinfoDialog
* fix: function name incorrect error
* fix: function name incorrect error2
* fix: wrong way to get ram value
Co-authored-by: RSDuck <RSDuck@users.noreply.github.com>
Co-authored-by: Rayyan Ansari <68647953+RayyanAnsari@users.noreply.github.com>
Co-authored-by: Rayyan Ansari <rayyan@ansari.sh>
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 |