Add Framework laptop controls and monitoring with hardware-aware discovery
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
#include "valuecontrol.h"
|
||||
#include <QHBoxLayout>
|
||||
#include <QSignalBlocker>
|
||||
#include <algorithm>
|
||||
|
||||
ValueControl::ValueControl(QWidget *parent) : QWidget(parent),
|
||||
m_slider(new QSlider(Qt::Horizontal, this)), m_number(new QSpinBox(this))
|
||||
{
|
||||
auto *layout = new QHBoxLayout(this);
|
||||
layout->setContentsMargins(0, 0, 0, 0);
|
||||
layout->addWidget(m_slider, 1); layout->addWidget(m_number);
|
||||
m_slider->setMinimumWidth(100);
|
||||
setFocusProxy(m_number);
|
||||
connect(m_slider, &QSlider::valueChanged, m_number, &QSpinBox::setValue);
|
||||
connect(m_number, &QSpinBox::valueChanged, m_slider, &QSlider::setValue);
|
||||
connect(m_number, &QSpinBox::valueChanged, this, &ValueControl::valueChanged);
|
||||
setRange(0, 100);
|
||||
}
|
||||
void ValueControl::setRange(int minimum, int maximum)
|
||||
{
|
||||
// Block the slider while changing its range so its old value cannot clamp
|
||||
// the number field before both controls have the new bounds.
|
||||
const QSignalBlocker block(m_slider);
|
||||
m_slider->setRange(minimum, maximum);
|
||||
m_number->setRange(minimum, maximum);
|
||||
m_slider->setValue(m_number->value());
|
||||
m_slider->setPageStep(std::max(1, (maximum - minimum) / 10));
|
||||
updateRangeHint();
|
||||
}
|
||||
void ValueControl::setSuffix(const QString &suffix)
|
||||
{
|
||||
m_number->setSuffix(suffix); updateRangeHint();
|
||||
}
|
||||
void ValueControl::setSingleStep(int step)
|
||||
{
|
||||
m_slider->setSingleStep(step); m_number->setSingleStep(step);
|
||||
}
|
||||
void ValueControl::updateRangeHint()
|
||||
{
|
||||
m_slider->setToolTip(QString("%1–%2%3").arg(m_number->minimum()).arg(m_number->maximum()).arg(m_number->suffix()));
|
||||
}
|
||||
Reference in New Issue
Block a user