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. 6
      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"
@ -67,7 +65,6 @@ void ChangeTracker::clear() {
colors.clear();
}
// SegmentTree
void SegmentTree::build(const QVector<QPointF> &arr) {
@ -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;

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