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