Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_multipliers_double_slider_spinbox.cpp
Go to the documentation of this file.
1/* This file is part of the KDE project
2 * SPDX-FileCopyrightText: 2010 Cyrille Berger <cberger@cberger.net>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
9#include <QHBoxLayout>
10#include <kis_debug.h>
11#include <klocalizedstring.h>
12
14{
15 return cmbMultiplier->itemData(cmbMultiplier->currentIndex()).toDouble();
16}
17
19{
20 qreal m = currentMultiplier();
21 slider->setRange(m * min, m * max, decimals);
22}
23
25 : QWidget(_parent)
26 , d(new Private)
27{
28 QHBoxLayout *l = new QHBoxLayout(this);
29 l->setContentsMargins(0, 0, 0, 0);
30
31 d->slider = new KisDoubleSliderSpinBox(this);
32 d->slider->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
33 l->addWidget(d->slider);
34
35 d->cmbMultiplier = new QComboBox(this);
36 d->cmbMultiplier->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
37 l->addWidget(d->cmbMultiplier);
38
39 addMultiplier(1.0);
40 connect(d->slider, SIGNAL(valueChanged(qreal)), SIGNAL(valueChanged(qreal)));
41 connect(d->cmbMultiplier, SIGNAL(activated(int)), SLOT(updateRange()));
42}
43
48
50{
51 d->cmbMultiplier->addItem(i18n("x%1", v), v);
52}
53
54void KisMultipliersDoubleSliderSpinBox::setRange(qreal minimum, qreal maximum, int decimals)
55{
56 d->min = minimum;
57 d->max = maximum;
58 d->decimals = decimals;
59 d->updateRange();
60}
61
63{
64 return d->slider->value();
65}
66
68{
69 qreal m = d->currentMultiplier();
70
71 if (value < m * d->min || value > m * d->max) {
72 for(int i = 0; i < d->cmbMultiplier->count(); ++i) {
73 qreal m = d->cmbMultiplier->itemData(i).toDouble();
74 if (value >= m * d->min && value <= m * d->max) {
75 d->cmbMultiplier->setCurrentIndex(i);
76 d->updateRange();
77 break;
78 }
79 }
80 }
81
83}
84
89
91{
92 d->slider->setPrefix(prefix);
93}
94
96{
97 d->slider->setSuffix(suffix);
98}
99
104
106{
107 d->slider->setSingleStep(value);
108}
109
111{
112 QSize sliderhint = d->slider->sizeHint();
113 QSize comboboxhint = d->cmbMultiplier->sizeHint();
114 sliderhint.setWidth(sliderhint.width() + comboboxhint.width() + 10);
115 sliderhint.setHeight(qMax(sliderhint.height(), comboboxhint.height()));
116 return sliderhint;
117}
118
123
125{
126 return QWidget::minimumSize();
127}
128
129#include "moc_kis_multipliers_double_slider_spinbox.cpp"
float value(const T *src, size_t ch)
qreal v
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
This class is a spinbox in which you can click and drag to set the value. A slider like bar is displa...
void setValue(qreal newValue)
void setBlockUpdateSignalOnDrag(bool newBlockUpdateSignalOnDrag)
void setExponentRatio(qreal newExponentRatio)
QSize sizeHint() const override
qreal value()
Get the value, don't use value()
void setRange(qreal minimum, qreal maximum, int decimals=0)
void setValue(qreal value)
Set the value, don't use setValue()
void updateRange()
Update the range of the slider depending on the currentMultiplier.