From a2d4bd4fff3e57a9f3a7ac170faa0dff33c0f989 Mon Sep 17 00:00:00 2001 From: Eladash Date: Fri, 2 Jul 2021 10:06:26 +0300 Subject: [PATCH] kernel-explorer: Add logging ability --- rpcs3/rpcs3qt/kernel_explorer.cpp | 51 +++++++++++++++++++++++++++++-- rpcs3/rpcs3qt/kernel_explorer.h | 7 ++++- 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/rpcs3/rpcs3qt/kernel_explorer.cpp b/rpcs3/rpcs3qt/kernel_explorer.cpp index d7ce1e4778..e4f5efb766 100644 --- a/rpcs3/rpcs3qt/kernel_explorer.cpp +++ b/rpcs3/rpcs3qt/kernel_explorer.cpp @@ -37,6 +37,8 @@ constexpr auto qstr = QString::fromStdString; +LOG_CHANNEL(sys_log, "SYS"); + enum kernel_item_role { name_role = Qt::UserRole + 0, @@ -178,7 +180,10 @@ kernel_explorer::kernel_explorer(QWidget* parent) 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 All"), this); hbox_buttons->addWidget(button_refresh); + hbox_buttons->addSpacing(8); + hbox_buttons->addWidget(button_log); hbox_buttons->addStretch(); m_tree = new QTreeWidget(this); @@ -194,12 +199,17 @@ kernel_explorer::kernel_explorer(QWidget* parent) setLayout(vbox_panel); // Events - connect(button_refresh, &QAbstractButton::clicked, this, &kernel_explorer::Update); + connect(button_refresh, &QAbstractButton::clicked, this, &kernel_explorer::update); + connect(button_log, &QAbstractButton::clicked, this, [this]() + { + log(); + m_log_buf.clear(); + }); - Update(); + update(); } -void kernel_explorer::Update() +void kernel_explorer::update() { const auto dct = g_fxo->try_get(); @@ -889,3 +899,38 @@ void kernel_explorer::Update() final_touches(root); root->setExpanded(true); } + +void kernel_explorer::log(u32 level, QTreeWidgetItem* item) +{ + if (!item) + { + item = m_tree->topLevelItem(0); + + if (!item) + { + return; + } + + m_log_buf = qstr(fmt::format("Kernel Explorer: %s\n", Emu.GetTitleAndTitleID())); + log(level + 1, item); + + sys_log.success("%s", m_log_buf.toStdString()); + return; + } + + for (u32 j = 0; j < level; j++) + { + m_log_buf += QChar::Nbsp; + } + + m_log_buf.append(item->text(0)); + m_log_buf += '\n'; + + for (int i = 0; i < item->childCount(); i++) + { + if (auto node = item->child(i); node && !node->isHidden()) + { + log(level + 1, node); + } + } +} diff --git a/rpcs3/rpcs3qt/kernel_explorer.h b/rpcs3/rpcs3qt/kernel_explorer.h index 608c76bb91..2a3f506ccd 100644 --- a/rpcs3/rpcs3qt/kernel_explorer.h +++ b/rpcs3/rpcs3qt/kernel_explorer.h @@ -1,10 +1,12 @@ #pragma once #include +#include #include "util/types.hpp" class QTreeWidget; +class QTreeWidgetItem; class kernel_explorer : public QDialog { @@ -30,7 +32,10 @@ public: private: QTreeWidget* m_tree; + QString m_log_buf; + + void log(u32 level = 0, QTreeWidgetItem* node = nullptr); private Q_SLOTS: - void Update(); + void update(); };