]> Creatis software - clitk.git/blob - vv/vvIntensityValueSlider.cxx
removed headers
[clitk.git] / vv / vvIntensityValueSlider.cxx
1 #include "vvIntensityValueSlider.h"
2
3 //------------------------------------------------------------------------------
4 vvIntensityValueSlider::vvIntensityValueSlider(QWidget * parent, Qt::WindowFlags f)
5   :QWidget(parent,f),  Ui::vvIntensityValueSlider() 
6 {
7   // GUI Initialization
8   setupUi(this);  
9   mIsInteger = true;
10   mButtonPlus->setHidden(true);
11   mButtonMinus->setHidden(true);
12   
13   // Connect signals & slots
14   connect(mSpinBox, SIGNAL(valueChanged(double)), this, SLOT(valueChangedFromSpinBox(double)));
15   connect(mSlider, SIGNAL(valueChanged(int)), this, SLOT(valueChangedFromSlider(int)));
16   connect(mButtonPlus, SIGNAL(clicked()), this, SLOT(SingleStepPlusClicked()));
17   connect(mButtonMinus, SIGNAL(clicked()), this, SLOT(SingleStepMinusClicked()));
18 }
19 //------------------------------------------------------------------------------
20
21
22 //------------------------------------------------------------------------------
23 vvIntensityValueSlider::~vvIntensityValueSlider() {
24 }
25 //------------------------------------------------------------------------------
26
27
28 //------------------------------------------------------------------------------
29 void vvIntensityValueSlider::SingleStepMinusClicked() {
30   mSpinBox->setSingleStep(mSpinBox->singleStep()*10);
31   mSpinBox->setDecimals(mSpinBox->decimals()-1);
32 }
33 //------------------------------------------------------------------------------
34
35
36 //------------------------------------------------------------------------------
37 void vvIntensityValueSlider::SetSingleStep(double step) {
38   mSpinBox->setSingleStep(step);
39 }
40 //------------------------------------------------------------------------------
41
42
43 //------------------------------------------------------------------------------
44 void vvIntensityValueSlider::SingleStepPlusClicked() {
45   mSpinBox->setSingleStep(mSpinBox->singleStep()/10);
46   mSpinBox->setDecimals(mSpinBox->decimals()+1);
47 }
48 //------------------------------------------------------------------------------
49
50
51 //------------------------------------------------------------------------------
52 void vvIntensityValueSlider::valueChangedFromSpinBox(double v) {
53   if (v == mValue) return;
54   mSpinBox->setValue(v);
55   v = mSpinBox->value(); // this is needed to 'round' value according to spinBox precision
56   double vv;
57   if (!mIsInteger) {
58     vv = ((v-mMin)/mWidth)/mSliderFactor;
59   }
60   else vv = v;
61   mSlider->setValue(vv);
62   mValue = v;
63   emit valueChanged(v);
64 }
65 //------------------------------------------------------------------------------
66
67
68 //------------------------------------------------------------------------------
69 void vvIntensityValueSlider::valueChangedFromSlider(int vv) {
70   double v;
71   if (!mIsInteger) {
72     v = ((double)vv*mSliderFactor)*mWidth+mMin;
73   }
74   else v= vv;
75
76   // arrondir ! ?
77
78   if (mValue == v) return;
79   mSpinBox->setValue(v);
80   mValue = v;
81 }
82 //------------------------------------------------------------------------------
83
84
85 //------------------------------------------------------------------------------
86 void vvIntensityValueSlider::SetText(QString t) {
87   mLabel->setText(t);
88 }
89 //------------------------------------------------------------------------------
90
91
92 //------------------------------------------------------------------------------
93 void vvIntensityValueSlider::SetImage(vvImage * im) { 
94   mImage = im; 
95   Update(); 
96 }
97 //------------------------------------------------------------------------------
98
99
100 //------------------------------------------------------------------------------
101 void vvIntensityValueSlider::SetValue(double v) { 
102   mValue = v;
103   mSpinBox->setValue(v);
104 }
105 //------------------------------------------------------------------------------
106
107
108 //------------------------------------------------------------------------------
109 void vvIntensityValueSlider::SetMaximum(double max) {
110   mMax = max;
111   mSpinBox->setMaximum(max);
112   
113   // If integer values : update slider max
114   if (mIsInteger == 1) {
115     mSlider->setMaximum(max);
116   }
117   else {
118     double step = mWidth/1000.0;
119     mSpinBox->setSingleStep(step);
120     mWidth = mMax-mMin;
121   }
122   if (mValue > max) { SetValue(max); }
123   QString tip = QString("Min = %1    Max = %2").arg(mSpinBox->minimum()).arg(max);
124   setToolTip(tip);
125 }
126 //------------------------------------------------------------------------------
127
128
129 //------------------------------------------------------------------------------
130 void vvIntensityValueSlider::SetMinimum(double min) {
131   mMin = min;
132   mSpinBox->setMinimum(min);
133
134   if (mIsInteger == 1) {
135     mSlider->setMinimum(min);
136   }
137   else {
138     double step = mWidth/1000.0;
139     mSpinBox->setSingleStep(step);
140     mWidth = mMax-mMin;
141   }
142
143   if (mValue < min) { SetValue(min); }
144   QString tip = QString("Min = %1    Max = %2").arg(min).arg(mSpinBox->maximum());
145   setToolTip(tip);
146 }
147 //------------------------------------------------------------------------------
148
149
150 //------------------------------------------------------------------------------
151 void vvIntensityValueSlider::Update() {
152   double range[2];
153   mImage->GetFirstVTKImageData()->GetScalarRange(range);
154   mMin = range[0];
155   mMax = range[1];
156   double step = (mMax-mMin)/1000.0;
157   
158   if (mImage->IsScalarTypeInteger()) {
159     mIsInteger = true;
160     mSpinBox->setSingleStep(1.0);
161     mSpinBox->setDecimals(0);
162     mSlider->setMaximum(mMax);
163     mSlider->setMinimum(mMin);
164     mSlider->setSingleStep(1);
165     mSliderFactor = 1.0;
166     mWidth = 1.0;
167   }
168   else {
169     mIsInteger = false;
170     mButtonPlus->setHidden(false);
171     mButtonMinus->setHidden(false);
172     mSpinBox->sizePolicy().setHorizontalPolicy(QSizePolicy::Expanding);
173     mSpinBox->setSingleStep(step);
174     mSpinBox->setDecimals(4);
175     mSlider->setMaximum(1000);
176     mSlider->setMinimum(0);
177     mSlider->setSingleStep(1);
178     mSliderFactor = 1.0/1000.0;
179     mWidth = mMax-mMin;
180   }
181   
182   mSpinBox->setMaximum(mMax);
183   mSpinBox->setMinimum(mMin);
184   mSpinBox->setValue((mMax-mMin)/2.0+mMin);
185   
186   QString tip = QString("Min = %1    Max = %2").arg(mMin).arg(mMax);
187   setToolTip(tip);
188 }
189 //------------------------------------------------------------------------------
190
191