# HG changeset patch # User Teemu Piippo # Date 1655735250 -10800 # Node ID 7ef03c2b46ab89ca4d47cc326cad20a4faf67956 # Parent 87ee9824210bbe89a1cf28b56dcaccd00cb0fdad Add a basic message log diff -r 87ee9824210b -r 7ef03c2b46ab CMakeLists.txt --- a/CMakeLists.txt Mon Jun 20 16:59:09 2022 +0300 +++ b/CMakeLists.txt Mon Jun 20 17:27:30 2022 +0300 @@ -30,6 +30,7 @@ src/libraries.cpp src/invert.cpp src/main.cpp + src/messagelog.cpp src/model.cpp src/parser.cpp src/polygoncache.cpp @@ -67,6 +68,7 @@ src/invert.h src/ldrawalgorithm.h src/libraries.h + src/messagelog.h src/model.h src/parser.h src/polygoncache.h diff -r 87ee9824210b -r 7ef03c2b46ab src/basics.h --- a/src/basics.h Mon Jun 20 16:59:09 2022 +0300 +++ b/src/basics.h Mon Jun 20 17:27:30 2022 +0300 @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -295,3 +296,25 @@ template using Graph = std::deque>; + +struct Message +{ + QDateTime time; + enum { Info, Warning, Error } type; + QString text; +}; + +inline Message logInfo(const QString text) +{ + return Message{.time = QDateTime::currentDateTime(), .type = Message::Info, .text = text}; +} + +inline Message logWarning(const QString text) +{ + return Message{.time = QDateTime::currentDateTime(), .type = Message::Warning, .text = text}; +} + +inline Message logError(const QString text) +{ + return Message{.time = QDateTime::currentDateTime(), .type = Message::Error, .text = text}; +} diff -r 87ee9824210b -r 7ef03c2b46ab src/documentmanager.cpp --- a/src/documentmanager.cpp Mon Jun 20 16:59:09 2022 +0300 +++ b/src/documentmanager.cpp Mon Jun 20 17:27:30 2022 +0300 @@ -42,6 +42,7 @@ .opentype = OpenType::ManuallyOpened, })); this->makePolygonCacheForModel(modelId); + Q_EMIT this->message(logInfo(tr("New model %1 created").arg(modelId.value))); return modelId; } @@ -135,6 +136,7 @@ })); this->makePolygonCacheForModel(modelId); result = modelId; + Q_EMIT this->message(logInfo(tr("Opened %1 as model %2").arg(quoted(path)).arg(modelId.value))); } else { @@ -303,6 +305,7 @@ for (ModelId idToPrune : prunable) { auto it = this->openModels.find(idToPrune); if (it != this->openModels.end()) { + Q_EMIT this->message(logInfo(tr("Model %1 (%2) pruned").arg(idToPrune.value).arg(it->second.path))); this->openModels.erase(it); } removeFromSet(autoOpened, idToPrune); diff -r 87ee9824210b -r 7ef03c2b46ab src/documentmanager.h --- a/src/documentmanager.h Mon Jun 20 16:59:09 2022 +0300 +++ b/src/documentmanager.h Mon Jun 20 17:27:30 2022 +0300 @@ -70,6 +70,8 @@ const ModelInfo* info = this->find(modelId); return info ? qobject_cast(info->payload) : nullptr; } +Q_SIGNALS: + void message(const Message& message); private: int modelIdCounter = 0; std::map openModels; diff -r 87ee9824210b -r 7ef03c2b46ab src/main.cpp --- a/src/main.cpp Mon Jun 20 16:59:09 2022 +0300 +++ b/src/main.cpp Mon Jun 20 17:27:30 2022 +0300 @@ -413,6 +413,22 @@ saveSettings(); updateRecentlyOpenedDocumentsMenu(); }; + const auto logMessage = [&ui](const Message& message){ + QString messagetext = message.time.toString(QObject::tr("[hh:mm:ss]")); + switch(message.type) { + case Message::Info: + messagetext += QObject::tr(" [INFO] "); + break; + case Message::Warning: + messagetext += QObject::tr(" [WARN] "); + break; + case Message::Error: + messagetext += QObject::tr(" [ERR!] "); + break; + } + messagetext += message.text; + ui.messageLog->append(messagetext); + }; const auto openModelForEditing = [&](const ModelId modelId){ Model* model = documents.getModelById(modelId); if (model != nullptr) { @@ -626,6 +642,7 @@ } }); QObject::connect(ui.actionAboutQt, &QAction::triggered, &app, &QApplication::aboutQt); + QObject::connect(&documents, &DocumentManager::message, logMessage); mainWindow.setWindowTitle(title()); mainWindow.restoreGeometry(setting()); restoreSettings(); diff -r 87ee9824210b -r 7ef03c2b46ab src/mainwindow.ui --- a/src/mainwindow.ui Mon Jun 20 16:59:09 2022 +0300 +++ b/src/mainwindow.ui Mon Jun 20 17:27:30 2022 +0300 @@ -13,6 +13,9 @@ LDForge + + true + @@ -39,7 +42,7 @@ 0 0 729 - 29 + 31 @@ -202,6 +205,25 @@ + + + Message log + + + 8 + + + + + + + true + + + + + +