From ec3538c2ee9518a0f5739bdee4706a5d03a5cef4 Mon Sep 17 00:00:00 2001 From: Muhammed Galib Uludag Date: Tue, 27 Jul 2021 22:55:43 +0300 Subject: [PATCH 1/5] Simplified Qt sinks Removed private class that derived from QObject --- include/spdlog/sinks/qt_sinks .h | 129 +++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 include/spdlog/sinks/qt_sinks .h diff --git a/include/spdlog/sinks/qt_sinks .h b/include/spdlog/sinks/qt_sinks .h new file mode 100644 index 000000000..1389b87b8 --- /dev/null +++ b/include/spdlog/sinks/qt_sinks .h @@ -0,0 +1,129 @@ +// Copyright(c) 2015-present, Gabi Melman, mguludag and spdlog contributors. +// Distributed under the MIT License (http://opensource.org/licenses/MIT) + +#pragma once + +// +// Custom sink for QPlainTextEdit or QTextEdit and its childs(QTextBrowser... etc) +// Building and using requires Qt library. +// + +#include "spdlog/common.h" +#include "spdlog/details/log_msg.h" +#include "spdlog/details/synchronous_factory.h" +#include "spdlog/sinks/base_sink.h" + +#include +#include + +// +// qtextedit_sink class +// +namespace spdlog { +namespace sinks { +template +class qtextedit_sink : public base_sink { +public: + qtextedit_sink(QTextEdit *textedit = nullptr) { + if (textedit != nullptr) { + qtextedit = textedit; + } else { + throw spdlog_ex("Error opening QTextEdit"); + } + } + + ~qtextedit_sink() { flush_(); } + +protected: + void sink_it_(const details::log_msg &msg) override { + if(qtextedit == nullptr) + return; + memory_buf_t formatted; + base_sink::formatter_->format(msg, formatted); + string_view_t str = string_view_t(formatted.data(), formatted.size()); + QMetaObject::invokeMethod(qtextedit,"append", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size() - 2)))); + } + + void flush_() override {} + +private: + QTextEdit* qtextedit = nullptr; +}; + +// +// qplaintextedit_sink class +// +template +class qplaintextedit_sink : public base_sink { +public: + qplaintextedit_sink(QPlainTextEdit *textedit = nullptr) { + if (textedit != nullptr) { + qplaintextedit = textedit; + } else { + throw spdlog_ex("Error opening QPlainTextEdit"); + } + } + + ~qplaintextedit_sink() { flush_(); } + +protected: + void sink_it_(const details::log_msg &msg) override { + if(qplaintextedit == nullptr) + return; + memory_buf_t formatted; + base_sink::formatter_->format(msg, formatted); + string_view_t str = string_view_t(formatted.data(), formatted.size()); + QMetaObject::invokeMethod(qplaintextedit, "appendPlainText", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size() - 2)))); + } + + void flush_() override {} + +private: + QPlainTextEdit* qplaintextedit = nullptr; +}; + +#include "spdlog/details/null_mutex.h" +#include +using qtextedit_sink_mt = qtextedit_sink; +using qtextedit_sink_st = qtextedit_sink; + +using qplaintextedit_sink_mt = qplaintextedit_sink; +using qplaintextedit_sink_st = qplaintextedit_sink; + +} // namespace sinks + +// +// Factory functions +// +template +inline std::shared_ptr +qtextedit_logger_mt(const std::string &logger_name, + QTextEdit *qtextedit = nullptr) { + return Factory::template create(logger_name, + qtextedit); +} + +template +inline std::shared_ptr +qtextedit_logger_st(const std::string &logger_name, + QTextEdit *qtextedit = nullptr) { + return Factory::template create(logger_name, + qtextedit); +} + +template +inline std::shared_ptr +qplaintextedit_logger_mt(const std::string &logger_name, + QPlainTextEdit *qplaintextedit = nullptr) { + return Factory::template create(logger_name, + qplaintextedit); +} + +template +inline std::shared_ptr +qplaintextedit_logger_st(const std::string &logger_name, + QPlainTextEdit *qplaintextedit = nullptr) { + return Factory::template create(logger_name, + qplaintextedit); +} +} // namespace spdlog From fb47935a7bb24bf23959d73c14308fb265471158 Mon Sep 17 00:00:00 2001 From: Muhammed Galib Uludag Date: Tue, 27 Jul 2021 23:04:26 +0300 Subject: [PATCH 2/5] Delete qt_sinks .h --- include/spdlog/sinks/qt_sinks .h | 129 ------------------------------- 1 file changed, 129 deletions(-) delete mode 100644 include/spdlog/sinks/qt_sinks .h diff --git a/include/spdlog/sinks/qt_sinks .h b/include/spdlog/sinks/qt_sinks .h deleted file mode 100644 index 1389b87b8..000000000 --- a/include/spdlog/sinks/qt_sinks .h +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright(c) 2015-present, Gabi Melman, mguludag and spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -// -// Custom sink for QPlainTextEdit or QTextEdit and its childs(QTextBrowser... etc) -// Building and using requires Qt library. -// - -#include "spdlog/common.h" -#include "spdlog/details/log_msg.h" -#include "spdlog/details/synchronous_factory.h" -#include "spdlog/sinks/base_sink.h" - -#include -#include - -// -// qtextedit_sink class -// -namespace spdlog { -namespace sinks { -template -class qtextedit_sink : public base_sink { -public: - qtextedit_sink(QTextEdit *textedit = nullptr) { - if (textedit != nullptr) { - qtextedit = textedit; - } else { - throw spdlog_ex("Error opening QTextEdit"); - } - } - - ~qtextedit_sink() { flush_(); } - -protected: - void sink_it_(const details::log_msg &msg) override { - if(qtextedit == nullptr) - return; - memory_buf_t formatted; - base_sink::formatter_->format(msg, formatted); - string_view_t str = string_view_t(formatted.data(), formatted.size()); - QMetaObject::invokeMethod(qtextedit,"append", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size() - 2)))); - } - - void flush_() override {} - -private: - QTextEdit* qtextedit = nullptr; -}; - -// -// qplaintextedit_sink class -// -template -class qplaintextedit_sink : public base_sink { -public: - qplaintextedit_sink(QPlainTextEdit *textedit = nullptr) { - if (textedit != nullptr) { - qplaintextedit = textedit; - } else { - throw spdlog_ex("Error opening QPlainTextEdit"); - } - } - - ~qplaintextedit_sink() { flush_(); } - -protected: - void sink_it_(const details::log_msg &msg) override { - if(qplaintextedit == nullptr) - return; - memory_buf_t formatted; - base_sink::formatter_->format(msg, formatted); - string_view_t str = string_view_t(formatted.data(), formatted.size()); - QMetaObject::invokeMethod(qplaintextedit, "appendPlainText", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size() - 2)))); - } - - void flush_() override {} - -private: - QPlainTextEdit* qplaintextedit = nullptr; -}; - -#include "spdlog/details/null_mutex.h" -#include -using qtextedit_sink_mt = qtextedit_sink; -using qtextedit_sink_st = qtextedit_sink; - -using qplaintextedit_sink_mt = qplaintextedit_sink; -using qplaintextedit_sink_st = qplaintextedit_sink; - -} // namespace sinks - -// -// Factory functions -// -template -inline std::shared_ptr -qtextedit_logger_mt(const std::string &logger_name, - QTextEdit *qtextedit = nullptr) { - return Factory::template create(logger_name, - qtextedit); -} - -template -inline std::shared_ptr -qtextedit_logger_st(const std::string &logger_name, - QTextEdit *qtextedit = nullptr) { - return Factory::template create(logger_name, - qtextedit); -} - -template -inline std::shared_ptr -qplaintextedit_logger_mt(const std::string &logger_name, - QPlainTextEdit *qplaintextedit = nullptr) { - return Factory::template create(logger_name, - qplaintextedit); -} - -template -inline std::shared_ptr -qplaintextedit_logger_st(const std::string &logger_name, - QPlainTextEdit *qplaintextedit = nullptr) { - return Factory::template create(logger_name, - qplaintextedit); -} -} // namespace spdlog From c07b3aeef9a5818ba0113c069dd9dd135e8a42f0 Mon Sep 17 00:00:00 2001 From: Muhammed Galib Uludag Date: Tue, 27 Jul 2021 23:05:24 +0300 Subject: [PATCH 3/5] Simplified Qt sinks Removed private class that derived from QObject --- include/spdlog/sinks/qt_sinks.h | 329 +++++++++++++------------------- 1 file changed, 129 insertions(+), 200 deletions(-) diff --git a/include/spdlog/sinks/qt_sinks.h b/include/spdlog/sinks/qt_sinks.h index 5a9a83da7..1389b87b8 100644 --- a/include/spdlog/sinks/qt_sinks.h +++ b/include/spdlog/sinks/qt_sinks.h @@ -1,200 +1,129 @@ -// Copyright(c) 2015-present, Gabi Melman, mguludag and spdlog contributors. -// Distributed under the MIT License (http://opensource.org/licenses/MIT) - -#pragma once - -// -// Custom sink for QPlainTextEdit or QTextEdit and its children(QTextBrowser... -// etc) Building and using requires Qt library. -// - -#include "spdlog/common.h" -#include "spdlog/details/log_msg.h" -#include "spdlog/details/synchronous_factory.h" -#include "spdlog/sinks/base_sink.h" - -#include -#include -#include - -namespace _spdlog_p { -namespace _sinks_p { -// -// Private class for QTextEdit and its derivatives -// -class qtextedit_sink_p : public QObject -{ - Q_OBJECT -public: - qtextedit_sink_p(QTextEdit *textedit = nullptr) - { - if (textedit != nullptr) - { - textedit_ = textedit; - connect(this, &qtextedit_sink_p::append_text, textedit_, &QTextEdit::append); - } - } - - ~qtextedit_sink_p() {} - - void append(const spdlog::string_view_t &str) - { - emit append_text(QString::fromUtf8(str.data(), static_cast(str.size() - 2))); - } - -signals: - void append_text(const QString &); - -private: - QTextEdit *textedit_ = nullptr; -}; - -// -// Private class for QPlainTextEdit -// -class qplaintextedit_sink_p : public QObject -{ - Q_OBJECT -public: - qplaintextedit_sink_p(QPlainTextEdit *textedit = nullptr) - { - if (textedit != nullptr) - { - textedit_ = textedit; - connect(this, &qplaintextedit_sink_p::append_text, textedit_, &QPlainTextEdit::appendPlainText); - } - } - - ~qplaintextedit_sink_p() {} - - void append(const spdlog::string_view_t &str) - { - emit append_text(QString::fromUtf8(str.data(), static_cast(str.size() - 2))); - } - -signals: - void append_text(const QString &); - -private: - QPlainTextEdit *textedit_ = nullptr; -}; -} // namespace _sinks_p -} // namespace _spdlog_p - -// -// qtextedit_sink class -// -namespace spdlog { -namespace sinks { -template -class qtextedit_sink : public base_sink -{ -public: - qtextedit_sink(QTextEdit *textedit = nullptr) - { - if (textedit != nullptr) - { - textedit_p = std::make_shared<_spdlog_p::_sinks_p::qtextedit_sink_p>(textedit); - } - else - { - throw spdlog_ex("Error opening QTextEdit"); - } - } - - ~qtextedit_sink() - { - flush_(); - } - -protected: - void sink_it_(const details::log_msg &msg) override - { - memory_buf_t formatted; - base_sink::formatter_->format(msg, formatted); - string_view_t str_v = string_view_t(formatted.data(), formatted.size()); - textedit_p->append(str_v); - } - - void flush_() override {} - -private: - std::shared_ptr<_spdlog_p::_sinks_p::qtextedit_sink_p> textedit_p = nullptr; -}; - -// -// qplaintextedit_sink class -// -template -class qplaintextedit_sink : public base_sink -{ -public: - qplaintextedit_sink(QPlainTextEdit *textedit = nullptr) - { - if (textedit != nullptr) - { - textedit_p = std::make_shared<_spdlog_p::_sinks_p::qplaintextedit_sink_p>(textedit); - } - else - { - throw spdlog_ex("Error opening QPlainTextEdit"); - } - } - - ~qplaintextedit_sink() - { - flush_(); - } - -protected: - void sink_it_(const details::log_msg &msg) override - { - memory_buf_t formatted; - base_sink::formatter_->format(msg, formatted); - string_view_t str_v = string_view_t(formatted.data(), formatted.size()); - textedit_p->append(str_v); - } - - void flush_() override {} - -private: - std::shared_ptr<_spdlog_p::_sinks_p::qplaintextedit_sink_p> textedit_p = nullptr; -}; - -#include "spdlog/details/null_mutex.h" -#include -using qtextedit_sink_mt = qtextedit_sink; -using qtextedit_sink_st = qtextedit_sink; - -using qplaintextedit_sink_mt = qplaintextedit_sink; -using qplaintextedit_sink_st = qplaintextedit_sink; - -} // namespace sinks - -// -// Factory functions -// -template -inline std::shared_ptr qtextedit_logger_mt(const std::string &logger_name, QTextEdit *qtextedit = nullptr) -{ - return Factory::template create(logger_name, qtextedit); -} - -template -inline std::shared_ptr qtextedit_logger_st(const std::string &logger_name, QTextEdit *qtextedit = nullptr) -{ - return Factory::template create(logger_name, qtextedit); -} - -template -inline std::shared_ptr qplaintextedit_logger_mt(const std::string &logger_name, QPlainTextEdit *qplaintextedit = nullptr) -{ - return Factory::template create(logger_name, qplaintextedit); -} - -template -inline std::shared_ptr qplaintextedit_logger_st(const std::string &logger_name, QPlainTextEdit *qplaintextedit = nullptr) -{ - return Factory::template create(logger_name, qplaintextedit); -} -} // namespace spdlog +// Copyright(c) 2015-present, Gabi Melman, mguludag and spdlog contributors. +// Distributed under the MIT License (http://opensource.org/licenses/MIT) + +#pragma once + +// +// Custom sink for QPlainTextEdit or QTextEdit and its childs(QTextBrowser... etc) +// Building and using requires Qt library. +// + +#include "spdlog/common.h" +#include "spdlog/details/log_msg.h" +#include "spdlog/details/synchronous_factory.h" +#include "spdlog/sinks/base_sink.h" + +#include +#include + +// +// qtextedit_sink class +// +namespace spdlog { +namespace sinks { +template +class qtextedit_sink : public base_sink { +public: + qtextedit_sink(QTextEdit *textedit = nullptr) { + if (textedit != nullptr) { + qtextedit = textedit; + } else { + throw spdlog_ex("Error opening QTextEdit"); + } + } + + ~qtextedit_sink() { flush_(); } + +protected: + void sink_it_(const details::log_msg &msg) override { + if(qtextedit == nullptr) + return; + memory_buf_t formatted; + base_sink::formatter_->format(msg, formatted); + string_view_t str = string_view_t(formatted.data(), formatted.size()); + QMetaObject::invokeMethod(qtextedit,"append", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size() - 2)))); + } + + void flush_() override {} + +private: + QTextEdit* qtextedit = nullptr; +}; + +// +// qplaintextedit_sink class +// +template +class qplaintextedit_sink : public base_sink { +public: + qplaintextedit_sink(QPlainTextEdit *textedit = nullptr) { + if (textedit != nullptr) { + qplaintextedit = textedit; + } else { + throw spdlog_ex("Error opening QPlainTextEdit"); + } + } + + ~qplaintextedit_sink() { flush_(); } + +protected: + void sink_it_(const details::log_msg &msg) override { + if(qplaintextedit == nullptr) + return; + memory_buf_t formatted; + base_sink::formatter_->format(msg, formatted); + string_view_t str = string_view_t(formatted.data(), formatted.size()); + QMetaObject::invokeMethod(qplaintextedit, "appendPlainText", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size() - 2)))); + } + + void flush_() override {} + +private: + QPlainTextEdit* qplaintextedit = nullptr; +}; + +#include "spdlog/details/null_mutex.h" +#include +using qtextedit_sink_mt = qtextedit_sink; +using qtextedit_sink_st = qtextedit_sink; + +using qplaintextedit_sink_mt = qplaintextedit_sink; +using qplaintextedit_sink_st = qplaintextedit_sink; + +} // namespace sinks + +// +// Factory functions +// +template +inline std::shared_ptr +qtextedit_logger_mt(const std::string &logger_name, + QTextEdit *qtextedit = nullptr) { + return Factory::template create(logger_name, + qtextedit); +} + +template +inline std::shared_ptr +qtextedit_logger_st(const std::string &logger_name, + QTextEdit *qtextedit = nullptr) { + return Factory::template create(logger_name, + qtextedit); +} + +template +inline std::shared_ptr +qplaintextedit_logger_mt(const std::string &logger_name, + QPlainTextEdit *qplaintextedit = nullptr) { + return Factory::template create(logger_name, + qplaintextedit); +} + +template +inline std::shared_ptr +qplaintextedit_logger_st(const std::string &logger_name, + QPlainTextEdit *qplaintextedit = nullptr) { + return Factory::template create(logger_name, + qplaintextedit); +} +} // namespace spdlog From 362fdc6ceb648f83f4df8e10b7c3a45faed08c97 Mon Sep 17 00:00:00 2001 From: Muhammed Galib Uludag Date: Tue, 27 Jul 2021 23:42:00 +0300 Subject: [PATCH 4/5] trim newline chars instead of remove 2 chars --- include/spdlog/sinks/qt_sinks.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/spdlog/sinks/qt_sinks.h b/include/spdlog/sinks/qt_sinks.h index 1389b87b8..8cddec72d 100644 --- a/include/spdlog/sinks/qt_sinks.h +++ b/include/spdlog/sinks/qt_sinks.h @@ -41,7 +41,7 @@ class qtextedit_sink : public base_sink { memory_buf_t formatted; base_sink::formatter_->format(msg, formatted); string_view_t str = string_view_t(formatted.data(), formatted.size()); - QMetaObject::invokeMethod(qtextedit,"append", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size() - 2)))); + QMetaObject::invokeMethod(qtextedit,"append", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size())).trimmed())); } void flush_() override {} @@ -73,7 +73,7 @@ class qplaintextedit_sink : public base_sink { memory_buf_t formatted; base_sink::formatter_->format(msg, formatted); string_view_t str = string_view_t(formatted.data(), formatted.size()); - QMetaObject::invokeMethod(qplaintextedit, "appendPlainText", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size() - 2)))); + QMetaObject::invokeMethod(qplaintextedit, "appendPlainText", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size())).trimmed())); } void flush_() override {} From 2ccba49b0169091806360ecd3abc8e1ba5f4936d Mon Sep 17 00:00:00 2001 From: Muhammed Galib Uludag Date: Wed, 28 Jul 2021 00:06:12 +0300 Subject: [PATCH 5/5] removed nullptr checks and renamed member vars --- include/spdlog/sinks/qt_sinks.h | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/include/spdlog/sinks/qt_sinks.h b/include/spdlog/sinks/qt_sinks.h index 8cddec72d..50d390842 100644 --- a/include/spdlog/sinks/qt_sinks.h +++ b/include/spdlog/sinks/qt_sinks.h @@ -26,7 +26,7 @@ class qtextedit_sink : public base_sink { public: qtextedit_sink(QTextEdit *textedit = nullptr) { if (textedit != nullptr) { - qtextedit = textedit; + qtextedit_ = textedit; } else { throw spdlog_ex("Error opening QTextEdit"); } @@ -36,18 +36,16 @@ class qtextedit_sink : public base_sink { protected: void sink_it_(const details::log_msg &msg) override { - if(qtextedit == nullptr) - return; memory_buf_t formatted; base_sink::formatter_->format(msg, formatted); string_view_t str = string_view_t(formatted.data(), formatted.size()); - QMetaObject::invokeMethod(qtextedit,"append", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size())).trimmed())); + QMetaObject::invokeMethod(qtextedit_,"append", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size())).trimmed())); } void flush_() override {} private: - QTextEdit* qtextedit = nullptr; + QTextEdit* qtextedit_ = nullptr; }; // @@ -58,7 +56,7 @@ class qplaintextedit_sink : public base_sink { public: qplaintextedit_sink(QPlainTextEdit *textedit = nullptr) { if (textedit != nullptr) { - qplaintextedit = textedit; + qplaintextedit_ = textedit; } else { throw spdlog_ex("Error opening QPlainTextEdit"); } @@ -68,18 +66,16 @@ class qplaintextedit_sink : public base_sink { protected: void sink_it_(const details::log_msg &msg) override { - if(qplaintextedit == nullptr) - return; memory_buf_t formatted; base_sink::formatter_->format(msg, formatted); string_view_t str = string_view_t(formatted.data(), formatted.size()); - QMetaObject::invokeMethod(qplaintextedit, "appendPlainText", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size())).trimmed())); + QMetaObject::invokeMethod(qplaintextedit_, "appendPlainText", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size())).trimmed())); } void flush_() override {} private: - QPlainTextEdit* qplaintextedit = nullptr; + QPlainTextEdit* qplaintextedit_ = nullptr; }; #include "spdlog/details/null_mutex.h"