mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-04-13 12:42:20 +00:00
Upgrade to QWT 6.0.1, but still uses a locally patched copy since support for 8 axes has not been included, despite it being a relatively simple patch. Fixes #634. Fixes #567.
87 lines
2.0 KiB
C++
87 lines
2.0 KiB
C++
#include "knob.h"
|
|
#include <qwt_math.h>
|
|
#include <qpen.h>
|
|
#include <qwt_knob.h>
|
|
#include <qwt_round_scale_draw.h>
|
|
#include <qwt_scale_engine.h>
|
|
#include <qlabel.h>
|
|
#include <qevent.h>
|
|
|
|
Knob::Knob(const QString &title, double min, double max, QWidget *parent):
|
|
QWidget(parent)
|
|
{
|
|
QFont font("Helvetica", 10);
|
|
|
|
d_knob = new QwtKnob(this);
|
|
d_knob->setFont(font);
|
|
d_knob->setRange(min, max);
|
|
|
|
QwtScaleDiv scaleDiv =
|
|
d_knob->scaleEngine()->divideScale(min, max, 5, 3);
|
|
|
|
QList<double> ticks = scaleDiv.ticks(QwtScaleDiv::MajorTick);
|
|
if ( ticks.size() > 0 && ticks[0] > min )
|
|
{
|
|
if ( ticks.first() > min )
|
|
ticks.prepend(min);
|
|
if ( ticks.last() < max )
|
|
ticks.append(max);
|
|
}
|
|
scaleDiv.setTicks(QwtScaleDiv::MajorTick, ticks);
|
|
d_knob->setScale(scaleDiv);
|
|
|
|
d_knob->setKnobWidth(50);
|
|
|
|
font.setBold(true);
|
|
d_label = new QLabel(title, this);
|
|
d_label->setFont(font);
|
|
d_label->setAlignment(Qt::AlignTop | Qt::AlignHCenter);
|
|
|
|
setSizePolicy(QSizePolicy::MinimumExpanding,
|
|
QSizePolicy::MinimumExpanding);
|
|
|
|
connect(d_knob, SIGNAL(valueChanged(double)),
|
|
this, SIGNAL(valueChanged(double)));
|
|
}
|
|
|
|
QSize Knob::sizeHint() const
|
|
{
|
|
QSize sz1 = d_knob->sizeHint();
|
|
QSize sz2 = d_label->sizeHint();
|
|
|
|
const int w = qMax(sz1.width(), sz2.width());
|
|
const int h = sz1.height() + sz2.height();
|
|
|
|
int off = d_knob->scaleDraw()->extent(d_knob->font());
|
|
off -= 10; // spacing
|
|
|
|
return QSize(w, h - off);
|
|
}
|
|
|
|
void Knob::setValue(double value)
|
|
{
|
|
d_knob->setValue(value);
|
|
}
|
|
|
|
double Knob::value() const
|
|
{
|
|
return d_knob->value();
|
|
}
|
|
|
|
void Knob::resizeEvent(QResizeEvent *e)
|
|
{
|
|
const QSize sz = e->size();
|
|
|
|
int h = d_label->sizeHint().height();
|
|
|
|
d_label->setGeometry(0, sz.height() - h,
|
|
sz.width(), h);
|
|
|
|
h = d_knob->sizeHint().height();
|
|
int off = d_knob->scaleDraw()->extent(d_knob->font());
|
|
off -= 10; // spacing
|
|
|
|
d_knob->setGeometry(0, d_label->pos().y() - h + off,
|
|
sz.width(), h);
|
|
}
|