From ddaf333dc4be8c5ed4d8a79456ea8148e5cea193 Mon Sep 17 00:00:00 2001 From: Eladash Date: Fri, 8 Jan 2021 21:05:47 +0200 Subject: [PATCH] kernel explorer: Make it single-instance tool --- rpcs3/rpcs3qt/kernel_explorer.cpp | 17 ++++++++++++----- rpcs3/rpcs3qt/kernel_explorer.h | 10 ++++++++-- rpcs3/rpcs3qt/main_window.cpp | 27 ++++++++++++++++++++------- rpcs3/rpcs3qt/main_window.h | 2 ++ rpcs3/rpcs3qt/main_window.ui | 18 +++++++++--------- 5 files changed, 51 insertions(+), 23 deletions(-) diff --git a/rpcs3/rpcs3qt/kernel_explorer.cpp b/rpcs3/rpcs3qt/kernel_explorer.cpp index 9ebe703aba72..926fa1418fce 100644 --- a/rpcs3/rpcs3qt/kernel_explorer.cpp +++ b/rpcs3/rpcs3qt/kernel_explorer.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include "Emu/IdManager.h" @@ -152,13 +153,16 @@ kernel_explorer::kernel_explorer(QWidget* parent) : QDialog(parent) { setWindowTitle(tr("Kernel Explorer")); setObjectName("kernel_explorer"); - setAttribute(Qt::WA_DeleteOnClose); setMinimumSize(QSize(700, 450)); QVBoxLayout* vbox_panel = new QVBoxLayout(); QHBoxLayout* hbox_buttons = new QHBoxLayout(); QPushButton* button_refresh = new QPushButton(tr("Refresh"), this); + //QPushButton* button_log = new QPushButton(tr("Log"), this); // TODO + hbox_buttons->addWidget(button_refresh); + //hbox_buttons->addSpacing(4); + //hbox_buttons->addWidget(button_log); hbox_buttons->addStretch(); m_tree = new QTreeWidget(this); @@ -167,17 +171,20 @@ kernel_explorer::kernel_explorer(QWidget* parent) : QDialog(parent) m_tree->header()->close(); // Merge and display everything - vbox_panel->addSpacing(10); + vbox_panel->addSpacing(8); vbox_panel->addLayout(hbox_buttons); - vbox_panel->addSpacing(10); + vbox_panel->addSpacing(8); vbox_panel->addWidget(m_tree); - vbox_panel->addSpacing(10); setLayout(vbox_panel); // Events connect(button_refresh, &QAbstractButton::clicked, this, &kernel_explorer::Update); +} - Update(); +void kernel_explorer::closeEvent(QCloseEvent *event) +{ + QDialog::closeEvent(event); + Q_EMIT FrameClosed(); } void kernel_explorer::Update() diff --git a/rpcs3/rpcs3qt/kernel_explorer.h b/rpcs3/rpcs3qt/kernel_explorer.h index 074227c6fe9b..2daf448f9ee2 100644 --- a/rpcs3/rpcs3qt/kernel_explorer.h +++ b/rpcs3/rpcs3qt/kernel_explorer.h @@ -1,10 +1,11 @@ #pragma once #include -#include #include "util/types.hpp" +class QTreeWidget; + class kernel_explorer : public QDialog { Q_OBJECT @@ -30,6 +31,11 @@ class kernel_explorer : public QDialog private: QTreeWidget* m_tree; -private Q_SLOTS: + void closeEvent(QCloseEvent* event) override; + +Q_SIGNALS: + void FrameClosed(); + +public Q_SLOTS: void Update(); }; diff --git a/rpcs3/rpcs3qt/main_window.cpp b/rpcs3/rpcs3qt/main_window.cpp index d347488892ea..77ed021a1d2e 100644 --- a/rpcs3/rpcs3qt/main_window.cpp +++ b/rpcs3/rpcs3qt/main_window.cpp @@ -1284,7 +1284,7 @@ void main_window::EnableMenus(bool enabled) ui->sysSendExitAct->setEnabled(enabled); // Tools - ui->toolskernel_explorerAct->setEnabled(enabled); + ui->showKernelExplorerAct->setEnabled(enabled); ui->toolsmemory_viewerAct->setEnabled(enabled); ui->toolsRsxDebuggerAct->setEnabled(enabled); ui->toolsStringSearchAct->setEnabled(enabled); @@ -1757,12 +1757,6 @@ void main_window::CreateConnects() cgdw->show(); }); - connect(ui->toolskernel_explorerAct, &QAction::triggered, [this] - { - kernel_explorer* kernelExplorer = new kernel_explorer(this); - kernelExplorer->show(); - }); - connect(ui->toolsmemory_viewerAct, &QAction::triggered, [this] { memory_viewer_panel* mvp = new memory_viewer_panel(this); @@ -1795,6 +1789,19 @@ void main_window::CreateConnects() m_gui_settings->SetValue(gui::mw_logger, checked); }); + connect(ui->showKernelExplorerAct, &QAction::toggled, [this](bool checked) + { + if (checked) + { + m_kernel_explorer->Update(); + m_kernel_explorer->show(); + } + else + { + m_kernel_explorer->hide(); + } + }); + connect(ui->showGameListAct, &QAction::triggered, [this](bool checked) { checked ? m_game_list_frame->show() : m_game_list_frame->hide(); @@ -1971,6 +1978,7 @@ void main_window::CreateDockWindows() m_debugger_frame->setObjectName("debugger"); m_log_frame = new log_frame(m_gui_settings, m_mw); m_log_frame->setObjectName("logger"); + m_kernel_explorer = new kernel_explorer(this); m_mw->addDockWidget(Qt::LeftDockWidgetArea, m_game_list_frame); m_mw->addDockWidget(Qt::LeftDockWidgetArea, m_log_frame); @@ -1988,6 +1996,11 @@ void main_window::CreateDockWindows() } }); + connect(m_kernel_explorer, &kernel_explorer::FrameClosed, [this]() + { + ui->showKernelExplorerAct->setChecked(false); + }); + connect(m_debugger_frame, &debugger_frame::DebugFrameClosed, [this]() { if (ui->showDebuggerAct->isChecked()) diff --git a/rpcs3/rpcs3qt/main_window.h b/rpcs3/rpcs3qt/main_window.h index 8eb84d50e9ba..8dab9999fc73 100644 --- a/rpcs3/rpcs3qt/main_window.h +++ b/rpcs3/rpcs3qt/main_window.h @@ -21,6 +21,7 @@ class game_list_frame; class gui_settings; class emu_settings; class persistent_settings; +class kernel_explorer; struct gui_game_info; @@ -164,6 +165,7 @@ private Q_SLOTS: log_frame* m_log_frame = nullptr; debugger_frame* m_debugger_frame = nullptr; game_list_frame* m_game_list_frame = nullptr; + kernel_explorer* m_kernel_explorer; std::shared_ptr m_gui_settings; std::shared_ptr m_emu_settings; std::shared_ptr m_persistent_settings; diff --git a/rpcs3/rpcs3qt/main_window.ui b/rpcs3/rpcs3qt/main_window.ui index e55d0100c141..b833f8d5ad46 100644 --- a/rpcs3/rpcs3qt/main_window.ui +++ b/rpcs3/rpcs3qt/main_window.ui @@ -249,7 +249,6 @@ Utilities - @@ -297,6 +296,7 @@ + @@ -588,14 +588,6 @@ Cg Disasm - - - false - - - Kernel Explorer - - false @@ -641,6 +633,14 @@ Show Log/TTY + + + true + + + Show Kernel Explorer + + About RPCS3