Add spinboxes
This commit is contained in:
2026-02-14 14:31:11 +01:00
parent ce9c88ad04
commit 0854a6ba7e
11 changed files with 382 additions and 46 deletions
+129
View File
@@ -147,6 +147,21 @@ void Simulator_base::UI_item_parser(json &input)
process_ui_checkbox(ui_item, widget);
continue;
}
if (ui_item["type"] == "ui_spinbox")
{
process_ui_spinbox(ui_item, widget);
continue;
}
if (ui_item["type"] == "ui_double_spinbox")
{
process_ui_double_spinbox(ui_item, widget);
continue;
}
if (ui_item["type"] == "ui_hex_spinbox")
{
process_ui_hex_spinbox(ui_item, widget);
continue;
}
if (ui_item["type"] == "ui_plot")
{
process_ui_plot(ui_item, widget);
@@ -480,6 +495,87 @@ void Simulator_base::process_ui_led(json &ui_item, QWidget* widget)
}
}
void Simulator_base::process_ui_spinbox(json &ui_item, QWidget* widget)
{
auto spinbox = qobject_cast<QSpinBox *>(widget);
if (spinbox == nullptr)
{
SPDLOG_WARN("widget is not of type QSpinBox");
return;
}
double min = ui_item["min"];
double max = ui_item["max"];
double value = ui_item["value"];
if (min != spinbox->minimum())
{
spinbox->setMinimum(min);
}
if (max != spinbox->maximum())
{
spinbox->setMaximum(max);
}
if (value != spinbox->value())
{
spinbox->setValue((int)value);
}
}
void Simulator_base::process_ui_double_spinbox(json &ui_item, QWidget* widget)
{
auto spinbox = qobject_cast<QDoubleSpinBox *>(widget);
if (spinbox == nullptr)
{
SPDLOG_WARN("widget is not of type QDoubleSpinBox");
return;
}
double min = ui_item["min"];
double max = ui_item["max"];
double value = ui_item["value"];
if (min != spinbox->minimum())
{
spinbox->setMinimum(min);
}
if (max != spinbox->maximum())
{
spinbox->setMaximum(max);
}
if (value != spinbox->value())
{
spinbox->setValue(value);
}
}
void Simulator_base::process_ui_hex_spinbox(json &ui_item, QWidget* widget)
{
auto spinbox = qobject_cast<HexSpinBox *>(widget);
if (spinbox == nullptr)
{
SPDLOG_WARN("widget is not of type HexSpinBox");
return;
}
double min = ui_item["min"];
double max = ui_item["max"];
double value = ui_item["value"];
if (min != spinbox->minimum())
{
spinbox->setMinimum(min);
}
if (max != spinbox->maximum())
{
spinbox->setMaximum(max);
}
if (value != spinbox->value())
{
spinbox->setValue((int)value);
}
}
void Simulator_base::process_ui_plot(json &ui_item, QWidget* widget)
{
auto plot = qobject_cast<Plot_wrapper *>(widget);
@@ -614,6 +710,9 @@ void Simulator_base::setup_ui_item(QWidget *item, size_t index)
setup_checkbox(item, index);
setup_dial(item, index);
setup_slider(item, index);
setup_spinbox(item, index);
setup_double_spinbox(item, index);
setup_hex_spinbox(item, index);
setup_qwtplot(item, index);
setup_can_ui(item, index);
}
@@ -667,6 +766,36 @@ void Simulator_base::setup_slider(QWidget *item, size_t index)
[=, this] { m_web_socket->send_event(Web_socket_wrapper::Event::value_changed, index, slider->value()); });
}
void Simulator_base::setup_spinbox(QWidget *item, size_t index)
{
QSpinBox *spinbox = qobject_cast<QSpinBox *>(item);
if (spinbox == nullptr)
return;
connect(spinbox, &QSpinBox::valueChanged, this,
[=, this](int value) { m_web_socket->send_event(Web_socket_wrapper::Event::value_changed, index, (double)value); });
}
void Simulator_base::setup_double_spinbox(QWidget *item, size_t index)
{
QDoubleSpinBox *spinbox = qobject_cast<QDoubleSpinBox *>(item);
if (spinbox == nullptr)
return;
connect(spinbox, &QDoubleSpinBox::valueChanged, this,
[=, this](double value) { m_web_socket->send_event(Web_socket_wrapper::Event::value_changed, index, value); });
}
void Simulator_base::setup_hex_spinbox(QWidget *item, size_t index)
{
HexSpinBox *spinbox = qobject_cast<HexSpinBox *>(item);
if (spinbox == nullptr)
return;
connect(spinbox, &HexSpinBox::valueChanged, this,
[=, this](int value) { m_web_socket->send_event(Web_socket_wrapper::Event::value_changed, index, (double)value); });
}
void Simulator_base::setup_qwtplot(QWidget *item, size_t index)
{
auto *plot = qobject_cast<QwtPlot *>(item);
+6
View File
@@ -48,6 +48,9 @@ class Simulator_base : public QMainWindow
virtual void process_ui_checkbox(json &ui_item, QWidget* widget);
virtual void process_ui_button(json &ui_item, QWidget* widget);
virtual void process_ui_led(json &ui_item, QWidget* widget);
virtual void process_ui_spinbox(json &ui_item, QWidget* widget);
virtual void process_ui_double_spinbox(json &ui_item, QWidget* widget);
virtual void process_ui_hex_spinbox(json &ui_item, QWidget* widget);
virtual void process_ui_plot(json &ui_item, QWidget* widget);
virtual void process_ui_table(json &ui_item, QWidget* widget);
virtual void process_ui_can(json &ui_item, QWidget* widget);
@@ -58,6 +61,9 @@ class Simulator_base : public QMainWindow
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_spinbox(QWidget *item, size_t index);
void setup_double_spinbox(QWidget *item, size_t index);
void setup_hex_spinbox(QWidget *item, size_t index);
void setup_qwtplot(QWidget *item, size_t index);
void setup_can_ui(QWidget *item, size_t index);
+3
View File
@@ -18,6 +18,9 @@ Test_Sim::Test_Sim(Web_socket_wrapper *web_socket, QWidget *parent)
PUSH_UI_ITEM(checkBox);
PUSH_UI_ITEM(plot);
PUSH_UI_ITEM(table);
PUSH_UI_ITEM(spinBox);
PUSH_UI_ITEM(doubleSpinBox);
PUSH_UI_ITEM(hexSpinBox);
}
Test_Sim::~Test_Sim()
+59 -45
View File
@@ -15,24 +15,10 @@
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="4">
<widget class="QPushButton" name="button">
<item row="0" column="4">
<widget class="QLabel" name="label">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="Led" name="led">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>CheckBox</string>
<string>TextLabel</string>
</property>
</widget>
</item>
@@ -63,26 +49,35 @@
</item>
</layout>
</item>
<item row="0" column="4">
<widget class="QLabel" name="label">
<item row="3" column="4">
<widget class="QComboBox" name="combobox"/>
</item>
<item row="2" column="4">
<widget class="QPushButton" name="button">
<property name="text">
<string>TextLabel</string>
<string>PushButton</string>
</property>
</widget>
</item>
<item row="4" column="1">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="slider_label">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item>
<widget class="QwtSlider" name="slider"/>
</item>
</layout>
<item row="1" column="4">
<widget class="Led" name="led">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QTableWidget" name="table"/>
</item>
<item row="5" column="1">
<widget class="Plot_wrapper" name="plot">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
</widget>
</item>
<item row="4" column="2">
<layout class="QVBoxLayout" name="verticalLayout_2">
@@ -98,21 +93,35 @@
</item>
</layout>
</item>
<item row="3" column="4">
<widget class="QComboBox" name="combobox"/>
</item>
<item row="5" column="1">
<widget class="Plot_wrapper" name="plot">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
<item row="1" column="2">
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>CheckBox</string>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QTableWidget" name="table"/>
<item row="1" column="1">
<widget class="QSpinBox" name="spinBox"/>
</item>
<item row="4" column="1">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="slider_label">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item>
<widget class="QwtSlider" name="slider"/>
</item>
</layout>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="doubleSpinBox"/>
</item>
<item row="3" column="1">
<widget class="HexSpinBox" name="hexSpinBox"/>
</item>
</layout>
</widget>
@@ -155,6 +164,11 @@
<header>plot_wrapper.hpp</header>
<container>1</container>
</customwidget>
<customwidget>
<class>HexSpinBox</class>
<extends>QSpinBox</extends>
<header>hex_spinbox.hpp</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>