mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-06-22 06:22:06 +08:00
cabana: improve LogSlider (#27673)
* improve logslider * fix code indentation
This commit is contained in:
+12
-16
@@ -4,10 +4,8 @@
|
||||
#include <QFontDatabase>
|
||||
#include <QPainter>
|
||||
#include <QPixmapCache>
|
||||
#include <QDebug>
|
||||
|
||||
#include <limits>
|
||||
#include <cmath>
|
||||
#include <limits>
|
||||
|
||||
#include "selfdrive/ui/qt/util.h"
|
||||
|
||||
@@ -42,7 +40,7 @@ void ChangeTracker::compute(const QByteArray &dat, double ts, uint32_t freq) {
|
||||
}
|
||||
|
||||
// Track bit level changes
|
||||
for (int bit = 0; bit < 8; bit++){
|
||||
for (int bit = 0; bit < 8; bit++) {
|
||||
if ((cur ^ last) & (1 << bit)) {
|
||||
bit_change_counts[i][bit] += 1;
|
||||
}
|
||||
@@ -67,7 +65,6 @@ void ChangeTracker::clear() {
|
||||
colors.clear();
|
||||
}
|
||||
|
||||
|
||||
// SegmentTree
|
||||
|
||||
void SegmentTree::build(const QVector<QPointF> &arr) {
|
||||
@@ -116,7 +113,7 @@ void MessageBytesDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
|
||||
int h_margin = option.widget->style()->pixelMetric(QStyle::PM_FocusFrameHMargin);
|
||||
QRect rc{option.rect.left() + h_margin, option.rect.top() + v_margin, byte_width, option.rect.height() - 2 * v_margin};
|
||||
|
||||
auto color_role = option.state & QStyle::State_Selected ? QPalette::HighlightedText: QPalette::Text;
|
||||
auto color_role = option.state & QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Text;
|
||||
painter->setPen(option.palette.color(color_role));
|
||||
painter->setFont(fixed_font);
|
||||
for (int i = 0; i < byte_list.size(); ++i) {
|
||||
@@ -139,7 +136,7 @@ QColor getColor(const cabana::Signal *sig) {
|
||||
return QColor::fromHsvF(h, s, v);
|
||||
}
|
||||
|
||||
NameValidator::NameValidator(QObject *parent) : QRegExpValidator(QRegExp("^(\\w+)"), parent) { }
|
||||
NameValidator::NameValidator(QObject *parent) : QRegExpValidator(QRegExp("^(\\w+)"), parent) {}
|
||||
|
||||
QValidator::State NameValidator::validate(QString &input, int &pos) const {
|
||||
input.replace(' ', '_');
|
||||
@@ -175,7 +172,6 @@ QToolButton *toolButton(const QString &icon, const QString &tooltip) {
|
||||
return btn;
|
||||
};
|
||||
|
||||
|
||||
QString toHex(uint8_t byte) {
|
||||
static std::array<QString, 256> hex = []() {
|
||||
std::array<QString, 256> ret;
|
||||
@@ -186,11 +182,11 @@ QString toHex(uint8_t byte) {
|
||||
}
|
||||
|
||||
int num_decimals(double num) {
|
||||
const QString string = QString::number(num);
|
||||
const QStringList split = string.split('.');
|
||||
if (split.size() == 1) {
|
||||
return 0;
|
||||
} else {
|
||||
return split[1].size();
|
||||
}
|
||||
}
|
||||
const QString string = QString::number(num);
|
||||
const QStringList split = string.split('.');
|
||||
if (split.size() == 1) {
|
||||
return 0;
|
||||
} else {
|
||||
return split[1].size();
|
||||
}
|
||||
}
|
||||
|
||||
+16
-7
@@ -36,17 +36,26 @@ class LogSlider : public QSlider {
|
||||
public:
|
||||
LogSlider(double factor, Qt::Orientation orientation, QWidget *parent = nullptr) : factor(factor), QSlider(orientation, parent) {};
|
||||
|
||||
void setRange(double min, double max) { QSlider::setRange(logScale(min), logScale(max)); }
|
||||
int value() const { return invLogScale(QSlider::value()); }
|
||||
void setValue(int value) { QSlider::setValue(logScale(value)); }
|
||||
void setRange(double min, double max) {
|
||||
log_min = factor * std::log10(min);
|
||||
log_max = factor * std::log10(max);
|
||||
QSlider::setRange(min, max);
|
||||
setValue(QSlider::value());
|
||||
}
|
||||
int value() const {
|
||||
double v = log_min + (log_max - log_min) * ((QSlider::value() - minimum()) / double(maximum() - minimum()));
|
||||
return std::lround(std::pow(10, v / factor));
|
||||
}
|
||||
void setValue(int v) {
|
||||
double log_v = std::clamp(factor * std::log10(v), log_min, log_max);
|
||||
v = minimum() + (maximum() - minimum()) * ((log_v - log_min) / (log_max - log_min));
|
||||
QSlider::setValue(v);
|
||||
}
|
||||
|
||||
private:
|
||||
double factor;
|
||||
int logScale(int value) const { return factor * std::log10(value); }
|
||||
int invLogScale(int value) const { return std::pow(10, value / factor); }
|
||||
double factor, log_min = 0, log_max = 1;
|
||||
};
|
||||
|
||||
|
||||
enum {
|
||||
ColorsRole = Qt::UserRole + 1,
|
||||
BytesRole = Qt::UserRole + 2
|
||||
|
||||
Reference in New Issue
Block a user