Cabana: save signal on editingFinished (#26940)

save signal on editingFinished
old-commit-hash: c1b9c3d3d1
beeps
Dean Lee 2 years ago committed by GitHub
parent 9570336e6c
commit 27da08947f
  1. 32
      tools/cabana/signaledit.cc
  2. 7
      tools/cabana/signaledit.h

@ -54,12 +54,20 @@ SignalForm::SignalForm(QWidget *parent) : QWidget(parent) {
val_desc = new QLineEdit(); val_desc = new QLineEdit();
form_layout->addRow(tr("Value descriptions"), val_desc); form_layout->addRow(tr("Value descriptions"), val_desc);
QObject::connect(name, &QLineEdit::textEdited, this, &SignalForm::changed); QObject::connect(name, &QLineEdit::editingFinished, this, &SignalForm::textBoxEditingFinished);
QObject::connect(factor, &QLineEdit::textEdited, this, &SignalForm::changed); QObject::connect(factor, &QLineEdit::editingFinished, this, &SignalForm::textBoxEditingFinished);
QObject::connect(offset, &QLineEdit::textEdited, this, &SignalForm::changed); 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(sign, SIGNAL(activated(int)), SIGNAL(changed()));
QObject::connect(endianness, 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 // SignalEdit
@ -108,17 +116,12 @@ SignalEdit::SignalEdit(int index, QWidget *parent) : form_idx(index), QWidget(pa
hline->setFrameShadow(QFrame::Sunken); hline->setFrameShadow(QFrame::Sunken);
main_layout->addWidget(hline); 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(title, &ElidedLabel::clicked, [this]() { emit showFormClicked(sig); });
QObject::connect(plot_btn, &QToolButton::clicked, [this](bool checked) { QObject::connect(plot_btn, &QToolButton::clicked, [this](bool checked) {
emit showChart(msg_id, sig, checked, QGuiApplication::keyboardModifiers() & Qt::ShiftModifier); emit showChart(msg_id, sig, checked, QGuiApplication::keyboardModifiers() & Qt::ShiftModifier);
}); });
QObject::connect(remove_btn, &QToolButton::clicked, [this]() { emit remove(sig); }); QObject::connect(remove_btn, &QToolButton::clicked, [this]() { emit remove(sig); });
QObject::connect(form, &SignalForm::changed, [this]() { save_timer->start(); }); QObject::connect(form, &SignalForm::changed, this, &SignalEdit::saveSignal);
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
} }
@ -133,8 +136,6 @@ void SignalEdit::setSignal(const QString &message_id, const Signal *signal) {
} }
void SignalEdit::saveSignal() { void SignalEdit::saveSignal() {
if (!sig || !form->changed_by_user) return;
Signal s = *sig; Signal s = *sig;
s.name = form->name->text().toStdString(); s.name = form->name->text().toStdString();
s.size = form->size->text().toInt(); s.size = form->size->text().toInt();
@ -160,8 +161,9 @@ void SignalEdit::saveSignal() {
s.lsb = bigEndianStartBitsIndex(bigEndianBitIndex(s.start_bit) + s.size - 1); s.lsb = bigEndianStartBitsIndex(bigEndianBitIndex(s.start_bit) + s.size - 1);
s.msb = s.start_bit; s.msb = s.start_bit;
} }
if (s != *sig) if (s != *sig) {
emit save(this->sig, s); emit save(this->sig, s);
}
} }
void SignalEdit::setChartOpened(bool opened) { void SignalEdit::setChartOpened(bool opened) {
@ -171,7 +173,6 @@ void SignalEdit::setChartOpened(bool opened) {
void SignalEdit::updateForm(bool visible) { void SignalEdit::updateForm(bool visible) {
if (visible && sig) { if (visible && sig) {
form->changed_by_user = false;
if (form->name->text() != sig->name.c_str()) { if (form->name->text() != sig->name.c_str()) {
form->name->setText(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->msb->setText(QString::number(sig->msb));
form->lsb->setText(QString::number(sig->lsb)); form->lsb->setText(QString::number(sig->lsb));
form->size->setValue(sig->size); form->size->setValue(sig->size);
form->changed_by_user = true;
} }
form->setVisible(visible); form->setVisible(visible);
icon->setText(visible ? "" : "> "); icon->setText(visible ? "" : "> ");

@ -4,7 +4,6 @@
#include <QLabel> #include <QLabel>
#include <QLineEdit> #include <QLineEdit>
#include <QSpinBox> #include <QSpinBox>
#include <QTimer>
#include <QToolButton> #include <QToolButton>
#include "selfdrive/ui/qt/widgets/controls.h" #include "selfdrive/ui/qt/widgets/controls.h"
@ -15,13 +14,14 @@ class SignalForm : public QWidget {
Q_OBJECT Q_OBJECT
public: public:
SignalForm(QWidget *parent); SignalForm(QWidget *parent);
void textBoxEditingFinished();
QLineEdit *name, *unit, *comment, *val_desc, *offset, *factor, *min_val, *max_val; QLineEdit *name, *unit, *comment, *val_desc, *offset, *factor, *min_val, *max_val;
QLabel *lsb, *msb; QLabel *lsb, *msb;
QSpinBox *size; QSpinBox *size;
QComboBox *sign, *endianness; QComboBox *sign, *endianness;
bool changed_by_user = false;
signals: signals:
void changed(); void changed();
}; };
@ -55,5 +55,4 @@ protected:
QLabel *icon; QLabel *icon;
int form_idx = 0; int form_idx = 0;
QToolButton *plot_btn; QToolButton *plot_btn;
QTimer *save_timer;
}; };

Loading…
Cancel
Save