From 24c168cf644f68fb08149795b8dec4926bf21c51 Mon Sep 17 00:00:00 2001 From: Carl Philipp Klemm Date: Tue, 31 Mar 2026 13:06:15 +0200 Subject: [PATCH] Item Refactor complete --- src/actors/actor.cpp | 9 +++++++-- src/actors/actor.h | 2 ++ src/actors/factoractor.cpp | 13 +++++++------ src/actors/factoractor.h | 10 +++++----- src/actors/polynomalactor.cpp | 3 ++- src/actors/regulator.cpp | 9 ++++----- src/items/poweritem.cpp | 2 +- src/items/relay.cpp | 5 ----- src/main.cpp | 11 +++++++++-- src/service/server.cpp | 13 ++++++++++++- src/service/server.h | 3 +++ src/service/service.cpp | 12 +----------- src/service/service.h | 2 +- src/service/tcpclient.cpp | 14 ++++++++++++++ src/service/tcpclient.h | 3 +++ src/ui/itemwidget.cpp | 7 ++++++- src/ui/itemwidget.h | 1 + 17 files changed, 78 insertions(+), 41 deletions(-) diff --git a/src/actors/actor.cpp b/src/actors/actor.cpp index 320e5c0..51c3c84 100644 --- a/src/actors/actor.cpp +++ b/src/actors/actor.cpp @@ -17,17 +17,22 @@ Actor::~Actor() } -void Actor::performAction() +void Actor::performValueAction(uint8_t value) { if(active) { ItemUpdateRequest request; request.type = ITEM_UPDATE_ACTOR; - request.payload = ItemData(QRandomGenerator::global()->generate(), "Item", triggerValue); + request.payload = ItemData(QRandomGenerator::global()->generate(), "Item", value); sigItemUpdate(request); } } +void Actor::performAction() +{ + performValueAction(triggerValue); +} + void Actor::makeActive() { active = true; diff --git a/src/actors/actor.h b/src/actors/actor.h index e76bc8e..e9e7698 100644 --- a/src/actors/actor.h +++ b/src/actors/actor.h @@ -19,6 +19,8 @@ protected: bool exausted = false; void performAction(); + void performValueAction(uint8_t value); + virtual void enactValue(uint8_t value) override; signals: diff --git a/src/actors/factoractor.cpp b/src/actors/factoractor.cpp index df4447f..cadd017 100644 --- a/src/actors/factoractor.cpp +++ b/src/actors/factoractor.cpp @@ -6,18 +6,19 @@ MultiFactorActor::MultiFactorActor(Actor* factorActor, const uint preCancleMin, preCancleMin_(preCancleMin) { activationTime.setMSecsSinceEpoch(0); - if(factorActor) connect(factorActor, &Actor::sigValue, this, &MultiFactorActor::factorActorSlot); + if(factorActor) + connect(factorActor, &Actor::sigItemUpdate, this, &MultiFactorActor::factorActorSlot); } -void MultiFactorActor::factorActorSlot(uint8_t value) +void MultiFactorActor::factorActorSlot(ItemUpdateRequest update) { - if(value == factorDirection) + if(update.payload.getValue() == factorDirection) { activationTime = QDateTime::currentDateTime(); } } -void MultiFactorActor::setValue(uint8_t value) +void MultiFactorActor::enactValue(uint8_t value) { if(value) { @@ -46,7 +47,7 @@ QString MultiFactorActor::getName() const void MultiFactorActor::setFactorActor(std::shared_ptr factorActor) { factorActor_=factorActor; - connect(factorActor_.get(), &Actor::sigValue, this, &MultiFactorActor::factorActorSlot); + connect(factorActor_.get(), &Actor::sigItemUpdate, this, &MultiFactorActor::factorActorSlot); } void MultiFactorActor::store(QJsonObject &json) @@ -73,7 +74,7 @@ void MultiFactorActor::load(const QJsonObject &json, bool preserve) } if(factorActor_) { - connect(factorActor_.get(), &Actor::sigValue, this, &MultiFactorActor::factorActorSlot); + connect(factorActor_.get(), &Actor::sigItemUpdate, this, &MultiFactorActor::factorActorSlot); } } diff --git a/src/actors/factoractor.h b/src/actors/factoractor.h index 104a2c4..97a6814 100644 --- a/src/actors/factoractor.h +++ b/src/actors/factoractor.h @@ -16,17 +16,17 @@ private: private slots: - void factorActorSlot(uint8_t value); + void factorActorSlot(ItemUpdateRequest update); public slots: - virtual void setValue(uint8_t value); + virtual void enactValue(uint8_t value) override; public: MultiFactorActor(Actor* FactorActor = nullptr, const uint preCancleMin = 10, QObject *parent = nullptr); - virtual QString getName() const; + virtual QString getName() const override; void setFactorActor(std::shared_ptr factorActor); std::shared_ptr getFactorActor() @@ -52,8 +52,8 @@ public: virtual ~MultiFactorActor() {} - virtual void store(QJsonObject& json); - virtual void load(const QJsonObject& json, bool preserve); + virtual void store(QJsonObject& json) override; + virtual void load(const QJsonObject& json, bool preserve) override; }; #endif // REMINDERACTOR_H diff --git a/src/actors/polynomalactor.cpp b/src/actors/polynomalactor.cpp index f846c0e..cc783fd 100644 --- a/src/actors/polynomalactor.cpp +++ b/src/actors/polynomalactor.cpp @@ -39,7 +39,8 @@ void PolynomalActor::sensorEvent(Sensor sensor) +pow0_; if(result < 0) result = 0; else if(result > 254) result = 255; - if(result != prevValue)sigValue(static_cast(result)); + if(result != prevValue) + performValueAction(static_cast(result)); prevValue = result; } } diff --git a/src/actors/regulator.cpp b/src/actors/regulator.cpp index 2287b7b..94f8bb6 100644 --- a/src/actors/regulator.cpp +++ b/src/actors/regulator.cpp @@ -28,11 +28,11 @@ void Regulator::sensorEvent(Sensor sensor) timer.start(timeout_*1000); if( sensor.field < setPoint_-band_ && (sensor.field < sensor_.field || sensor_.field > setPoint_-band_ || first) ) { - sigValue(triggerValue); + performValueAction(triggerValue); } else if( sensor.field > setPoint_+band_ && (sensor.field > sensor_.field || sensor_.field < setPoint_+band_ || first) ) { - sigValue(!triggerValue); + performValueAction(!triggerValue); } first = false; sensor_ = sensor; @@ -42,15 +42,14 @@ void Regulator::sensorEvent(Sensor sensor) void Regulator::makeInactive() { first = true; - if(active) - sigValue(!triggerValue); + performValueAction(!triggerValue); timer.stop(); Actor::makeInactive(); } void Regulator::timeout() { - sigValue(safeValue_); + performValueAction(safeValue_); } void Regulator::setPoint(float setPoint) diff --git a/src/items/poweritem.cpp b/src/items/poweritem.cpp index 2b2e4e1..aec7642 100644 --- a/src/items/poweritem.cpp +++ b/src/items/poweritem.cpp @@ -7,7 +7,7 @@ PowerItem::PowerItem(uint32_t itemIdIn, QString name, uint8_t value, QObject* p Item(itemIdIn, name, value, parent) { stateChanged(Sensor(Sensor::TYPE_SHUTDOWN_IMMINENT, 0, 0, "Shutdown Imminent", true)); - PowerItem::setValue(true); + value_ = true; hidden_ = true; type_ = ITEM_VALUE_NO_VALUE; } diff --git a/src/items/relay.cpp b/src/items/relay.cpp index 14b145d..17f4cb9 100644 --- a/src/items/relay.cpp +++ b/src/items/relay.cpp @@ -23,11 +23,6 @@ void Relay::enactValue(uint8_t value) } } -void Relay::toggle() -{ - value_ ? off() : on(); -} - void Relay::store(QJsonObject& json) { json["Type"] = "Relay"; diff --git a/src/main.cpp b/src/main.cpp index 75c8e3d..e3a6e03 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -115,7 +115,12 @@ int main(int argc, char *argv[]) QObject::connect(&mainObject.micro, SIGNAL(textRecived(QString)), w, SLOT(changeHeaderLableText(QString))); QObject::connect(w, &MainWindow::sigSetRgb, &mainObject.micro, &Microcontroller::changeRgbColor); QObject::connect(w, &MainWindow::sigSave, &mainObject, [&mainObject, settingsPath](){mainObject.storeToDisk(settingsPath);}); - QObject::connect(w, &MainWindow::createdItem, &globalItems, [](std::shared_ptr item){globalItems.addItem(item, false);}); + QObject::connect(w, + &MainWindow::createdItem, + &globalItems, + [](std::shared_ptr item) { + globalItems.addItem(item, ITEM_UPDATE_USER); + }); w->show(); } retVal = a.exec(); @@ -127,7 +132,9 @@ int main(int argc, char *argv[]) { SecondaryMainObject mainObject(parser.value(hostOption), parser.value(portOption).toInt()); MainWindow w(&mainObject); - QObject::connect(&w, &MainWindow::createdItem, &globalItems, [](std::shared_ptr item){globalItems.addItem(item, false);}); + QObject::connect(&w, &MainWindow::createdItem, &globalItems, [](std::shared_ptr item) { + globalItems.addItem(item, ITEM_UPDATE_USER); + }); QObject::connect(&w, &MainWindow::sigSave, mainObject.tcpClient, &TcpClient::sendItems); w.show(); diff --git a/src/service/server.cpp b/src/service/server.cpp index e01ba4c..8d900a2 100644 --- a/src/service/server.cpp +++ b/src/service/server.cpp @@ -43,7 +43,7 @@ void Server::processIncomeingJson(const QByteArray& jsonbytes) } else if(!items.empty()) { - gotItems(items, false); + gotItems(items, ITEM_UPDATE_REMOTE); } } else @@ -91,3 +91,14 @@ void Server::removeClient(QWebSocket* socket) } } } + +void Server::itemUpdated(ItemUpdateRequest update) +{ + QJsonArray items; + QJsonObject itemjson; + update.payload.store(itemjson); + items.append(itemjson); + QJsonObject json = createMessage("ItemUpdate", items); + json["FullList"] = false; + sendJson(json); +} \ No newline at end of file diff --git a/src/service/server.h b/src/service/server.h index 6c27062..5564108 100644 --- a/src/service/server.h +++ b/src/service/server.h @@ -31,6 +31,9 @@ protected: std::vector clients; +public slots: + virtual void itemUpdated(ItemUpdateRequest update) override; + public: Server(QObject* parent = nullptr); virtual ~Server(); diff --git a/src/service/service.cpp b/src/service/service.cpp index eb27ee0..ae75b7e 100644 --- a/src/service/service.cpp +++ b/src/service/service.cpp @@ -29,17 +29,7 @@ void Service::sensorEvent(Sensor sensor) sendJson(json); } -void Service::itemUpdated(std::weak_ptr item) -{ - qDebug()<<"Service sending item"<getName(); - QJsonArray items; - QJsonObject itemjson; - item.lock()->store(itemjson); - items.append(itemjson); - QJsonObject json = createMessage("ItemUpdate", items); - json["FullList"] = false; - sendJson(json); -} +void Service::itemUpdated(ItemUpdateRequest update) {} void Service::refresh() { diff --git a/src/service/service.h b/src/service/service.h index 12ead69..32dba33 100644 --- a/src/service/service.h +++ b/src/service/service.h @@ -24,7 +24,7 @@ signals: public slots: void sensorEvent(Sensor sensor); - void itemUpdated(std::weak_ptr item); + virtual void itemUpdated(ItemUpdateRequest update); virtual void refresh() override; public: diff --git a/src/service/tcpclient.cpp b/src/service/tcpclient.cpp index d7eb725..63729d1 100644 --- a/src/service/tcpclient.cpp +++ b/src/service/tcpclient.cpp @@ -94,6 +94,20 @@ void TcpClient::socketReadyRead() } } +void TcpClient::itemUpdated(ItemUpdateRequest update) +{ + if(update.type == ITEM_UPDATE_USER) + { + QJsonArray items; + QJsonObject itemjson; + update.payload.store(itemjson); + items.append(itemjson); + QJsonObject json = createMessage("ItemUpdate", items); + json["FullList"] = false; + sendJson(json); + } +} + TcpClient::~TcpClient() { delete socket; diff --git a/src/service/tcpclient.h b/src/service/tcpclient.h index df28641..b67f7b4 100644 --- a/src/service/tcpclient.h +++ b/src/service/tcpclient.h @@ -16,6 +16,9 @@ class TcpClient : public Service long long recievebytes = 0; QByteArray buffer; +public slots: + virtual void itemUpdated(ItemUpdateRequest update) override; + public: TcpClient(QObject* parent = nullptr); ~TcpClient(); diff --git a/src/ui/itemwidget.cpp b/src/ui/itemwidget.cpp index e41fc3c..c91c5e8 100644 --- a/src/ui/itemwidget.cpp +++ b/src/ui/itemwidget.cpp @@ -38,7 +38,7 @@ ItemWidget::ItemWidget(std::weak_ptr item, QWidget *parent) : else connect(ui->checkBox, &QCheckBox::toggled, this, &ItemWidget::moveToState); connect(ui->pushButton, &QPushButton::clicked, this, &ItemWidget::showSettingsDialog); - connect(workingItem.get(), &Relay::valueChanged, this, &ItemWidget::stateChanged); + connect(workingItem.get(), &Item::updated, this, &ItemWidget::onItemUpdated); connect(ui->pushButton_Remove, &QPushButton::clicked, this, &ItemWidget::deleteItem); } @@ -115,6 +115,11 @@ std::weak_ptr ItemWidget::getItem() return item_; } +void ItemWidget::onItemUpdated(ItemUpdateRequest update) +{ + stateChanged(update.payload.getValue()); +} + void ItemWidget::stateChanged(int state) { ui->slider->blockSignals(true); diff --git a/src/ui/itemwidget.h b/src/ui/itemwidget.h index 18d2861..90d5a97 100644 --- a/src/ui/itemwidget.h +++ b/src/ui/itemwidget.h @@ -38,6 +38,7 @@ public: public slots: void stateChanged(int state); + void onItemUpdated(ItemUpdateRequest update); private: Ui::ItemWidget *ui;