From 8ab1359d436ec6fbb3998afcff344a94e1de3956 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 4 May 2025 03:04:54 -0400 Subject: [PATCH] Auto-hide warnings/errors after 5 seconds --- src/log.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/log.cpp b/src/log.cpp index 6d7d61d1..a27f46f1 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -5,6 +5,7 @@ #include #include #include +#include namespace Log { static QString mostRecentError; @@ -16,9 +17,10 @@ namespace Log { QPointer statusBar; QPointer message; QPointer icon; - QSet types; + QSet acceptedTypes; }; static QList displays; + static QTimer displayClearTimer; }; // Enabling this does not seem to be simple to color console output @@ -65,7 +67,7 @@ QString colorizeMessage(const QString &message, LogType type) { return colorized; } -void addLogStatusBar(QStatusBar *statusBar, const QSet &types) { +void addLogStatusBar(QStatusBar *statusBar, const QSet &acceptedTypes) { if (!statusBar) return; static const QSet allTypes = {LOG_ERROR, LOG_WARN, LOG_INFO}; @@ -74,7 +76,7 @@ void addLogStatusBar(QStatusBar *statusBar, const QSet &types) { .statusBar = statusBar, .message = new QLabel(statusBar), .icon = new QLabel(statusBar), - .types = types.isEmpty() ? allTypes : types, + .acceptedTypes = acceptedTypes.isEmpty() ? allTypes : acceptedTypes, }; statusBar->addWidget(display.icon); statusBar->addWidget(display.message); @@ -117,12 +119,22 @@ void updateLogDisplays(const QString &message, LogType type) { continue; } // Update the display, but only if it accepts this message type. - if (display.types.contains(type)) { + if (display.acceptedTypes.contains(type)) { display.icon->setPixmap(icons.value(type)); display.statusBar->clearMessage(); display.message->setText(message); } } + + // Auto-hide status bar messages after a set period of time + Log::displayClearTimer.start(5000); +} + +void clearLogDisplays() { + for (const auto &display : Log::displays) { + display.icon->setPixmap(QPixmap()); + display.message->setText(QString()); + } } void log(const QString &message, LogType type) { @@ -173,6 +185,10 @@ void logInit() { Log::file.open(QIODevice::WriteOnly | QIODevice::Append); Log::textStream.setDevice(&Log::file); + QObject::connect(&Log::displayClearTimer, &QTimer::timeout, [=] { + clearLogDisplays(); + }); + if (cleanupLargeLog()) { logWarn(QString("Previous log file %1 was cleared due to being over 20MB in size.").arg(Log::path)); }