1 #include <cpExtensions/QT/WindowLevelImageConfiguration.h>
2 #include <cpExtensions/QT/ui_WindowLevelImageConfiguration.h>
3 #include <cpExtensions/QT/SimpleMPRWidget.h>
5 // -------------------------------------------------------------------------
6 cpExtensions::QT::WindowLevelImageConfiguration::
7 WindowLevelImageConfiguration( QWidget* parent, Qt::WindowFlags f )
8 : Superclass( parent, f ),
9 m_UI( new Ui::WindowLevelImageConfiguration ),
13 this->m_UI->setupUi( this );
16 // -------------------------------------------------------------------------
17 cpExtensions::QT::WindowLevelImageConfiguration::
18 ~WindowLevelImageConfiguration( )
23 // -------------------------------------------------------------------------
24 void cpExtensions::QT::WindowLevelImageConfiguration::
25 setData( ActorsWidgetInterface* data, const std::string& name )
27 if( this->m_Data != data )
33 double range[ 2 ], win_lev[ 2 ];
34 this->m_Data->GetScalarRange( this->m_Name, range );
35 this->m_Data->GetWindowLevel( this->m_Name, win_lev );
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 ] );
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 ] );
54 double w = win_lev[ 0 ] / off;
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 );
61 double l = ( win_lev[ 1 ] - range[ 0 ] ) / off;
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 );
69 double o = this->m_Data->GetOpacity( this->m_Name );
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 );
77 switch( this->m_Data->GetImageInterpolation( this->m_Name ) )
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;
86 this->m_UI->MaximumBox, SIGNAL( valueChanged( int ) ),
87 this, SLOT( _maximumValue( int ) )
90 this->m_UI->MinimumBox, SIGNAL( valueChanged( int ) ),
91 this, SLOT( _minimumValue( int ) )
94 this->m_UI->LevelBox, SIGNAL( valueChanged( int ) ),
95 this, SLOT( _levelValue( int ) )
98 this->m_UI->LevelSlider, SIGNAL( valueChanged( int ) ),
99 this, SLOT( _levelValue( int ) )
102 this->m_UI->WindowBox, SIGNAL( valueChanged( int ) ),
103 this, SLOT( _windowValue( int ) )
106 this->m_UI->WindowSlider, SIGNAL( valueChanged( int ) ),
107 this, SLOT( _windowValue( int ) )
110 this->m_UI->OpacitySlider, SIGNAL( valueChanged( int ) ),
111 this, SLOT( _opacityValue( int ) )
114 this->m_UI->InterpolatorBox, SIGNAL( currentIndexChanged( int ) ),
115 this, SLOT( _interpolatorValue( int ) )
121 // -------------------------------------------------------------------------
122 void cpExtensions::QT::WindowLevelImageConfiguration::
123 _maximumValue( int v )
126 range[ 0 ] = double( this->m_UI->MinimumBox->value( ) );
127 range[ 1 ] = double( v );
128 this->m_Data->SetScalarRange( this->m_Name, range );
131 // -------------------------------------------------------------------------
132 void cpExtensions::QT::WindowLevelImageConfiguration::
133 _minimumValue( int v )
136 range[ 0 ] = double( v );
137 range[ 1 ] = double( this->m_UI->MaximumBox->value( ) );
138 this->m_Data->SetScalarRange( this->m_Name, range );
141 // -------------------------------------------------------------------------
142 void cpExtensions::QT::WindowLevelImageConfiguration::
148 this->m_Data->GetScalarRange( this->m_Name, r );
149 if( this->sender( ) == this->m_UI->LevelSlider )
151 s = double( v ) / double( this->m_UI->LevelSlider->maximum( ) );
152 l = ( ( r[ 1 ] - r[ 0 ] ) * s ) + r[ 0 ];
157 s = ( l - r[ 0 ] ) / ( r[ 1 ] - r[ 0 ] );
160 s *= this->m_UI->LevelSlider->maximum( );
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 );
169 this->m_Data->SetLevel( this->m_Name, l );
172 // -------------------------------------------------------------------------
173 void cpExtensions::QT::WindowLevelImageConfiguration::
174 _windowValue( int v )
179 this->m_Data->GetScalarRange( this->m_Name, r );
180 if( this->sender( ) == this->m_UI->WindowSlider )
182 s = double( v ) / double( this->m_UI->WindowSlider->maximum( ) );
183 w = ( ( r[ 1 ] - r[ 0 ] ) * s ) + r[ 0 ];
188 s = ( w - r[ 0 ] ) / ( r[ 1 ] - r[ 0 ] );
191 s *= this->m_UI->WindowSlider->maximum( );
193 bool b = this->m_UI->WindowSlider->blockSignals( true );
194 this->m_UI->WindowSlider->setValue( s );
195 this->m_UI->WindowSlider->blockSignals( b );
196 b = this->m_UI->WindowBox->blockSignals( true );
197 this->m_UI->WindowBox->setValue( w );
198 this->m_UI->WindowBox->blockSignals( b );
200 this->m_Data->SetWindow( this->m_Name, w );
203 // -------------------------------------------------------------------------
204 void cpExtensions::QT::WindowLevelImageConfiguration::
205 _opacityValue( int v )
207 if( this->m_Data != NULL )
209 double o = double( v );
210 o -= double( this->m_UI->OpacitySlider->minimum( ) );
212 double( this->m_UI->OpacitySlider->maximum( ) ) -
213 double( this->m_UI->OpacitySlider->minimum( ) );
214 this->m_Data->SetOpacity( this->m_Name, o );
219 // -------------------------------------------------------------------------
220 void cpExtensions::QT::WindowLevelImageConfiguration::
221 _interpolatorValue( int v )
225 case 1 : this->m_Data->SetImageInterpolation( this->m_Name, 'L' ); break;
226 case 2 : this->m_Data->SetImageInterpolation( this->m_Name, 'C' ); break;
227 default : this->m_Data->SetImageInterpolation( this->m_Name, 'N' ); break;