00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date$ 00006 Version: $Revision: 15412 $ 00007 00008 Copyright (c) German Cancer Research Center, Division of Medical and 00009 Biological Informatics. All rights reserved. 00010 See MITKCopyright.txt or https://www.mitk.org/copyright.html for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 00018 #if !defined(QMITK_MEASUREMENT_H__INCLUDED) 00019 #define QMITK_MEASUREMENT_H__INCLUDED 00020 00021 #include <berryIPartListener.h> 00022 #include <berryISelection.h> 00023 #include <berryISelectionProvider.h> 00024 #include <berryIPreferencesService.h> 00025 #include <berryIBerryPreferences.h> 00026 #include <berryISelectionListener.h> 00027 #include <berryIStructuredSelection.h> 00028 00029 #include <mitkWeakPointer.h> 00030 #include <mitkPlanarFigure.h> 00031 #include <mitkDataStorageSelection.h> 00032 00033 #include <QmitkFunctionality.h> 00034 #include <QmitkStandardViews.h> 00035 #include <QmitkStdMultiWidgetEditor.h> 00036 00037 class QmitkPlanarFiguresTableModel; 00038 class QGridLayout; 00039 class QMainWindow; 00040 class QToolBar; 00041 class QLabel; 00042 class QTableView; 00043 class QTextBrowser; 00044 00045 class vtkRenderer; 00046 class vtkCornerAnnotation; 00047 00048 00057 class QmitkMeasurement : public QObject, public QmitkFunctionality 00058 { 00059 Q_OBJECT 00060 00061 public: 00065 typedef std::vector<mitk::DataNode::Pointer> DataNodes; 00066 00070 QmitkMeasurement(); 00074 virtual ~QmitkMeasurement(); 00075 00076 public: 00081 void CreateQtPartControl(QWidget* parent); 00088 virtual void Activated(); 00093 virtual void Deactivated(); 00097 virtual void NodeChanged(const mitk::DataNode* node); 00098 virtual void PropertyChanged(const mitk::DataNode* node, const mitk::BaseProperty* prop); 00099 virtual void NodeRemoved(const mitk::DataNode* node); 00100 virtual void NodeAddedInDataStorage(const mitk::DataNode* node); 00101 virtual void PlanarFigureInitialized(); 00102 virtual void PlanarFigureSelected( itk::Object* object, const itk::EventObject& event ); 00103 virtual void AddFigureToDataStorage(mitk::PlanarFigure* figure, const QString& name, 00104 const char *propertyKey = NULL, mitk::BaseProperty *property = NULL ); 00105 00113 virtual void OnSelectionChanged(std::vector<mitk::DataNode*> nodes); 00114 00115 public slots: 00119 void OnRenderWindowDelete(QObject * obj = 0); 00120 00121 protected: 00128 void PlanarFigureSelectionChanged(); 00131 void SetMeasurementInfoToRenderWindow(const QString& text, QmitkRenderWindow* _RenderWindow); 00132 00133 bool AssertDrawingIsPossible(bool checked); 00134 00135 protected slots: 00137 void ActionDrawLineTriggered( bool checked = false ); 00138 void ActionDrawPathTriggered( bool checked = false ); 00139 void ActionDrawAngleTriggered( bool checked = false ); 00140 void ActionDrawFourPointAngleTriggered( bool checked = false ); 00141 void ActionDrawEllipseTriggered( bool checked = false ); 00142 void ActionDrawRectangleTriggered( bool checked = false ); 00143 void ActionDrawPolygonTriggered( bool checked = false ); 00144 void ActionDrawArrowTriggered( bool checked = false ); 00145 void ActionDrawTextTriggered( bool checked = false ); 00146 void CopyToClipboard( bool checked = false ); 00147 // fields 00148 // widgets 00149 protected: 00150 QGridLayout* m_Layout; 00151 QLabel* m_SelectedImage; 00152 QAction* m_DrawLine; 00153 QAction* m_DrawPath; 00154 QAction* m_DrawAngle; 00155 QAction* m_DrawFourPointAngle; 00156 QAction* m_DrawEllipse; 00157 QAction* m_DrawRectangle; 00158 QAction* m_DrawPolygon; 00159 QToolBar* m_DrawActionsToolBar; 00160 QActionGroup* m_DrawActionsGroup; 00161 QTextBrowser* m_SelectedPlanarFiguresText; 00162 QPushButton* m_CopyToClipboard; 00163 vtkRenderer * m_MeasurementInfoRenderer; 00164 vtkCornerAnnotation *m_MeasurementInfoAnnotation; 00165 00166 // Selection service 00168 friend struct berry::SelectionChangedAdapter<QmitkMeasurement>; 00169 berry::ISelectionListener::Pointer m_SelectionListener; 00170 00171 mitk::DataStorageSelection::Pointer m_SelectedPlanarFigures; 00174 mitk::DataStorageSelection::Pointer m_SelectedImageNode; 00175 mitk::WeakPointer<mitk::DataNode> m_CurrentFigureNode; 00176 00179 unsigned int m_LineCounter; 00180 unsigned int m_PathCounter; 00181 unsigned int m_AngleCounter; 00182 unsigned int m_FourPointAngleCounter; 00183 unsigned int m_EllipseCounter; 00184 unsigned int m_RectangleCounter; 00185 unsigned int m_PolygonCounter; 00186 unsigned int m_EndPlacementObserverTag; 00187 unsigned int m_SelectObserverTag; 00188 bool m_Visible; 00189 bool m_CurrentFigureNodeInitialized; 00190 00194 QmitkRenderWindow* m_LastRenderWindow; 00195 00196 private: 00197 mitk::DataNode::Pointer DetectTopMostVisibleImage(); 00198 00199 }; 00200 00201 #endif // !defined(QMITK_MEASUREMENT_H__INCLUDED)