1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
5 - University of LYON http://www.universite-lyon.fr/
6 - Léon Bérard cancer center http://www.centreleonberard.fr
7 - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
9 This software is distributed WITHOUT ANY WARRANTY; without even
10 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11 PURPOSE. See the copyright notices for more information.
13 It is distributed under dual licence
15 - BSD See included LICENSE.txt file
16 - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ===========================================================================**/
18 #include "vvIntensityValueSlider.h"
20 //------------------------------------------------------------------------------
21 vvIntensityValueSlider::vvIntensityValueSlider(QWidget * parent, Qt::WindowFlags f)
22 :QWidget(parent,f), Ui::vvIntensityValueSlider()
27 mButtonPlus->setHidden(true);
28 mButtonMinus->setHidden(true);
31 // Connect signals & slots
32 connect(mSpinBox, SIGNAL(valueChanged(double)), this, SLOT(valueChangedFromSpinBox(double)));
33 connect(mSlider, SIGNAL(valueChanged(int)), this, SLOT(valueChangedFromSlider(int)));
34 connect(mButtonPlus, SIGNAL(clicked()), this, SLOT(SingleStepPlusClicked()));
35 connect(mButtonMinus, SIGNAL(clicked()), this, SLOT(SingleStepMinusClicked()));
37 //------------------------------------------------------------------------------
40 //------------------------------------------------------------------------------
41 vvIntensityValueSlider::~vvIntensityValueSlider()
44 //------------------------------------------------------------------------------
47 //------------------------------------------------------------------------------
48 void vvIntensityValueSlider::SingleStepMinusClicked()
50 mSpinBox->setSingleStep(mSpinBox->singleStep()*10);
51 mSpinBox->setDecimals(mSpinBox->decimals()-1);
53 //------------------------------------------------------------------------------
56 //------------------------------------------------------------------------------
57 void vvIntensityValueSlider::SetSingleStep(double step)
59 mSpinBox->setSingleStep(step);
61 //------------------------------------------------------------------------------
64 //------------------------------------------------------------------------------
65 void vvIntensityValueSlider::SingleStepPlusClicked()
67 mSpinBox->setSingleStep(mSpinBox->singleStep()/10);
68 mSpinBox->setDecimals(mSpinBox->decimals()+1);
70 //------------------------------------------------------------------------------
73 //------------------------------------------------------------------------------
74 void vvIntensityValueSlider::valueChangedFromSpinBox(double v)
76 if (v == mValue) return;
77 mSpinBox->setValue(v);
78 v = mSpinBox->value(); // this is needed to 'round' value according to spinBox precision
81 vv = ((v-mMin)/mWidth)/mSliderFactor;
83 mSlider->setValue(vv);
87 //------------------------------------------------------------------------------
90 //------------------------------------------------------------------------------
91 void vvIntensityValueSlider::valueChangedFromSlider(int vv)
95 v = ((double)vv*mSliderFactor)*mWidth+mMin;
100 if (mValue == v) return;
101 mSpinBox->setValue(v);
104 //------------------------------------------------------------------------------
107 //------------------------------------------------------------------------------
108 void vvIntensityValueSlider::SetText(QString t)
112 //------------------------------------------------------------------------------
115 //------------------------------------------------------------------------------
116 void vvIntensityValueSlider::SetImage(vvImage * im)
121 //------------------------------------------------------------------------------
124 //------------------------------------------------------------------------------
125 void vvIntensityValueSlider::SetValue(double v)
128 mSpinBox->setValue(v);
130 //------------------------------------------------------------------------------
133 //------------------------------------------------------------------------------
134 void vvIntensityValueSlider::SetMaximum(double max)
137 mSpinBox->setMaximum(max);
139 // If integer values : update slider max
140 if (mIsInteger == 1) {
141 mSlider->setMaximum(max);
143 double step = mWidth/1000.0;
144 mSpinBox->setSingleStep(step);
150 QString tip = QString("Min = %1 Max = %2").arg(mSpinBox->minimum()).arg(max);
153 //------------------------------------------------------------------------------
156 //------------------------------------------------------------------------------
157 void vvIntensityValueSlider::SetMinimum(double min)
160 mSpinBox->setMinimum(min);
162 if (mIsInteger == 1) {
163 mSlider->setMinimum(min);
165 double step = mWidth/1000.0;
166 mSpinBox->setSingleStep(step);
173 QString tip = QString("Min = %1 Max = %2").arg(min).arg(mSpinBox->maximum());
176 //------------------------------------------------------------------------------
179 //------------------------------------------------------------------------------
180 void vvIntensityValueSlider::Update()
183 mImage->GetFirstVTKImageData()->GetScalarRange(range);
186 double step = (mMax-mMin)/1000.0;
188 if (mImage->IsScalarTypeInteger()) {
190 mSpinBox->setSingleStep(1.0);
191 mSpinBox->setDecimals(0);
192 mSlider->setMaximum(mMax);
193 mSlider->setMinimum(mMin);
194 mSlider->setSingleStep(1);
199 mButtonPlus->setHidden(false);
200 mButtonMinus->setHidden(false);
201 mSpinBox->sizePolicy().setHorizontalPolicy(QSizePolicy::Expanding);
202 mSpinBox->setSingleStep(step);
203 mSpinBox->setDecimals(4);
204 mSlider->setMaximum(1000);
205 mSlider->setMinimum(0);
206 mSlider->setSingleStep(1);
207 mSliderFactor = 1.0/1000.0;
211 mSpinBox->setMaximum(mMax);
212 mSpinBox->setMinimum(mMin);
213 mSpinBox->setValue((mMax-mMin)/2.0+mMin);
215 QString tip = QString("Min = %1 Max = %2").arg(mMin).arg(mMax);
218 //------------------------------------------------------------------------------