inital commit
This commit is contained in:
commit
fede535b95
32 changed files with 2357 additions and 0 deletions
170
src/ui/itemwidget.cpp
Normal file
170
src/ui/itemwidget.cpp
Normal file
|
|
@ -0,0 +1,170 @@
|
|||
#include "itemwidget.h"
|
||||
#include "ui_itemwidget.h"
|
||||
|
||||
#include <QCheckBox>
|
||||
#include <QDebug>
|
||||
#include <QSlider>
|
||||
#include "../items/train.h"
|
||||
|
||||
ItemWidget::ItemWidget(std::weak_ptr<Item> item, QWidget *parent) :
|
||||
QWidget(parent),
|
||||
item_(item),
|
||||
ui(new Ui::ItemWidget)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
if(auto workingRelay = item_.lock())
|
||||
{
|
||||
ui->label->setText(workingRelay->getName());
|
||||
|
||||
connect(ui->slider, &QSlider::valueChanged, this, &ItemWidget::moveToValue);
|
||||
connect(ui->checkBox_f1, &QCheckBox::stateChanged, this, &ItemWidget::f1);
|
||||
connect(ui->checkBox_f2, &QCheckBox::stateChanged, this, &ItemWidget::f2);
|
||||
connect(ui->checkBox_f3, &QCheckBox::stateChanged, this, &ItemWidget::f3);
|
||||
connect(ui->checkBox_f4, &QCheckBox::stateChanged, this, &ItemWidget::f4);
|
||||
connect(ui->pushButton_reverse, &QPushButton::clicked, this, &ItemWidget::reverse);
|
||||
|
||||
Train* train = dynamic_cast<Train*>(workingRelay.get());
|
||||
if(!train)
|
||||
{
|
||||
ui->pushButton_reverse->hide();
|
||||
}
|
||||
else
|
||||
{
|
||||
uint8_t functionMask = train->getFunctionMask();
|
||||
if(!(functionMask & (1 << 0)))
|
||||
ui->checkBox_f1->hide();
|
||||
if(!(functionMask & (1 << 1)))
|
||||
ui->checkBox_f2->hide();
|
||||
if(!(functionMask & (1 << 2)))
|
||||
ui->checkBox_f3->hide();
|
||||
if(!(functionMask & (1 << 3)))
|
||||
ui->checkBox_f4->hide();
|
||||
}
|
||||
|
||||
}
|
||||
else disable();
|
||||
}
|
||||
|
||||
void ItemWidget::deleteItem()
|
||||
{
|
||||
if(auto workingItem = item_.lock())
|
||||
{
|
||||
deleteRequest(*workingItem);
|
||||
}
|
||||
}
|
||||
|
||||
void ItemWidget::moveToValue(int value)
|
||||
{
|
||||
qDebug()<<__func__;
|
||||
ui->pushButton_reverse->setDisabled(value != 0);
|
||||
if(auto workingItem = item_.lock())
|
||||
workingItem->setValue(value);
|
||||
else disable();
|
||||
}
|
||||
|
||||
void ItemWidget::f1(int value)
|
||||
{
|
||||
if(auto workingItem = item_.lock())
|
||||
workingItem->setFunction(0, value == Qt::Checked);
|
||||
else disable();
|
||||
}
|
||||
|
||||
void ItemWidget::f2(int value)
|
||||
{
|
||||
if(auto workingItem = item_.lock())
|
||||
workingItem->setFunction(1, value == Qt::Checked);
|
||||
else disable();
|
||||
}
|
||||
|
||||
|
||||
void ItemWidget::f3(int value)
|
||||
{
|
||||
if(auto workingItem = item_.lock())
|
||||
workingItem->setFunction(2, value == Qt::Checked);
|
||||
else disable();
|
||||
}
|
||||
|
||||
void ItemWidget::f4(int value)
|
||||
{
|
||||
if(auto workingItem = item_.lock())
|
||||
workingItem->setFunction(3, value == Qt::Checked);
|
||||
else disable();
|
||||
}
|
||||
|
||||
void ItemWidget::reverse()
|
||||
{
|
||||
if(auto workingItem = item_.lock())
|
||||
{
|
||||
Train* train = dynamic_cast<Train*>(workingItem.get());
|
||||
if(train && ui->slider->value() == 0)
|
||||
train->reverse();
|
||||
else
|
||||
ui->slider->setValue(0);
|
||||
}
|
||||
else disable();
|
||||
}
|
||||
|
||||
void ItemWidget::disable()
|
||||
{
|
||||
ui->checkBox_f1->setEnabled(false);
|
||||
ui->checkBox_f2->setEnabled(false);
|
||||
ui->checkBox_f3->setEnabled(false);
|
||||
ui->checkBox_f4->setEnabled(false);
|
||||
ui->label->setEnabled(false);
|
||||
ui->slider->setEnabled(false);
|
||||
ui->pushButton_reverse->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::stepUp()
|
||||
{
|
||||
ui->slider->setValue(ui->slider->value()+1);
|
||||
}
|
||||
|
||||
void ItemWidget::stepDown()
|
||||
{
|
||||
if(ui->slider->value() == 0)
|
||||
moveToValue(0);
|
||||
ui->slider->setValue(ui->slider->value()-1);
|
||||
}
|
||||
|
||||
void ItemWidget::setShortcuts(QKeySequence up, QKeySequence down, QKeySequence rev)
|
||||
{
|
||||
shortcuts_.clear();
|
||||
shortcuts_.push_back(std::unique_ptr<QShortcut>(new QShortcut(up, this)));
|
||||
connect(shortcuts_.back().get(), &QShortcut::activated, this, &ItemWidget::stepUp);
|
||||
shortcuts_.push_back(std::unique_ptr<QShortcut>(new QShortcut(down, this)));
|
||||
connect(shortcuts_.back().get(), &QShortcut::activated, this, &ItemWidget::stepDown);
|
||||
shortcuts_.push_back(std::unique_ptr<QShortcut>(new QShortcut(rev, this)));
|
||||
connect(shortcuts_.back().get(), &QShortcut::activated, this, &ItemWidget::reverse);
|
||||
}
|
||||
|
||||
std::weak_ptr<Item> ItemWidget::getItem()
|
||||
{
|
||||
return item_;
|
||||
}
|
||||
|
||||
void ItemWidget::stateChanged(int state)
|
||||
{
|
||||
qDebug()<<"widget got state "<<state;
|
||||
ui->slider->blockSignals(true);
|
||||
ui->slider->setValue(state);
|
||||
ui->slider->blockSignals(false);
|
||||
}
|
||||
|
||||
ItemWidget::~ItemWidget()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue