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. 30
      tools/cabana/signaledit.cc
  2. 7
      tools/cabana/signaledit.h

@ -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(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;
};

Loading…
Cancel
Save