]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/QT/WindowLevelImageConfiguration.cxx
Medialness filters updated.
[cpPlugins.git] / lib / cpExtensions / QT / WindowLevelImageConfiguration.cxx
1 #include <cpExtensions/QT/WindowLevelImageConfiguration.h>
2
3 #ifdef cpExtensions_QT4
4
5 #include <cpExtensions/QT/ui_WindowLevelImageConfiguration.h>
6 #include <cpExtensions/QT/SimpleMPRWidget.h>
7
8 // -------------------------------------------------------------------------
9 cpExtensions::QT::WindowLevelImageConfiguration::
10 WindowLevelImageConfiguration( QWidget* parent, Qt::WindowFlags f )
11   : Superclass( parent, f ),
12     m_UI( new Ui::WindowLevelImageConfiguration )
13 {
14   this->m_UI->setupUi( this );
15 }
16
17 // -------------------------------------------------------------------------
18 cpExtensions::QT::WindowLevelImageConfiguration::
19 ~WindowLevelImageConfiguration( )
20 {
21   delete this->m_UI;
22 }
23
24 // -------------------------------------------------------------------------
25 void cpExtensions::QT::WindowLevelImageConfiguration::
26 setData( SimpleMPRWidget* data )
27 {
28   if( this->m_Data != data )
29   {
30     this->m_Data = data;
31
32     // Get data
33     double range[ 2 ], win_lev[ 2 ];
34     this->m_Data->GetScalarRange( range );
35     this->m_Data->GetWindowLevel( win_lev );
36
37     // Intensity range
38     this->m_UI->MinimumBox->setMinimum( -1000000 );
39     this->m_UI->MinimumBox->setMaximum(  1000000 );
40     this->m_UI->MaximumBox->setMinimum( -1000000 );
41     this->m_UI->MaximumBox->setMaximum(  1000000 );
42     this->m_UI->MinimumBox->setValue( range[ 0 ] );
43     this->m_UI->MaximumBox->setValue( range[ 1 ] );
44
45     // Window/level
46     double off = range[ 1 ] - range[ 0 ];
47     this->m_UI->WindowBox->setMinimum( 0 );
48     this->m_UI->WindowBox->setMaximum( off );
49     this->m_UI->LevelBox->setMinimum( range[ 0 ] );
50     this->m_UI->LevelBox->setMaximum( range[ 1 ] );
51     this->m_UI->WindowBox->setValue( win_lev[ 0 ] );
52     this->m_UI->LevelBox->setValue( win_lev[ 1 ] );
53
54     double w = win_lev[ 0 ] / off;
55     w *=
56       double( this->m_UI->WindowSlider->maximum( ) ) -
57       double( this->m_UI->WindowSlider->minimum( ) );
58     w += double( this->m_UI->WindowSlider->minimum( ) );
59     this->m_UI->WindowSlider->setValue( w );
60
61     double l = ( win_lev[ 1 ] - range[ 0 ] ) / off;
62     l *=
63       double( this->m_UI->LevelSlider->maximum( ) ) -
64       double( this->m_UI->LevelSlider->minimum( ) );
65     l += double( this->m_UI->LevelSlider->minimum( ) );
66     this->m_UI->LevelSlider->setValue( l );
67
68     // Opacity
69     double o = this->m_Data->GetImageOpacity( );
70     o *=
71       double( this->m_UI->OpacitySlider->maximum( ) ) -
72       double( this->m_UI->OpacitySlider->minimum( ) );
73     o += double( this->m_UI->OpacitySlider->minimum( ) );
74     this->m_UI->OpacitySlider->setValue( o );
75
76     // Interpolation mode
77     switch( this->m_Data->GetImageInterpolation( ) )
78     {
79     case 'L': this->m_UI->InterpolatorBox->setCurrentIndex( 1 ); break;
80     case 'C': this->m_UI->InterpolatorBox->setCurrentIndex( 2 ); break;
81     default : this->m_UI->InterpolatorBox->setCurrentIndex( 0 ); break;
82     } // hctiws
83
84     // Slots <-> signals
85     this->connect(
86       this->m_UI->MaximumBox, SIGNAL( valueChanged( int ) ),
87       this, SLOT( _maximumValue( int ) )
88       );
89     this->connect(
90       this->m_UI->MinimumBox, SIGNAL( valueChanged( int ) ),
91       this, SLOT( _minimumValue( int ) )
92       );
93     this->connect(
94       this->m_UI->LevelBox, SIGNAL( valueChanged( int ) ),
95       this, SLOT( _levelValue( int ) )
96       );
97     this->connect(
98       this->m_UI->LevelSlider, SIGNAL( valueChanged( int ) ),
99       this, SLOT( _levelValue( int ) )
100       );
101     this->connect(
102       this->m_UI->WindowBox, SIGNAL( valueChanged( int ) ),
103       this, SLOT( _windowValue( int ) )
104       );
105     this->connect(
106       this->m_UI->WindowSlider, SIGNAL( valueChanged( int ) ),
107       this, SLOT( _windowValue( int ) )
108       );
109     this->connect(
110       this->m_UI->OpacitySlider, SIGNAL( valueChanged( int ) ),
111       this, SLOT( _opacityValue( int ) )
112       );
113     this->connect(
114       this->m_UI->InterpolatorBox, SIGNAL( currentIndexChanged( int ) ),
115       this, SLOT( _interpolatorValue( int ) )
116       );
117
118   } // fi
119 }
120
121 // -------------------------------------------------------------------------
122 void cpExtensions::QT::WindowLevelImageConfiguration::
123 _maximumValue( int v )
124 {
125   double range[ 2 ];
126   range[ 0 ] = double( this->m_UI->MinimumBox->value( ) );
127   range[ 1 ] = double( v );
128   this->m_Data->SetScalarRange( range );
129 }
130
131 // -------------------------------------------------------------------------
132 void cpExtensions::QT::WindowLevelImageConfiguration::
133 _minimumValue( int v )
134 {
135   double range[ 2 ];
136   range[ 0 ] = double( v );
137   range[ 1 ] = double( this->m_UI->MaximumBox->value( ) );
138   this->m_Data->SetScalarRange( range );
139 }
140
141 // -------------------------------------------------------------------------
142 void cpExtensions::QT::WindowLevelImageConfiguration::
143 _levelValue( int v )
144 {
145   double r[ 2 ];
146   double l, s;
147
148   this->m_Data->GetScalarRange( r );
149   if( this->sender( ) == this->m_UI->LevelSlider )
150   {
151     s = double( v ) / double( this->m_UI->LevelSlider->maximum( ) );
152     l = ( ( r[ 1 ] - r[ 0 ] ) * s ) + r[ 0 ];
153   }
154   else
155   {
156     l = double( v );
157     s = ( l - r[ 0 ] ) / ( r[ 1 ] - r[ 0 ] );
158
159   } // fi
160   s *= this->m_UI->LevelSlider->maximum( );
161
162   bool b = this->m_UI->LevelSlider->blockSignals( true );
163   this->m_UI->LevelSlider->setValue( s );
164   this->m_UI->LevelSlider->blockSignals( b );
165   b = this->m_UI->LevelBox->blockSignals( true );
166   this->m_UI->LevelBox->setValue( l );
167   this->m_UI->LevelBox->blockSignals( b );
168
169   double wl[ 2 ];
170   this->m_Data->GetWindowLevel( wl );
171   wl[ 1 ] = l;
172   this->m_Data->SetWindowLevel( wl );
173 }
174
175 // -------------------------------------------------------------------------
176 void cpExtensions::QT::WindowLevelImageConfiguration::
177 _windowValue( int v )
178 {
179   double r[ 2 ];
180   double w, s;
181
182   this->m_Data->GetScalarRange( r );
183   if( this->sender( ) == this->m_UI->WindowSlider )
184   {
185     s = double( v ) / double( this->m_UI->WindowSlider->maximum( ) );
186     w = ( ( r[ 1 ] - r[ 0 ] ) * s ) + r[ 0 ];
187   }
188   else
189   {
190     w = double( v );
191     s = ( w - r[ 0 ] ) / ( r[ 1 ] - r[ 0 ] );
192
193   } // fi
194   s *= this->m_UI->WindowSlider->maximum( );
195
196   bool b = this->m_UI->WindowSlider->blockSignals( true );
197   this->m_UI->WindowSlider->setValue( s );
198   this->m_UI->WindowSlider->blockSignals( b );
199   b = this->m_UI->WindowBox->blockSignals( true );
200   this->m_UI->WindowBox->setValue( w );
201   this->m_UI->WindowBox->blockSignals( b );
202
203   double wl[ 2 ];
204   this->m_Data->GetWindowLevel( wl );
205   wl[ 0 ] = w;
206   this->m_Data->SetWindowLevel( wl );
207 }
208
209 // -------------------------------------------------------------------------
210 void cpExtensions::QT::WindowLevelImageConfiguration::
211 _opacityValue( int v )
212 {
213   if( this->m_Data != NULL )
214   {
215     double o = double( v );
216     o -= double( this->m_UI->OpacitySlider->minimum( ) );
217     o /=
218       double( this->m_UI->OpacitySlider->maximum( ) ) -
219       double( this->m_UI->OpacitySlider->minimum( ) );
220     this->m_Data->SetImageOpacity( o );
221
222   } // fi
223 }
224
225 // -------------------------------------------------------------------------
226 void cpExtensions::QT::WindowLevelImageConfiguration::
227 _interpolatorValue( int v )
228 {
229   switch( v )
230   {
231   case 1  : this->m_Data->SetImageInterpolation( 'L' ); break;
232   case 2  : this->m_Data->SetImageInterpolation( 'C' ); break;
233   default : this->m_Data->SetImageInterpolation( 'N' ); break;
234   } // hctiws
235 }
236
237 #endif // cpExtensions_QT4
238
239 // eof - $RCSfile$