Sensors now work over broadcast pipe

Added Polynomal actor
Added Item adding dialog
Added Factor Actor
This commit is contained in:
2020-02-04 22:56:10 +01:00
parent f6aaebafc6
commit 772d21a982
63 changed files with 1450 additions and 225 deletions

View File

@ -1,5 +1,6 @@
#include "actorsettingsdialog.h"
#include "ui_actorsettingsdialog.h"
#include "itemsettingsdialog.h"
#include <QDebug>
#include <QSpinBox>
@ -14,25 +15,25 @@ ActorSettingsDialog::ActorSettingsDialog(AlarmTime* alarm, QWidget *parent):
ui->vertlayout->addWidget(widget);
}
ActorSettingsDialog::ActorSettingsDialog(SensorActor* actor, SensorStore* sensors, QWidget *parent) :
ActorSettingsDialog::ActorSettingsDialog(SensorActor* actor, QWidget *parent) :
QDialog(parent),
actor_(actor),
ui(new Ui::ActorSettingsDialog)
{
init();
widget = new SensorActorWidget(actor, sensors, this);
widget = new SensorActorWidget(actor, &globalSensors, this);
ui->vertlayout->addWidget(widget);
}
ActorSettingsDialog::ActorSettingsDialog(Regulator* actor, SensorStore* sensors, QWidget *parent) :
ActorSettingsDialog::ActorSettingsDialog(Regulator* actor, QWidget *parent) :
QDialog(parent),
actor_(actor),
ui(new Ui::ActorSettingsDialog)
{
init();
widget = new RegulatorWdiget(actor, sensors, this);
widget = new RegulatorWdiget(actor, &globalSensors, this);
ui->vertlayout->addWidget(widget);
}
@ -47,6 +48,26 @@ ui(new Ui::ActorSettingsDialog)
ui->vertlayout->addWidget(widget);
}
ActorSettingsDialog::ActorSettingsDialog(PolynomalActor* actor, QWidget *parent) :
QDialog(parent),
actor_(actor),
ui(new Ui::ActorSettingsDialog)
{
init();
widget = new PolynomalActorWidget(actor, &globalSensors, this);
ui->vertlayout->addWidget(widget);
}
ActorSettingsDialog::ActorSettingsDialog(MultiFactorActor* actor, QWidget *parent) :
QDialog(parent),
actor_(actor),
ui(new Ui::ActorSettingsDialog)
{
init();
widget = new FactorActorWidget(actor, this);
ui->vertlayout->addWidget(widget);
}
ActorSettingsDialog::ActorSettingsDialog(Actor* actor, QWidget *parent) :
QDialog(parent),
@ -61,6 +82,7 @@ void ActorSettingsDialog::init()
ui->setupUi(this);
connect(ui->comboBox_action, SIGNAL(currentIndexChanged(int)), this, SLOT(changeAction(int)));
connect(ui->spinBox, SIGNAL(valueChanged(int)), this, SLOT(valueChanged(int)));
connect(ui->pushButton_editItem, &QPushButton::clicked, this, &ActorSettingsDialog::editAsItem);
ui->spinBox->hide();
ui->spinBox->setValue(actor_->getTriggerValue());
@ -74,6 +96,12 @@ ActorSettingsDialog::~ActorSettingsDialog()
delete ui;
}
void ActorSettingsDialog::editAsItem()
{
ItemSettingsDialog itemSettingsDiag(actor_, this);
itemSettingsDiag.exec();
}
void ActorSettingsDialog::valueChanged(int value)
{
actor_->setTriggerValue(value);

View File

@ -7,6 +7,8 @@
#include "actorwidgets/sensoractorwidget.h"
#include "actorwidgets/timeractorwidget.h"
#include "actorwidgets/regulatorwdiget.h"
#include "actorwidgets/polynomalactorwidget.h"
#include "actorwidgets/factoractorwidget.h"
namespace Ui {
class ActorSettingsDialog;
@ -24,9 +26,11 @@ private:
public:
ActorSettingsDialog(AlarmTime* actor, QWidget *parent = nullptr);
ActorSettingsDialog(SensorActor* actor, SensorStore* sensors = nullptr, QWidget *parent = nullptr);
ActorSettingsDialog(Regulator* actor, SensorStore* sensors = nullptr, QWidget *parent = nullptr);
ActorSettingsDialog(TimerActor* actor, QWidget *parent);
ActorSettingsDialog(SensorActor* actor, QWidget *parent = nullptr);
ActorSettingsDialog(Regulator* actor, QWidget *parent = nullptr);
ActorSettingsDialog(TimerActor* actor, QWidget *parent = nullptr);
ActorSettingsDialog(PolynomalActor* actor, QWidget *parent = nullptr);
ActorSettingsDialog(MultiFactorActor* actor, QWidget *parent = nullptr);
ActorSettingsDialog(Actor* actor, QWidget *parent);
~ActorSettingsDialog();
@ -35,6 +39,7 @@ public:
private slots:
void changeAction(int index);
void valueChanged(int value);
void editAsItem();
private:

View File

@ -63,6 +63,13 @@
</item>
</layout>
</item>
<item>
<widget class="QPushButton" name="pushButton_editItem">
<property name="text">
<string>Edit as item</string>
</property>
</widget>
</item>
</layout>
</item>
<item>

View File

@ -20,7 +20,7 @@ public:
private slots:
void toggleRepeating(int state);
void setRepeatingType();
void setRepeatingType();
private:
Ui::AlarmWidget *ui;

View File

@ -0,0 +1,85 @@
#include "factoractorwidget.h"
#include "ui_factoractorwidget.h"
#include "../actorsettingsdialog.h"
FactorActorWidget::FactorActorWidget(MultiFactorActor* actor, QWidget *parent) :
QWidget(parent),
actor_(actor),
ui(new Ui::FactorActorWidget)
{
ui->setupUi(this);
ui->comboBox->setCurrentText(actor_->getFactorDirection() ? "True" : "False");
ui->spinBox->setValue(actor_->getPreCancleTime());
if(actor_->getFactorActor()) ui->label_FactorActor->setText(actor_->getFactorActor()->getName());
connect(ui->pushButton, &QPushButton::clicked, this, &FactorActorWidget::createFactorActor);
connect(ui->comboBox_Direcion, &QComboBox::currentTextChanged, this, &FactorActorWidget::setDirection);
connect(ui->spinBox, qOverload<int>(&QSpinBox::valueChanged), this, &FactorActorWidget::setPreCancleTime);
}
FactorActorWidget::~FactorActorWidget()
{
delete ui;
}
void FactorActorWidget::createFactorActor()
{
ActorSettingsDialog* dialog = nullptr;
Actor* actor = nullptr;
if(ui->comboBox->currentText() == "Alarm")
{
AlarmTime* alarm = new AlarmTime;
actor = alarm;
dialog = new ActorSettingsDialog(alarm, this);
}
else if(ui->comboBox->currentText() == "Sensor")
{
SensorActor* sensorActor = new SensorActor();
actor = sensorActor;
dialog = new ActorSettingsDialog(sensorActor, this);
}
else if(ui->comboBox->currentText() == "Timer" )
{
TimerActor* timerActor = new TimerActor();
actor = timerActor;
dialog = new ActorSettingsDialog(timerActor, this);
}
else if(ui->comboBox->currentText() == "Regulator")
{
Regulator* regulator = new Regulator();
actor = regulator;
dialog = new ActorSettingsDialog(regulator, this);
}
else if(ui->comboBox->currentText() == "Polynomal")
{
PolynomalActor* polynomalActor = new PolynomalActor();
actor = polynomalActor;
dialog = new ActorSettingsDialog(polynomalActor, this);
}
if(dialog != nullptr)
{
dialog->setParent(this);
dialog->show();
if(dialog->exec() == QDialog::Accepted)
{
actor_->setFactorActor(actor);
ui->label_FactorActor->setText(actor->getName());
}
else delete actor;
delete dialog;
}
}
void FactorActorWidget::setDirection(const QString& type)
{
if(type == "True") actor_->setFactorDirection(true);
else actor_->setFactorDirection(false);
}
void FactorActorWidget::setPreCancleTime(int time)
{
actor_->setPreCancleTime(time);
}

View File

@ -0,0 +1,30 @@
#ifndef FACTORACTORWIDGET_H
#define FACTORACTORWIDGET_H
#include <QWidget>
#include "../../actors/factoractor.h"
namespace Ui {
class FactorActorWidget;
}
class FactorActorWidget : public QWidget
{
Q_OBJECT
MultiFactorActor* actor_;
public:
explicit FactorActorWidget(MultiFactorActor* actor, QWidget *parent = nullptr);
~FactorActorWidget();
private slots:
void createFactorActor();
void setDirection(const QString& direction);
void setPreCancleTime(int time);
private:
Ui::FactorActorWidget *ui;
};
#endif // FACTORACTORWIDGET_H

View File

@ -0,0 +1,136 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>FactorActorWidget</class>
<widget class="QWidget" name="FactorActorWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>395</width>
<height>169</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QComboBox" name="comboBox">
<item>
<property name="text">
<string>Sensor</string>
</property>
</item>
<item>
<property name="text">
<string>Polynomal</string>
</property>
</item>
<item>
<property name="text">
<string>Alarm</string>
</property>
</item>
<item>
<property name="text">
<string>Timer</string>
</property>
</item>
<item>
<property name="text">
<string>Regulator</string>
</property>
</item>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_FactorActor">
<property name="text">
<string>None</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="pushButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Create Factor</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Factor Direciton:</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QComboBox" name="comboBox_Direcion">
<item>
<property name="text">
<string>True</string>
</property>
</item>
<item>
<property name="text">
<string>False</string>
</property>
</item>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Current Factor:</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Factor time tollerance</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox">
<property name="maximum">
<number>10000</number>
</property>
<property name="value">
<number>10</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_4">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Min</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,48 @@
#include "polynomalactorwidget.h"
#include "ui_polynomalactorwidget.h"
PolynomalActorWidget::PolynomalActorWidget(PolynomalActor* actor, SensorStore* sensors, QWidget *parent):
QWidget(parent),
sensors_(sensors),
actor_(actor),
ui(new Ui::PolynomalActorWidget)
{
ui->setupUi(this);
if(sensors)ui->listView->sensorsChanged(*(sensors->getSensors()));
else
{
ui->listView->hide();
ui->label->hide();
}
double pow3, pow2, pow1, pow0;
actor_->getCoeffiancts(pow3, pow2, pow1, pow0);
ui->doubleSpinBox_pow0->setValue(pow0);
ui->doubleSpinBox_pow1->setValue(pow1);
ui->doubleSpinBox_pow2->setValue(pow2);
ui->doubleSpinBox_pow3->setValue(pow3);
connect(ui->doubleSpinBox_pow3, &QDoubleSpinBox::editingFinished, this, &PolynomalActorWidget::setPow);
connect(ui->doubleSpinBox_pow2, &QDoubleSpinBox::editingFinished, this, &PolynomalActorWidget::setPow);
connect(ui->doubleSpinBox_pow1, &QDoubleSpinBox::editingFinished, this, &PolynomalActorWidget::setPow);
connect(ui->doubleSpinBox_pow0, &QDoubleSpinBox::editingFinished, this, &PolynomalActorWidget::setPow);
connect(ui->listView, &SensorListWidget::clicked, this, &PolynomalActorWidget::setSensor);
}
PolynomalActorWidget::~PolynomalActorWidget()
{
delete ui;
}
void PolynomalActorWidget::setPow()
{
actor_->setCoeffiancts(ui->doubleSpinBox_pow3->value(), ui->doubleSpinBox_pow2->value(), ui->doubleSpinBox_pow1->value(), ui->doubleSpinBox_pow0->value());
}
void PolynomalActorWidget::setSensor(const QModelIndex &index)
{
actor_->setSensor(sensors_->getSensors()->at(index.row()));
}

View File

@ -0,0 +1,30 @@
#ifndef POLYNOMALACTORWIDGET_H
#define POLYNOMALACTORWIDGET_H
#include <QWidget>
#include "../../actors/polynomalactor.h"
namespace Ui {
class PolynomalActorWidget;
}
class PolynomalActorWidget : public QWidget
{
Q_OBJECT
SensorStore* sensors_;
PolynomalActor* actor_;
public:
explicit PolynomalActorWidget(PolynomalActor* regulator, SensorStore* sensors = nullptr, QWidget *parent = nullptr);
~PolynomalActorWidget();
private slots:
void setPow();
void setSensor(const QModelIndex &index);
private:
Ui::PolynomalActorWidget *ui;
};
#endif // POLYNOMALACTORWIDGET_H

View File

@ -0,0 +1,140 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>PolynomalActorWidget</class>
<widget class="QWidget" name="PolynomalActorWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>420</width>
<height>306</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label_4">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Select Sensor</string>
</property>
</widget>
</item>
<item>
<widget class="SensorListWidget" name="listView">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QDoubleSpinBox" name="doubleSpinBox_pow3">
<property name="minimum">
<double>-500.000000000000000</double>
</property>
<property name="maximum">
<double>500.000000000000000</double>
</property>
<property name="value">
<double>0.000000000000000</double>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>x³+</string>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="doubleSpinBox_pow2">
<property name="minimum">
<double>-500.000000000000000</double>
</property>
<property name="maximum">
<double>500.000000000000000</double>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>x²+</string>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="doubleSpinBox_pow1">
<property name="minimum">
<double>-500.000000000000000</double>
</property>
<property name="maximum">
<double>500.000000000000000</double>
</property>
<property name="value">
<double>1.000000000000000</double>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>x+</string>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="doubleSpinBox_pow0">
<property name="minimum">
<double>-500.000000000000000</double>
</property>
<property name="maximum">
<double>500.000000000000000</double>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>SensorListWidget</class>
<extends>QListView</extends>
<header location="global">../src/ui/sensorlistwidget.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,45 @@
#include "itemcreationdialog.h"
#include "ui_itemcreationdialog.h"
#include "itemsettingswidgets/messageitemsettingswidget.h"
ItemCreationDialog::ItemCreationDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::ItemCreationDialog)
{
ui->setupUi(this);
std::shared_ptr<MessageItem> messageItem(new MessageItem);
item = messageItem;
widget = new MessageItemSettingsWidget(messageItem, this);
ui->verticalLayout->addWidget(widget);
connect(ui->comboBox, &QComboBox::currentTextChanged, this, &ItemCreationDialog::itemTypeChanged);
connect(ui->lineEdit, &QLineEdit::textChanged, this, &ItemCreationDialog::itemNameChanged);
}
ItemCreationDialog::~ItemCreationDialog()
{
delete ui;
delete widget;
}
void ItemCreationDialog::itemTypeChanged(const QString& type)
{
ui->verticalLayout->removeWidget(widget);
delete widget;
if(type == "Message")
{
std::shared_ptr<MessageItem> messageItem(new MessageItem);
item = messageItem;
widget = new MessageItemSettingsWidget(messageItem, this);
ui->verticalLayout_2->addWidget(widget);
}
}
void ItemCreationDialog::itemNameChanged(const QString& name)
{
if(item)
{
item->setName(name);
}
}

View File

@ -0,0 +1,33 @@
#ifndef ITEMCREATIONDIALOG_H
#define ITEMCREATIONDIALOG_H
#include <QDialog>
#include <memory>
#include "../items/item.h"
namespace Ui {
class ItemCreationDialog;
}
class ItemCreationDialog : public QDialog
{
Q_OBJECT
QWidget* widget;
public:
explicit ItemCreationDialog(QWidget *parent = nullptr);
~ItemCreationDialog();
std::shared_ptr<Item> item;
private slots:
void itemTypeChanged(const QString& type);
void itemNameChanged(const QString& name);
private:
Ui::ItemCreationDialog *ui;
};
#endif // ITEMCREATIONDIALOG_H

View File

@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ItemCreationDialog</class>
<widget class="QDialog" name="ItemCreationDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>140</height>
</rect>
</property>
<property name="windowTitle">
<string>Create Item</string>
</property>
<property name="windowIcon">
<iconset resource="../../resources.qrc">
<normaloff>:/images/UVOSicon.bmp</normaloff>:/images/UVOSicon.bmp</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Type</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox">
<item>
<property name="text">
<string>Message</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Name</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="text">
<string>Item</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout"/>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="../../resources.qrc"/>
</resources>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>ItemCreationDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>ItemCreationDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -1,6 +1,7 @@
#include "itemscrollbox.h"
#include "ui_relayscrollbox.h"
#include "../items/auxitem.h"
#include "../items/messageitem.h"
ItemScrollBox::ItemScrollBox(QWidget *parent) :
QWidget(parent),
@ -24,11 +25,17 @@ void ItemScrollBox::addItem(std::weak_ptr<Item> item)
{
widgets_.push_back(new ItemWidget(item, true));
}
else if(dynamic_cast<MessageItem*>(workItem.get()))
{
widgets_.push_back(new ItemWidget(item, false, true));
}
else
{
widgets_.push_back(new ItemWidget(item));
}
ui->relayWidgetVbox->addWidget(widgets_.back());
connect(widgets_.back(), &ItemWidget::deleteRequest, this, &ItemScrollBox::deleteRequest);
connect(widgets_.back(), &ItemWidget::deleteRequest, this, &ItemScrollBox::removeItem);
}
}

