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 f1b10452..99921d06 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 36900b2d..cd8e349c 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 d3379bba..29cac60b 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 00000000..ad5b7edf --- /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 00000000..c4ccbd2c --- /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 00000000..49c2b984 --- /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 fc380487..8bb0724c 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 823d3310..7488a74d 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 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!toK2(K7lmsP~D-;yvr)B1( zDwI?fq$;FVWTr7NRNQ(yExJ!ek;nCar0cYX+@7;V8gfBp6P`W~TJQ7yjE8V)ol@yS zrc(jpj~_3x?uoZg|IygpwRFN2o9T0u*M$TwbTB9A0&#>}~XupO%t~u8X=Q$~g%IZvODFVa@EOE2a%rT}euv3-qh!DpXW7 zHPnbK|8Z>f2cM_!E~Hm_G$1!%kWdeuKSZ&_gAPY-ide;)*H#-^!b$XUFMpp&$A0f1+Lhh>Epe& zLsn?^rJ2#%{VD9aGgf5upKn?-pNT{8T9}116O-X&jnuAVIW8TGoBdlSY*x9~&=9io zu(zL*WWk*4wJN{$76{7pMHOv)v~)_;#*EgYqqjwcv+h<**3I4Z z^sL$aQ(@AVmM>kVYo09^mASQedSCIP=XrOlUzT2Q(CRfQd6Ib8U9wc^>asH?rOz@i zr_cPl%l z*s<`1Jo=>vUvBAWOprQa^)l^y`yJ-(6E4{oKJJc*c(JcJCgO#i;`e#C*{}TiwKX&F zkY7e^oA!#p4?hzReK-|&z5mwq+aI>;?`es1(qB0Jg7*v6FG9cSTh#v9i2U*V&nv69 zXy3x0DN+m!j4heY&HNlJzMfZN%fz;=9Z3+4|d4E ze`ovd9;4IZLm`{9Wdcl3d#FE3GTW|IwqL1(p-S-Jh9f?;dQ-g)71!K7eEj-uiSwWA zzCV8v{7H?uM(Lx@W!~Gv(fWyLDeZk$;1 zyz}spq>ar_`O;LKRp%-7X{~bm>2xi%^|M&|)}Z9I)t|)MKHWNHbUl+#vC&mWkyX$r zOJgw;w_%iNkk67#`*#oJOa5pUoqVFzJTaLubj1W2`ycXu-d)r2@!R3K&_bYM zx_?3sFfa&2XNE+SMELqxCFkerC8p#jrRr7W7BGN-jeSKyVsdtBi9%9pdS;%j()-=} zl@u~lY?Z=IeGPmIoKrJ0J*tXQgRA^PlB=?lEmM^2?YL|ztSWK~a#KqZ6)JLb@`|l0 zY?Z*~TICg6frRyy6u?SKvTcz9|8>y;bpKhp88yV>qrKIT=SLT%@R_NvxD}#)H znBkIIoLrPyP?DLSrvNfDF)6>a#8yd(OF=;aYItTrNwRB23ETn@A8dSaNs7K_K}oVn zMQ(v>MTx$Vfq{jtfsw9}r9QI$irfNUU%2kPVrVEP=jZBIBo^o!>KW+g=A!5*E^#eG z*oRd|aY$uBs(w&vaeir0a;j@tYF>#lvZVz%rNzj0mKLXiguw33NlDYM$c5O9tjFEc zHvp~&6pZPaxdmVyAl1k!QN7U*SWrdXL9B%7OB z8k^}FCK{XTnwT3H=_Z<+r|B9QSeT|5q?ntgCYvA`;a`-Qo|%`JgX}7hQ7M@zR!N45 z1}2t?Cb}sWDdxH+CI%_GiAE`wx~T?+#ugSvX@&;IhG3&W@nGc`;AyL5q-TH-3CKw- zNy{(FwN>)T%qy)xNQ7kOrUsWJf&$IZ%-Gn(*x1a-!r0Qp(7+g>C@i(8I5R&FWTv5k zo)N^~DalrD`9-;jCALbLxryni`UQFEU@f3%vGOmXBJol3!GbWPfmKA%q9tm6U$Olz)_teco>n5b)+Y-nj=WRR4cW|W9(dU1YQ zNqJ&Xs$+U;UWu)eduDC{IGzlj7Ull2(Fau!u;{V@6`{VqR>%=* z11e&zJV7}rxU`@kCo{DO61CujADmhU2^kxG9O{ttgY!*3LG8%OAiACN3o45;(=$r^ z%k%JBk3}KG1fR_0)VyN6b|Wi+1Pf9#DHkiZqCubn z(;5Z_hB!|b#}JFt$q5n}2Re@Y^KXos#M`hs^^j6#i}M_f;7Umei85mYgDrvvPwed+ zQ`y+slzDh~Y%6$v`g>fM*x2|`mzmjFU#i2c2w0S`}CKbLh*2~7Y)o(8f2 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 41ee0916..af368c38 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