mirror of
https://github.com/Sani7/remote-ui.git
synced 2026-10-26 21:51:13 +01:00
client logger
move over to qt signals that are processed in mainwindow
This commit is contained in:
@@ -84,7 +84,7 @@ if (NOT EMSCRIPTEN)
|
|||||||
# Create a library for each .cpp file
|
# Create a library for each .cpp file
|
||||||
add_library(ui_${LIB_NAME} SHARED ${CMAKE_CURRENT_SOURCE_DIR}/simulators/${LIB_NAME}.hpp ${CMAKE_CURRENT_SOURCE_DIR}/simulators/${LIB_NAME}.cpp ${CMAKE_CURRENT_SOURCE_DIR}/simulators/${LIB_NAME}.ui)
|
add_library(ui_${LIB_NAME} SHARED ${CMAKE_CURRENT_SOURCE_DIR}/simulators/${LIB_NAME}.hpp ${CMAKE_CURRENT_SOURCE_DIR}/simulators/${LIB_NAME}.cpp ${CMAKE_CURRENT_SOURCE_DIR}/simulators/${LIB_NAME}.ui)
|
||||||
target_link_libraries(ui_${LIB_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Widgets magic_enum::magic_enum nlohmann_json::nlohmann_json)
|
target_link_libraries(ui_${LIB_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Widgets magic_enum::magic_enum nlohmann_json::nlohmann_json)
|
||||||
target_include_directories(ui_${LIB_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR}/ui ${CMAKE_SOURCE_DIR}/external/qwt/src ${CMAKE_SOURCE_DIR}/external/spdlog/include ${PROJECT_BINARY_DIR}/)
|
target_include_directories(ui_${LIB_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR}/ui ${CMAKE_SOURCE_DIR}/external/qwt/src ${PROJECT_BINARY_DIR}/)
|
||||||
|
|
||||||
set_target_properties(
|
set_target_properties(
|
||||||
ui_${LIB_NAME}
|
ui_${LIB_NAME}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
#include <magic_enum/magic_enum.hpp>
|
#include <magic_enum/magic_enum.hpp>
|
||||||
|
#include <spdlog/spdlog.h>
|
||||||
|
|
||||||
typedef UI_base *(*Get_UI)(Web_socket_wrapper *, QWidget *);
|
typedef UI_base *(*Get_UI)(Web_socket_wrapper *, QWidget *);
|
||||||
|
|
||||||
@@ -31,6 +32,11 @@ MainWindow::MainWindow(QUrl ws_url, QString sim, QWidget *parent)
|
|||||||
}
|
}
|
||||||
auto widget = loaded_ui(m_web_socket.get(), this);
|
auto widget = loaded_ui(m_web_socket.get(), this);
|
||||||
m_sims.insert(std::make_pair(widget->name(), widget));
|
m_sims.insert(std::make_pair(widget->name(), widget));
|
||||||
|
connect(widget, &UI_base::log_signal, this,
|
||||||
|
[](const char *filename_in, int line_in, const char *funcname_in, int level, QString msg) {
|
||||||
|
spdlog::default_logger_raw()->log(spdlog::source_loc{filename_in, line_in, funcname_in},
|
||||||
|
(spdlog::level::level_enum)level, msg.toStdString());
|
||||||
|
});
|
||||||
lib.unload();
|
lib.unload();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+24
-24
@@ -36,7 +36,7 @@ void UI_base::showEvent(QShowEvent *event)
|
|||||||
{
|
{
|
||||||
QWidget::showEvent(event);
|
QWidget::showEvent(event);
|
||||||
setWindowTitle(m_name);
|
setWindowTitle(m_name);
|
||||||
SPDLOG_DEBUG("Connecting callbacks");
|
LOG_DEBUG("Connecting callbacks");
|
||||||
m_first_load = true;
|
m_first_load = true;
|
||||||
|
|
||||||
connect(m_web_socket, &Web_socket_wrapper::on_command_cb, this, [=, this](json &j) { on_cmd_cb(j); });
|
connect(m_web_socket, &Web_socket_wrapper::on_command_cb, this, [=, this](json &j) { on_cmd_cb(j); });
|
||||||
@@ -54,7 +54,7 @@ void UI_base::closeEvent(QCloseEvent *event)
|
|||||||
QWidget::closeEvent(event);
|
QWidget::closeEvent(event);
|
||||||
if (m_open == true)
|
if (m_open == true)
|
||||||
{
|
{
|
||||||
SPDLOG_DEBUG("Disconnecting callbacks");
|
LOG_DEBUG("Disconnecting callbacks");
|
||||||
m_timer_update->stop();
|
m_timer_update->stop();
|
||||||
disconnect(m_web_socket, nullptr, nullptr, nullptr);
|
disconnect(m_web_socket, nullptr, nullptr, nullptr);
|
||||||
m_open = false;
|
m_open = false;
|
||||||
@@ -109,7 +109,7 @@ void UI_base::UI_item_parser(json &input)
|
|||||||
auto widget = id_to_ui(ui_item.at("id"));
|
auto widget = id_to_ui(ui_item.at("id"));
|
||||||
if (widget == nullptr)
|
if (widget == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("id_to_ui returned null on {}", QString::number((size_t)ui_item.at("id")).toStdString());
|
LOG_WARN(QString("id_to_ui returned null on %0").arg((size_t)ui_item.at("id")));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,7 +216,7 @@ void UI_base::process_ui_label(json &ui_item, QWidget *widget)
|
|||||||
auto label = qobject_cast<QLabel *>(widget);
|
auto label = qobject_cast<QLabel *>(widget);
|
||||||
if (label == nullptr)
|
if (label == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type QLabel");
|
LOG_WARN("widget is not of type QLabel");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,7 +247,7 @@ void UI_base::process_ui_slider(json &ui_item, QWidget *widget)
|
|||||||
auto slider = qobject_cast<QwtSlider *>(widget);
|
auto slider = qobject_cast<QwtSlider *>(widget);
|
||||||
if (slider == nullptr)
|
if (slider == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type QwtSlider");
|
LOG_WARN("widget is not of type QwtSlider");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,7 +286,7 @@ void UI_base::process_ui_dial(json &ui_item, QWidget *widget)
|
|||||||
auto dial = qobject_cast<QwtDial *>(widget);
|
auto dial = qobject_cast<QwtDial *>(widget);
|
||||||
if (dial == nullptr)
|
if (dial == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type QwtDial");
|
LOG_WARN("widget is not of type QwtDial");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -318,7 +318,7 @@ void UI_base::process_ui_thermo(json &ui_item, QWidget *widget)
|
|||||||
auto thermo = qobject_cast<QwtThermo *>(widget);
|
auto thermo = qobject_cast<QwtThermo *>(widget);
|
||||||
if (thermo == nullptr)
|
if (thermo == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type QwtThermo");
|
LOG_WARN("widget is not of type QwtThermo");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -348,7 +348,7 @@ void UI_base::process_ui_textbox(json &ui_item, QWidget *widget)
|
|||||||
auto line_edit = qobject_cast<QLineEdit *>(widget);
|
auto line_edit = qobject_cast<QLineEdit *>(widget);
|
||||||
if (line_edit == nullptr)
|
if (line_edit == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type QLineEdit");
|
LOG_WARN("widget is not of type QLineEdit");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -381,7 +381,7 @@ void UI_base::process_ui_combobox(json &ui_item, QWidget *widget)
|
|||||||
auto combobox = qobject_cast<QComboBox *>(widget);
|
auto combobox = qobject_cast<QComboBox *>(widget);
|
||||||
if (combobox == nullptr)
|
if (combobox == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type QComboBox");
|
LOG_WARN("widget is not of type QComboBox");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -413,7 +413,7 @@ void UI_base::process_ui_combobox(json &ui_item, QWidget *widget)
|
|||||||
|
|
||||||
void UI_base::process_ui_radiobutton(json &ui_item, QWidget *widget)
|
void UI_base::process_ui_radiobutton(json &ui_item, QWidget *widget)
|
||||||
{
|
{
|
||||||
SPDLOG_CRITICAL("Not implemented");
|
LOG_CRITICAL("Not implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
void UI_base::process_ui_checkbox(json &ui_item, QWidget *widget)
|
void UI_base::process_ui_checkbox(json &ui_item, QWidget *widget)
|
||||||
@@ -421,7 +421,7 @@ void UI_base::process_ui_checkbox(json &ui_item, QWidget *widget)
|
|||||||
auto checkbox = qobject_cast<QCheckBox *>(widget);
|
auto checkbox = qobject_cast<QCheckBox *>(widget);
|
||||||
if (checkbox == nullptr)
|
if (checkbox == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type QCheckbox");
|
LOG_WARN("widget is not of type QCheckbox");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -487,7 +487,7 @@ void UI_base::process_ui_button(json &ui_item, QWidget *widget)
|
|||||||
auto button = qobject_cast<QPushButton *>(widget);
|
auto button = qobject_cast<QPushButton *>(widget);
|
||||||
if (button == nullptr)
|
if (button == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type QPushButton");
|
LOG_WARN("widget is not of type QPushButton");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -547,7 +547,7 @@ void UI_base::process_ui_led(json &ui_item, QWidget *widget)
|
|||||||
auto led = qobject_cast<Led *>(widget);
|
auto led = qobject_cast<Led *>(widget);
|
||||||
if (led == nullptr)
|
if (led == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type led");
|
LOG_WARN("widget is not of type led");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -601,7 +601,7 @@ void UI_base::process_ui_spinbox(json &ui_item, QWidget *widget)
|
|||||||
auto spinbox = qobject_cast<QSpinBox *>(widget);
|
auto spinbox = qobject_cast<QSpinBox *>(widget);
|
||||||
if (spinbox == nullptr)
|
if (spinbox == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type QSpinBox");
|
LOG_WARN("widget is not of type QSpinBox");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -640,7 +640,7 @@ void UI_base::process_ui_double_spinbox(json &ui_item, QWidget *widget)
|
|||||||
auto spinbox = qobject_cast<QDoubleSpinBox *>(widget);
|
auto spinbox = qobject_cast<QDoubleSpinBox *>(widget);
|
||||||
if (spinbox == nullptr)
|
if (spinbox == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type QDoubleSpinBox");
|
LOG_WARN("widget is not of type QDoubleSpinBox");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -679,7 +679,7 @@ void UI_base::process_ui_hex_spinbox(json &ui_item, QWidget *widget)
|
|||||||
auto spinbox = qobject_cast<HexSpinBox *>(widget);
|
auto spinbox = qobject_cast<HexSpinBox *>(widget);
|
||||||
if (spinbox == nullptr)
|
if (spinbox == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type HexSpinBox");
|
LOG_WARN("widget is not of type HexSpinBox");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -718,13 +718,13 @@ void UI_base::process_ui_tab_widget(json &ui_item, QWidget *widget)
|
|||||||
auto tab_widget = qobject_cast<QTabWidget *>(widget);
|
auto tab_widget = qobject_cast<QTabWidget *>(widget);
|
||||||
if (tab_widget == nullptr)
|
if (tab_widget == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type QTabWidget");
|
LOG_WARN("widget is not of type QTabWidget");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tab_widget->count() != ui_item.at("tab_names").size())
|
if (tab_widget->count() != ui_item.at("tab_names").size())
|
||||||
{
|
{
|
||||||
SPDLOG_ERROR("QTabWidget has not the same amount of tabs as the server");
|
LOG_ERROR("QTabWidget has not the same amount of tabs as the server");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -765,13 +765,13 @@ void UI_base::process_ui_stacked_widget(json &ui_item, QWidget *widget)
|
|||||||
auto stacked_widget = qobject_cast<QStackedWidget *>(widget);
|
auto stacked_widget = qobject_cast<QStackedWidget *>(widget);
|
||||||
if (stacked_widget == nullptr)
|
if (stacked_widget == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type QStackedWidget");
|
LOG_WARN("widget is not of type QStackedWidget");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stacked_widget->count() != ui_item.at("tab_count"))
|
if (stacked_widget->count() != ui_item.at("tab_count"))
|
||||||
{
|
{
|
||||||
SPDLOG_ERROR("QStackedWidget has not the same amount of tabs as the server");
|
LOG_ERROR("QStackedWidget has not the same amount of tabs as the server");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -799,7 +799,7 @@ void UI_base::process_ui_status_bar(json &ui_item, QWidget *widget)
|
|||||||
auto status_bar = qobject_cast<QStatusBar *>(widget);
|
auto status_bar = qobject_cast<QStatusBar *>(widget);
|
||||||
if (status_bar == nullptr)
|
if (status_bar == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type QStatusBar");
|
LOG_WARN("widget is not of type QStatusBar");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -814,7 +814,7 @@ void UI_base::process_ui_plot(json &ui_item, QWidget *widget)
|
|||||||
auto plot = qobject_cast<Plot_wrapper *>(widget);
|
auto plot = qobject_cast<Plot_wrapper *>(widget);
|
||||||
if (plot == nullptr)
|
if (plot == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type QwtPlot");
|
LOG_WARN("widget is not of type QwtPlot");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -876,7 +876,7 @@ void UI_base::process_ui_table(json &ui_item, QWidget *widget)
|
|||||||
auto table = qobject_cast<QTableWidget *>(widget);
|
auto table = qobject_cast<QTableWidget *>(widget);
|
||||||
if (table == nullptr)
|
if (table == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type QTableWidget");
|
LOG_WARN("widget is not of type QTableWidget");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -947,7 +947,7 @@ void UI_base::process_ui_can(json &ui_item, QWidget *widget)
|
|||||||
auto can_ui = qobject_cast<Can_Transceive *>(widget);
|
auto can_ui = qobject_cast<Can_Transceive *>(widget);
|
||||||
if (can_ui == nullptr)
|
if (can_ui == nullptr)
|
||||||
{
|
{
|
||||||
SPDLOG_WARN("widget is not of type led");
|
LOG_WARN("widget is not of type led");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+22
-1
@@ -1,5 +1,4 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "spdlog/spdlog.h"
|
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
@@ -18,6 +17,14 @@ using json = nlohmann::json;
|
|||||||
return new client(api, parent); \
|
return new client(api, parent); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define LOG_SRC_LOC(level, msg) emit log_signal(__FILE__, __LINE__, __FUNCTION__, (int)level, msg)
|
||||||
|
#define LOG_TRACE(msg) LOG_SRC_LOC(Log_level_enum::trace, msg)
|
||||||
|
#define LOG_DEBUG(msg) LOG_SRC_LOC(Log_level_enum::debug, msg)
|
||||||
|
#define LOG_INFO(msg) LOG_SRC_LOC(Log_level_enum::info, msg)
|
||||||
|
#define LOG_WARN(msg) LOG_SRC_LOC(Log_level_enum::warn, msg)
|
||||||
|
#define LOG_ERROR(msg) LOG_SRC_LOC(Log_level_enum::err, msg)
|
||||||
|
#define LOG_CRITICAL(msg) LOG_SRC_LOC(Log_level_enum::critical, msg)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Base class for client UIs
|
* @brief Base class for client UIs
|
||||||
*/
|
*/
|
||||||
@@ -25,6 +32,17 @@ class UI_base : public QMainWindow
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
enum class Log_level_enum : int
|
||||||
|
{
|
||||||
|
trace,
|
||||||
|
debug,
|
||||||
|
info,
|
||||||
|
warn,
|
||||||
|
err,
|
||||||
|
critical,
|
||||||
|
off,
|
||||||
|
n_levels
|
||||||
|
};
|
||||||
/**
|
/**
|
||||||
* @brief Construct a new ui base object
|
* @brief Construct a new ui base object
|
||||||
*
|
*
|
||||||
@@ -320,6 +338,9 @@ class UI_base : public QMainWindow
|
|||||||
*/
|
*/
|
||||||
void closeEvent(QCloseEvent *event) override;
|
void closeEvent(QCloseEvent *event) override;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void log_signal(const char *filename_in, int line_in, const char *funcname_in, int level, QString msg);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Web_socket_wrapper *m_web_socket;
|
Web_socket_wrapper *m_web_socket;
|
||||||
QString m_name;
|
QString m_name;
|
||||||
|
|||||||
Reference in New Issue
Block a user