TSI_Config/setpoint_tachometer.cpp
2025-04-27 10:05:00 +08:00

126 lines
6.1 KiB
C++

#include "setpoint_tachometer.h"
#include "ui_setpoint_tachometer.h"
#include "config_mgr.h"
Setpoint_Tachometer::Setpoint_Tachometer(int slot_no_,int cardtype,QWidget *parent) :
QWidget(parent),
ui(new Ui::Setpoint_Tachometer)
{
ui->setupUi(this);
slot_no = slot_no_;
car_type = static_cast<CardType>(cardtype);
ui->label_slot->setText(QString::number(slot_no));
Init();
connect(ui->comboBox_chan, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &Setpoint_Tachometer::onComboBoxIndexChanged);
current_index = ui->comboBox_chan->currentIndex();
}
Setpoint_Tachometer::~Setpoint_Tachometer()
{
if(slider_alert != nullptr)
delete slider_alert;
if(slider_danger != nullptr)
delete slider_danger;
delete ui;
}
void Setpoint_Tachometer::Init(){
QVBoxLayout *layout_alert = new QVBoxLayout(ui->widget_alert);
slider_alert = new RangeSlider;
layout_alert->addWidget(slider_alert);
QVBoxLayout *layout_danger = new QVBoxLayout(ui->widget_danger);
slider_danger = new RangeSlider(1);
layout_danger->addWidget(slider_danger);
std::shared_ptr<CardBase> base_ptr = ConfigMgr::Instance()->GetSlotPtr(slot_no);
speed_alert_ptr = std::dynamic_pointer_cast<TachometerData>(base_ptr);
switch (car_type) {
case kCardSpeedSingle:{
slider_alert->m_upper = 3500;
slider_alert->m_lower = 1500;
slider_alert->setRange(0,5000);
slider_danger->m_upper = 4250;
slider_danger->m_lower = 750;
slider_danger->setRange(0,5000);
int chan = ui->comboBox_chan->currentIndex();
std::shared_ptr<TachometerData> setpoint_data = std::dynamic_pointer_cast<TachometerData>(base_ptr);
ui->lineEdit_alert_upper->setText(QString::number(setpoint_data->alert_danger[chan].speed_upper));
ui->lineEdit_alert_lower->setText(QString::number(setpoint_data->alert_danger[chan].speed_lower));
ui->checkBox_alert_upper->setChecked(setpoint_data->alert_danger[chan].speed_upper_enable);
ui->checkBox_alert_lower->setChecked(setpoint_data->alert_danger[chan].speed_lower_enable);
if(setpoint_data->alert_danger[chan].speed_upper > 0 && setpoint_data->alert_danger[chan].speed_lower){
slider_alert->m_upper = setpoint_data->alert_danger[chan].speed_upper;
slider_alert->m_lower = setpoint_data->alert_danger[chan].speed_lower;
}
ui->lineEdit_danger_upper->setText(QString::number(setpoint_data->alert_danger[chan].danger_speed_upper));
if(setpoint_data->alert_danger[chan].danger_speed_upper > 0 ){
slider_danger->m_upper = setpoint_data->alert_danger[chan].danger_speed_upper;
}
}break;
}
QObject::connect(ui->lineEdit_alert_upper, &QLineEdit::editingFinished, [&]() {
slider_alert->setUpperValue(ui->lineEdit_alert_upper->text().toFloat());
});
QObject::connect(ui->lineEdit_alert_lower, &QLineEdit::editingFinished, [&]() {
slider_alert->setLowerValue(ui->lineEdit_alert_lower->text().toFloat());
});
QObject::connect(slider_alert, &RangeSlider::rangeChanged, [&](float low,float high) {
ui->lineEdit_alert_upper->setText(QString::number((int)high));
ui->lineEdit_alert_lower->setText(QString::number((int)low));
});
QObject::connect(ui->lineEdit_danger_upper, &QLineEdit::editingFinished, [&]() {
slider_danger->setUpperValue(ui->lineEdit_danger_upper->text().toFloat());
});
QObject::connect(slider_danger, &RangeSlider::rangeChanged, [&](float low,float high) {
ui->lineEdit_danger_upper->setText(QString::number((int)high));
});
}
void Setpoint_Tachometer::onComboBoxIndexChanged(int index){
speed_alert_ptr->alert_danger[current_index].speed_upper = ui->lineEdit_alert_upper->text().toFloat();
speed_alert_ptr->alert_danger[current_index].speed_lower = ui->lineEdit_alert_lower->text().toFloat();
speed_alert_ptr->alert_danger[current_index].speed_upper_enable = ui->checkBox_alert_upper->checkState();
speed_alert_ptr->alert_danger[current_index].speed_lower_enable = ui->checkBox_alert_lower->checkState();
speed_alert_ptr->alert_danger[current_index].danger_speed_upper = ui->lineEdit_danger_upper->text().toFloat();
current_index = index;
ui->lineEdit_alert_upper->setText(QString::number(speed_alert_ptr->alert_danger[index].speed_upper));
ui->lineEdit_alert_lower->setText(QString::number(speed_alert_ptr->alert_danger[index].speed_lower));
ui->checkBox_alert_upper->setChecked(speed_alert_ptr->alert_danger[index].speed_upper_enable);
ui->checkBox_alert_lower->setChecked(speed_alert_ptr->alert_danger[index].speed_lower_enable);
if(speed_alert_ptr->alert_danger[index].speed_upper > 0 && speed_alert_ptr->alert_danger[index].speed_lower){
slider_alert->m_upper = speed_alert_ptr->alert_danger[index].speed_upper;
slider_alert->m_lower = speed_alert_ptr->alert_danger[index].speed_lower;
}
ui->lineEdit_danger_upper->setText(QString::number(speed_alert_ptr->alert_danger[index].danger_speed_upper));
if(speed_alert_ptr->alert_danger[index].danger_speed_upper > 0){
slider_danger->m_upper = speed_alert_ptr->alert_danger[index].danger_speed_upper;
}
}
void Setpoint_Tachometer::on_pushButton_confirm_clicked()
{
if (speed_alert_ptr == nullptr) {
qCritical() << "[Setpoint_Tachometer::confirm] should not be here";
return;
}
speed_alert_ptr->alert_danger[current_index].speed_upper = ui->lineEdit_alert_upper->text().toFloat();
speed_alert_ptr->alert_danger[current_index].speed_lower = ui->lineEdit_alert_lower->text().toFloat();
speed_alert_ptr->alert_danger[current_index].speed_upper_enable = ui->checkBox_alert_upper->checkState();
speed_alert_ptr->alert_danger[current_index].speed_lower_enable = ui->checkBox_alert_lower->checkState();
speed_alert_ptr->alert_danger[current_index].danger_speed_upper = ui->lineEdit_danger_upper->text().toFloat();
this->close();
}
void Setpoint_Tachometer::on_pushButton_cancel_clicked()
{
this->close();
}