openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

89 lines
2.4 KiB

#pragma once
#include <QLabel>
#include <QGraphicsEllipseItem>
#include <QGraphicsLineItem>
#include <QGraphicsProxyWidget>
#include <QGraphicsTextItem>
#include <QPushButton>
#include <QVBoxLayout>
#include <QtCharts/QChartView>
#include "tools/cabana/canmessages.h"
#include "tools/cabana/dbcmanager.h"
using namespace QtCharts;
class ChartView : public QChartView {
Q_OBJECT
public:
ChartView(const QString &id, const Signal *sig, QWidget *parent = nullptr);
void updateSeries(const std::pair<double, double> range);
void setRange(double min, double max, bool force_update = false);
void updateLineMarker(double current_sec);
void updateFromSettings();
void updateTitle();
QString id;
const Signal *signal;
signals:
void zoomIn(double min, double max);
void zoomReset();
void remove(const QString &msg_id, const Signal *sig);
private:
void mouseReleaseEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *ev) override;
void leaveEvent(QEvent *event) override;
void resizeEvent(QResizeEvent *event) override;
void adjustChartMargins();
void updateAxisY();
QGraphicsItemGroup *item_group;
QGraphicsLineItem *line_marker, *track_line;
QGraphicsEllipseItem *track_ellipse;
QGraphicsTextItem *value_text;
QGraphicsProxyWidget *close_btn_proxy;
QVector<QPointF> vals;
};
class ChartsWidget : public QWidget {
Q_OBJECT
public:
ChartsWidget(QWidget *parent = nullptr);
void showChart(const QString &id, const Signal *sig, bool show);
void removeChart(ChartView *chart);
bool isChartOpened(const QString &id, const Signal *sig);
signals:
void dock(bool floating);
void rangeChanged(double min, double max, bool is_zommed);
void chartOpened(const QString &id, const Signal *sig);
void chartClosed(const QString &id, const Signal *sig);
private:
void eventsMerged();
void updateState();
void zoomIn(double min, double max);
void zoomReset();
void signalUpdated(const Signal *sig);
void updateToolBar();
void removeAll(const Signal *sig = nullptr);
bool eventFilter(QObject *obj, QEvent *event) override;
QLabel *title_label;
QLabel *range_label;
bool docking = true;
QAction *dock_btn;
QAction *reset_zoom_btn;
QAction *remove_all_btn;
QVBoxLayout *charts_layout;
QList<ChartView *> charts;
bool is_zoomed = false;
std::pair<double, double> event_range;
std::pair<double, double> display_range;
std::pair<double, double> zoomed_range;
};