#pragma once #include #include #include #include #include #include #include #include "tools/cabana/commands.h" #include "tools/cabana/settings.h" class FindSignalModel : public QAbstractTableModel { public: struct SearchSignal { MessageId id = {}; uint64_t mono_time = 0; cabana::Signal sig = {}; double value = 0.; QStringList values; }; FindSignalModel(QObject *parent) : QAbstractTableModel(parent) {} QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override { return 3; } int rowCount(const QModelIndex &parent = QModelIndex()) const override { return std::min(filtered_signals.size(), 300); } void search(std::function cmp); void reset(); void undo(); QList filtered_signals; QList initial_signals; QList> histories; uint64_t last_time = std::numeric_limits::max(); }; class FindSignalDlg : public QDialog { Q_OBJECT public: FindSignalDlg(QWidget *parent); signals: void openMessage(const MessageId &id); private: void search(); void modelReset(); void setInitialSignals(); void customMenuRequested(const QPoint &pos); QLineEdit *value1, *value2, *factor_edit, *offset_edit; QLineEdit *bus_edit, *address_edit, *first_time_edit, *last_time_edit; QComboBox *compare_cb; QSpinBox *min_size, *max_size; QCheckBox *litter_endian, *is_signed; QPushButton *search_btn, *reset_btn, *undo_btn; QGroupBox *properties_group, *message_group; QTableView *view; QLabel *to_label, *stats_label; FindSignalModel *model; };