From 0271f43cc99910070c7fd72b717706ceabd3b89d Mon Sep 17 00:00:00 2001 From: Jim Broadus Date: Mon, 25 May 2020 22:02:19 -0700 Subject: [PATCH] console: Add a Qt debug tab Add a tab for Qt debug features. Initially provides access to dumpObjectTree() on Application and MainWindow objects. This dumps the object's child objects to the log. --- src/ui/console.cpp | 32 ++++++++++++++++++++++++++++++++ src/ui/console.h | 5 +++++ src/ui/console.ui | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+) diff --git a/src/ui/console.cpp b/src/ui/console.cpp index f4bd28d2c..4b5113e88 100644 --- a/src/ui/console.cpp +++ b/src/ui/console.cpp @@ -8,17 +8,24 @@ #include "core/application.h" #include "core/database.h" +#include "core/logging.h" Console::Console(Application* app, QWidget* parent) : QDialog(parent), app_(app) { ui_.setupUi(this); connect(ui_.database_run, SIGNAL(clicked()), SLOT(RunQuery())); + connect(ui_.qt_dump_button, SIGNAL(clicked()), SLOT(Dump())); QFont font("Monospace"); font.setStyleHint(QFont::TypeWriter); ui_.database_output->setFont(font); ui_.database_query->setFont(font); + + QList objs = GetTopLevelObjects(); + for (QObject* obj : objs) + ui_.qt_dump_box->addItem(obj->objectName() + " object tree", + obj->objectName()); } void Console::RunQuery() { @@ -45,3 +52,28 @@ void Console::RunQuery() { ui_.database_output->verticalScrollBar()->setValue( ui_.database_output->verticalScrollBar()->maximum()); } + +void Console::Dump() { + QString item = ui_.qt_dump_box->currentData().toString(); + QObject* obj = FindTopLevelObject(item); + if (obj == nullptr) { + qLog(Error) << "Object not found" << item; + return; + } + obj->dumpObjectTree(); +} + +QList Console::GetTopLevelObjects() { + QList objs; + objs << app_; + // The parent should be the main window. + if (parent() != nullptr) objs << parent(); + + return objs; +} + +QObject* Console::FindTopLevelObject(QString& name) { + for (QObject* obj : GetTopLevelObjects()) + if (obj->objectName() == name) return obj; + return nullptr; +} diff --git a/src/ui/console.h b/src/ui/console.h index fcd5c9b6b..31e0d2179 100644 --- a/src/ui/console.h +++ b/src/ui/console.h @@ -13,9 +13,14 @@ class Console : public QDialog { Console(Application* app, QWidget* parent = nullptr); private slots: + // Database void RunQuery(); + // Qt + void Dump(); private: + QList GetTopLevelObjects(); + QObject* FindTopLevelObject(QString& name); Ui::Console ui_; Application* app_; }; diff --git a/src/ui/console.ui b/src/ui/console.ui index adc72ca3e..422e263d8 100644 --- a/src/ui/console.ui +++ b/src/ui/console.ui @@ -48,6 +48,51 @@ + + + Qt + + + + + + Dump To Logs + + + + + + + + + + 100 + 16777215 + + + + dump + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + +