diff --git a/tools/cabana/signaledit.cc b/tools/cabana/signaledit.cc index b2491d5b1f..3845e72be1 100644 --- a/tools/cabana/signaledit.cc +++ b/tools/cabana/signaledit.cc @@ -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(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 ? "▼ " : "> "); diff --git a/tools/cabana/signaledit.h b/tools/cabana/signaledit.h index eec943226e..d7b9084e7f 100644 --- a/tools/cabana/signaledit.h +++ b/tools/cabana/signaledit.h @@ -4,7 +4,6 @@ #include #include #include -#include #include #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; };