Krita Source Code Documentation
Loading...
Searching...
No Matches
KoSliderCombo Class Reference

A widget for qreal values with a popup slider. More...

#include <KoSliderCombo.h>

+ Inheritance diagram for KoSliderCombo:

Public Slots

void setValue (qreal value)
 

Signals

void valueChanged (qreal value, bool final)
 

Public Member Functions

qreal decimals () const
 
void hidePopup ()
 
 KoSliderCombo (QWidget *parent=0)
 
void lineEditFinished ()
 
qreal maximum () const
 
qreal minimum () const
 
QSize minimumSizeHint () const override
 reimplemented from QComboBox
 
void setDecimals (int number)
 
void setMaximum (qreal max)
 
void setMinimum (qreal min)
 
void showPopup ()
 
QSize sizeHint () const override
 reimplemented from QComboBox
 
void sliderReleased ()
 
void sliderValueChanged (int value)
 
qreal value () const
 
 ~KoSliderCombo () override
 

Public Attributes

QStyle::StateFlag arrowState
 
KoSliderComboContainercontainer
 
int decimals
 
bool firstShowOfSlider
 
QTimer m_timer
 
QValidator * m_validator
 
qreal maximum
 
qreal minimum
 
QSlider * slider
 
KoSliderCombothePublic
 

Protected Member Functions

void changeEvent (QEvent *e) override
 reimplemented from QComboBox
 
void hideEvent (QHideEvent *) override
 reimplemented from QComboBox
 
void keyPressEvent (QKeyEvent *e) override
 reimplemented from QComboBox
 
void mousePressEvent (QMouseEvent *e) override
 reimplemented from QComboBox
 
void paintEvent (QPaintEvent *) override
 reimplemented from QComboBox
 
void wheelEvent (QWheelEvent *e) override
 reimplemented from QComboBox
 

Private Attributes

KoSliderComboPrivate *const d
 

Detailed Description

A widget for qreal values with a popup slider.

KoSliderCombo combines a numerical input and a dropdown slider in a way that takes up as little screen space as possible.

It allows the user to either enter a floating point value or quickly set the value using a slider

One signal is emitted when the value changes. The signal is even emitted when the slider is moving. The second argument of the signal however tells you if the value is final or not. A final value is produced by entering a value numerically or by releasing the slider.

The input of the numerical line edit is constrained to numbers and decimal signs.

Definition at line 28 of file KoSliderCombo.h.

Constructor & Destructor Documentation

◆ KoSliderCombo()

KoSliderCombo::KoSliderCombo ( QWidget * parent = 0)
explicit

Constructor for the widget, where value is set to 0

Parameters
parentparent QWidget

Definition at line 26 of file KoSliderCombo.cpp.

27 : QComboBox(parent)
28 ,d(new KoSliderComboPrivate())
29{
30 d->thePublic = this;
31 d->minimum = 0.0;
32 d->maximum = 100.0;
33 d->decimals = 2;
34 d->container = new KoSliderComboContainer(this);
35 d->container->setAttribute(Qt::WA_WindowPropagation);
36 QStyleOptionComboBox opt;
37 opt.initFrom(this);
38// d->container->setFrameStyle(style()->styleHint(QStyle::SH_ComboBox_PopupFrameStyle, &opt, this));
39
40 d->slider = new QSlider(Qt::Horizontal);
41 d->slider->setMinimum(0);
42 d->slider->setMaximum(256);
43 d->slider->setPageStep(10);
44 d->slider->setValue(0);
45 // When set to true, causes flicker on Qt 4.6. Any reason to keep it?
46 d->firstShowOfSlider = false; //true;
47
48 QHBoxLayout *layout = new QHBoxLayout(d->container);
49 layout->setContentsMargins(2, 2, 2, 2);
50 layout->setSpacing(2);
51 layout->addWidget(d->slider);
52 d->container->resize(200, 30);
53
54 setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
55
56 setEditable(true);
57 setEditText(QLocale().toString(0.0, d->decimals));
58
59 connect(d->slider, SIGNAL(valueChanged(int)), SLOT(sliderValueChanged(int)));
60 connect(d->slider, SIGNAL(sliderReleased()), SLOT(sliderReleased()));
61 connect(lineEdit(), SIGNAL(editingFinished()), SLOT(lineEditFinished()));
62}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KoSliderComboPrivate *const d
void lineEditFinished()
void sliderReleased()
void valueChanged(qreal value, bool final)
void sliderValueChanged(int value)
QString toString(const QString &value)

References connect(), d, lineEditFinished(), sliderReleased(), sliderValueChanged(), and valueChanged().

