Medical Imaging Interaction Toolkit  2025.12.02
Medical Imaging Interaction Toolkit
QmitkRenderWindow.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef QmitkRenderWindow_h
14 #define QmitkRenderWindow_h
15 
16 #include "mitkRenderWindowBase.h"
17 
18 #include "QmitkRenderWindowMenu.h"
19 #include <MitkQtWidgetsExports.h>
20 
21 #include <vtkGenericOpenGLRenderWindow.h>
22 #include <QVTKOpenGLNativeWidget.h>
23 
24 #include "mitkBaseRenderer.h"
26 
28 
29 class QDragEnterEvent;
30 class QDropEvent;
31 class QInputEvent;
32 class QMouseEvent;
33 
38 class MITKQTWIDGETS_EXPORT QmitkRenderWindow : public QVTKOpenGLNativeWidget, public mitk::RenderWindowBase
39 {
40  Q_OBJECT
41 
42 public:
44  QWidget *parent = nullptr,
45  const QString &name = "unnamed renderwindow",
46  mitk::VtkPropRenderer *renderer = nullptr);
47  ~QmitkRenderWindow() override;
48 
65  virtual void SetResendQtEvents(bool resend);
66 
67  // Set Layout Index to define the Layout Type
69 
70  // Get Layout Index to define the Layout Type
72 
73  // MenuWidget need to update the Layout Design List when Layout had changed
75 
77 
79 
80  // Activate or Deactivate MenuWidget.
81  void ActivateMenuWidget(bool state);
82 
83  bool GetActivateMenuWidgetFlag() { return m_MenuWidgetActivated; }
84 
85  void ShowOverlayMessage(bool show);
86 
87  // Get it from the QVTKWidget parent
88  vtkRenderWindow *GetVtkRenderWindow() override { return this->renderWindow(); }
89 
90  vtkRenderWindowInteractor *GetVtkRenderWindowInteractor() override { return nullptr; }
91 
92 protected:
93 
94  // catch-all event handler
95  bool event(QEvent *e) override;
96  // overloaded move handler
97  void moveEvent(QMoveEvent *event) override;
98  // overloaded show handler
99  void showEvent(QShowEvent *event) override;
100  // overloaded enter handler
101  void enterEvent(QEnterEvent *) override;
102  // overloaded leave handler
103  void leaveEvent(QEvent *) override;
104 
105  // Overloaded resize handler, see decs in QVTKOpenGLWidget.
106  // Basically, we have to ensure the VTK rendering is updated for each change in window size.
107  void resizeGL(int w, int h) override;
108 
110  void dragEnterEvent(QDragEnterEvent *event) override;
111 
114  void dropEvent(QDropEvent *event) override;
115 
116 Q_SIGNALS:
117 
119 
120  void ResetView();
121 
123 
125 
127 
128  void moved();
129 
131  void NodesDropped(QmitkRenderWindow *thisWindow, std::vector<mitk::DataNode *> nodes);
132 
133 private Q_SLOTS:
134 
135  void DeferredHideMenu();
136 
137 private:
138  // Helper Functions to Convert Qt-Events to Mitk-Events
139 
140  mitk::Point2D GetMousePosition(QMouseEvent *me) const;
141  mitk::Point2D GetMousePosition(QWheelEvent *we) const;
142  mitk::InteractionEvent::MouseButtons GetEventButton(QMouseEvent *me) const;
143  mitk::InteractionEvent::MouseButtons GetButtonState(QMouseEvent *me) const;
144  mitk::InteractionEvent::ModifierKeys GetModifiers(QInputEvent *me) const;
145  mitk::InteractionEvent::MouseButtons GetButtonState(QWheelEvent *we) const;
146  std::string GetKeyLetter(QKeyEvent *ke) const;
147  int GetDelta(QWheelEvent *we) const;
148 
149  void UpdateStatusBar(mitk::Point2D pointerPositionOnScreen);
150 
151  bool m_ResendQtEvents;
152 
153  QmitkRenderWindowMenu *m_MenuWidget;
154 
155  bool m_MenuWidgetActivated;
156 
158 
159  vtkSmartPointer<vtkGenericOpenGLRenderWindow> m_InternalRenderWindow;
160 
161  QmitkButtonOverlayWidget* m_GeometryViolationWarningOverlay;
162 
163 };
164 
165 #endif
#define MITKQTWIDGETS_EXPORT
The QmitkRenderWindowMenu is a popup Widget which shows up when the mouse cursor enter a QmitkRenderW...
MITK implementation of the QVTKWidget.
void ShowOverlayMessage(bool show)
~QmitkRenderWindow() override
void showEvent(QShowEvent *event) override
void dropEvent(QDropEvent *event) override
If the dropped type is application/x-mitk-datanodes we process the request by converting to mitk::Dat...
QmitkRenderWindow(QWidget *parent=nullptr, const QString &name="unnamed renderwindow", mitk::VtkPropRenderer *renderer=nullptr)
vtkRenderWindowInteractor * GetVtkRenderWindowInteractor() override
void CrosshairVisibilityChanged(bool)
void enterEvent(QEnterEvent *) override
void NodesDropped(QmitkRenderWindow *thisWindow, std::vector< mitk::DataNode * > nodes)
Emits a signal to say that this window has had the following nodes dropped on it.
void moveEvent(QMoveEvent *event) override
void resizeGL(int w, int h) override
void UpdateCrosshairRotationMode(int)
void leaveEvent(QEvent *) override
void UpdateLayoutDesignList(QmitkRenderWindowMenu::LayoutDesign layoutDesign)
bool event(QEvent *e) override
virtual void SetResendQtEvents(bool resend)
Whether Qt events should be passed to parent (default: true)
void UpdateCrosshairVisibility(bool)
QmitkRenderWindowMenu::LayoutIndex GetLayoutIndex()
bool GetActivateMenuWidgetFlag()
vtkRenderWindow * GetVtkRenderWindow() override
void dragEnterEvent(QDragEnterEvent *event) override
Simply says we accept the event type.
void SetLayoutIndex(QmitkRenderWindowMenu::LayoutIndex layoutIndex)
void LayoutDesignChanged(QmitkRenderWindowMenu::LayoutDesign)
void ActivateMenuWidget(bool state)
void CrosshairRotationModeChanged(int)
Base class of MITK RenderWindows.