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.
137 lines
3.6 KiB
137 lines
3.6 KiB
#include "selfdrive/ui/qt/util.h"
|
|
|
|
#include <QApplication>
|
|
#include <QLayoutItem>
|
|
#include <QStyleOption>
|
|
|
|
#include "selfdrive/common/params.h"
|
|
#include "selfdrive/common/swaglog.h"
|
|
#include "selfdrive/hardware/hw.h"
|
|
|
|
QString getVersion() {
|
|
static QString version = QString::fromStdString(Params().get("Version"));
|
|
return version;
|
|
}
|
|
|
|
QString getBrand() {
|
|
return Params().getBool("Passive") ? "dashcam" : "openpilot";
|
|
}
|
|
|
|
QString getBrandVersion() {
|
|
return getBrand() + " v" + getVersion().left(14).trimmed();
|
|
}
|
|
|
|
QString getUserAgent() {
|
|
return "openpilot-" + getVersion();
|
|
}
|
|
|
|
std::optional<QString> getDongleId() {
|
|
std::string id = Params().get("DongleId");
|
|
|
|
if (!id.empty() && (id != "UnregisteredDevice")) {
|
|
return QString::fromStdString(id);
|
|
} else {
|
|
return {};
|
|
}
|
|
}
|
|
|
|
void configFont(QPainter &p, const QString &family, int size, const QString &style) {
|
|
QFont f(family);
|
|
f.setPixelSize(size);
|
|
f.setStyleName(style);
|
|
p.setFont(f);
|
|
}
|
|
|
|
void clearLayout(QLayout* layout) {
|
|
while (QLayoutItem* item = layout->takeAt(0)) {
|
|
if (QWidget* widget = item->widget()) {
|
|
widget->deleteLater();
|
|
}
|
|
if (QLayout* childLayout = item->layout()) {
|
|
clearLayout(childLayout);
|
|
}
|
|
delete item;
|
|
}
|
|
}
|
|
|
|
QString timeAgo(const QDateTime &date) {
|
|
int diff = date.secsTo(QDateTime::currentDateTimeUtc());
|
|
|
|
QString s;
|
|
if (diff < 60) {
|
|
s = "now";
|
|
} else if (diff < 60 * 60) {
|
|
int minutes = diff / 60;
|
|
s = QString("%1 minute%2 ago").arg(minutes).arg(minutes > 1 ? "s" : "");
|
|
} else if (diff < 60 * 60 * 24) {
|
|
int hours = diff / (60 * 60);
|
|
s = QString("%1 hour%2 ago").arg(hours).arg(hours > 1 ? "s" : "");
|
|
} else if (diff < 3600 * 24 * 7) {
|
|
int days = diff / (60 * 60 * 24);
|
|
s = QString("%1 day%2 ago").arg(days).arg(days > 1 ? "s" : "");
|
|
} else {
|
|
s = date.date().toString();
|
|
}
|
|
|
|
return s;
|
|
}
|
|
|
|
void setQtSurfaceFormat() {
|
|
QSurfaceFormat fmt;
|
|
#ifdef __APPLE__
|
|
fmt.setVersion(3, 2);
|
|
fmt.setProfile(QSurfaceFormat::OpenGLContextProfile::CoreProfile);
|
|
fmt.setRenderableType(QSurfaceFormat::OpenGL);
|
|
#else
|
|
fmt.setRenderableType(QSurfaceFormat::OpenGLES);
|
|
#endif
|
|
fmt.setSamples(16);
|
|
QSurfaceFormat::setDefaultFormat(fmt);
|
|
}
|
|
|
|
void initApp(int argc, char *argv[]) {
|
|
Hardware::set_display_power(true);
|
|
Hardware::set_brightness(65);
|
|
|
|
#ifdef __APPLE__
|
|
{
|
|
// Get the devicePixelRatio, and scale accordingly to maintain 1:1 rendering
|
|
QApplication tmp(argc, argv);
|
|
qputenv("QT_SCALE_FACTOR", QString::number(1.0 / tmp.devicePixelRatio() ).toLocal8Bit());
|
|
}
|
|
#endif
|
|
|
|
setQtSurfaceFormat();
|
|
}
|
|
|
|
void swagLogMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
|
|
static std::map<QtMsgType, int> levels = {
|
|
{QtMsgType::QtDebugMsg, CLOUDLOG_DEBUG},
|
|
{QtMsgType::QtInfoMsg, CLOUDLOG_INFO},
|
|
{QtMsgType::QtWarningMsg, CLOUDLOG_WARNING},
|
|
{QtMsgType::QtCriticalMsg, CLOUDLOG_ERROR},
|
|
{QtMsgType::QtSystemMsg, CLOUDLOG_ERROR},
|
|
{QtMsgType::QtFatalMsg, CLOUDLOG_CRITICAL},
|
|
};
|
|
|
|
std::string file, function;
|
|
if (context.file != nullptr) file = context.file;
|
|
if (context.function != nullptr) function = context.function;
|
|
|
|
auto bts = msg.toUtf8();
|
|
cloudlog_e(levels[type], file.c_str(), context.line, function.c_str(), "%s", bts.constData());
|
|
}
|
|
|
|
|
|
QWidget* topWidget (QWidget* widget) {
|
|
while (widget->parentWidget() != nullptr) widget=widget->parentWidget();
|
|
return widget;
|
|
}
|
|
|
|
QPixmap loadPixmap(const QString &fileName, const QSize &size, Qt::AspectRatioMode aspectRatioMode) {
|
|
if (size.isEmpty()) {
|
|
return QPixmap(fileName);
|
|
} else {
|
|
return QPixmap(fileName).scaled(size, aspectRatioMode, Qt::SmoothTransformation);
|
|
}
|
|
}
|
|
|