1 /*=========================================================================
4 Module: $RCSfile: vvIntensityValueSlider.cxx,v $
6 Date: $Date: 2010/03/05 10:32:33 $
7 Version: $Revision: 1.5 $
8 Author : David Sarrut (david.sarrut@creatis.insa-lyon.fr)
11 Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
12 CREATIS-LRMN http://www.creatis.insa-lyon.fr
14 This program is free software: you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation, version 3 of the License.
18 This program is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License for more details.
23 You should have received a copy of the GNU General Public License
24 along with this program. If not, see <http://www.gnu.org/licenses/>.
26 =========================================================================*/
28 #include "vvIntensityValueSlider.h"
30 //------------------------------------------------------------------------------
31 vvIntensityValueSlider::vvIntensityValueSlider(QWidget * parent, Qt::WindowFlags f)
32 :QWidget(parent,f), Ui::vvIntensityValueSlider()
37 mButtonPlus->setHidden(true);
38 mButtonMinus->setHidden(true);
40 // Connect signals & slots
41 connect(mSpinBox, SIGNAL(valueChanged(double)), this, SLOT(valueChangedFromSpinBox(double)));
42 connect(mSlider, SIGNAL(valueChanged(int)), this, SLOT(valueChangedFromSlider(int)));
43 connect(mButtonPlus, SIGNAL(clicked()), this, SLOT(SingleStepPlusClicked()));
44 connect(mButtonMinus, SIGNAL(clicked()), this, SLOT(SingleStepMinusClicked()));
46 //------------------------------------------------------------------------------
49 //------------------------------------------------------------------------------
50 vvIntensityValueSlider::~vvIntensityValueSlider() {
52 //------------------------------------------------------------------------------
55 //------------------------------------------------------------------------------
56 void vvIntensityValueSlider::SingleStepMinusClicked() {
57 mSpinBox->setSingleStep(mSpinBox->singleStep()*10);
58 mSpinBox->setDecimals(mSpinBox->decimals()-1);
60 //------------------------------------------------------------------------------
63 //------------------------------------------------------------------------------
64 void vvIntensityValueSlider::SetSingleStep(double step) {
65 mSpinBox->setSingleStep(step);
67 //------------------------------------------------------------------------------
70 //------------------------------------------------------------------------------
71 void vvIntensityValueSlider::SingleStepPlusClicked() {
72 mSpinBox->setSingleStep(mSpinBox->singleStep()/10);
73 mSpinBox->setDecimals(mSpinBox->decimals()+1);
75 //------------------------------------------------------------------------------
78 //------------------------------------------------------------------------------
79 void vvIntensityValueSlider::valueChangedFromSpinBox(double v) {
80 if (v == mValue) return;
81 mSpinBox->setValue(v);
82 v = mSpinBox->value(); // this is needed to 'round' value according to spinBox precision
85 vv = ((v-mMin)/mWidth)/mSliderFactor;
88 mSlider->setValue(vv);
92 //------------------------------------------------------------------------------
95 //------------------------------------------------------------------------------
96 void vvIntensityValueSlider::valueChangedFromSlider(int vv) {
99 v = ((double)vv*mSliderFactor)*mWidth+mMin;
105 if (mValue == v) return;
106 mSpinBox->setValue(v);
109 //------------------------------------------------------------------------------
112 //------------------------------------------------------------------------------
113 void vvIntensityValueSlider::SetText(QString t) {
116 //------------------------------------------------------------------------------
119 //------------------------------------------------------------------------------
120 void vvIntensityValueSlider::SetImage(vvImage * im) {
124 //------------------------------------------------------------------------------
127 //------------------------------------------------------------------------------
128 void vvIntensityValueSlider::SetValue(double v) {
130 mSpinBox->setValue(v);
132 //------------------------------------------------------------------------------
135 //------------------------------------------------------------------------------
136 void vvIntensityValueSlider::SetMaximum(double max) {
138 mSpinBox->setMaximum(max);
140 // If integer values : update slider max
141 if (mIsInteger == 1) {
142 mSlider->setMaximum(max);
145 double step = mWidth/1000.0;
146 mSpinBox->setSingleStep(step);
149 if (mValue > max) { SetValue(max); }
150 QString tip = QString("Min = %1 Max = %2").arg(mSpinBox->minimum()).arg(max);
153 //------------------------------------------------------------------------------
156 //------------------------------------------------------------------------------
157 void vvIntensityValueSlider::SetMinimum(double min) {
159 mSpinBox->setMinimum(min);
161 if (mIsInteger == 1) {
162 mSlider->setMinimum(min);
165 double step = mWidth/1000.0;
166 mSpinBox->setSingleStep(step);
170 if (mValue < min) { SetValue(min); }
171 QString tip = QString("Min = %1 Max = %2").arg(min).arg(mSpinBox->maximum());
174 //------------------------------------------------------------------------------
177 //------------------------------------------------------------------------------
178 void vvIntensityValueSlider::Update() {
180 mImage->GetFirstVTKImageData()->GetScalarRange(range);
183 double step = (mMax-mMin)/1000.0;
185 if (mImage->IsScalarTypeInteger()) {
187 mSpinBox->setSingleStep(1.0);
188 mSpinBox->setDecimals(0);
189 mSlider->setMaximum(mMax);
190 mSlider->setMinimum(mMin);
191 mSlider->setSingleStep(1);
197 mButtonPlus->setHidden(false);
198 mButtonMinus->setHidden(false);
199 mSpinBox->sizePolicy().setHorizontalPolicy(QSizePolicy::Expanding);
200 mSpinBox->setSingleStep(step);
201 mSpinBox->setDecimals(4);
202 mSlider->setMaximum(1000);
203 mSlider->setMinimum(0);
204 mSlider->setSingleStep(1);
205 mSliderFactor = 1.0/1000.0;
209 mSpinBox->setMaximum(mMax);
210 mSpinBox->setMinimum(mMin);
211 mSpinBox->setValue((mMax-mMin)/2.0+mMin);
213 QString tip = QString("Min = %1 Max = %2").arg(mMin).arg(mMax);
216 //------------------------------------------------------------------------------