NifTK  16.4.1 - 0798f20
CMIC's Translational Medical Imaging Platform
niftkSingleViewerWidget.h
Go to the documentation of this file.
1 /*=============================================================================
2 
3  NifTK: A software platform for medical image computing.
4 
5  Copyright (c) University College London (UCL). All rights reserved.
6 
7  This software is distributed WITHOUT ANY WARRANTY; without even
8  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
9  PURPOSE.
10 
11  See LICENSE.txt in the top level directory for details.
12 
13 =============================================================================*/
14 
15 #ifndef niftkSingleViewerWidget_h
16 #define niftkSingleViewerWidget_h
17 
18 #include <niftkDnDDisplayExports.h>
19 
20 #include <deque>
21 
22 #include <mitkDataStorage.h>
23 #include <mitkBaseGeometry.h>
24 #include <mitkTimeGeometry.h>
25 #include <mitkRenderingManager.h>
26 #include <QmitkRenderWindow.h>
27 
28 #include <QColor>
29 #include <QTime>
30 #include <QWidget>
31 
32 #include "niftkDnDDisplayEnums.h"
34 
35 class QGridLayout;
36 
37 
38 namespace niftk
39 {
40 
41 class MultiWindowWidget;
42 
78 class NIFTKDNDDISPLAY_EXPORT SingleViewerWidget : public QWidget
79 {
80 
81  Q_OBJECT
82 
83 public:
84 
90  SingleViewerWidget(QWidget* parent = 0, mitk::RenderingManager* renderingManager = 0, const QString& name = "DnD-Viewer");
91  virtual ~SingleViewerWidget();
92 
94  bool IsEnabled() const;
95 
97  void SetEnabled(bool enabled);
98 
100  bool IsFocused() const;
101 
103  void SetFocused();
104 
108  QmitkRenderWindow* GetSelectedRenderWindow() const;
109 
111  void SetSelectedRenderWindow(QmitkRenderWindow* renderWindow);
112 
114  std::vector<QmitkRenderWindow*> GetVisibleRenderWindows() const;
115 
117  const std::vector<QmitkRenderWindow*>& GetRenderWindows() const;
118 
120  QmitkRenderWindow* GetAxialWindow() const;
121 
123  QmitkRenderWindow* GetCoronalWindow() const;
124 
126  QmitkRenderWindow* GetSagittalWindow() const;
127 
129  QmitkRenderWindow* Get3DWindow() const;
130 
133 
135  bool IsCursorVisible() const;
136 
138  void SetCursorVisible(bool visible);
139 
141  bool AreDirectionAnnotationsVisible() const;
142 
144  void SetDirectionAnnotationsVisible(bool visible);
145 
147  bool IsIntensityAnnotationVisible() const;
148 
150  void SetIntensityAnnotationVisible(bool visible);
151 
153  bool GetShow3DWindowIn2x2WindowLayout() const;
154 
156  void SetShow3DWindowIn2x2WindowLayout(bool enabled);
157 
159  void SetRememberSettingsPerWindowLayout(bool remember);
160 
162  bool GetRememberSettingsPerWindowLayout() const;
163 
165  void SetBackgroundColour(QColor colour);
166 
168  QColor GetBackgroundColour() const;
169 
171  int GetMaxSlice(WindowOrientation orientation) const;
172 
174  int GetMaxTimeStep() const;
175 
177  bool ContainsRenderWindow(QmitkRenderWindow *renderWindow) const;
178 
180  void SetVisibility(std::vector<mitk::DataNode*> nodes, bool visible);
181 
183  double GetMinMagnification() const;
184 
186  double GetMaxMagnification() const;
187 
189  void RequestUpdate();
190 
192  const mitk::TimeGeometry* GetTimeGeometry() const;
193 
195  void SetTimeGeometry(const mitk::TimeGeometry* timeGeometry);
196 
198  void SetBoundTimeGeometry(const mitk::TimeGeometry* timeGeometry);
199 
202  void SetBoundTimeGeometryActive(bool isBound);
203 
205  bool IsBoundTimeGeometryActive();
206 
208  int GetSelectedSlice(WindowOrientation orientation) const;
209 
211  void SetSelectedSlice(WindowOrientation orientation, int slice);
212 
214  int GetTimeStep() const;
215 
217  void SetTimeStep(int timeStep);
218 
221 
223  void SetWindowLayout(WindowLayout windowLayout);
224 
226  const mitk::Point3D& GetSelectedPosition() const;
227 
229  void SetSelectedPosition(const mitk::Point3D& selectedPosition);
230 
232  mitk::Vector2D GetCursorPosition(WindowOrientation orientation) const;
233 
235  void SetCursorPosition(WindowOrientation orientation, const mitk::Vector2D& cursorPosition);
236 
238  const std::vector<mitk::Vector2D>& GetCursorPositions() const;
239 
241  void SetCursorPositions(const std::vector<mitk::Vector2D>& cursorPositions);
242 
244  double GetScaleFactor(WindowOrientation orientation) const;
245 
247  void SetScaleFactor(WindowOrientation orientation, double scaleFactor);
248 
250  const std::vector<double>& GetScaleFactors() const;
251 
253  void SetScaleFactors(const std::vector<double>& scaleFactors);
254 
256  double GetMagnification(WindowOrientation orientation) const;
257 
259  void SetMagnification(WindowOrientation orientation, double magnification);
260 
262  bool IsLinkedNavigationEnabled() const;
263 
265  void SetLinkedNavigationEnabled(bool linkedNavigationEnabled);
266 
268  void SetDisplayInteractionsEnabled(bool enabled);
269 
271  bool AreDisplayInteractionsEnabled() const;
272 
274  bool GetCursorPositionBinding() const;
275 
277  void SetCursorPositionBinding(bool bound);
278 
280  bool GetScaleFactorBinding() const;
281 
283  void SetScaleFactorBinding(bool bound);
284 
293  void FitToDisplay(double scaleFactor = 0.0);
294 
296  std::vector<mitk::DataNode*> GetWidgetPlanes();
297 
299  int GetSliceUpDirection(WindowOrientation orientation) const;
300 
302  void SetDefaultSingleWindowLayout(WindowLayout windowLayout);
303 
305  void SetDefaultMultiWindowLayout(WindowLayout windowLayout);
306 
309  void MoveSlice(WindowOrientation orientation, int delta, bool restart = false);
310 
312  void ToggleMultiWindowLayout();
313 
315  void ToggleCursorVisibility();
316 
318  void ToggleDirectionAnnotations();
319 
321  void ToggleIntensityAnnotation();
322 
340  bool BlockUpdate(bool blocked);
341 
342 signals:
343 
345  void NodesDropped(std::vector<mitk::DataNode*> nodes);
346 
348  void SelectedPositionChanged(const mitk::Point3D& selectedPosition);
349 
351  void TimeStepChanged(int timeStep);
352 
354  void CursorPositionChanged(WindowOrientation orientation, const mitk::Vector2D& cursorPosition);
355 
357  void ScaleFactorChanged(WindowOrientation orientation, double scaleFactor);
358 
360  void CursorPositionBindingChanged(bool bound);
361 
363  void ScaleFactorBindingChanged(bool bound);
364 
366  void WindowLayoutChanged(WindowLayout windowLayout);
367 
369  void TimeGeometryChanged(const mitk::TimeGeometry* timeGeometry);
370 
372  void CursorVisibilityChanged(bool visible);
373 
375  void DirectionAnnotationsVisibilityChanged(bool visible);
376 
378  void IntensityAnnotationVisibilityChanged(bool visible);
379 
380 public slots:
381 
383  virtual void OnNodesDropped(QmitkRenderWindow *renderWindow, std::vector<mitk::DataNode*> nodes);
384 
385 protected:
386 
388  virtual void paintEvent(QPaintEvent* event) override;
389 
390 protected slots:
391 
393  virtual void OnWindowLayoutChanged(WindowLayout windowLayout);
394 
396  virtual void OnSelectedPositionChanged(const mitk::Point3D& selectedPosition);
397 
399  virtual void OnCursorPositionChanged(int orientation, const mitk::Vector2D& cursorPosition);
400 
402  virtual void OnScaleFactorChanged(int orientation, double scaleFactor);
403 
405  virtual void OnCursorPositionBindingChanged();
406 
408  virtual void OnScaleFactorBindingChanged();
409 
410 private:
411 
412  inline int Index(int index) const
413  {
414  return (index << 1) + m_IsBoundTimeGeometryActive;
415  }
416 
422  void ResetLastPositions();
423 
425  mitk::Vector2D GetCentrePosition(int windowIndex);
426 
428  std::vector<mitk::Vector2D> GetCentrePositions();
429 
431  mitk::Vector2D GetCursorPositionFromCentre(int windowIndex, const mitk::Vector2D& centrePosition);
432 
434  std::vector<mitk::Vector2D> GetCursorPositionsFromCentres(const std::vector<mitk::Vector2D>& centrePositions);
435 
436  mitk::RenderingManager::Pointer m_RenderingManager;
437 
438  QGridLayout* m_GridLayout;
439  MultiWindowWidget* m_MultiWidget;
440 
441  bool m_IsBoundTimeGeometryActive;
442  mitk::TimeGeometry::ConstPointer m_TimeGeometry; // This comes from which ever image is dropped, so not visible outside this class.
443  mitk::TimeGeometry::ConstPointer m_BoundTimeGeometry; // Passed in, when we do "bind", so shared amongst multiple windows.
444 
445  double m_MinimumMagnification; // Passed in as constructor arguments, so this class unaware of where it came from.
446  double m_MaximumMagnification; // Passed in as constructor arguments, so this class unaware of where it came from.
447 
448  WindowLayout m_WindowLayout;
449 
451  mitk::Point3D m_SelectedPositions[WINDOW_LAYOUT_NUMBER * 2];
452 
455  std::vector<mitk::Vector2D> m_CentrePositions[WINDOW_LAYOUT_NUMBER * 2];
456 
459  std::vector<double> m_ScaleFactors[WINDOW_LAYOUT_NUMBER * 2];
460 
462  bool m_CursorPositionBinding[WINDOW_LAYOUT_NUMBER * 2];
463 
465  bool m_ScaleFactorBinding[WINDOW_LAYOUT_NUMBER * 2];
466 
468  bool m_GeometryInitialised;
469 
471  bool m_WindowLayoutInitialised[WINDOW_LAYOUT_NUMBER * 2];
472 
479  std::deque<mitk::Point3D> m_LastSelectedPositions;
480 
486  std::deque<QTime> m_LastSelectedPositionTimes;
487 
494  std::deque<std::vector<mitk::Vector2D> > m_LastCursorPositions;
495 
501  std::deque<QTime> m_LastCursorPositionTimes;
502 
503  bool m_RememberSettingsPerWindowLayout;
504 
505  WindowLayout m_SingleWindowLayout;
506  WindowLayout m_MultiWindowLayout;
507 
508  DnDDisplayInteractor::Pointer m_DisplayInteractor;
509 
514  us::ServiceRegistrationU m_DisplayInteractorService;
515 };
516 
517 }
518 
519 #endif
WindowOrientation
Describes the different types of orientation, axial, sagittal, coronal, that can be achieved in the D...
Definition: niftkDnDDisplayEnums.h:29
GLenum GLsizei const GLuint GLboolean enabled
Definition: glew.h:2537
itk::SpatialOrientation::ValidCoordinateOrientationFlags GetOrientation(ImageType::Pointer image)
Definition: niftkBreastDensityFromMRIsGivenMaskAndImage.cxx:146
WindowLayout
Describes the different render window layouts. So one WindowLayout could have multiple windows of dif...
Definition: niftkDnDDisplayEnums.h:49
Subclass of QmitkStdMultiWidget to provide MIDAS specific functionality by having convenient methods ...
Definition: niftkMultiWindowWidget_p.h:79
A widget to wrap a single MultiWindowWidget, providing methods for switching the render window layout...
Definition: niftkSingleViewerWidget.h:78
GLuint index
Definition: glew.h:1798
GLuint const GLchar * name
Definition: glew.h:1798
cl_event event
Definition: glew.h:3231
const int WINDOW_LAYOUT_NUMBER
The number of the possible window layouts.
Definition: niftkDnDDisplayEnums.h:92
WindowLayout GetWindowLayout(const std::string &windowLayoutName)
Definition: niftkDnDDisplayEnums.h:94
Definition: niftkExceptionObject.h:21