Add Framework laptop controls and monitoring with hardware-aware discovery

This commit is contained in:
ajp_anton
2026-09-11 10:29:27 +00:00
parent 787231cb03
commit 8719402d97
50 changed files with 3611 additions and 9 deletions
@@ -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()));
}