#include "itemwidget.h" #include "ui_itemwidget.h" #include #include #include ItemWidget::ItemWidget(std::weak_ptr 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 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; }