UvosSmartHomeInterface/src/ui/itemwidget.cpp

121 lines
2.4 KiB
C++

#include "itemwidget.h"
#include "ui_itemwidget.h"
#include <QCheckBox>
#include <QDebug>
#include <QSlider>
ItemWidget::ItemWidget(std::weak_ptr<Item> item, QWidget *parent) :
QWidget(parent),
item_(item),
ui(new Ui::ItemWidget)
{
ui->setupUi(this);
if(auto workingItem = item_.lock())
{
if(workingItem->getValueType() == ITEM_VALUE_UINT)
{
ui->horizontalSpacer->changeSize(0,0);
ui->checkBox->hide();
}
else if(workingItem->getValueType() == ITEM_VALUE_NO_VALUE)
{
ui->checkBox->hide();
ui->slider->hide();
}
else
{
ui->slider->hide();
}
ui->checkBox->setChecked(workingItem->getValue());
ui->label->setText(workingItem->getName());
if(workingItem->getValueType() == ITEM_VALUE_UINT)
connect(ui->slider, &QSlider::valueChanged, this, &ItemWidget::moveToValue);
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(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);
else
disable();
}
void ItemWidget::moveToState(bool state)
{
if(auto workingItem = item_.lock())
workingItem->setValue(state);
else
disable();
}
void ItemWidget::disable()
{
ui->checkBox->setEnabled(false);
ui->label->setEnabled(false);
ui->slider->setEnabled(false);
ui->pushButton_Remove->setEnabled(false);
}
bool ItemWidget::controles(const ItemData& relay)
{
if(auto workingItem = item_.lock())
{
if(relay == *workingItem) return true;
else return false;
}
return true;
}
void ItemWidget::showSettingsDialog()
{
if(auto workingItem = item_.lock())
{
ItemSettingsDialog dialog(workingItem, this);
dialog.exec();
}
else disable();
}
std::weak_ptr<Item> ItemWidget::getItem()
{
return item_;
}
void ItemWidget::stateChanged(int state)
{
ui->slider->blockSignals(true);
ui->slider->setValue(state);
ui->slider->blockSignals(false);
ui->checkBox->blockSignals(true);
ui->checkBox->setChecked(state);
ui->checkBox->blockSignals(false);
}
ItemWidget::~ItemWidget()
{
delete ui;
}