◆ ~KoSliderCombo()

KoSliderCombo::~KoSliderCombo ( )
override

Destructor

Definition at line 64 of file KoSliderCombo.cpp.

65{
66 delete d;
67}

References d.

Member Function Documentation

◆ changeEvent()

void KoSliderCombo::changeEvent ( QEvent * e)
overrideprotected

reimplemented from QComboBox

Definition at line 140 of file KoSliderCombo.cpp.

141{
142 switch (e->type())
143 {
144 case QEvent::EnabledChange:
145 if (!isEnabled())
146 d->hidePopup();
147 break;
148 case QEvent::PaletteChange:
149 d->container->setPalette(palette());
150 break;
151 default:
152 break;
153 }
154 QComboBox::changeEvent(e);
155}
rgba palette[MAX_PALETTE]
Definition palette.c:35

References d, and palette.

◆ decimals()

qreal KoSliderCombo::decimals ( ) const

The precision of values given as the number of digits after the period. default is 2

◆ hideEvent()

void KoSliderCombo::hideEvent ( QHideEvent * )
overrideprotected

reimplemented from QComboBox

Definition at line 135 of file KoSliderCombo.cpp.

136{
137 d->hidePopup();
138}

References d.

◆ hidePopup()

void KoSliderCombo::hidePopup ( )

◆ keyPressEvent()

void KoSliderCombo::keyPressEvent ( QKeyEvent * e)
overrideprotected

reimplemented from QComboBox

Definition at line 187 of file KoSliderCombo.cpp.

188{
189 if (e->key() == Qt::Key_Up) setValue(value() + d->slider->singleStep() * (maximum() - minimum()) / 256 + 0.5);
190 else if (e->key() == Qt::Key_Down) setValue(value() - d->slider->singleStep() * (maximum() - minimum()) / 256 - 0.5);
191 else QComboBox::keyPressEvent(e);
192}
void setValue(qreal value)
qreal value() const

References d, maximum, minimum, setValue(), and value().

◆ lineEditFinished()

void KoSliderCombo::lineEditFinished ( )

◆ maximum()

qreal KoSliderCombo::maximum ( ) const

The maximum value that can be entered. default is 100

◆ minimum()

qreal KoSliderCombo::minimum ( ) const

The minimum value that can be entered. default is 0

◆ minimumSizeHint()

QSize KoSliderCombo::minimumSizeHint ( ) const
override

reimplemented from QComboBox

Definition at line 74 of file KoSliderCombo.cpp.

75{
76 QSize sh;
77
78 const QFontMetrics &fm = fontMetrics();
79 sh.setWidth(5 * fm.horizontalAdvance(QLatin1Char('8')));
80 sh.setHeight(qMax(fm.lineSpacing(), 14) + 2);
81
82 // add style and strut values
83 QStyleOptionComboBox opt;
84 opt.initFrom(this);
85 opt.subControls = QStyle::SC_All;
86 opt.editable = true;
87 sh = style()->sizeFromContents(QStyle::CT_ComboBox, &opt, sh, this);
88
89 return sh;
90}

◆ mousePressEvent()

void KoSliderCombo::mousePressEvent ( QMouseEvent * e)
overrideprotected

reimplemented from QComboBox

Definition at line 171 of file KoSliderCombo.cpp.

172{
173 QStyleOptionComboBox opt;
174 opt.initFrom(this);
175 opt.subControls = QStyle::SC_All;
176 opt.editable = true;
177 QStyle::SubControl sc = style()->hitTestComplexControl(QStyle::CC_ComboBox, &opt, e->pos(),
178 this);
179 if (sc == QStyle::SC_ComboBoxArrow && !d->container->isVisible())
180 {
181 d->showPopup();
182 }
183 else
184 QComboBox::mousePressEvent(e);
185}

References d.

◆ paintEvent()

void KoSliderCombo::paintEvent ( QPaintEvent * )
overrideprotected

reimplemented from QComboBox

Definition at line 157 of file KoSliderCombo.cpp.

158{
159 QStylePainter gc(this);
160
161 gc.setPen(palette().color(QPalette::Text));
162
163 QStyleOptionComboBox opt;
164 opt.initFrom(this);
165 opt.subControls = QStyle::SC_All;
166 opt.editable = true;
167 gc.drawComplexControl(QStyle::CC_ComboBox, opt);
168 gc.drawControl(QStyle::CE_ComboBoxLabel, opt);
169}

References palette.

◆ setDecimals()

void KoSliderCombo::setDecimals ( int number)

Sets the precision of the entered values.

Parameters
numberthe number of digits after the period

Definition at line 243 of file KoSliderCombo.cpp.

