diff --git a/client/simulator_base.cpp b/client/simulator_base.cpp index c348141..1794d71 100644 --- a/client/simulator_base.cpp +++ b/client/simulator_base.cpp @@ -120,11 +120,16 @@ void Simulator_base::UI_item_parser(json &input) process_ui_combobox(uiItem); continue; } - if (uiItem["type"] == "UIRadioButton") + if (uiItem["type"] == "UI_RadioButton") { process_ui_radiobutton(uiItem); continue; } + if (uiItem["type"] == "UI_checkbox") + { + process_ui_checkbox(uiItem); + continue; + } if (uiItem["type"] == "UI_can") { process_ui_can(uiItem); @@ -318,6 +323,73 @@ void Simulator_base::process_ui_radiobutton(json &uiItem) SPDLOG_CRITICAL("Not implemented"); } +void Simulator_base::process_ui_checkbox(json &uiItem) +{ + QWidget *widget = id_to_ui(uiItem["id"]); + if (widget == nullptr) + { + SPDLOG_WARN("id_to_ui returned null on {}", QString::number((size_t)uiItem["id"]).toStdString()); + return; + } + + auto checkbox = qobject_cast(widget); + if (checkbox == nullptr) + { + SPDLOG_WARN("widget is not of type QCheckbox"); + return; + } + + QColor bg_color = QColor(QString::fromStdString(uiItem["bg_color"])); + QColor fg_color = QColor(QString::fromStdString(uiItem["fg_color"])); + QString text = QString::fromStdString(uiItem["text"]); + bool enabled = uiItem["enabled"]; + bool checked = uiItem["checked"]; + + if (checkbox->isChecked() != checked) + { + checkbox->setChecked(checked); + } + + if (checkbox->text() != text) + { + checkbox->setText(text); + } + + if (checkbox->isEnabled() != enabled) + { + checkbox->setEnabled(enabled); + } + + if (bg_color == QColor(0x83, 0x91, 0x92)) + { + reset_widget_color(checkbox); + return; + } + + if (bg_color == QColor(0xFF, 0x00, 0x00)) + { + set_widget_color(checkbox, QString("black"), QString("darkred")); + return; + } + + if (bg_color == QColor(0x00, 0xFF, 0x00)) + { + set_widget_color(checkbox, QString("white"), QString("darkgreen")); + return; + } + + if (bg_color == QColor(0xFF8800)) + { + set_widget_color(checkbox, QString("darkred"), QString("darkorange")); + return; + } + + if (bg_color != widget_bg_color(checkbox) || fg_color != widget_color(checkbox)) + { + set_widget_color(checkbox, fg_color, bg_color); + } +} + void Simulator_base::process_ui_button(json &uiItem) { // TODO: fix bgcolor and color @@ -467,6 +539,7 @@ void Simulator_base::setup_ui_item(QWidget *item, size_t index) { setup_button(item, index); setup_combobox(item, index); + setup_checkbox(item, index); setup_dial(item, index); setup_slider(item, index); setup_can_ui(item, index); @@ -492,6 +565,17 @@ void Simulator_base::setup_combobox(QWidget *item, size_t index) }); } +void Simulator_base::setup_checkbox(QWidget *item, size_t index) +{ + QCheckBox *checkbox = qobject_cast(item); + if (checkbox == nullptr) + return; + + connect(checkbox, &QCheckBox::clicked, this, [=, this] { + m_web_socket->send_event(Web_socket_wrapper::Event::clicked, index); + }); +} + void Simulator_base::setup_dial(QWidget *item, size_t index) { QwtDial *dial = qobject_cast(item); diff --git a/client/simulator_base.h b/client/simulator_base.h index f070c80..97eae5f 100644 --- a/client/simulator_base.h +++ b/client/simulator_base.h @@ -42,6 +42,7 @@ class Simulator_base : public QMainWindow virtual void process_ui_textbox(json &uiItem); virtual void process_ui_combobox(json &uiItem); virtual void process_ui_radiobutton(json &uiItem); + virtual void process_ui_checkbox(json &uiItem); virtual void process_ui_button(json &uiItem); virtual void process_ui_led(json &uiItem); virtual void process_ui_can(json &uiItem); @@ -49,6 +50,7 @@ class Simulator_base : public QMainWindow void setup_ui_item(QWidget *item, size_t index); void setup_button(QWidget *item, size_t index); void setup_combobox(QWidget *item, size_t index); + void setup_checkbox(QWidget *item, size_t index); void setup_dial(QWidget *item, size_t index); void setup_slider(QWidget *item, size_t index); void setup_can_ui(QWidget *item, size_t index);