#pragma once #include <optional> #include <vector> #include <QDateTime> #include <QFileSystemWatcher> #include <QPainter> #include <QPixmap> #include <QSurfaceFormat> #include <QWidget> #include "cereal/gen/cpp/car.capnp.h" #include "common/params.h" QString getVersion(); QString getBrand(); QString getUserAgent(); std::optional<QString> getDongleId(); QMap<QString, QString> getSupportedLanguages(); void setQtSurfaceFormat(); void sigTermHandler(int s); QString timeAgo(const QDateTime &date); void swagLogMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg); void initApp(int argc, char *argv[], bool disable_hidpi = true); QWidget* topWidget(QWidget* widget); QPixmap loadPixmap(const QString &fileName, const QSize &size = {}, Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio); QPixmap bootstrapPixmap(const QString &id); void drawRoundedRect(QPainter &painter, const QRectF &rect, qreal xRadiusTop, qreal yRadiusTop, qreal xRadiusBottom, qreal yRadiusBottom); QColor interpColor(float xv, std::vector<float> xp, std::vector<QColor> fp); bool hasLongitudinalControl(const cereal::CarParams::Reader &car_params); struct InterFont : public QFont { InterFont(int pixel_size, QFont::Weight weight = QFont::Normal) : QFont("Inter") { setPixelSize(pixel_size); setWeight(weight); } }; class ParamWatcher : public QObject { Q_OBJECT public: ParamWatcher(QObject *parent); void addParam(const QString ¶m_name); signals: void paramChanged(const QString ¶m_name, const QString ¶m_value); private: void fileChanged(const QString &path); QFileSystemWatcher *watcher; QHash<QString, QString> params_hash; Params params; };