View File

@ -21,6 +21,10 @@ class ItemScrollBox : public QWidget
private:
std::vector< ItemWidget* > widgets_;
signals:
void deleteRequest(const ItemData& item);
public:
explicit ItemScrollBox(QWidget *parent = nullptr);
~ItemScrollBox();

View File

@ -5,6 +5,7 @@
#include "../actors/sensoractor.h"
#include "../actors/timeractor.h"
#include "../actors/regulator.h"
#include "../actors/factoractor.h"
#include<memory>
@ -31,21 +32,17 @@ ItemSettingsDialog::ItemSettingsDialog(Item* item, QWidget *parent) :
ui->label_address_lable->hide();
ui->label_id_lable->hide();
}
ui->checkBox_auto->setChecked(item_->actorsActive());
connect(ui->checkBox_auto, &QCheckBox::toggled, item_, &Relay::setActorsActive);
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);
ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Actor"));
ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("Action"));
ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("Acts on"));
ui->tableWidget->setHorizontalHeaderItem(3, new QTableWidgetItem("Enabled"));
ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("Enabled"));
ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
ui->tableWidget->horizontalHeader()->resizeSection(1, 60);
ui->tableWidget->horizontalHeader()->resizeSection(2, 60);
ui->tableWidget->horizontalHeader()->resizeSection(3, 75);
ui->tableWidget->horizontalHeader()->resizeSection(2, 75);
loadActorList();
}
@ -63,8 +60,7 @@ void ItemSettingsDialog::loadActorList()
{
ui->tableWidget->setItem(i, 0, new QTableWidgetItem(item_->getActors()[i]->getName()));
ui->tableWidget->setItem(i, 1, new QTableWidgetItem(item_->getActors()[i]->actionName()));
ui->tableWidget->setItem(i, 2, new QTableWidgetItem("Item"));
ui->tableWidget->setItem(i, 3, new QTableWidgetItem(item_->getActors()[i]->isActive() ? "Y" : "N"));
ui->tableWidget->setItem(i, 2, new QTableWidgetItem(item_->getActors()[i]->isActive() ? "Y" : "N"));
}
}
@ -79,11 +75,11 @@ void ItemSettingsDialog::addActor()
actor = alarm;
dialog = new ActorSettingsDialog(alarm, this);
}
else if(ui->comboBox->currentText() == "Sensor" && item_->getSensorStore() != nullptr)
else if(ui->comboBox->currentText() == "Sensor")
{
SensorActor* sensorActor = new SensorActor();
actor = sensorActor;
dialog = new ActorSettingsDialog(sensorActor, item_->getSensorStore(), this);
dialog = new ActorSettingsDialog(sensorActor, this);
}
else if(ui->comboBox->currentText() == "Timer" )
{
@ -91,11 +87,25 @@ void ItemSettingsDialog::addActor()
actor = timerActor;
dialog = new ActorSettingsDialog(timerActor, this);
}
else if(ui->comboBox->currentText() == "Regulator" && item_->getSensorStore() != nullptr)
else if(ui->comboBox->currentText() == "Regulator")
{
Regulator* regulator = new Regulator();
actor = regulator;
dialog = new ActorSettingsDialog(regulator, item_->getSensorStore(), this);
dialog = new ActorSettingsDialog(regulator, this);
}
else if(ui->comboBox->currentText() == "Polynomal")
{
PolynomalActor* polynomalActor = new PolynomalActor();
actor = polynomalActor;
dialog = new ActorSettingsDialog(polynomalActor, this);
}
else if(ui->comboBox->currentText() == "Multi Factor")
{
MultiFactorActor* polynomalActor = new MultiFactorActor();
actor = polynomalActor;
dialog = new ActorSettingsDialog(polynomalActor, this);
}
@ -133,13 +143,17 @@ void ItemSettingsDialog::editActor()
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);
ActorSettingsDialog* dialog;
if(alarmTime) dialog = new ActorSettingsDialog(alarmTime, this);
else if(regulator) dialog = new ActorSettingsDialog(regulator, nullptr, this);
else if(sensorActor) dialog = new ActorSettingsDialog(sensorActor, nullptr, this);
else if(regulator) dialog = new ActorSettingsDialog(regulator, this);
else if(sensorActor) dialog = new ActorSettingsDialog(sensorActor, this);
else if(timerActor) dialog = new ActorSettingsDialog(timerActor, this);
else if(polynomalActor) dialog = new ActorSettingsDialog(polynomalActor, this);
else if(factorActor) dialog = new ActorSettingsDialog(factorActor, this);
else dialog = new ActorSettingsDialog(actor, this);
dialog->setParent(this);
dialog->show();
@ -149,7 +163,7 @@ void ItemSettingsDialog::editActor()
{
ui->tableWidget->item(i, 0)->setText(item_->getActors()[i]->getName());
ui->tableWidget->item(i, 1)->setText(item_->getActors()[i]->actionName());
ui->tableWidget->item(i, 3)->setText(item_->getActors()[i]->isActive() ? "Y" : "N");
ui->tableWidget->item(i, 2)->setText(item_->getActors()[i]->isActive() ? "Y" : "N");
}
}
}

