Sensors now work over broadcast pipe
Added Polynomal actor Added Item adding dialog Added Factor Actor
This commit is contained in:
parent
f6aaebafc6
commit
772d21a982
63 changed files with 1450 additions and 225 deletions
|
|
@ -1,6 +1,6 @@
|
|||
#include "auxitem.h"
|
||||
|
||||
AuxItem::AuxItem(SensorStore* sensors, Microcontroller* micro, uint32_t itemIdIn, QString name, uint8_t value, QObject* parent): Item(sensors, itemIdIn, name, value, parent), micro_(micro)
|
||||
AuxItem::AuxItem(Microcontroller* micro, uint32_t itemIdIn, QString name, uint8_t value, QObject* parent): Item(itemIdIn, name, value, parent), micro_(micro)
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ public slots:
|
|||
virtual void setValue(uint8_t value);
|
||||
|
||||
public:
|
||||
AuxItem(SensorStore* sensors, Microcontroller* micro, uint32_t itemIdIn = QRandomGenerator::global()->generate(), QString name = "", uint8_t value = 0, QObject* parent = nullptr);
|
||||
AuxItem(Microcontroller* micro, uint32_t itemIdIn = QRandomGenerator::global()->generate(), QString name = "", uint8_t value = 0, QObject* parent = nullptr);
|
||||
|
||||
virtual void store(QJsonObject& json);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include "../microcontroller.h"
|
||||
#include "../actors/sensoractor.h"
|
||||
#include "../actors/regulator.h"
|
||||
#include "../actors/polynomalactor.h"
|
||||
|
||||
#include <QJsonArray>
|
||||
|
||||
|
|
@ -37,32 +38,34 @@ uint32_t ItemData::id() const
|
|||
|
||||
bool Item::secondaryFlag = false;
|
||||
|
||||
Item::Item(SensorStore* sensors, uint32_t itemIdIn, QString name, uint8_t value, QObject *parent): QObject(parent), ItemData (itemIdIn, name, value), sensors_(sensors)
|
||||
Item::Item(uint32_t itemIdIn, QString name, uint8_t value, QObject *parent): QObject(parent), ItemData (itemIdIn, name, value)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Item::Item(SensorStore* sensors, const ItemData& itemData, QObject *parent): QObject(parent), ItemData(itemData), sensors_(sensors)
|
||||
Item::Item(const ItemData& itemData, QObject *parent): QObject(parent), ItemData(itemData)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool Item::actorsActive() const
|
||||
Item::~Item()
|
||||
{
|
||||
return actorsActive_;
|
||||
for(size_t i = 0; i < actors_.size(); i++) delete actors_[i];
|
||||
}
|
||||
|
||||
void Item::store(QJsonObject &json)
|
||||
{
|
||||
json["Name"] = name_;
|
||||
json["ItemId"] = static_cast<double>(itemId_);
|
||||
json["ActorsActive"] = actorsActive_;
|
||||
QJsonArray actorsArray;
|
||||
for(size_t i = 0; i < actors_.size(); ++i)
|
||||
{
|
||||
QJsonObject actorObject;
|
||||
actors_[i]->store(actorObject);
|
||||
actorsArray.append(actorObject);
|
||||
if(!actors_[i]->isExausted())
|
||||
{
|
||||
QJsonObject actorObject;
|
||||
actors_[i]->store(actorObject);
|
||||
actorsArray.append(actorObject);
|
||||
}
|
||||
}
|
||||
json["Actors"] = actorsArray;
|
||||
}
|
||||
|
|
@ -74,7 +77,6 @@ void Item::load(const QJsonObject &json, const bool preserve)
|
|||
name_ = json["Name"].toString(name_);
|
||||
itemId_ = static_cast<uint32_t>(json["ItemId"].toDouble(0));
|
||||
}
|
||||
actorsActive_ = json["ActorsActive"].toBool(true);
|
||||
const QJsonArray actorsArray(json["Actors"].toArray(QJsonArray()));
|
||||
for(int i = 0; i < actorsArray.size(); ++i)
|
||||
{
|
||||
|
|
@ -101,17 +103,21 @@ void Item::addActor(Actor* actor)
|
|||
{
|
||||
actor->setParent(this);
|
||||
actors_.push_back(actor);
|
||||
if(!secondaryFlag)connect(actor, &Actor::sigValue, this, &Item::setValue);
|
||||
if(!secondaryFlag)
|
||||
{
|
||||
qDebug()<<"connecting actor";
|
||||
connect(actor, &Actor::sigValue, this, &Item::setValue);
|
||||
}
|
||||
connect(this, &Item::valueChanged, actor, &Actor::onValueChanged);
|
||||
|
||||
SensorActor* sensorActor = dynamic_cast<SensorActor*>(actor);
|
||||
if(sensorActor != nullptr && sensors_ != nullptr)connect(sensors_, &SensorStore::sensorChangedState, sensorActor, &SensorActor::sensorEvent);
|
||||
if(sensorActor != nullptr )connect(&globalSensors, &SensorStore::sensorChangedState, sensorActor, &SensorActor::sensorEvent);
|
||||
|
||||
Regulator* regulator = dynamic_cast<Regulator*>(actor);
|
||||
if(regulator != nullptr && sensors_ != nullptr)connect(sensors_, &SensorStore::sensorChangedState, regulator, &Regulator::sensorEvent);
|
||||
if(regulator != nullptr )connect(&globalSensors, &SensorStore::sensorChangedState, regulator, &Regulator::sensorEvent);
|
||||
|
||||
if(actorsActive_) actor->makeActive();
|
||||
else actor->makeInactive();
|
||||
PolynomalActor* polynomalActor = dynamic_cast<PolynomalActor*>(actor);
|
||||
if(polynomalActor != nullptr )connect(&globalSensors, &SensorStore::sensorChangedState, polynomalActor, &PolynomalActor::sensorEvent);
|
||||
}
|
||||
|
||||
bool Item::removeActor(Actor* actor)
|
||||
|
|
@ -146,6 +152,5 @@ bool Item::hasActors()
|
|||
|
||||
void Item::setActorsActive(bool in)
|
||||
{
|
||||
actorsActive_ = in;
|
||||
for(unsigned i = 0; i < actors_.size(); i++) in ? actors_[i]->makeActive() : actors_[i]->makeInactive();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,8 +5,7 @@
|
|||
#include <QSettings>
|
||||
#include <QJsonObject>
|
||||
|
||||
#include "../actors/actor.h"
|
||||
#include "../sensors/sensor.h"
|
||||
class Actor;
|
||||
|
||||
class ItemData
|
||||
{
|
||||
|
|
@ -24,9 +23,9 @@ public:
|
|||
|
||||
uint32_t id() const;
|
||||
|
||||
QString getName() const;
|
||||
void setName(QString name);
|
||||
uint8_t getValue() const;
|
||||
virtual QString getName() const;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -35,12 +34,10 @@ class Item: public QObject, public ItemData
|
|||
Q_OBJECT
|
||||
private:
|
||||
std::vector< Actor* > actors_;
|
||||
bool actorsActive_ = true;
|
||||
|
||||
public:
|
||||
|
||||
static bool secondaryFlag;
|
||||
SensorStore* sensors_;
|
||||
|
||||
signals:
|
||||
|
||||
|
|
@ -52,19 +49,18 @@ public slots:
|
|||
|
||||
public:
|
||||
|
||||
Item(SensorStore* sensors = nullptr, uint32_t itemIdIn = QRandomGenerator::global()->generate(), QString name = "Item", uint8_t value = 0, QObject *parent = nullptr);
|
||||
Item(SensorStore* sensors, const ItemData& itemData, QObject *parent = nullptr);
|
||||
Item(uint32_t itemIdIn = QRandomGenerator::global()->generate(), QString name = "Item", uint8_t value = 0, QObject *parent = nullptr);
|
||||
Item(const ItemData& itemData, QObject *parent = nullptr);
|
||||
|
||||
virtual ~Item();
|
||||
|
||||
std::vector< Actor* >& getActors();
|
||||
bool hasActors();
|
||||
void addActor(Actor* actor);
|
||||
bool removeActor(Actor* actor);
|
||||
void removeAllActors();
|
||||
bool actorsActive() const;
|
||||
void setActorsActive(bool in);
|
||||
void informValue(uint8_t value);
|
||||
void setSensorStore(SensorStore* sensors){sensors_ = sensors;}
|
||||
SensorStore* getSensorStore(){return sensors_;}
|
||||
|
||||
virtual void store(QJsonObject& json);
|
||||
virtual void load(const QJsonObject& json, const bool preserve = false);
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
#include "itemstore.h"
|
||||
#include "relay.h"
|
||||
#include "messageitem.h"
|
||||
#include <QJsonArray>
|
||||
|
||||
ItemStore::ItemStore(SensorStore* sensors, QObject *parent): QObject(parent), sensors_(sensors)
|
||||
ItemStore::ItemStore(QObject *parent): QObject(parent)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -13,7 +14,6 @@ void ItemStore::addItem(std::shared_ptr<Item> item)
|
|||
if(!mached)
|
||||
{
|
||||
items_.push_back(std::shared_ptr<Item>(item));
|
||||
items_.back()->setSensorStore(sensors_);
|
||||
itemAdded(std::weak_ptr<Item>(items_.back()));
|
||||
qDebug()<<"item added";
|
||||
}
|
||||
|
|
@ -49,6 +49,18 @@ void ItemStore::addItems(const std::vector<std::shared_ptr<Item>>& itemIn)
|
|||
|
||||
}
|
||||
|
||||
void ItemStore::removeItem(const ItemData& item)
|
||||
{
|
||||
for(unsigned j = 0; j < items_.size(); j++)
|
||||
{
|
||||
if(item == *items_[j])
|
||||
{
|
||||
items_.erase(items_.begin()+j);
|
||||
--j;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ItemStore::clear()
|
||||
{
|
||||
|
|
@ -91,10 +103,14 @@ void ItemStore::load(const QJsonObject& json, Microcontroller * const micro)
|
|||
if(itemsArray[i].isObject())
|
||||
{
|
||||
const QJsonObject itemObject = itemsArray[i].toObject();
|
||||
std::shared_ptr<Relay> newItem;
|
||||
std::shared_ptr<Item> newItem;
|
||||
if(itemObject["Type"].toString("") == "Relay")
|
||||
{
|
||||
newItem = std::shared_ptr<Relay>(new Relay(sensors_, micro));
|
||||
newItem = std::shared_ptr<Relay>(new Relay(micro));
|
||||
}
|
||||
else if(itemObject["Type"].toString("") == "Message")
|
||||
{
|
||||
newItem = std::shared_ptr<MessageItem>(new MessageItem);
|
||||
}
|
||||
else if(itemObject["Type"].toString("") == "Aux")
|
||||
{
|
||||
|
|
|
|||
|
|
@ -13,11 +13,9 @@ class ItemStore: public QObject
|
|||
private:
|
||||
std::vector< std::shared_ptr<Item> > items_;
|
||||
|
||||
SensorStore* sensors_;
|
||||
|
||||
public:
|
||||
|
||||
ItemStore(SensorStore* sensors_ = nullptr, QObject *parent = nullptr);
|
||||
ItemStore(QObject *parent = nullptr);
|
||||
virtual ~ItemStore(){}
|
||||
|
||||
inline std::vector< std::shared_ptr<Item> >* getItems(){ return &items_; }
|
||||
|
|
@ -34,6 +32,7 @@ signals:
|
|||
|
||||
public slots:
|
||||
|
||||
void removeItem(const ItemData& item);
|
||||
void addItem(std::shared_ptr<Item> item);
|
||||
void addItems(const std::vector<std::shared_ptr<Item>>& itemsIn);
|
||||
void itemStateChanged(const ItemData& item);
|
||||
|
|
|
|||
72
src/items/messageitem.cpp
Normal file
72
src/items/messageitem.cpp
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
#include "messageitem.h"
|
||||
|
||||
#include <QTimer>
|
||||
|
||||
MessageItem::MessageItem(uint32_t itemIdIn, QString name, uint8_t value, QObject *parent):
|
||||
Item(itemIdIn, name, value, parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
MessageItem::MessageItem(const ItemData& itemData, QObject *parent):
|
||||
Item(itemData, parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
MessageItem::~MessageItem()
|
||||
{
|
||||
closeMessageBox();
|
||||
}
|
||||
|
||||
void MessageItem::setValue(uint8_t value)
|
||||
{
|
||||
Item::setValue(value);
|
||||
if(value && !messageBox_)
|
||||
{
|
||||
messageBox_ = new QMessageBox(QMessageBox::NoIcon, name_, message_);
|
||||
messageBox_->setModal(false);
|
||||
connect(messageBox_, &QMessageBox::finished, this, &MessageItem::closeMessageBox);
|
||||
messageBox_->show();
|
||||
//QTimer::singleShot(600000, this, &MessageItem::closeMessageBox);
|
||||
}
|
||||
else if(!value && messageBox_)
|
||||
{
|
||||
closeMessageBox();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MessageItem::closeMessageBox()
|
||||
{
|
||||
if(messageBox_)
|
||||
{
|
||||
value_ = 0;
|
||||
messageBox_->hide();
|
||||
delete messageBox_;
|
||||
messageBox_ = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void MessageItem::setMessage(const QString& in)
|
||||
{
|
||||
message_ = in;
|
||||
}
|
||||
|
||||
QString MessageItem::getMessage()
|
||||
{
|
||||
return message_;
|
||||
}
|
||||
|
||||
void MessageItem::store(QJsonObject &json)
|
||||
{
|
||||
json["Type"] = "Message";
|
||||
Item::store(json);
|
||||
json["Message"] = message_;
|
||||
}
|
||||
|
||||
void MessageItem::load(const QJsonObject &json, const bool preserve)
|
||||
{
|
||||
Item::load(json,preserve);
|
||||
message_ = json["Message"].toString("Invalid Message");
|
||||
}
|
||||
37
src/items/messageitem.h
Normal file
37
src/items/messageitem.h
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
#ifndef MESSAGEITEM_H
|
||||
#define MESSAGEITEM_H
|
||||
|
||||
#include <QMessageBox>
|
||||
|
||||
#include "item.h"
|
||||
|
||||
class MessageItem : public Item
|
||||
{
|
||||
Q_OBJECT
|
||||
private:
|
||||
|
||||
QString message_;
|
||||
QMessageBox* messageBox_ = nullptr;
|
||||
|
||||
private slots:
|
||||
|
||||
void closeMessageBox();
|
||||
|
||||
public:
|
||||
|
||||
virtual void setValue(uint8_t value);
|
||||
|
||||
public:
|
||||
|
||||
MessageItem(uint32_t itemIdIn = QRandomGenerator::global()->generate(), QString name = "Item", uint8_t value = 0, QObject *parent = nullptr);
|
||||
MessageItem(const ItemData& itemData, QObject *parent = nullptr);
|
||||
~MessageItem();
|
||||
|
||||
void setMessage(const QString& in);
|
||||
QString getMessage();
|
||||
|
||||
virtual void store(QJsonObject& json);
|
||||
virtual void load(const QJsonObject& json, const bool preserve = false);
|
||||
};
|
||||
|
||||
#endif // MESSAGEITEM_H
|
||||
|
|
@ -2,9 +2,9 @@
|
|||
#include <QProcess>
|
||||
#include <QApplication>
|
||||
|
||||
PowerItem::PowerItem(SensorStore* sensors, uint32_t itemIdIn, QString name, uint8_t value, QObject* parent): Item(sensors, itemIdIn, name, value, parent)
|
||||
PowerItem::PowerItem(uint32_t itemIdIn, QString name, uint8_t value, QObject* parent): Item(itemIdIn, name, value, parent)
|
||||
{
|
||||
stateChanged(Sensor(Sensor::TYPE_SHUTDOWN_IMMINENT, 0, 0));
|
||||
stateChanged(Sensor(Sensor::TYPE_SHUTDOWN_IMMINENT, 0, 0, "Shutdown Imminent", true));
|
||||
setValue(true);
|
||||
}
|
||||
|
||||
|
|
@ -14,7 +14,7 @@ void PowerItem::setValue(uint8_t value)
|
|||
if(!value)
|
||||
{
|
||||
QTimer::singleShot(5000, this, &PowerItem::timeout);
|
||||
stateChanged(Sensor(Sensor::TYPE_SHUTDOWN_IMMINENT, 0, 1));
|
||||
stateChanged(Sensor(Sensor::TYPE_SHUTDOWN_IMMINENT, 0, 1, "Shutdown Imminent", true));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ public slots:
|
|||
virtual void setValue(uint8_t value);
|
||||
|
||||
public:
|
||||
PowerItem(SensorStore* sensors, uint32_t itemIdIn = QRandomGenerator::global()->generate(), QString name = "", uint8_t value = 0, QObject* parent = nullptr);
|
||||
void emmitSensor(){stateChanged(Sensor(Sensor::TYPE_SHUTDOWN_IMMINENT, 0, 0));}
|
||||
PowerItem(uint32_t itemIdIn = QRandomGenerator::global()->generate(), QString name = "", uint8_t value = 0, QObject* parent = nullptr);
|
||||
void emmitSensor(){stateChanged(Sensor(Sensor::TYPE_SHUTDOWN_IMMINENT, 0, 0, "Shutdown Imminent", true));}
|
||||
virtual void store(QJsonObject& json);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
//Relay
|
||||
|
||||
Relay::Relay(SensorStore* sensors, Microcontroller* micro, uint8_t id, QString name, uint16_t address, bool state, QObject* parent): Item(sensors, 0, name, state, parent), micro_(micro), id_(id), address_(address)
|
||||
Relay::Relay(Microcontroller* micro, uint8_t id, QString name, uint16_t address, bool state, QObject* parent): Item(0, name, state, parent), micro_(micro), id_(id), address_(address)
|
||||
{
|
||||
itemId_ = address | ((uint32_t)id << 16);
|
||||
}
|
||||
|
|
@ -38,9 +38,9 @@ void Relay::store(QJsonObject& json)
|
|||
json["Address"] = address_;
|
||||
}
|
||||
|
||||
void Relay::load(const QJsonObject& json)
|
||||
void Relay::load(const QJsonObject& json, const bool preserve)
|
||||
{
|
||||
Item::load(json);
|
||||
Item::load(json, preserve);
|
||||
id_ = static_cast<uint8_t>(json["Id"].toInt(0));
|
||||
address_ = static_cast<uint16_t>(json["Address"].toInt(0));
|
||||
itemId_ = address_ | (static_cast<uint32_t>(id_) << 16);
|
||||
|
|
|
|||
|
|
@ -26,13 +26,13 @@ public slots:
|
|||
void toggle();
|
||||
|
||||
public:
|
||||
Relay(SensorStore* sensors, Microcontroller* micro, uint8_t id = 0, QString name = "", uint16_t address = 0, bool state = false, QObject* parent = nullptr);
|
||||
Relay(Microcontroller* micro, uint8_t id = 0, QString name = "", uint16_t address = 0, bool state = false, QObject* parent = nullptr);
|
||||
|
||||
uint16_t getAddress() const;
|
||||
uint8_t getId() const;
|
||||
void setId(uint8_t id);
|
||||
|
||||
virtual void store(QJsonObject& json);
|
||||
virtual void load(const QJsonObject& json);
|
||||
virtual void load(const QJsonObject& json, const bool preserve = false);
|
||||
};
|
||||
#endif // RELAY_H
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#include "rgbitem.h"
|
||||
|
||||
RgbItem::RgbItem(SensorStore* sensors, Microcontroller* micro, uint32_t itemIdIn, QString name, uint8_t value, QObject* parent): Item(sensors, itemIdIn, name, value, parent), micro_(micro)
|
||||
RgbItem::RgbItem(Microcontroller* micro, uint32_t itemIdIn, QString name, uint8_t value, QObject* parent): Item(itemIdIn, name, value, parent), micro_(micro)
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ public slots:
|
|||
virtual void setValue(uint8_t value);
|
||||
|
||||
public:
|
||||
RgbItem(SensorStore* sensors, Microcontroller* micro, uint32_t itemIdIn = QRandomGenerator::global()->generate(), QString name = "", uint8_t value = 0, QObject* parent = nullptr);
|
||||
RgbItem(Microcontroller* micro, uint32_t itemIdIn = QRandomGenerator::global()->generate(), QString name = "", uint8_t value = 0, QObject* parent = nullptr);
|
||||
|
||||
virtual void store(QJsonObject& json);
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue