add support for turnouts

This commit is contained in:
2022-01-21 19:41:52 +01:00
parent fede535b95
commit 4ff73760e5
12 changed files with 184 additions and 44 deletions

View File

@ -1,5 +1,8 @@
#include "itemscrollbox.h"
#include "ui_relayscrollbox.h"
#include "ui_relayscrollbox.h"
#include "../items/train.h"
#include "../items/turnout.h"
ItemScrollBox::ItemScrollBox(QWidget *parent) :
QWidget(parent),
@ -17,24 +20,40 @@ ItemScrollBox::~ItemScrollBox()
void ItemScrollBox::addItem(std::weak_ptr<Item> item)
{
static int lifetimeNum = 0;
if(auto workItem = item.lock())
{
widgets_.push_back(new ItemWidget(item, this));
if(lifetimeNum == 0)
widgets_.back()->setShortcuts(QKeySequence(Qt::Key_Q), QKeySequence(Qt::Key_A), QKeySequence(Qt::Key_Z));
else if(lifetimeNum == 1)
widgets_.back()->setShortcuts(QKeySequence(Qt::Key_W), QKeySequence(Qt::Key_S), QKeySequence(Qt::Key_X));
else if(lifetimeNum == 2)
widgets_.back()->setShortcuts(QKeySequence(Qt::Key_E), QKeySequence(Qt::Key_D), QKeySequence(Qt::Key_C));
else if(lifetimeNum == 3)
widgets_.back()->setShortcuts(QKeySequence(Qt::Key_R), QKeySequence(Qt::Key_F), QKeySequence(Qt::Key_V));
else if(lifetimeNum == 4)
widgets_.back()->setShortcuts(QKeySequence(Qt::Key_T), QKeySequence(Qt::Key_G), QKeySequence(Qt::Key_B));
Train* train = dynamic_cast<Train*>(workItem.get());
Turnout* turnout = dynamic_cast<Turnout*>(workItem.get());
if(train)
{
if(train->getTrainId() == 0)
widgets_.back()->setShortcuts(QKeySequence(Qt::Key_Q), QKeySequence(Qt::Key_A), QKeySequence(Qt::Key_Z));
else if(train->getTrainId() == 1)
widgets_.back()->setShortcuts(QKeySequence(Qt::Key_W), QKeySequence(Qt::Key_S), QKeySequence(Qt::Key_X));
else if(train->getTrainId() == 2)
widgets_.back()->setShortcuts(QKeySequence(Qt::Key_E), QKeySequence(Qt::Key_D), QKeySequence(Qt::Key_C));
else if(train->getTrainId() == 3)
widgets_.back()->setShortcuts(QKeySequence(Qt::Key_R), QKeySequence(Qt::Key_F), QKeySequence(Qt::Key_V));
else if(train->getTrainId() == 4)
widgets_.back()->setShortcuts(QKeySequence(Qt::Key_T), QKeySequence(Qt::Key_G), QKeySequence(Qt::Key_B));
}
else if(turnout)
{
if(turnout->getTurnoutId() == 0)
widgets_.back()->setShortcuts(QKeySequence(), QKeySequence(), QKeySequence(Qt::Key_1));
else if(turnout->getTurnoutId() == 1)
widgets_.back()->setShortcuts(QKeySequence(), QKeySequence(), QKeySequence(Qt::Key_2));
else if(turnout->getTurnoutId() == 2)
widgets_.back()->setShortcuts(QKeySequence(), QKeySequence(), QKeySequence(Qt::Key_3));
else if(turnout->getTurnoutId() == 3)
widgets_.back()->setShortcuts(QKeySequence(), QKeySequence(), QKeySequence(Qt::Key_4));
else if(turnout->getTurnoutId() == 4)
widgets_.back()->setShortcuts(QKeySequence(), QKeySequence(), QKeySequence(Qt::Key_5));
}
ui->relayWidgetVbox->addWidget(widgets_.back());
connect(widgets_.back(), &ItemWidget::deleteRequest, this, &ItemScrollBox::deleteRequest);
connect(widgets_.back(), &ItemWidget::deleteRequest, this, &ItemScrollBox::removeItem);
lifetimeNum++;
}
}