244{
245 d->decimals = dec;
246 if (dec == 0) lineEdit()->setValidator(new QIntValidator(this));
247 else lineEdit()->setValidator(new QDoubleValidator(this));
248}

References d.

◆ setMaximum()

void KoSliderCombo::setMaximum ( qreal max)

Sets the maximum value that can be entered.

Parameters
maxthe maximum value

Definition at line 255 of file KoSliderCombo.cpp.

256{
257 d->maximum = max;
258}
constexpr std::enable_if< sizeof...(values)==0, size_t >::type max()

References d.

◆ setMinimum()

void KoSliderCombo::setMinimum ( qreal min)

Sets the minimum value that can be entered.

Parameters
minthe minimum value

Definition at line 250 of file KoSliderCombo.cpp.

251{
252 d->minimum = min;
253}
T min(T a, T b, T c)

References d.

◆ setValue

void KoSliderCombo::setValue ( qreal value)
slot

Sets the value. The value actually set is forced to be within the legal range: minimum <= value <= maximum

Parameters
valuethe new value

Definition at line 260 of file KoSliderCombo.cpp.

261{
262 if(value < d->minimum)
263 value = d->minimum;
264 if(value > d->maximum)
265 value = d->maximum;
266 setEditText(QLocale().toString(value, d->decimals));
267 d->slider->blockSignals(true);
268 d->slider->setValue(int((value - d->minimum) * 256 / (d->maximum - d->minimum) + 0.5));
269 d->slider->blockSignals(false);
270 Q_EMIT valueChanged(value, true);
271}

References d, minimum, value(), and valueChanged().

◆ showPopup()

void KoSliderCombo::showPopup ( )

◆ sizeHint()

QSize KoSliderCombo::sizeHint ( ) const
override

reimplemented from QComboBox

Definition at line 69 of file KoSliderCombo.cpp.

70{
71 return minimumSizeHint();
72}
QSize minimumSizeHint() const override
reimplemented from QComboBox

References minimumSizeHint().

◆ sliderReleased()

void KoSliderCombo::sliderReleased ( )

◆ sliderValueChanged()

void KoSliderCombo::sliderValueChanged ( int value)

◆ value()

qreal KoSliderCombo::value ( ) const

The value shown.

Definition at line 238 of file KoSliderCombo.cpp.

239{
240 return QLocale().toDouble(currentText());
241}

◆ valueChanged

void KoSliderCombo::valueChanged ( qreal value,
bool final )
signal

Emitted every time the value changes (by calling setValue() or by user interaction).

Parameters
valuethe new value
finalif the value is final ie not produced during sliding (on slider release it's final)

◆ wheelEvent()

void KoSliderCombo::wheelEvent ( QWheelEvent * e)
overrideprotected

reimplemented from QComboBox

Definition at line 194 of file KoSliderCombo.cpp.

195{
196 if (e->angleDelta().y() > 0) setValue(value() + d->slider->singleStep() * (maximum() - minimum()) / 256 + 0.5);
197 else setValue(value() - d->slider->singleStep() * (maximum() - minimum()) / 256 - 0.5);
198}

References d, maximum, minimum, setValue(), and value().

Member Data Documentation

◆ arrowState

QStyle::StateFlag KoSliderCombo::arrowState

Definition at line 60 of file KoSliderCombo_p.h.

◆ container

KoSliderComboContainer* KoSliderCombo::container

Definition at line 58 of file KoSliderCombo_p.h.

◆ d

KoSliderComboPrivate* const KoSliderCombo::d
private

Definition at line 125 of file KoSliderCombo.h.

◆ decimals

qreal KoSliderCombo::decimals

Definition at line 63 of file KoSliderCombo_p.h.

◆ firstShowOfSlider

bool KoSliderCombo::firstShowOfSlider

Definition at line 64 of file KoSliderCombo_p.h.

◆ m_timer

QTimer KoSliderCombo::m_timer

Definition at line 57 of file KoSliderCombo_p.h.

◆ m_validator

QValidator* KoSliderCombo::m_validator

Definition at line 56 of file KoSliderCombo_p.h.

◆ maximum

qreal KoSliderCombo::maximum

Definition at line 62 of file KoSliderCombo_p.h.

◆ minimum

qreal KoSliderCombo::minimum

Definition at line 61 of file KoSliderCombo_p.h.

◆ slider

QSlider* KoSliderCombo::slider

Definition at line 59 of file KoSliderCombo_p.h.

◆ thePublic

KoSliderCombo* KoSliderCombo::thePublic

Definition at line 55 of file KoSliderCombo_p.h.


The documentation for this class was generated from the following files: