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 "QmitkLineEditLevelWindowWidget.h"
00019 #include "QmitkLevelWindowWidgetContextMenu.h"
00020
00021 #include <mitkRenderingManager.h>
00022
00023 #include <itkCommand.h>
00024 #include <QValidator>
00025 #include <QLayout>
00026 #include <QLineEdit>
00027
00028
00032 QmitkLineEditLevelWindowWidget::QmitkLineEditLevelWindowWidget(QWidget* parent, Qt::WindowFlags f)
00033 : QWidget(parent, f)
00034 {
00035 m_Manager = mitk::LevelWindowManager::New();
00036
00037 itk::ReceptorMemberCommand<QmitkLineEditLevelWindowWidget>::Pointer command = itk::ReceptorMemberCommand<QmitkLineEditLevelWindowWidget>::New();
00038 command->SetCallbackFunction(this, &QmitkLineEditLevelWindowWidget::OnPropertyModified);
00039 m_ObserverTag = m_Manager->AddObserver(itk::ModifiedEvent(), command);
00040 m_IsObserverTagSet = true;
00041
00042 m_Contextmenu = new QmitkLevelWindowWidgetContextMenu(this);
00043
00044 QVBoxLayout* layout = new QVBoxLayout( this );
00045 layout->setMargin(0);
00046 layout->setSpacing(0);
00047
00048 m_LevelInput = new QLineEdit( this );
00049 m_LevelInput->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred));
00050
00051
00052
00053 m_WindowInput = new QLineEdit( this );
00054 m_WindowInput->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred));
00055
00056
00057
00058 layout->addWidget(m_LevelInput);
00059 layout->addWidget(m_WindowInput);
00060
00061
00062 connect( m_LevelInput, SIGNAL(editingFinished()), this, SLOT( SetLevelValue() ) );
00063 connect( m_WindowInput, SIGNAL(editingFinished()), this, SLOT( SetWindowValue() ) );
00064
00065
00066 QValidator* validatorWindowInput = new QIntValidator(1, 20000000, this);
00067 m_WindowInput->setValidator(validatorWindowInput);
00068
00069 QValidator* validatorLevelInput = new QIntValidator(-10000000, 10000000, this);
00070 m_LevelInput->setValidator(validatorLevelInput);
00071
00072 this->hide();
00073 }
00074
00075 QmitkLineEditLevelWindowWidget::~QmitkLineEditLevelWindowWidget()
00076 {
00077 if( m_IsObserverTagSet )
00078 {
00079 m_Manager->RemoveObserver(m_ObserverTag);
00080 m_IsObserverTagSet = false;
00081 }
00082 }
00083
00084 void QmitkLineEditLevelWindowWidget::OnPropertyModified(const itk::EventObject& )
00085 {
00086 try
00087 {
00088 m_LevelWindow = m_Manager->GetLevelWindow();
00089
00090 QString level;
00091 level.setNum((int)(m_LevelWindow.GetLevel()));
00092 m_LevelInput->setText(level);
00093 QString window;
00094 window.setNum((int)(m_LevelWindow.GetWindow()));
00095 m_WindowInput->setText(window);
00096 m_LevelInput->setEnabled(!m_LevelWindow.IsFixed());
00097 m_WindowInput->setEnabled(!m_LevelWindow.IsFixed());
00098 this->show();
00099 }
00100 catch(...)
00101 {
00102 try
00103 {
00104 this->hide();
00105 }
00106 catch(...)
00107 {
00108 }
00109 }
00110 }
00111
00112 void QmitkLineEditLevelWindowWidget::setLevelWindowManager(mitk::LevelWindowManager* levelWindowManager)
00113 {
00114 if( m_IsObserverTagSet )
00115 {
00116 m_Manager->RemoveObserver(m_ObserverTag);
00117 m_IsObserverTagSet = false;
00118 }
00119 m_Manager = levelWindowManager;
00120 if ( m_Manager.IsNotNull() )
00121 {
00122 itk::ReceptorMemberCommand<QmitkLineEditLevelWindowWidget>::Pointer command = itk::ReceptorMemberCommand<QmitkLineEditLevelWindowWidget>::New();
00123 command->SetCallbackFunction(this, &QmitkLineEditLevelWindowWidget::OnPropertyModified);
00124 m_ObserverTag = m_Manager->AddObserver(itk::ModifiedEvent(), command);
00125 m_IsObserverTagSet = true;
00126 }
00127 }
00128
00129 void QmitkLineEditLevelWindowWidget::SetDataStorage( mitk::DataStorage* ds )
00130 {
00131 m_Manager->SetDataStorage(ds);
00132 }
00133
00134
00135 void QmitkLineEditLevelWindowWidget::SetLevelValue()
00136 {
00137 validLevel();
00138 }
00139
00140
00141 void QmitkLineEditLevelWindowWidget::SetWindowValue()
00142 {
00143 validWindow();
00144 }
00145
00146 void QmitkLineEditLevelWindowWidget::contextMenuEvent( QContextMenuEvent * )
00147 {
00148 m_Contextmenu->setLevelWindowManager(m_Manager.GetPointer());
00149 m_Contextmenu->getContextMenu();
00150 }
00151
00152 void QmitkLineEditLevelWindowWidget::validLevel()
00153 {
00154 int level = m_LevelInput->text().toInt();
00155 if ( level + (int)(m_LevelWindow.GetWindow()/2) > (int)(m_LevelWindow.GetRangeMax()))
00156 {
00157 level = (int)(m_LevelWindow.GetRangeMax() - m_LevelWindow.GetWindow()/2);
00158 }
00159 if (level - (int)(m_LevelWindow.GetWindow()/2) < (int)(m_LevelWindow.GetRangeMin()))
00160 {
00161 level = (int)(m_LevelWindow.GetRangeMin() + m_LevelWindow.GetWindow()/2);
00162 }
00163 QString qLevel;
00164 qLevel.setNum(level);
00165 m_LevelInput->setText(qLevel);
00166 m_LevelWindow.SetLevelWindow(level, m_LevelWindow.GetWindow());
00167 m_Manager->SetLevelWindow(m_LevelWindow);
00168 mitk::RenderingManager::GetInstance()->RequestUpdateAll();
00169 }
00170
00171 void QmitkLineEditLevelWindowWidget::validWindow()
00172 {
00173 int window = m_WindowInput->text().toInt();
00174 if ( (int)(m_LevelWindow.GetLevel()) + window/2 > (int)(m_LevelWindow.GetRangeMax()))
00175 {
00176 window = (int)((m_LevelWindow.GetRangeMax() - m_LevelWindow.GetLevel())*2);
00177 }
00178 if ((int)(m_LevelWindow.GetLevel()) - window/2 < (int)(m_LevelWindow.GetRangeMin()))
00179 {
00180 window = (int)((m_LevelWindow.GetLevel() - m_LevelWindow.GetRangeMin())*2);
00181 }
00182 QString qWindow;
00183 qWindow.setNum(window);
00184 m_WindowInput->setText(qWindow);
00185 m_LevelWindow.SetLevelWindow(m_LevelWindow.GetLevel(), window);
00186 m_Manager->SetLevelWindow(m_LevelWindow);
00187 mitk::RenderingManager::GetInstance()->RequestUpdateAll();
00188 }
00189
00190 mitk::LevelWindowManager* QmitkLineEditLevelWindowWidget::GetManager()
00191 {
00192 return m_Manager.GetPointer();
00193 }