#include "itemwidget.h" #include "ui_itemwidget.h" #include #include #include ItemWidget::ItemWidget(std::weak_ptr item, bool analog, bool nameOnly, QWidget *parent) : QWidget(parent), item_(item), ui(new Ui::ItemWidget) { ui->setupUi(this); if(analog) { ui->horizontalSpacer->changeSize(0,0); ui->checkBox->hide(); } else if(nameOnly) { ui->checkBox->hide(); ui->slider->hide(); } else ui->slider->hide(); if(auto workingRelay = item_.lock()) { ui->checkBox->setChecked(workingRelay->getValue()); ui->label->setText(workingRelay->getName()); if(analog)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(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); 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); } bool ItemWidget::controles(const ItemData& relay) { if(auto workingRelay = item_.lock()) { if(relay == *workingRelay) return true; else return false; } return true; } void ItemWidget::showSettingsDialog() { if(auto workingRelay = item_.lock()) { ItemSettingsDialog dialog(workingRelay.get(), this); dialog.exec(); } else disable(); } std::weak_ptr ItemWidget::getItem() { return item_; } void ItemWidget::stateChanged(int state) { qDebug()<<"widget got state "<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; }