Added system item support, support for RGBControlers with multiple item backends, and item settings widgets

This commit is contained in:
2020-05-05 22:29:43 +02:00
parent a761eb4317
commit 5fb9ca7cc0
56 changed files with 635 additions and 210 deletions

View File

@ -6,10 +6,14 @@
#include "../actors/timeractor.h"
#include "../actors/regulator.h"
#include "../actors/factoractor.h"
#include "../items/messageitem.h"
#include "../items/systemitem.h"
#include "./itemsettingswidgets/messageitemsettingswidget.h"
#include "./itemsettingswidgets/systemitemsettingswidget.h"
#include "./itemsettingswidgets/relayitemsettingswidget.h"
#include<memory>
ItemSettingsDialog::ItemSettingsDialog(Item* item, QWidget *parent) :
ItemSettingsDialog::ItemSettingsDialog(std::shared_ptr<Item> item, QWidget *parent) :
QDialog(parent),
item_(item),
ui(new Ui::ItemSettingsDialog)
@ -19,23 +23,32 @@ ItemSettingsDialog::ItemSettingsDialog(Item* item, QWidget *parent) :
setModal(false);
ui->label_name->setText(item_->getName());
ui->checkBox_Override->setChecked(item_->getOverride());
if(Relay* relay = dynamic_cast<Relay*>(item_))
if(std::shared_ptr<Relay> relay = std::dynamic_pointer_cast<Relay>(item_))
{
ui->label_address->setText(QString::number(relay->getAddress(), 2));
ui->label_id->setText(QString::number(relay->getId(), 10));
itemSpecificWidget_ = new RelayItemSettingsWidget(relay);
}
else
else if(std::shared_ptr<MessageItem> msgItem = std::dynamic_pointer_cast<MessageItem>(item_))
{
ui->label_address->hide();
ui->label_id->hide();
ui->label_address_lable->hide();
ui->label_id_lable->hide();
itemSpecificWidget_ = new MessageItemSettingsWidget(msgItem);
}
else if(std::shared_ptr<SystemItem> sysItem = std::dynamic_pointer_cast<SystemItem>(item_))
{
itemSpecificWidget_ = new SystemItemSettingsWidget(sysItem);
}
if(itemSpecificWidget_)
{
ui->verticalLayout_2->addWidget(itemSpecificWidget_);
}
connect(ui->pushButton_add, &QPushButton::clicked, this, &ItemSettingsDialog::addActor);
connect(ui->pushButton_remove, &QPushButton::clicked, this, &ItemSettingsDialog::removeActor);
connect(ui->pushButton_edit, &QPushButton::clicked, this, &ItemSettingsDialog::editActor);
connect(ui->checkBox_Override, &QPushButton::clicked, this, &ItemSettingsDialog::changeOverride);
ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Actor"));
ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("Action"));
@ -48,9 +61,15 @@ ItemSettingsDialog::ItemSettingsDialog(Item* item, QWidget *parent) :
ItemSettingsDialog::~ItemSettingsDialog()
{
if(itemSpecificWidget_) delete itemSpecificWidget_;
delete ui;
}
void ItemSettingsDialog::changeOverride()
{
item_->setOverride(ui->checkBox_Override->isChecked());
}
void ItemSettingsDialog::loadActorList()
{
//ui->listWidget->clear();
@ -67,43 +86,43 @@ void ItemSettingsDialog::loadActorList()
void ItemSettingsDialog::addActor()
{
ActorSettingsDialog* dialog = nullptr;
Actor* actor = nullptr;
std::shared_ptr<Actor> actor = nullptr;
if(ui->comboBox->currentText() == "Alarm")
{
AlarmTime* alarm = new AlarmTime;
std::shared_ptr<AlarmTime> alarm = std::shared_ptr<AlarmTime>(new AlarmTime);
actor = alarm;
dialog = new ActorSettingsDialog(alarm, this);
}
else if(ui->comboBox->currentText() == "Sensor")
{
SensorActor* sensorActor = new SensorActor();
std::shared_ptr<SensorActor> sensorActor = std::shared_ptr<SensorActor>(new SensorActor);
actor = sensorActor;
dialog = new ActorSettingsDialog(sensorActor, this);
}
else if(ui->comboBox->currentText() == "Timer" )
{
TimerActor* timerActor = new TimerActor();
std::shared_ptr<TimerActor> timerActor = std::shared_ptr<TimerActor>(new TimerActor);
actor = timerActor;
dialog = new ActorSettingsDialog(timerActor, this);
}
else if(ui->comboBox->currentText() == "Regulator")
{
Regulator* regulator = new Regulator();
std::shared_ptr<Regulator> regulator = std::shared_ptr<Regulator>(new Regulator);
actor = regulator;
dialog = new ActorSettingsDialog(regulator, this);
}
else if(ui->comboBox->currentText() == "Polynomal")
{
PolynomalActor* polynomalActor = new PolynomalActor();
std::shared_ptr<PolynomalActor> polynomalActor = std::shared_ptr<PolynomalActor>(new PolynomalActor);
actor = polynomalActor;
dialog = new ActorSettingsDialog(polynomalActor, this);
}
else if(ui->comboBox->currentText() == "Multi Factor")
{
MultiFactorActor* polynomalActor = new MultiFactorActor();
std::shared_ptr<MultiFactorActor> polynomalActor = std::shared_ptr<MultiFactorActor>(new MultiFactorActor);
actor = polynomalActor;
dialog = new ActorSettingsDialog(polynomalActor, this);
}
@ -118,7 +137,6 @@ void ItemSettingsDialog::addActor()
item_->addActor(actor);
loadActorList();
}
else delete actor;
delete dialog;
}
@ -137,14 +155,14 @@ void ItemSettingsDialog::editActor()
{
if(item_->getActors().size() > ui->tableWidget->currentRow())
{
Actor* actor = item_->getActors()[ui->tableWidget->currentRow()];
std::shared_ptr<Actor> actor = item_->getActors()[ui->tableWidget->currentRow()];
AlarmTime* alarmTime = dynamic_cast<AlarmTime*>(actor);
Regulator* regulator = dynamic_cast<Regulator*>(actor);
SensorActor* sensorActor = dynamic_cast<SensorActor*>(actor);
TimerActor* timerActor = dynamic_cast<TimerActor*>(actor);
PolynomalActor* polynomalActor = dynamic_cast<PolynomalActor*>(actor);
MultiFactorActor* factorActor = dynamic_cast<MultiFactorActor*>(actor);
std::shared_ptr<AlarmTime> alarmTime = std::dynamic_pointer_cast<AlarmTime>(actor);
std::shared_ptr<Regulator> regulator = std::dynamic_pointer_cast<Regulator>(actor);
std::shared_ptr<SensorActor> sensorActor = std::dynamic_pointer_cast<SensorActor>(actor);
std::shared_ptr<TimerActor> timerActor = std::dynamic_pointer_cast<TimerActor>(actor);
std::shared_ptr<PolynomalActor> polynomalActor = std::dynamic_pointer_cast<PolynomalActor>(actor);
std::shared_ptr<MultiFactorActor> factorActor = std::dynamic_pointer_cast<MultiFactorActor>(actor);
ActorSettingsDialog* dialog;