Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "QmitkSliderNavigatorWidget.h"
00019
00020 QmitkSliderNavigatorWidget::QmitkSliderNavigatorWidget(QWidget* parent, Qt::WindowFlags f)
00021 : QWidget(parent, f)
00022 {
00023 this->setupUi(this);
00024
00025
00026
00027 m_InRefetch = true;
00028
00029
00030 this->ShowLabels( false );
00031
00032
00033 this->SetLabelValuesValid( false, false );
00034
00035 m_HasLabels = false;
00036 m_HasLabelUnit = true;
00037 m_InverseDirection = false;
00038 }
00039
00040 void QmitkSliderNavigatorWidget::Refetch()
00041 {
00042 if ( !m_InRefetch )
00043 {
00044 m_InRefetch = true;
00045
00046 m_Slider->setMinimum( 0 );
00047 m_Slider->setMaximum( m_Stepper->GetSteps() - 1 );
00048 if (m_InverseDirection)
00049 {
00050 m_Slider->setValue( m_Stepper->GetSteps()-1-m_Stepper->GetPos() );
00051 }
00052 else
00053 {
00054 m_Slider->setValue( m_Stepper->GetPos() );
00055 }
00056
00057 m_SpinBox->setMinimum( 0 );
00058 m_SpinBox->setMaximum( m_Stepper->GetSteps() - 1 );
00059 if (m_InverseDirection)
00060 {
00061 m_SpinBox->setValue( m_Stepper->GetSteps()-1-m_Stepper->GetPos() );
00062 }
00063 else
00064 {
00065 m_SpinBox->setValue( m_Stepper->GetPos() );
00066 }
00067
00068 if ( m_Stepper->HasRange() && m_HasLabels )
00069 {
00070
00071 m_SliderLabelLeft->setHidden( false );
00072 m_SliderLabelRight->setHidden( false );
00073
00074 if ( m_Stepper->HasValidRange() )
00075 {
00076 this->SetLabelValuesValid( true, true );
00077 this->SetLabelValues(
00078 m_Stepper->GetRangeMin(),
00079 m_Stepper->GetRangeMax() );
00080 }
00081 else
00082 {
00083 this->SetLabelValuesValid( false, false );
00084 }
00085
00086 if ( m_Stepper->HasUnitName() )
00087 {
00088 this->SetLabelUnit( m_Stepper->GetUnitName() );
00089 }
00090 }
00091 else
00092 {
00093
00094 m_SliderLabelLeft->setHidden( true );
00095 m_SliderLabelRight->setHidden( true );
00096 }
00097
00098
00099 this->SetLabels();
00100
00101 m_InRefetch=false;
00102 }
00103 }
00104
00105
00106 void QmitkSliderNavigatorWidget::SetStepper( mitk::Stepper * stepper)
00107 {
00108 m_Stepper = stepper;
00109
00110
00111
00112 m_InRefetch = (stepper==NULL);
00113 }
00114
00115
00116 void QmitkSliderNavigatorWidget::slider_valueChanged( int )
00117 {
00118 if (!m_InRefetch)
00119 {
00120 if (m_InverseDirection)
00121 {
00122 m_Stepper->SetPos(m_Stepper->GetSteps()-1-m_Slider->value());
00123 }
00124 else
00125 {
00126 m_Stepper->SetPos(m_Slider->value());
00127 }
00128 this->Refetch();
00129 }
00130 }
00131
00132
00133 void QmitkSliderNavigatorWidget::ShowLabels( bool show )
00134 {
00135 m_HasLabels = show;
00136 }
00137
00138 void QmitkSliderNavigatorWidget::ShowLabelUnit( bool show )
00139 {
00140 m_HasLabelUnit = show;
00141 }
00142
00143 void QmitkSliderNavigatorWidget::SetLabelValues( float min, float max )
00144 {
00145 m_MinValue = min;
00146 m_MaxValue = max;
00147 }
00148
00149 void QmitkSliderNavigatorWidget::SetLabelValuesValid( bool minValid, bool maxValid )
00150 {
00151 m_MinValueValid = minValid;
00152 m_MaxValueValid = maxValid;
00153 }
00154
00155 void QmitkSliderNavigatorWidget::SetLabelUnit( const char *unit )
00156 {
00157 m_LabelUnit = unit;
00158 }
00159
00160 QString QmitkSliderNavigatorWidget::GetLabelUnit()
00161 {
00162 return m_LabelUnit;
00163 }
00164
00165 QString QmitkSliderNavigatorWidget::ClippedValueToString( float value )
00166 {
00167 if ( value < -10000000.0 )
00168 {
00169 return "-INF";
00170 }
00171 else if ( value > 10000000.0 )
00172 {
00173 return "+INF";
00174 }
00175 else
00176 {
00177 return QString::number( value, 'f', 2 );
00178 }
00179 }
00180
00181 QString QmitkSliderNavigatorWidget::GetMinValueLabel()
00182 {
00183 if ( m_MinValueValid )
00184 {
00185 return this->ClippedValueToString( m_MinValue );
00186 }
00187 else
00188 {
00189 return "N/A";
00190 }
00191 }
00192
00193 QString QmitkSliderNavigatorWidget::GetMaxValueLabel()
00194 {
00195 if ( m_MaxValueValid )
00196 {
00197 return this->ClippedValueToString( m_MaxValue );
00198 }
00199 else
00200 {
00201 return "N/A";
00202 }
00203 }
00204
00205 void QmitkSliderNavigatorWidget::SetLabels()
00206 {
00207 QString minText = "<p align='center'><font size='2'>"
00208 + this->GetMinValueLabel();
00209
00210 QString maxText = "<p align='center'><font size='2'>"
00211 + this->GetMaxValueLabel();
00212
00213 if ( m_HasLabelUnit )
00214 {
00215 minText += " " + this->GetLabelUnit();
00216 maxText += " " + this->GetLabelUnit();
00217 }
00218
00219 if ( m_MinValueValid )
00220 {
00221 minText += "<br>(pos 0)";
00222 }
00223
00224 if ( m_MaxValueValid )
00225 {
00226 maxText += "<br>(pos " + QString::number( m_Stepper->GetSteps() - 1 ) + ")";
00227 }
00228
00229 minText += "</font></p>";
00230 maxText += "</font></p>";
00231
00232 m_SliderLabelLeft->setText( minText );
00233 m_SliderLabelRight->setText( maxText );
00234 }
00235
00236 void QmitkSliderNavigatorWidget::spinBox_valueChanged( int )
00237 {
00238 if(!m_InRefetch)
00239 {
00240 if (m_InverseDirection)
00241 {
00242 m_Stepper->SetPos( m_Stepper->GetSteps()-1-m_SpinBox->value() );
00243 }
00244 else
00245 {
00246 m_Stepper->SetPos( m_SpinBox->value() );
00247 }
00248 this->Refetch();
00249 }
00250 }
00251
00252 int QmitkSliderNavigatorWidget::GetPos()
00253 {
00254 return m_Stepper->GetPos();
00255 }
00256
00257 void QmitkSliderNavigatorWidget::SetPos(int val)
00258 {
00259 if (!m_InRefetch)
00260 {
00261 m_Stepper->SetPos( val );
00262 }
00263 }
00264
00265 void QmitkSliderNavigatorWidget::SetInverseDirection(bool inverseDirection)
00266 {
00267 m_InverseDirection = inverseDirection;
00268 }