From 221cb519a28f9731736c2d9a81b9f95439d50141 Mon Sep 17 00:00:00 2001 From: Carl Philipp Klemm Date: Tue, 21 Apr 2026 17:17:56 +0200 Subject: [PATCH] Add groups to the sensors --- src/sensors/sensor.cpp | 26 ++++++++++++++++++++++++++ src/sensors/sensor.h | 10 +++++++--- src/ui/sensorlistwidget.cpp | 1 + src/ui/sensorsettingsdialog.cpp | 14 ++++++++++++++ src/ui/sensorsettingsdialog.h | 1 + src/ui/sensorsettingsdialog.ui | 21 +++++++++++++++++++-- 6 files changed, 68 insertions(+), 5 deletions(-) diff --git a/src/sensors/sensor.cpp b/src/sensors/sensor.cpp index 3f19e37..2e4c0de 100644 --- a/src/sensors/sensor.cpp +++ b/src/sensors/sensor.cpp @@ -33,6 +33,29 @@ void SensorStore::load(const QJsonObject& json) } } +std::vector SensorStore::allGroups() const +{ + std::vector groups; + for(const Sensor& sensor : sensors_) + { + if(!sensor.groupName.isEmpty()) + { + bool found = false; + for(const QString& group : groups) + { + if(group == sensor.groupName) + { + found = true; + break; + } + } + if(!found) + groups.push_back(sensor.groupName); + } + } + return groups; +} + void SensorStore::sensorGotState(const Sensor& sensor, sensor_update_type_t type) { bool inSensors = false; @@ -48,6 +71,7 @@ void SensorStore::sensorGotState(const Sensor& sensor, sensor_update_type_t type { sensors_[i].name = sensor.name; sensors_[i].hidden = sensor.hidden; + sensors_[i].groupName = sensor.groupName; // Also update knownSensors_ for(Sensor& known : knownSensors_) { @@ -55,6 +79,7 @@ void SensorStore::sensorGotState(const Sensor& sensor, sensor_update_type_t type { known.name = sensor.name; known.hidden = sensor.hidden; + known.groupName = sensor.groupName; break; } } @@ -76,6 +101,7 @@ void SensorStore::sensorGotState(const Sensor& sensor, sensor_update_type_t type { newSensor.name = known.name; newSensor.hidden = known.hidden; + newSensor.groupName = known.groupName; break; } } diff --git a/src/sensors/sensor.h b/src/sensors/sensor.h index e181088..d7690ce 100644 --- a/src/sensors/sensor.h +++ b/src/sensors/sensor.h @@ -37,17 +37,18 @@ public: uint64_t id; float field; QString name; + QString groupName; QDateTime lastSeen; bool hidden; - Sensor(sensor_type_t typeIn, uint64_t idIn, float fieldIn = 0, QString nameIn = "", bool hiddenIn = false): type(typeIn), - id(idIn), field(fieldIn), name(nameIn), hidden(hiddenIn) + Sensor(sensor_type_t typeIn, uint64_t idIn, float fieldIn = 0, QString nameIn = "", bool hiddenIn = false, QString groupNameIn = ""): type(typeIn), + id(idIn), field(fieldIn), name(nameIn), groupName(groupNameIn), hidden(hiddenIn) { lastSeen = QDateTime::currentDateTime(); if(nameIn == "") generateName(); } - Sensor(QString nameIn = "dummy"): type(TYPE_DUMMY), id(0), field(0), name(nameIn), hidden(false) + Sensor(QString nameIn = "dummy"): type(TYPE_DUMMY), id(0), field(0), name(nameIn), groupName(""), hidden(false) { lastSeen = QDateTime::currentDateTime(); } @@ -59,6 +60,7 @@ public: lastSeen = QDateTime::fromString(json["LastSeen"].toString("")); hidden = json["Hidden"].toBool(false); name = json["Name"].toString(); + groupName = json["GroupName"].toString(); if(name == "") generateName(); } @@ -105,6 +107,7 @@ public: json["Id"] = static_cast(id); json["Field"] = field; json["Name"] = name; + json["GroupName"] = groupName; json["LastSeen"] = lastSeen.toString(); json["Hidden"] = hidden; json["Unit"] = getUnit(); @@ -186,6 +189,7 @@ public: void store(QJsonObject& json); void load(const QJsonObject& json); + std::vector allGroups() const; public slots: diff --git a/src/ui/sensorlistwidget.cpp b/src/ui/sensorlistwidget.cpp index ce87271..634dcb1 100644 --- a/src/ui/sensorlistwidget.cpp +++ b/src/ui/sensorlistwidget.cpp @@ -39,6 +39,7 @@ void SensorListWidget::onDoubleClick(const QModelIndex &index) Sensor updatedSensor = sensor; updatedSensor.name = diag.getName(); updatedSensor.hidden = diag.getHidden(); + updatedSensor.groupName = diag.getGroupName(); globalSensors.sensorGotState(updatedSensor, SENSOR_UPDATE_USER); } } diff --git a/src/ui/sensorsettingsdialog.cpp b/src/ui/sensorsettingsdialog.cpp index dda6a56..11a85fc 100644 --- a/src/ui/sensorsettingsdialog.cpp +++ b/src/ui/sensorsettingsdialog.cpp @@ -11,6 +11,15 @@ SensorSettingsDialog::SensorSettingsDialog(const Sensor& sensor, QWidget* parent ui->label_idValue->setText(QString::number(sensor.id)); ui->lineEdit_Name->setText(sensor.name); ui->checkBox_Hidden->setChecked(sensor.hidden); + + // Populate group dropdown with existing groups + std::vector groups = globalSensors.allGroups(); + for(const QString& group : groups) + { + ui->comboBox_Group->addItem(group); + } + // Set current group (will be empty string if no group) + ui->comboBox_Group->setCurrentText(sensor.groupName); } SensorSettingsDialog::~SensorSettingsDialog() @@ -23,6 +32,11 @@ QString SensorSettingsDialog::getName() const return ui->lineEdit_Name->text(); } +QString SensorSettingsDialog::getGroupName() const +{ + return ui->comboBox_Group->currentText(); +} + bool SensorSettingsDialog::getHidden() const { return ui->checkBox_Hidden->isChecked(); diff --git a/src/ui/sensorsettingsdialog.h b/src/ui/sensorsettingsdialog.h index df796c7..8926dca 100644 --- a/src/ui/sensorsettingsdialog.h +++ b/src/ui/sensorsettingsdialog.h @@ -18,6 +18,7 @@ public: ~SensorSettingsDialog(); QString getName() const; + QString getGroupName() const; bool getHidden() const; private: diff --git a/src/ui/sensorsettingsdialog.ui b/src/ui/sensorsettingsdialog.ui index 608883c..32a75d7 100644 --- a/src/ui/sensorsettingsdialog.ui +++ b/src/ui/sensorsettingsdialog.ui @@ -7,7 +7,7 @@ 0 0 400 - 150 + 180 @@ -71,6 +71,23 @@ + + + Group: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + true + + + + Hidden: @@ -80,7 +97,7 @@ - +