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://oncora1.lyon.fnclcc.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);
30 // Connect signals & slots
31 connect(mSpinBox, SIGNAL(valueChanged(double)), this, SLOT(valueChangedFromSpinBox(double)));
32 connect(mSlider, SIGNAL(valueChanged(int)), this, SLOT(valueChangedFromSlider(int)));
33 connect(mButtonPlus, SIGNAL(clicked()), this, SLOT(SingleStepPlusClicked()));
34 connect(mButtonMinus, SIGNAL(clicked()), this, SLOT(SingleStepMinusClicked()));
36 //------------------------------------------------------------------------------
39 //------------------------------------------------------------------------------
40 vvIntensityValueSlider::~vvIntensityValueSlider() {
42 //------------------------------------------------------------------------------
45 //------------------------------------------------------------------------------
46 void vvIntensityValueSlider::SingleStepMinusClicked() {
47 mSpinBox->setSingleStep(mSpinBox->singleStep()*10);
48 mSpinBox->setDecimals(mSpinBox->decimals()-1);
50 //------------------------------------------------------------------------------
53 //------------------------------------------------------------------------------
54 void vvIntensityValueSlider::SetSingleStep(double step) {
55 mSpinBox->setSingleStep(step);
57 //------------------------------------------------------------------------------
60 //------------------------------------------------------------------------------
61 void vvIntensityValueSlider::SingleStepPlusClicked() {
62 mSpinBox->setSingleStep(mSpinBox->singleStep()/10);
63 mSpinBox->setDecimals(mSpinBox->decimals()+1);
65 //------------------------------------------------------------------------------
68 //------------------------------------------------------------------------------
69 void vvIntensityValueSlider::valueChangedFromSpinBox(double v) {
70 if (v == mValue) return;
71 mSpinBox->setValue(v);
72 v = mSpinBox->value(); // this is needed to 'round' value according to spinBox precision
75 vv = ((v-mMin)/mWidth)/mSliderFactor;
78 mSlider->setValue(vv);
82 //------------------------------------------------------------------------------
85 //------------------------------------------------------------------------------
86 void vvIntensityValueSlider::valueChangedFromSlider(int vv) {
89 v = ((double)vv*mSliderFactor)*mWidth+mMin;
95 if (mValue == v) return;
96 mSpinBox->setValue(v);
99 //------------------------------------------------------------------------------
102 //------------------------------------------------------------------------------
103 void vvIntensityValueSlider::SetText(QString t) {
106 //------------------------------------------------------------------------------
109 //------------------------------------------------------------------------------
110 void vvIntensityValueSlider::SetImage(vvImage * im) {
114 //------------------------------------------------------------------------------
117 //------------------------------------------------------------------------------
118 void vvIntensityValueSlider::SetValue(double v) {
120 mSpinBox->setValue(v);
122 //------------------------------------------------------------------------------
125 //------------------------------------------------------------------------------
126 void vvIntensityValueSlider::SetMaximum(double max) {
128 mSpinBox->setMaximum(max);
130 // If integer values : update slider max
131 if (mIsInteger == 1) {
132 mSlider->setMaximum(max);
135 double step = mWidth/1000.0;
136 mSpinBox->setSingleStep(step);
139 if (mValue > max) { SetValue(max); }
140 QString tip = QString("Min = %1 Max = %2").arg(mSpinBox->minimum()).arg(max);
143 //------------------------------------------------------------------------------
146 //------------------------------------------------------------------------------
147 void vvIntensityValueSlider::SetMinimum(double min) {
149 mSpinBox->setMinimum(min);
151 if (mIsInteger == 1) {
152 mSlider->setMinimum(min);
155 double step = mWidth/1000.0;
156 mSpinBox->setSingleStep(step);
160 if (mValue < min) { SetValue(min); }
161 QString tip = QString("Min = %1 Max = %2").arg(min).arg(mSpinBox->maximum());
164 //------------------------------------------------------------------------------
167 //------------------------------------------------------------------------------
168 void vvIntensityValueSlider::Update() {
170 mImage->GetFirstVTKImageData()->GetScalarRange(range);
173 double step = (mMax-mMin)/1000.0;
175 if (mImage->IsScalarTypeInteger()) {
177 mSpinBox->setSingleStep(1.0);
178 mSpinBox->setDecimals(0);
179 mSlider->setMaximum(mMax);
180 mSlider->setMinimum(mMin);
181 mSlider->setSingleStep(1);
187 mButtonPlus->setHidden(false);
188 mButtonMinus->setHidden(false);
189 mSpinBox->sizePolicy().setHorizontalPolicy(QSizePolicy::Expanding);
190 mSpinBox->setSingleStep(step);
191 mSpinBox->setDecimals(4);
192 mSlider->setMaximum(1000);
193 mSlider->setMinimum(0);
194 mSlider->setSingleStep(1);
195 mSliderFactor = 1.0/1000.0;
199 mSpinBox->setMaximum(mMax);
200 mSpinBox->setMinimum(mMin);
201 mSpinBox->setValue((mMax-mMin)/2.0+mMin);
203 QString tip = QString("Min = %1 Max = %2").arg(mMin).arg(mMax);
206 //------------------------------------------------------------------------------