mirror of
https://github.com/MoreTore/openpilot.git
synced 2026-08-04 15:56:08 +08:00
Cabana: save signal on editingFinished (#26940)
save signal on editingFinished
This commit is contained in:
+16
-16
@@ -54,12 +54,20 @@ SignalForm::SignalForm(QWidget *parent) : QWidget(parent) {
|
||||
val_desc = new QLineEdit();
|
||||
form_layout->addRow(tr("Value descriptions"), val_desc);
|
||||
|
||||
QObject::connect(name, &QLineEdit::textEdited, this, &SignalForm::changed);
|
||||
QObject::connect(factor, &QLineEdit::textEdited, this, &SignalForm::changed);
|
||||
QObject::connect(offset, &QLineEdit::textEdited, this, &SignalForm::changed);
|
||||
QObject::connect(name, &QLineEdit::editingFinished, this, &SignalForm::textBoxEditingFinished);
|
||||
QObject::connect(factor, &QLineEdit::editingFinished, this, &SignalForm::textBoxEditingFinished);
|
||||
QObject::connect(offset, &QLineEdit::editingFinished, this, &SignalForm::textBoxEditingFinished);
|
||||
QObject::connect(size, &QSpinBox::editingFinished, this, &SignalForm::changed);
|
||||
QObject::connect(sign, SIGNAL(activated(int)), SIGNAL(changed()));
|
||||
QObject::connect(endianness, SIGNAL(activated(int)), SIGNAL(changed()));
|
||||
QObject::connect(size, SIGNAL(valueChanged(int)), SIGNAL(changed()));
|
||||
}
|
||||
|
||||
void SignalForm::textBoxEditingFinished() {
|
||||
QLineEdit *edit = qobject_cast<QLineEdit *>(QObject::sender());
|
||||
if (edit && edit->isModified()) {
|
||||
edit->setModified(false);
|
||||
emit changed();
|
||||
}
|
||||
}
|
||||
|
||||
// SignalEdit
|
||||
@@ -108,17 +116,12 @@ SignalEdit::SignalEdit(int index, QWidget *parent) : form_idx(index), QWidget(pa
|
||||
hline->setFrameShadow(QFrame::Sunken);
|
||||
main_layout->addWidget(hline);
|
||||
|
||||
save_timer = new QTimer(this);
|
||||
save_timer->setInterval(300);
|
||||
save_timer->setSingleShot(true);
|
||||
save_timer->callOnTimeout(this, &SignalEdit::saveSignal);
|
||||
|
||||
QObject::connect(title, &ElidedLabel::clicked, [this]() { emit showFormClicked(sig); });
|
||||
QObject::connect(plot_btn, &QToolButton::clicked, [this](bool checked) {
|
||||
emit showChart(msg_id, sig, checked, QGuiApplication::keyboardModifiers() & Qt::ShiftModifier);
|
||||
});
|
||||
QObject::connect(remove_btn, &QToolButton::clicked, [this]() { emit remove(sig); });
|
||||
QObject::connect(form, &SignalForm::changed, [this]() { save_timer->start(); });
|
||||
QObject::connect(remove_btn, &QToolButton::clicked, [this]() { emit remove(sig); });
|
||||
QObject::connect(form, &SignalForm::changed, this, &SignalEdit::saveSignal);
|
||||
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
|
||||
}
|
||||
|
||||
@@ -133,8 +136,6 @@ void SignalEdit::setSignal(const QString &message_id, const Signal *signal) {
|
||||
}
|
||||
|
||||
void SignalEdit::saveSignal() {
|
||||
if (!sig || !form->changed_by_user) return;
|
||||
|
||||
Signal s = *sig;
|
||||
s.name = form->name->text().toStdString();
|
||||
s.size = form->size->text().toInt();
|
||||
@@ -160,8 +161,9 @@ void SignalEdit::saveSignal() {
|
||||
s.lsb = bigEndianStartBitsIndex(bigEndianBitIndex(s.start_bit) + s.size - 1);
|
||||
s.msb = s.start_bit;
|
||||
}
|
||||
if (s != *sig)
|
||||
if (s != *sig) {
|
||||
emit save(this->sig, s);
|
||||
}
|
||||
}
|
||||
|
||||
void SignalEdit::setChartOpened(bool opened) {
|
||||
@@ -171,7 +173,6 @@ void SignalEdit::setChartOpened(bool opened) {
|
||||
|
||||
void SignalEdit::updateForm(bool visible) {
|
||||
if (visible && sig) {
|
||||
form->changed_by_user = false;
|
||||
if (form->name->text() != sig->name.c_str()) {
|
||||
form->name->setText(sig->name.c_str());
|
||||
}
|
||||
@@ -182,7 +183,6 @@ void SignalEdit::updateForm(bool visible) {
|
||||
form->msb->setText(QString::number(sig->msb));
|
||||
form->lsb->setText(QString::number(sig->lsb));
|
||||
form->size->setValue(sig->size);
|
||||
form->changed_by_user = true;
|
||||
}
|
||||
form->setVisible(visible);
|
||||
icon->setText(visible ? "▼ " : "> ");
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#include <QLabel>
|
||||
#include <QLineEdit>
|
||||
#include <QSpinBox>
|
||||
#include <QTimer>
|
||||
#include <QToolButton>
|
||||
|
||||
#include "selfdrive/ui/qt/widgets/controls.h"
|
||||
@@ -15,13 +14,14 @@ class SignalForm : public QWidget {
|
||||
Q_OBJECT
|
||||
public:
|
||||
SignalForm(QWidget *parent);
|
||||
void textBoxEditingFinished();
|
||||
|
||||
QLineEdit *name, *unit, *comment, *val_desc, *offset, *factor, *min_val, *max_val;
|
||||
QLabel *lsb, *msb;
|
||||
QSpinBox *size;
|
||||
QComboBox *sign, *endianness;
|
||||
bool changed_by_user = false;
|
||||
|
||||
signals:
|
||||
signals:
|
||||
void changed();
|
||||
};
|
||||
|
||||
@@ -55,5 +55,4 @@ protected:
|
||||
QLabel *icon;
|
||||
int form_idx = 0;
|
||||
QToolButton *plot_btn;
|
||||
QTimer *save_timer;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user