View File

@ -5,6 +5,7 @@
#include <QDebug>
#include <QSlider>
#include "../items/train.h"
#include "../items/turnout.h"
ItemWidget::ItemWidget(std::weak_ptr<Item> item, QWidget *parent) :
QWidget(parent),
@ -23,14 +24,29 @@ ItemWidget::ItemWidget(std::weak_ptr<Item> item, QWidget *parent) :
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);
connect(ui->radioButton_left, &QRadioButton::clicked, this, [this](){moveToValue(0);});
connect(ui->radioButton_right, &QRadioButton::clicked, this, [this](){moveToValue(1);});
Train* train = dynamic_cast<Train*>(workingRelay.get());
if(!train)
{
Turnout* turnout = dynamic_cast<Turnout*>(workingRelay.get());
if(turnout)
{
ui->checkBox_f1->hide();
ui->checkBox_f2->hide();
ui->checkBox_f3->hide();
ui->checkBox_f4->hide();
ui->slider->hide();
}
if(!train)
{
ui->pushButton_reverse->hide();
}
else
{
}
else
{
ui->radioButton_left->hide();
ui->radioButton_right->hide();
uint8_t functionMask = train->getFunctionMask();
if(!(functionMask & (1 << 0)))
ui->checkBox_f1->hide();
@ -40,8 +56,7 @@ ItemWidget::ItemWidget(std::weak_ptr<Item> item, QWidget *parent) :
ui->checkBox_f3->hide();
if(!(functionMask & (1 << 3)))
ui->checkBox_f4->hide();
}
}
}
else disable();
}
@ -56,11 +71,21 @@ void ItemWidget::deleteItem()
void ItemWidget::moveToValue(int value)
{
qDebug()<<__func__;
ui->slider->blockSignals(true);
ui->radioButton_left->blockSignals(true);
ui->radioButton_right->blockSignals(true);
ui->pushButton_reverse->setDisabled(value != 0);
ui->slider->setValue(value);
ui->radioButton_left->setChecked(!value);
ui->radioButton_right->setChecked(value);
if(auto workingItem = item_.lock())
workingItem->setValue(value);
else disable();
ui->slider->blockSignals(false);
ui->radioButton_left->blockSignals(false);
ui->radioButton_right->blockSignals(false);
}
void ItemWidget::f1(int value)
@ -97,10 +122,13 @@ void ItemWidget::reverse()
if(auto workingItem = item_.lock())
{
Train* train = dynamic_cast<Train*>(workingItem.get());
if(train && ui->slider->value() == 0)
if(train && workingItem->getValue() == 0)
train->reverse();
else
ui->slider->setValue(0);
{
qDebug()<<"!((bool)workingItem->getValue()) "<<!((bool)workingItem->getValue());
moveToValue(!((bool)workingItem->getValue()));
}
}
else disable();
}
@ -130,14 +158,17 @@ bool ItemWidget::controles(const ItemData& relay)
void ItemWidget::stepUp()
{
ui->slider->setValue(ui->slider->value()+1);
moveToValue(ui->slider->value()+1);
}
void ItemWidget::stepDown()
{
if(ui->slider->value() == 0)
{
moveToValue(0);
ui->slider->setValue(ui->slider->value()-1);
return;
}
moveToValue(ui->slider->value()-1);
}
void ItemWidget::setShortcuts(QKeySequence up, QKeySequence down, QKeySequence rev)

View File

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>264</width>
<width>280</width>
<height>83</height>
</rect>
</property>
@ -67,6 +67,23 @@
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_left">
<property name="text">
<string>Left</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_right">
<property name="text">
<string>Right</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_reverse">
<property name="text">