From 8de392808008008418c2b819ffedd206055a7930 Mon Sep 17 00:00:00 2001 From: morg Date: Tue, 5 Oct 2021 09:18:18 +0200 Subject: [PATCH] Add console page --- LogManager.cpp | 14 +++++++- LogManager.h | 7 ++++ OpenRGB.pro | 3 ++ qt/OpenRGBConsolePage.cpp | 72 ++++++++++++++++++++++++++++++++++++++ qt/OpenRGBConsolePage.h | 30 ++++++++++++++++ qt/OpenRGBConsolePage.ui | 54 ++++++++++++++++++++++++++++ qt/OpenRGBDialog2.cpp | 34 +++++++++++++++++- qt/OpenRGBDialog2.h | 1 + qt/console.png | Bin 0 -> 5572 bytes qt/console_dark.png | Bin 0 -> 5590 bytes qt/resources.qrc | 2 ++ 11 files changed, 215 insertions(+), 2 deletions(-) create mode 100644 qt/OpenRGBConsolePage.cpp create mode 100644 qt/OpenRGBConsolePage.h create mode 100644 qt/OpenRGBConsolePage.ui create mode 100644 qt/console.png create mode 100644 qt/console_dark.png diff --git a/LogManager.cpp b/LogManager.cpp index f1b104529..99921d06c 100644 --- a/LogManager.cpp +++ b/LogManager.cpp @@ -9,7 +9,7 @@ #include "filesystem.h" -static const char* log_codes[] = {"FATAL:", "ERROR:", "Warning:", "Info:", "Verbose:", "Debug:", "Trace:"}; +const char* LogManager::log_codes[] = {"FATAL:", "ERROR:", "Warning:", "Info:", "Verbose:", "Debug:", "Trace:"}; LogManager::LogManager() { @@ -224,6 +224,8 @@ void LogManager::_append(const char* filename, int line, unsigned int level, con \*-------------------------------------------------*/ temp_messages.push_back(mes); + all_messages.push_back(mes); + /*-------------------------------------------------*\ | Flush the queues | \*-------------------------------------------------*/ @@ -245,6 +247,16 @@ void LogManager::_append(const char* filename, int line, unsigned int level, con //} } +std::vector LogManager::messages() +{ + return all_messages; +} + +void LogManager::clearMessages() +{ + all_messages.clear(); +} + void LogManager::append(const char* filename, int line, unsigned int level, const char* fmt, ...) { va_list va; diff --git a/LogManager.h b/LogManager.h index 36900b2d3..cd8e349cc 100644 --- a/LogManager.h +++ b/LogManager.h @@ -57,6 +57,9 @@ private: // A temporary log message storage to hold them until the stream opens std::vector temp_messages; + // A log message storage that will be displayed in the app + std::vector all_messages; + // A flag that marks if the message source file name and line number should be printed on screen bool print_source = false; @@ -87,6 +90,10 @@ public: void unregisterErrorCallback(LogErrorCallback callback, void* receiver); unsigned int getLoglevel() {return loglevel;} unsigned int getVerbosity() {return verbosity;} + void clearMessages(); + std::vector messages(); + + static const char* log_codes[]; }; #define LogAppend(level, ...) LogManager::get()->append(__FILE__, __LINE__, level, __VA_ARGS__) diff --git a/OpenRGB.pro b/OpenRGB.pro index d3379bbac..29cac60b6 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -165,6 +165,7 @@ HEADERS += filesystem.h \ qt/DetectorTableModel.h \ qt/OpenRGBClientInfoPage.h \ + qt/OpenRGBConsolePage.h \ qt/OpenRGBDeviceInfoPage.h \ qt/OpenRGBDevicePage.h \ qt/OpenRGBDialog.h \ @@ -503,6 +504,7 @@ SOURCES += SettingsManager.cpp \ qt/DetectorTableModel.cpp \ qt/OpenRGBClientInfoPage.cpp \ + qt/OpenRGBConsolePage.cpp \ qt/OpenRGBDeviceInfoPage.cpp \ qt/OpenRGBDevicePage.cpp \ qt/OpenRGBDialog.cpp \ @@ -867,6 +869,7 @@ RESOURCES += FORMS += \ qt/OpenRGBClientInfoPage.ui \ + qt/OpenRGBConsolePage.ui \ qt/OpenRGBDeviceInfoPage.ui \ qt/OpenRGBDevicePage.ui \ qt/OpenRGBDialog.ui \ diff --git a/qt/OpenRGBConsolePage.cpp b/qt/OpenRGBConsolePage.cpp new file mode 100644 index 000000000..ad5b7edf4 --- /dev/null +++ b/qt/OpenRGBConsolePage.cpp @@ -0,0 +1,72 @@ +#include "OpenRGBConsolePage.h" +#include "LogManager.h" +#include + +using namespace Ui; + +OpenRGBConsolePage::OpenRGBConsolePage(QWidget *parent) : + QFrame(parent), + ui(new Ui::OpenRGBConsolePageUi) +{ + ui->setupUi(this); + + ui->log_level->blockSignals(true); + ui->log_level->addItems({ + "Fatal", + "Error", + "Warning", + "Info", + "Verbose", + "Debug", + "Trace" + }); + + ui->log_level->setCurrentIndex(LogManager::get()->getLoglevel()); + ui->log_level->blockSignals(false); + + Refresh(); +} + +void OpenRGBConsolePage::Refresh() +{ + QString log; + + unsigned int current_level = LogManager::get()->getLoglevel(); + + for(PLogMessage& message: LogManager::get()->messages()) + { + unsigned int message_level = message.get()->level; + + if(message_level <= current_level) + { + log += "["; + log += LogManager::log_codes[message_level]; + log += "] "; + log += QString::fromStdString(message.get()->buffer); + log += "\n"; + } + } + + ui->logs->setText(log); +} + +void OpenRGBConsolePage::on_log_level_currentIndexChanged(int index) +{ + LogManager::get()->setLoglevel(index); +} + +void OpenRGBConsolePage::on_clear_clicked() +{ + LogManager::get()->clearMessages(); + ui->logs->clear(); +} + +void OpenRGBConsolePage::on_refresh_clicked() +{ + Refresh(); +} + +OpenRGBConsolePage::~OpenRGBConsolePage() +{ + delete ui; +} diff --git a/qt/OpenRGBConsolePage.h b/qt/OpenRGBConsolePage.h new file mode 100644 index 000000000..c4ccbd2c7 --- /dev/null +++ b/qt/OpenRGBConsolePage.h @@ -0,0 +1,30 @@ +#ifndef OPENRGBCONSOLEPAGE_H +#define OPENRGBCONSOLEPAGE_H + +#include +#include "ui_OpenRGBConsolePage.h" + +namespace Ui { +class OpenRGBConsolePage; +} + +class Ui::OpenRGBConsolePage : public QFrame +{ + Q_OBJECT + +public: + explicit OpenRGBConsolePage(QWidget *parent = nullptr); + ~OpenRGBConsolePage(); + +private slots: + void on_log_level_currentIndexChanged(int); + void on_clear_clicked(); + void on_refresh_clicked(); + +private: + Ui::OpenRGBConsolePageUi *ui; + + void Refresh(); +}; + +#endif // OPENRGBCONSOLEPAGE_H diff --git a/qt/OpenRGBConsolePage.ui b/qt/OpenRGBConsolePage.ui new file mode 100644 index 000000000..49c2b984e --- /dev/null +++ b/qt/OpenRGBConsolePage.ui @@ -0,0 +1,54 @@ + + + OpenRGBConsolePageUi + + + + 0 + 0 + 1328 + 915 + + + + Form + + + + + + Log level + + + + + + + + + + Refresh logs + + + + + + + Clear log + + + + + + + + Monospace + + + + + + + + + diff --git a/qt/OpenRGBDialog2.cpp b/qt/OpenRGBDialog2.cpp index fc3804870..8bb0724c2 100644 --- a/qt/OpenRGBDialog2.cpp +++ b/qt/OpenRGBDialog2.cpp @@ -3,6 +3,7 @@ #include "OpenRGBDevicePage.h" #include "OpenRGBDeviceInfoPage.h" #include "OpenRGBServerInfoPage.h" +#include "OpenRGBConsolePage.h" #include "OpenRGBPluginContainer.h" #include "OpenRGBProfileSaveDialog.h" #include "ResourceManager.h" @@ -474,7 +475,13 @@ OpenRGBDialog2::OpenRGBDialog2(QWidget *parent) : QMainWindow(parent), ui(new Op if(ShowI2CTools) { AddI2CToolsPage(); - } + } + + /*-----------------------------------------------------*\ + | Add the console page | + \*-----------------------------------------------------*/ + AddConsolePage(); + } OpenRGBDialog2::~OpenRGBDialog2() @@ -1679,3 +1686,28 @@ void Ui::OpenRGBDialog2::TogglePluginsVisibility(int tab_idx, QTabWidget* tabBar ((OpenRGBPluginContainer*) tab)->Show(); } } + +void Ui::OpenRGBDialog2::AddConsolePage() +{ + OpenRGBConsolePage* page = new OpenRGBConsolePage(); + + ui->InformationTabBar->addTab(page, ""); + + QString SoftwareLabelString; + + if(IsDarkTheme()) + { + SoftwareLabelString = "console_dark.png"; + } + else + { + SoftwareLabelString = "console.png"; + } + + /*-----------------------------------------------------*\ + | Create the tab label | + \*-----------------------------------------------------*/ + TabLabel* SoftwareTabLabel = new TabLabel(SoftwareLabelString, "Console"); + + ui->InformationTabBar->tabBar()->setTabButton(ui->InformationTabBar->tabBar()->count() - 1, QTabBar::LeftSide, SoftwareTabLabel); +} diff --git a/qt/OpenRGBDialog2.h b/qt/OpenRGBDialog2.h index 823d33102..7488a74d7 100644 --- a/qt/OpenRGBDialog2.h +++ b/qt/OpenRGBDialog2.h @@ -97,6 +97,7 @@ private: void AddSerialSettingsPage(); void AddYeelightSettingsPage(); void AddPluginsPage(PluginManager* plugin_manager); + void AddConsolePage(); void ClearDevicesList(); void UpdateDevicesList(); diff --git a/qt/console.png b/qt/console.png new file mode 100644 index 0000000000000000000000000000000000000000..32ee953aff2e52eeef189e044f3cd5ca5c99603f GIT binary patch literal 5572 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 XzR1sTIPK6fV2LA-ON_0Io-y}dL!Jh* literal 0 HcmV?d00001 diff --git a/qt/console_dark.png b/qt/console_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..876eebe0f3d0450660c4c58fd87aab62508835a1 GIT binary patch literal 5590 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 literal 0 HcmV?d00001 diff --git a/qt/resources.qrc b/qt/resources.qrc index 41ee09166..af368c380 100644 --- a/qt/resources.qrc +++ b/qt/resources.qrc @@ -44,5 +44,7 @@ serial_dark.png wireless.png wireless_dark.png + console.png + console_dark.png