1 /* This file is part of the KDE project
2 * Copyright (c) 2010 Cyrille Berger <cberger@cberger.net>
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 */
19
20 #include "kis_multipliers_double_slider_spinbox.h"
21 #include "kis_multipliers_double_slider_spinbox_p.h"
22
23 #include "ui_wdgmultipliersdoublesliderspinbox.h"
24
25 #include "kis_debug.h"
26
currentMultiplier()27 qreal KisMultipliersDoubleSliderSpinBox::Private::currentMultiplier()
28 {
29 return form.comboBox->itemData(form.comboBox->currentIndex()).toDouble();
30 }
31
updateRange()32 void KisMultipliersDoubleSliderSpinBox::Private::updateRange()
33 {
34 qreal m = currentMultiplier();
35 form.sliderSpinBox->setRange(m * min, m * max, decimals);
36 }
37
KisMultipliersDoubleSliderSpinBox(QWidget * _parent)38 KisMultipliersDoubleSliderSpinBox::KisMultipliersDoubleSliderSpinBox(QWidget* _parent)
39 : QWidget(_parent)
40 , d(new Private)
41 {
42 d->form.setupUi(this);
43 addMultiplier(1.0);
44 connect(d->form.sliderSpinBox, SIGNAL(valueChanged(qreal)), SIGNAL(valueChanged(qreal)));
45 connect(d->form.comboBox, SIGNAL(activated(int)), SLOT(updateRange()));
46 }
47
~KisMultipliersDoubleSliderSpinBox()48 KisMultipliersDoubleSliderSpinBox::~KisMultipliersDoubleSliderSpinBox()
49 {
50 delete d;
51 }
52
addMultiplier(double v)53 void KisMultipliersDoubleSliderSpinBox::addMultiplier(double v)
54 {
55 d->form.comboBox->addItem(i18n("x%1", v), v);
56 }
57
setRange(qreal minimum,qreal maximum,int decimals)58 void KisMultipliersDoubleSliderSpinBox::setRange(qreal minimum, qreal maximum, int decimals)
59 {
60 d->min = minimum;
61 d->max = maximum;
62 d->decimals = decimals;
63 d->updateRange();
64 }
65
value()66 qreal KisMultipliersDoubleSliderSpinBox::value()
67 {
68 return d->form.sliderSpinBox->value();
69 }
70
setValue(qreal value)71 void KisMultipliersDoubleSliderSpinBox::setValue(qreal value)
72 {
73 qreal m = d->currentMultiplier();
74
75 if (value < m * d->min || value > m * d->max) {
76 for(int i = 0; i < d->form.comboBox->count(); ++i) {
77 qreal m = d->form.comboBox->itemData(i).toDouble();
78 if (value >= m * d->min && value <= m * d->max) {
79 d->form.comboBox->setCurrentIndex(i);
80 d->updateRange();
81 break;
82 }
83 }
84 }
85
86 d->form.sliderSpinBox->setValue(value);
87 }
88
setExponentRatio(qreal dbl)89 void KisMultipliersDoubleSliderSpinBox::setExponentRatio(qreal dbl)
90 {
91 d->form.sliderSpinBox->setExponentRatio(dbl);
92 }
93
setPrefix(const QString & prefix)94 void KisMultipliersDoubleSliderSpinBox::setPrefix(const QString& prefix)
95 {
96 d->form.sliderSpinBox->setPrefix(prefix);
97 }
98
setSuffix(const QString & suffix)99 void KisMultipliersDoubleSliderSpinBox::setSuffix(const QString& suffix)
100 {
101 d->form.sliderSpinBox->setSuffix(suffix);
102 }
103
setBlockUpdateSignalOnDrag(bool block)104 void KisMultipliersDoubleSliderSpinBox::setBlockUpdateSignalOnDrag(bool block)
105 {
106 d->form.sliderSpinBox->setBlockUpdateSignalOnDrag(block);
107 }
108
setSingleStep(qreal value)109 void KisMultipliersDoubleSliderSpinBox::setSingleStep(qreal value)
110 {
111 d->form.sliderSpinBox->setSingleStep(value);
112 }
113
sizeHint() const114 QSize KisMultipliersDoubleSliderSpinBox::sizeHint() const
115 {
116 QSize sliderhint = d->form.sliderSpinBox->sizeHint();
117 QSize comboboxhint = d->form.comboBox->sizeHint();
118 sliderhint.setWidth(sliderhint.width() + comboboxhint.width() + 10);
119 sliderhint.setHeight(qMax(sliderhint.height(), comboboxhint.height()));
120 return sliderhint;
121 }
122
minimumSizeHint() const123 QSize KisMultipliersDoubleSliderSpinBox::minimumSizeHint() const
124 {
125 return sizeHint();
126 }
127
minimumSize() const128 QSize KisMultipliersDoubleSliderSpinBox::minimumSize() const
129 {
130 return QWidget::minimumSize();
131 }
132
133 #include "moc_kis_multipliers_double_slider_spinbox.cpp"
134