cabana: improve LogSlider (#27673)

* improve logslider

* fix code indentation
pull/27700/head
Dean Lee 2 years ago committed by GitHub
parent 8bd4c0f510
commit 583c4a031f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 28
      tools/cabana/util.cc
  2. 23
      tools/cabana/util.h

@ -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();
}
}

@ -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

Loading…
Cancel
Save