switched from qsettings to json added editng of actors

This commit is contained in:
Carl Klemm 2019-06-06 21:19:12 +02:00
parent b04fbfb5bc
commit df27b622a0
141 changed files with 4402 additions and 5068 deletions

173
src/items/item.cpp Normal file
View file

@ -0,0 +1,173 @@
#include "item.h"
#include "relay.h"
#include "../microcontroller.h"
#include "../actors/sensoractor.h"
#include "../actors/regulator.h"
#include <QJsonArray>
ItemData::ItemData(uint32_t itemIdIn, QString name, uint8_t value): name_(name), value_(value), itemId_(itemIdIn)
{
}
QString ItemData::getName() const
{
return name_;
}
void ItemData::setName(QString name)
{
name_ = name;
}
uint8_t ItemData::getValue() const
{
return value_;
}
uint32_t ItemData::id() const
{
return itemId_;
}
//item
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(SensorStore* sensors, const ItemData& itemData, QObject *parent): QObject(parent), ItemData(itemData), sensors_(sensors)
{
}
bool Item::actorsActive() const
{
return actorsActive_;
}
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);
}
json["Actors"] = actorsArray;
}
void Item::load(const QJsonObject &json, const bool preserve)
{
if(!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)
{
if(actorsArray[i].isObject())
{
Actor* actor = Actor::loadActor(actorsArray[i].toObject());
if(actor != nullptr) addActor(actor);
}
}
}
void Item::store(QString subsecton, QSettings* settings)
{
settings->setValue(subsecton + "Name", name_);
settings->setValue(subsecton + "ItemId", static_cast<unsigned>(itemId_));
settings->setValue(subsecton + "ActorsActive", actorsActive_);
settings->setValue(subsecton + "Actors", static_cast<unsigned>(actors_.size()));
for(size_t i = 0; i < actors_.size(); ++i)
{
actors_[i]->store(subsecton + "/Actor" + QString::number(i), settings);
}
}
void Item::load(QString subsecton, QSettings* settings, bool preserve)
{
if(!preserve)
{
name_ = settings->value(subsecton + "Name").toString();
itemId_ = settings->value(subsecton + "ItemId").toUInt();
}
actorsActive_ = settings->value(subsecton + "ActorsActive").toBool();
unsigned actorsLen = settings->value(subsecton + "Actors").toUInt();
for(unsigned i = 0; i < actorsLen; ++i)
{
Actor* actor = Actor::loadActor(subsecton + "/Actor" + QString::number(i), settings);
if(actor != nullptr) addActor(actor);
}
}
void Item::setValue(uint8_t value)
{
value_ = value;
valueChanged(value_);
}
void Item::informValue(uint8_t value)
{
Item::setValue(value);
}
void Item::addActor(Actor* actor)
{
actor->setParent(this);
actors_.push_back(actor);
if(!secondaryFlag)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);
Regulator* regulator = dynamic_cast<Regulator*>(actor);
if(regulator != nullptr && sensors_ != nullptr)connect(sensors_, &SensorStore::sensorChangedState, regulator, &Regulator::sensorEvent);
if(actorsActive_) actor->makeActive();
else actor->makeInactive();
}
bool Item::removeActor(Actor* actor)
{
for(unsigned int i = 0; i < actors_.size(); i++)
{
if(actors_[i] == actor)
{
delete actor;
actors_.erase(actors_.begin()+i);
return true;
}
}
return false;
}
std::vector< Actor* >& Item::getActors()
{
return actors_;
}
bool Item::hasActors()
{
return actors_.size() > 0;
}
void Item::setActorsActive(bool in)
{
actorsActive_ = in;
for(unsigned i = 0; i < actors_.size(); i++) in ? actors_[i]->makeActive() : actors_[i]->makeInactive();
}