View File

@ -94,13 +94,6 @@
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="checkBox_auto">
<property name="text">
<string>Actors enabled</string>
</property>
</widget>
</item>
<item>
<widget class="QTableWidget" name="tableWidget">
<property name="frameShape">
@ -143,7 +136,7 @@
<number>0</number>
</property>
<property name="columnCount">
<number>4</number>
<number>3</number>
</property>
<attribute name="horizontalHeaderVisible">
<bool>false</bool>
@ -163,7 +156,6 @@
<column/>
<column/>
<column/>
<column/>
</widget>
</item>
<item>
@ -214,7 +206,7 @@
</item>
<item>
<property name="text">
<string>Linear</string>
<string>Polynomal</string>
</property>
</item>
<item>
@ -232,6 +224,11 @@
<string>Timer</string>
</property>
</item>
<item>
<property name="text">
<string>Multi Factor</string>
</property>
</item>
</widget>
</item>
<item>

View File

@ -5,7 +5,7 @@
#include <QDebug>
#include <QSlider>
ItemWidget::ItemWidget(std::weak_ptr<Item> item, bool analog, QWidget *parent) :
ItemWidget::ItemWidget(std::weak_ptr<Item> item, bool analog, bool nameOnly, QWidget *parent) :
QWidget(parent),
item_(item),
ui(new Ui::ItemWidget)
@ -17,10 +17,12 @@ ItemWidget::ItemWidget(std::weak_ptr<Item> item, bool analog, QWidget *parent) :
ui->horizontalSpacer->changeSize(0,0);
ui->checkBox->hide();
}
else
else if(nameOnly)
{
ui->checkBox->hide();
ui->slider->hide();
}
else ui->slider->hide();
if(auto workingRelay = item_.lock())
{
@ -32,11 +34,20 @@ ItemWidget::ItemWidget(std::weak_ptr<Item> item, bool analog, QWidget *parent) :
else connect(ui->checkBox, &QCheckBox::toggled, this, &ItemWidget::moveToState);
connect(ui->pushButton, &QPushButton::clicked, this, &ItemWidget::showSettingsDialog);
connect(workingRelay.get(), &Relay::valueChanged, this, &ItemWidget::stateChanged);
connect(ui->pushButton_Remove, &QPushButton::clicked, this, &ItemWidget::deleteItem);
}
else disable();
}
void ItemWidget::deleteItem()
{
if(auto workingItem = item_.lock())
{
deleteRequest(*workingItem);
}
}
void ItemWidget::moveToValue(int value)
{
if(auto workingItem = item_.lock()) workingItem->setValue(value);

View File

@ -18,13 +18,18 @@ private:
void disable();
signals:
void deleteRequest(const ItemData& item);
private slots:
void showSettingsDialog();
void moveToState(bool state);
void moveToValue(int value);
void deleteItem();
public:
explicit ItemWidget(std::weak_ptr<Item> item, bool analog = false, QWidget *parent = nullptr);
explicit ItemWidget(std::weak_ptr<Item> item, bool analog = false, bool nameOnly = false, QWidget *parent = nullptr);
std::weak_ptr<Item> getItem();
bool controles(const ItemData& relay);
~ItemWidget();

View File

@ -67,6 +67,25 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_Remove">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>30</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>X</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>

View File

@ -1,42 +1,47 @@
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "itemscrollbox.h"
#include "itemsettingsdialog.h"
#include "itemcreationdialog.h"
#include "../mainobject.h"
MainWindow::MainWindow(Microcontroller *micro, PowerItem* powerItem, ItemStore* itemStore, SensorStore *sensorStore, bool master, QWidget *parent) :
MainWindow::MainWindow(MainObject * const mainObject, QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
colorChooser(this),
_micro(micro),
_powerItem(powerItem)
_micro(&mainObject->micro),
_powerItem(&mainObject->powerItem)
{
ui->setupUi(this);
if(!master) connect(ui->pushButton_broadcast, &QPushButton::clicked, this, &MainWindow::sigBrodcast);
if(!mainObject->master) connect(ui->pushButton_broadcast, &QPushButton::clicked, this, &MainWindow::sigBrodcast);
else ui->pushButton_broadcast->hide();
connect(ui->pushButton_power, SIGNAL(clicked()), this, SLOT(showPowerItemDialog()));
//Relays
connect(ui->pushButton_refesh, SIGNAL(clicked()), _micro, SLOT(requestState()));
connect(itemStore, &ItemStore::itemAdded, ui->relayList, &ItemScrollBox::addItem);
connect(itemStore, &ItemStore::itemDeleted, ui->relayList, &ItemScrollBox::removeItem);
if(mainObject->master)connect(ui->pushButton_refesh, &QPushButton::clicked, _micro, &Microcontroller::requestState);
else connect(ui->pushButton_refesh, &QPushButton::clicked, &mainObject->broadCast, &BroadCast::requestJson);
connect(&mainObject->items, &ItemStore::itemAdded, ui->relayList, &ItemScrollBox::addItem);
connect(&mainObject->items, &ItemStore::itemDeleted, ui->relayList, &ItemScrollBox::removeItem);
for(size_t i = 0; i < itemStore->getItems()->size(); ++i)
for(size_t i = 0; i < mainObject->items.getItems()->size(); ++i)
{
ui->relayList->addItem(itemStore->getItems()->at(i));
ui->relayList->addItem(mainObject->items.getItems()->at(i));
}
//Sensors
ui->sensorListView->sensorsChanged(*(sensorStore->getSensors()));
connect(sensorStore, &SensorStore::stateChenged, ui->sensorListView, &SensorListWidget::sensorsChanged);
ui->sensorListView->setShowHidden(false);
ui->sensorListView->sensorsChanged(*globalSensors.getSensors());
connect(&globalSensors, &SensorStore::stateChenged, ui->sensorListView, &SensorListWidget::sensorsChanged);
//RGB Leds
connect(&colorChooser, SIGNAL(colorSelected(const QColor)), this, SLOT(slotChangedRgb(const QColor)));
connect(ui->button_quit, SIGNAL(clicked()), this, SLOT(close()));
connect(ui->button_color, SIGNAL(clicked()), &colorChooser, SLOT(show()));
connect(ui->pushButton_addItem, &QPushButton::clicked, this, &MainWindow::showItemCreationDialog);
connect(ui->relayList, &ItemScrollBox::deleteRequest, &mainObject->items, &ItemStore::removeItem);
}
MainWindow::~MainWindow()
@ -56,6 +61,16 @@ void MainWindow::slotChangedRgb(const QColor color)
_micro->changeRgbColor(color);
}
void MainWindow::showItemCreationDialog()
{
ItemCreationDialog diag(this);
diag.show();
if(diag.exec())
{
createdItem(diag.item);
}
}
void MainWindow::changeHeaderLableText(QString string)
{
if(string.size() > 28)

View File

@ -14,6 +14,8 @@
#include "../broadcast.h"
class MainObject;
namespace Ui
{
class MainWindow;
@ -24,7 +26,7 @@ class MainWindow : public QMainWindow
Q_OBJECT
public:
explicit MainWindow(Microcontroller *micro, PowerItem* powerItem, ItemStore* itemStore, SensorStore *sensorStore, bool master, QWidget *parent = nullptr);
explicit MainWindow(MainObject * const mainObject, QWidget *parent = nullptr);
~MainWindow();
private:
@ -39,12 +41,14 @@ private:
signals:
void sigBrodcast();
void createdItem(std::shared_ptr<Item> item);
private slots:
//RGB
void slotChangedRgb(const QColor color);
void showPowerItemDialog();
void showItemCreationDialog();
public slots:

View File

@ -44,7 +44,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout_10" stretch="0,1">
<item>
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,1,0">
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,0">
<item>
<widget class="QLabel" name="label_serialRecive">
<property name="sizePolicy">
@ -81,15 +81,9 @@
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
<property name="showGrid">
<property name="showGrid" stdset="0">
<bool>false</bool>
</property>
<property name="gridStyle">
<enum>Qt::NoPen</enum>
</property>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
</widget>
</item>
</layout>
@ -190,7 +184,14 @@
<item>
<widget class="QPushButton" name="pushButton_broadcast">
<property name="text">
<string>Broadcast</string>
<string>Save</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_addItem">
<property name="text">
<string>Add Item</string>
</property>
</widget>
</item>
@ -219,17 +220,17 @@
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
<class>SensorListWidget</class>
<extends>QListView</extends>
<header location="global">../src/ui/sensorlistwidget.h</header>
</customwidget>
<customwidget>
<class>ItemScrollBox</class>
<extends>QWidget</extends>
<header location="global">../src/ui/itemscrollbox.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>SensorListWidget</class>
<extends>QTableWidget</extends>
<header location="global">../src/ui/sensorlistwidget.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="../../resources.qrc"/>

View File

@ -3,7 +3,7 @@
#include <QDebug>
#include <QHeaderView>
SensorListWidget::SensorListWidget(QWidget *parent): QTableWidget(parent)
SensorListWidget::SensorListWidget(const bool showHidden, QWidget *parent): QTableWidget(parent), showHidden_(showHidden)
{
setColumnCount(2);
setSelectionBehavior(QAbstractItemView::SelectRows);
@ -13,7 +13,7 @@ SensorListWidget::SensorListWidget(QWidget *parent): QTableWidget(parent)
setHorizontalHeaderItem(1, new QTableWidgetItem("Value"));
}
SensorListWidget::SensorListWidget(SensorStore& sensorStore, QWidget* parent): QTableWidget (parent)
SensorListWidget::SensorListWidget(SensorStore& sensorStore, const bool showHidden, QWidget* parent): QTableWidget (parent), showHidden_(showHidden)
{
sensorsChanged(*(sensorStore.getSensors()));
}
@ -23,25 +23,47 @@ void SensorListWidget::sensorsChanged(std::vector<Sensor> sensors)
clear();
setHorizontalHeaderItem(0, new QTableWidgetItem("Sensor"));
setHorizontalHeaderItem(1, new QTableWidgetItem("Value"));
setRowCount(sensors.size());
size_t nonHiddenCount = sensors.size();
if(!showHidden_)
{
nonHiddenCount = 0;
for(size_t i = 0; i < sensors.size(); ++i)
{
if(!sensors[i].hidden) nonHiddenCount++;
}
}
size_t listLen = 0;
for(size_t i = 0; i < sensors.size(); ++i) if(showHidden_ || !sensors[i].hidden) ++listLen;
setRowCount(static_cast<int>(listLen));
size_t row = 0;
for(size_t i = 0; i < sensors.size(); ++i)
{
QString itemString;
itemString.append(QString::number(sensors[i].field));
itemString.append(' ');
if(showHidden_ || !sensors[i].hidden)
{
QString itemString;
itemString.append(QString::number(sensors[i].field));
itemString.append(' ');
if(sensors[i].type == Sensor::TYPE_DOOR)
{
if(sensors[i].field) itemString.append("\"Open\"");
else itemString.append("\"Closed\"");
if(sensors[i].type == Sensor::TYPE_DOOR)
{
if(static_cast<bool>(sensors[i].field)) itemString.append("\"Open\"");
else itemString.append("\"Closed\"");
}
else if(sensors[i].type == Sensor::TYPE_AUDIO_OUTPUT)
{
if(static_cast<bool>(sensors[i].field)) itemString.append("\"Playing\"");
else itemString.append("\"Silent\"");
}
setItem(static_cast<int>(row), 0, new QTableWidgetItem(sensors[i].name + (sensors[i].hidden ? "(H)" : "")));
setItem(static_cast<int>(row), 1, new QTableWidgetItem(itemString));
++row;
}
else if(sensors[i].type == Sensor::TYPE_AUDIO_OUTPUT)
{
if(sensors[i].field) itemString.append("\"Playing\"");
else itemString.append("\"Silent\"");
}
setItem(i, 0, new QTableWidgetItem(sensors[i].name));
setItem(i, 1, new QTableWidgetItem(itemString));
}
}
void SensorListWidget::setShowHidden(const bool showHidden)
{
showHidden_=showHidden;
}

View File

@ -6,11 +6,15 @@
class SensorListWidget : public QTableWidget
{
Q_OBJECT
bool showHidden_;
public:
SensorListWidget(QWidget *parent = nullptr);
SensorListWidget(SensorStore& sensorStore, QWidget* parent = nullptr);
SensorListWidget(const bool showHidden = true, QWidget *parent = nullptr);
SensorListWidget(SensorStore& sensorStore, const bool showHidden = true, QWidget* parent = nullptr);
virtual ~SensorListWidget(){}
void setShowHidden(const bool showHidden);
public slots: