add support for turnouts
This commit is contained in:
@ -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++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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">
|
||||
|
Reference in New Issue
Block a user