Merge branch 'v1.x' into v1.x

This commit is contained in:
Muhammed Galib Uludag 2021-07-28 00:48:48 +03:00 committed by GitHub
commit 43923cf038
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,125 +1,125 @@
// Copyright(c) 2015-present, Gabi Melman, mguludag and spdlog contributors. // Copyright(c) 2015-present, Gabi Melman, mguludag and spdlog contributors.
// Distributed under the MIT License (http://opensource.org/licenses/MIT) // Distributed under the MIT License (http://opensource.org/licenses/MIT)
#pragma once #pragma once
// //
// Custom sink for QPlainTextEdit or QTextEdit and its childs(QTextBrowser... etc) // Custom sink for QPlainTextEdit or QTextEdit and its childs(QTextBrowser... etc)
// Building and using requires Qt library. // Building and using requires Qt library.
// //
#include "spdlog/common.h" #include "spdlog/common.h"
#include "spdlog/details/log_msg.h" #include "spdlog/details/log_msg.h"
#include "spdlog/details/synchronous_factory.h" #include "spdlog/details/synchronous_factory.h"
#include "spdlog/sinks/base_sink.h" #include "spdlog/sinks/base_sink.h"
#include <QTextEdit> #include <QTextEdit>
#include <QPlainTextEdit> #include <QPlainTextEdit>
// //
// qtextedit_sink class // qtextedit_sink class
// //
namespace spdlog { namespace spdlog {
namespace sinks { namespace sinks {
template <typename Mutex> template <typename Mutex>
class qtextedit_sink : public base_sink<Mutex> { class qtextedit_sink : public base_sink<Mutex> {
public: public:
qtextedit_sink(QTextEdit *textedit = nullptr) { qtextedit_sink(QTextEdit *textedit = nullptr) {
if (textedit != nullptr) { if (textedit != nullptr) {
qtextedit_ = textedit; qtextedit_ = textedit;
} else { } else {
throw spdlog_ex("Error opening QTextEdit"); throw spdlog_ex("Error opening QTextEdit");
} }
} }
~qtextedit_sink() { flush_(); } ~qtextedit_sink() { flush_(); }
protected: protected:
void sink_it_(const details::log_msg &msg) override { void sink_it_(const details::log_msg &msg) override {
memory_buf_t formatted; memory_buf_t formatted;
base_sink<Mutex>::formatter_->format(msg, formatted); base_sink<Mutex>::formatter_->format(msg, formatted);
string_view_t str = string_view_t(formatted.data(), formatted.size()); 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<int>(str.size())).trimmed())); QMetaObject::invokeMethod(qtextedit_,"append", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast<int>(str.size())).trimmed()));
} }
void flush_() override {} void flush_() override {}
private: private:
QTextEdit* qtextedit_ = nullptr; QTextEdit* qtextedit_ = nullptr;
}; };
// //
// qplaintextedit_sink class // qplaintextedit_sink class
// //
template <typename Mutex> template <typename Mutex>
class qplaintextedit_sink : public base_sink<Mutex> { class qplaintextedit_sink : public base_sink<Mutex> {
public: public:
qplaintextedit_sink(QPlainTextEdit *textedit = nullptr) { qplaintextedit_sink(QPlainTextEdit *textedit = nullptr) {
if (textedit != nullptr) { if (textedit != nullptr) {
qplaintextedit_ = textedit; qplaintextedit_ = textedit;
} else { } else {
throw spdlog_ex("Error opening QPlainTextEdit"); throw spdlog_ex("Error opening QPlainTextEdit");
} }
} }
~qplaintextedit_sink() { flush_(); } ~qplaintextedit_sink() { flush_(); }
protected: protected:
void sink_it_(const details::log_msg &msg) override { void sink_it_(const details::log_msg &msg) override {
memory_buf_t formatted; memory_buf_t formatted;
base_sink<Mutex>::formatter_->format(msg, formatted); base_sink<Mutex>::formatter_->format(msg, formatted);
string_view_t str = string_view_t(formatted.data(), formatted.size()); 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<int>(str.size())).trimmed())); QMetaObject::invokeMethod(qplaintextedit_, "appendPlainText", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast<int>(str.size())).trimmed()));
} }
void flush_() override {} void flush_() override {}
private: private:
QPlainTextEdit* qplaintextedit_ = nullptr; QPlainTextEdit* qplaintextedit_ = nullptr;
}; };
#include "spdlog/details/null_mutex.h" #include "spdlog/details/null_mutex.h"
#include <mutex> #include <mutex>
using qtextedit_sink_mt = qtextedit_sink<std::mutex>; using qtextedit_sink_mt = qtextedit_sink<std::mutex>;
using qtextedit_sink_st = qtextedit_sink<spdlog::details::null_mutex>; using qtextedit_sink_st = qtextedit_sink<spdlog::details::null_mutex>;
using qplaintextedit_sink_mt = qplaintextedit_sink<std::mutex>; using qplaintextedit_sink_mt = qplaintextedit_sink<std::mutex>;
using qplaintextedit_sink_st = qplaintextedit_sink<spdlog::details::null_mutex>; using qplaintextedit_sink_st = qplaintextedit_sink<spdlog::details::null_mutex>;
} // namespace sinks } // namespace sinks
// //
// Factory functions // Factory functions
// //
template <typename Factory = spdlog::synchronous_factory> template <typename Factory = spdlog::synchronous_factory>
inline std::shared_ptr<logger> inline std::shared_ptr<logger>
qtextedit_logger_mt(const std::string &logger_name, qtextedit_logger_mt(const std::string &logger_name,
QTextEdit *qtextedit = nullptr) { QTextEdit *qtextedit = nullptr) {
return Factory::template create<sinks::qtextedit_sink_mt>(logger_name, return Factory::template create<sinks::qtextedit_sink_mt>(logger_name,
qtextedit); qtextedit);
} }
template <typename Factory = spdlog::synchronous_factory> template <typename Factory = spdlog::synchronous_factory>
inline std::shared_ptr<logger> inline std::shared_ptr<logger>
qtextedit_logger_st(const std::string &logger_name, qtextedit_logger_st(const std::string &logger_name,
QTextEdit *qtextedit = nullptr) { QTextEdit *qtextedit = nullptr) {
return Factory::template create<sinks::qtextedit_sink_st>(logger_name, return Factory::template create<sinks::qtextedit_sink_st>(logger_name,
qtextedit); qtextedit);
} }
template <typename Factory = spdlog::synchronous_factory> template <typename Factory = spdlog::synchronous_factory>
inline std::shared_ptr<logger> inline std::shared_ptr<logger>
qplaintextedit_logger_mt(const std::string &logger_name, qplaintextedit_logger_mt(const std::string &logger_name,
QPlainTextEdit *qplaintextedit = nullptr) { QPlainTextEdit *qplaintextedit = nullptr) {
return Factory::template create<sinks::qplaintextedit_sink_mt>(logger_name, return Factory::template create<sinks::qplaintextedit_sink_mt>(logger_name,
qplaintextedit); qplaintextedit);
} }
template <typename Factory = spdlog::synchronous_factory> template <typename Factory = spdlog::synchronous_factory>
inline std::shared_ptr<logger> inline std::shared_ptr<logger>
qplaintextedit_logger_st(const std::string &logger_name, qplaintextedit_logger_st(const std::string &logger_name,
QPlainTextEdit *qplaintextedit = nullptr) { QPlainTextEdit *qplaintextedit = nullptr) {
return Factory::template create<sinks::qplaintextedit_sink_st>(logger_name, return Factory::template create<sinks::qplaintextedit_sink_st>(logger_name,
qplaintextedit); qplaintextedit);
} }
} // namespace spdlog } // namespace spdlog