Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
QmitkRenderWindowMenu.cpp
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 #include "QmitkRenderWindowMenu.h"
14 
15 // mitk core
16 #include "mitkProperties.h"
18 
19 // qt
20 #include <QHBoxLayout>
21 #include <QPainter>
22 #include <QSize>
23 #include <QSpacerItem>
24 #include <QSlider>
25 #include <QGroupBox>
26 #include <QLine>
27 #include <QRadioButton>
28 #include <QWidgetAction>
29 
30 //#include"iconClose.xpm"
31 #include "iconCrosshairMode.xpm"
32 #include "iconFullScreen.xpm"
33 //#include"iconHoriSplit.xpm"
34 #include "iconSettings.xpm"
35 //#include"iconVertiSplit.xpm"
36 #include "iconLeaveFullScreen.xpm"
37 
38 // c++
39 #include <cmath>
40 
41 unsigned int QmitkRenderWindowMenu::m_DefaultThickMode(1);
42 
43 #ifdef QMITK_USE_EXTERNAL_RENDERWINDOW_MENU
45  Qt::WindowFlags,
46  mitk::BaseRenderer* baseRenderer)
47  : QWidget(nullptr, Qt::Tool | Qt::FramelessWindowHint)
48 
49 #else
51  Qt::WindowFlags flags,
52  mitk::BaseRenderer* baseRenderer)
53  : QWidget(parent, flags)
54 #endif
55 
56  , m_LayoutActionsMenu(nullptr)
57  , m_CrosshairMenu(nullptr)
58  , m_FullScreenMode(false)
59  , m_Renderer(baseRenderer)
60  , m_Parent(parent)
61  , m_CrosshairRotationMode(0)
62  , m_CrosshairVisibility(true)
63  , m_Layout(LayoutIndex::AXIAL)
64  , m_LayoutDesign(LayoutDesign::DEFAULT)
65  , m_OldLayoutDesign(LayoutDesign::DEFAULT)
66 {
67  CreateMenuWidget();
68  setMinimumWidth(61); // DIRTY.. If you add or remove a button, you need to change the size.
69  setMaximumWidth(61);
70  setAutoFillBackground(true);
71 
72 // Else part fixes the render window menu issue on Linux bug but caused bugs on macOS and Windows
73 // for macOS see bug 3192
74 // for Windows see bug 12130
75 //... so macOS and Windows must be treated differently:
76 #if defined(Q_OS_MAC)
77  this->show();
78  this->setWindowOpacity(0.0f);
79 #else
80  this->setVisible(false);
81 #endif
82 
83  m_AutoRotationTimer = new QTimer(this);
84  m_AutoRotationTimer->setInterval(75);
85 
86  m_HideTimer = new QTimer(this);
87  m_HideTimer->setSingleShot(true);
88 
89  connect(m_AutoRotationTimer, &QTimer::timeout, this, &QmitkRenderWindowMenu::AutoRotateNextStep);
90  connect(m_HideTimer, &QTimer::timeout, this, &QmitkRenderWindowMenu::DeferredHideMenu);
91  connect(m_Parent, &QObject::destroyed, this, &QmitkRenderWindowMenu::deleteLater);
92 }
93 
95 {
96  if (m_AutoRotationTimer->isActive())
97  {
98  m_AutoRotationTimer->stop();
99  }
100 }
101 
103 {
104  m_Layout = layoutIndex;
105 }
106 
108 {
109  m_LayoutDesign = layoutDesign;
110 
111  if (nullptr == m_LayoutActionsMenu)
112  {
114  }
115 
116  m_DefaultLayoutAction->setEnabled(true);
117  m_All2DTop3DBottomLayoutAction->setEnabled(true);
118  m_All2DLeft3DRightLayoutAction->setEnabled(true);
119  m_OneBigLayoutAction->setEnabled(true);
120  m_Only2DHorizontalLayoutAction->setEnabled(true);
121  m_Only2DVerticalLayoutAction->setEnabled(true);
122  m_OneTop3DBottomLayoutAction->setEnabled(true);
123  m_OneLeft3DRightLayoutAction->setEnabled(true);
124  m_AllHorizontalLayoutAction->setEnabled(true);
125  m_AllVerticalLayoutAction->setEnabled(true);
126  m_RemoveOneLayoutAction->setEnabled(true);
127 
128  switch (m_LayoutDesign)
129  {
131  {
132  m_DefaultLayoutAction->setEnabled(false);
133  break;
134  }
136  {
137  m_All2DTop3DBottomLayoutAction->setEnabled(false);
138  break;
139  }
141  {
142  m_All2DLeft3DRightLayoutAction->setEnabled(false);
143  break;
144  }
146  {
147  m_OneBigLayoutAction->setEnabled(false);
148  break;
149  }
151  {
152  m_Only2DHorizontalLayoutAction->setEnabled(false);
153  break;
154  }
156  {
157  m_Only2DVerticalLayoutAction->setEnabled(false);
158  break;
159  }
161  {
162  m_OneTop3DBottomLayoutAction->setEnabled(false);
163  break;
164  }
166  {
167  m_OneLeft3DRightLayoutAction->setEnabled(false);
168  break;
169  }
171  {
172  m_AllHorizontalLayoutAction->setEnabled(false);
173  break;
174  }
176  {
177  m_AllVerticalLayoutAction->setEnabled(false);
178  break;
179  }
181  {
182  m_RemoveOneLayoutAction->setEnabled(false);
183  break;
184  }
185  case LayoutDesign::NONE:
186  {
187  break;
188  }
189  }
190 }
191 
192 #ifdef QMITK_USE_EXTERNAL_RENDERWINDOW_MENU
194 #else
196 #endif
197 {
198 #ifdef QMITK_USE_EXTERNAL_RENDERWINDOW_MENU
199  int X = floor(double(this->m_Parent->width() - this->width() - 8.0));
200  int Y = 7;
201 
202  QPoint pos = this->m_Parent->mapToGlobal(QPoint(0, 0));
203 
204  this->move(X + pos.x(), Y + pos.y());
205 
206  if (opacity < 0)
207  opacity = 0;
208  else if (opacity > 1)
209  opacity = 1;
210 
211  this->setWindowOpacity(opacity);
212 #else
213  int moveX = floor(double(this->m_Parent->width() - this->width() - 4.0));
214  this->move(moveX, 3);
215  this->show();
216 #endif
217 }
218 
220 {
221  MITK_DEBUG << "menu showMenu";
223 }
224 
226 {
227  MITK_DEBUG << "menu hideEvent";
229 }
230 
231 void QmitkRenderWindowMenu::paintEvent(QPaintEvent * /*e*/)
232 {
233  QPainter painter(this);
234  QColor semiTransparentColor = Qt::black;
235  semiTransparentColor.setAlpha(255);
236  painter.fillRect(rect(), semiTransparentColor);
237 }
238 
240 {
241  QHBoxLayout *layout = new QHBoxLayout(this);
242  layout->setAlignment(Qt::AlignRight);
243  layout->setContentsMargins(1, 1, 1, 1);
244 
245  QSize size(13, 13);
246 
247  m_CrosshairMenu = new QMenu(this);
248  connect(m_CrosshairMenu, &QMenu::aboutToShow, this, &QmitkRenderWindowMenu::OnCrosshairMenuAboutToShow);
249 
250  m_CrosshairModeButton = new QToolButton(this);
251  m_CrosshairModeButton->setMaximumSize(15, 15);
252  m_CrosshairModeButton->setIconSize(size);
254  m_CrosshairModeButton->setIcon(QIcon(QPixmap(iconCrosshairMode_xpm)));
255  m_CrosshairModeButton->setPopupMode(QToolButton::InstantPopup);
256  m_CrosshairModeButton->setStyleSheet("QToolButton::menu-indicator { image: none; }");
257  m_CrosshairModeButton->setAutoRaise(true);
258  layout->addWidget(m_CrosshairModeButton);
259 
260  m_FullScreenButton = new QToolButton(this);
261  m_FullScreenButton->setMaximumSize(15, 15);
262  m_FullScreenButton->setIconSize(size);
263  m_FullScreenButton->setIcon(QIcon(QPixmap(iconFullScreen_xpm)));
264  m_FullScreenButton->setAutoRaise(true);
265  layout->addWidget(m_FullScreenButton);
266 
267  m_LayoutDesignButton = new QToolButton(this);
268  m_LayoutDesignButton->setMaximumSize(15, 15);
269  m_LayoutDesignButton->setIconSize(size);
270  m_LayoutDesignButton->setIcon(QIcon(QPixmap(iconSettings_xpm)));
271  m_LayoutDesignButton->setAutoRaise(true);
272  layout->addWidget(m_LayoutDesignButton);
273 
274  connect(m_FullScreenButton, &QToolButton::clicked, this, &QmitkRenderWindowMenu::OnFullScreenButton);
275  connect(m_LayoutDesignButton, &QToolButton::clicked, this, &QmitkRenderWindowMenu::OnLayoutDesignButton);
276 }
277 
279 {
280  m_LayoutActionsMenu = new QMenu(this);
281 
282  m_DefaultLayoutAction = new QAction("Standard layout", m_LayoutActionsMenu);
283  m_DefaultLayoutAction->setDisabled(true);
284 
285  m_All2DTop3DBottomLayoutAction = new QAction("All 2D top, 3D bottom", m_LayoutActionsMenu);
286  m_All2DTop3DBottomLayoutAction->setDisabled(false);
287 
288  m_All2DLeft3DRightLayoutAction = new QAction("All 2D left, 3D right", m_LayoutActionsMenu);
289  m_All2DLeft3DRightLayoutAction->setDisabled(false);
290 
291  m_OneBigLayoutAction = new QAction("This big", m_LayoutActionsMenu);
292  m_OneBigLayoutAction->setDisabled(false);
293 
294  m_Only2DHorizontalLayoutAction = new QAction("Only 2D horizontal", m_LayoutActionsMenu);
295  m_Only2DHorizontalLayoutAction->setDisabled(false);
296 
297  m_Only2DVerticalLayoutAction = new QAction("Only 2D vertical", m_LayoutActionsMenu);
298  m_Only2DVerticalLayoutAction->setDisabled(false);
299 
300  m_OneTop3DBottomLayoutAction = new QAction("This top, 3D bottom", m_LayoutActionsMenu);
301  m_OneTop3DBottomLayoutAction->setDisabled(false);
302 
303  m_OneLeft3DRightLayoutAction = new QAction("This left, 3D right", m_LayoutActionsMenu);
304  m_OneLeft3DRightLayoutAction->setDisabled(false);
305 
306  m_AllHorizontalLayoutAction = new QAction("All horizontal", m_LayoutActionsMenu);
307  m_AllHorizontalLayoutAction->setDisabled(false);
308 
309  m_AllVerticalLayoutAction = new QAction("All vertical", m_LayoutActionsMenu);
310  m_AllVerticalLayoutAction->setDisabled(false);
311 
312  m_RemoveOneLayoutAction = new QAction("Remove this", m_LayoutActionsMenu);
313  m_RemoveOneLayoutAction->setDisabled(false);
314 
326 
327  m_LayoutActionsMenu->setVisible(false);
328 
329  connect(m_DefaultLayoutAction, &QAction::triggered, [this]() { this->OnSetLayout(LayoutDesign::DEFAULT); });
330  connect(m_All2DTop3DBottomLayoutAction, &QAction::triggered, [this]() { this->OnSetLayout(LayoutDesign::ALL_2D_TOP_3D_BOTTOM); });
331  connect(m_All2DLeft3DRightLayoutAction, &QAction::triggered, [this]() { this->OnSetLayout(LayoutDesign::ALL_2D_LEFT_3D_RIGHT); });
332  connect(m_OneBigLayoutAction, &QAction::triggered, [this]() { this->OnSetLayout(LayoutDesign::ONE_BIG); });
333  connect(m_Only2DHorizontalLayoutAction, &QAction::triggered, [this]() { this->OnSetLayout(LayoutDesign::ONLY_2D_HORIZONTAL); });
334  connect(m_Only2DVerticalLayoutAction, &QAction::triggered, [this]() { this->OnSetLayout(LayoutDesign::ONLY_2D_VERTICAL); });
335  connect(m_OneTop3DBottomLayoutAction, &QAction::triggered, [this]() { this->OnSetLayout(LayoutDesign::ONE_TOP_3D_BOTTOM); });
336  connect(m_OneLeft3DRightLayoutAction, &QAction::triggered, [this]() { this->OnSetLayout(LayoutDesign::ONE_LEFT_3D_RIGHT); });
337  connect(m_AllHorizontalLayoutAction, &QAction::triggered, [this]() { this->OnSetLayout(LayoutDesign::ALL_HORIZONTAL); });
338  connect(m_AllVerticalLayoutAction, &QAction::triggered, [this]() { this->OnSetLayout(LayoutDesign::ALL_VERTICAL); });
339  connect(m_RemoveOneLayoutAction, &QAction::triggered, [this]() { this->OnSetLayout(LayoutDesign::REMOVE_ONE); });
340 }
341 
343 {
344  m_FullScreenButton->setIcon(m_FullScreenMode ? QPixmap(iconLeaveFullScreen_xpm) : QPixmap(iconFullScreen_xpm));
345 }
346 
348 {
349  MITK_DEBUG << "deferred show menu";
350  m_HideTimer->stop();
351 
352  // Else part fixes the render window menu issue on Linux bug but caused bugs on macOS and Windows
353  // for macOS see bug 3192
354  // for Windows see bug 12130
355  //... so macOS and Windows must be treated differently:
356 #if defined(Q_OS_MAC)
357  this->setWindowOpacity(1.0f);
358 #else
359  this->setVisible(true);
360  this->raise();
361 #endif
362 }
363 
365 {
366  MITK_DEBUG << "menu deferredhidemenu";
367  // Else part fixes the render window menu issue on Linux bug but caused bugs on macOS and Windows
368  // for macOS see bug 3192
369  // for Windows see bug 12130
370  //... so macOS and Windows must be treated differently:
371 #if defined(Q_OS_MAC)
372  this->setWindowOpacity(0.0f);
373 #else
374  this->setVisible(false);
375 #endif
376 }
377 
379 {
380  MITK_DEBUG << "menu leaveEvent";
381  m_HideTimer->start(10);
382 }
383 
385 {
386  MITK_DEBUG << "menu enterEvent";
388 }
389 
391 {
392  MITK_DEBUG << "menu leaveEvent";
393  smoothHide();
394 }
395 
397 {
398  if (m_Renderer->GetCameraRotationController())
399  {
400  m_Renderer->GetCameraRotationController()->GetSlice()->Next();
401  }
402 }
403 
405 {
406  if (m_AutoRotationTimer->isActive())
407  {
408  m_AutoRotationTimer->stop();
409  m_Renderer->GetCameraRotationController()->GetSlice()->PingPongOff();
410  }
411  else
412  {
413  m_Renderer->GetCameraRotationController()->GetSlice()->PingPongOn();
414  m_AutoRotationTimer->start();
415  }
416 }
417 
419 {
420  MITK_DEBUG << "Thickslices num: " << num << " on renderer " << m_Renderer.GetPointer();
421 
422  if (m_Renderer.IsNotNull())
423  {
424  unsigned int thickSlicesMode = 0;
425  // determine the state of the thick-slice mode
426  mitk::ResliceMethodProperty *resliceMethodEnumProperty = nullptr;
427 
428  if(m_Renderer->GetCurrentWorldPlaneGeometryNode()->GetProperty(resliceMethodEnumProperty, "reslice.thickslices") && resliceMethodEnumProperty)
429  {
430  thickSlicesMode = resliceMethodEnumProperty->GetValueAsId();
431  if(thickSlicesMode!=0)
432  m_DefaultThickMode = thickSlicesMode;
433  }
434 
435  if(thickSlicesMode==0 && num>0) //default mode only for single slices
436  {
437  thickSlicesMode = m_DefaultThickMode; //mip default
438  m_Renderer->GetCurrentWorldPlaneGeometryNode()->SetProperty("reslice.thickslices.showarea",
440  }
441  if(num<1)
442  {
443  thickSlicesMode = 0;
444  m_Renderer->GetCurrentWorldPlaneGeometryNode()->SetProperty("reslice.thickslices.showarea",
445  mitk::BoolProperty::New(false));
446  }
447 
448  m_Renderer->GetCurrentWorldPlaneGeometryNode()->SetProperty("reslice.thickslices",
449  mitk::ResliceMethodProperty::New(thickSlicesMode));
450  m_Renderer->GetCurrentWorldPlaneGeometryNode()->SetProperty("reslice.thickslices.num",
452 
453  m_TSLabel->setText(QString::number(num * 2 + 1));
454  m_Renderer->SendUpdateSlice();
456  }
457 }
458 
460 {
461  QMenu *crosshairModesMenu = m_CrosshairMenu;
462 
463  crosshairModesMenu->clear();
464 
465  QAction *resetViewAction = new QAction(crosshairModesMenu);
466  resetViewAction->setText("Reset view");
467  crosshairModesMenu->addAction(resetViewAction);
468  connect(resetViewAction, &QAction::triggered, this, &QmitkRenderWindowMenu::ResetView);
469 
470  // Show hide crosshairs
471  {
472  QAction *showHideCrosshairVisibilityAction = new QAction(crosshairModesMenu);
473  showHideCrosshairVisibilityAction->setText("Show crosshair");
474  showHideCrosshairVisibilityAction->setCheckable(true);
475  showHideCrosshairVisibilityAction->setChecked(m_CrosshairVisibility);
476  crosshairModesMenu->addAction(showHideCrosshairVisibilityAction);
477  connect(showHideCrosshairVisibilityAction, &QAction::toggled, this, &QmitkRenderWindowMenu::OnCrosshairVisibilityChanged);
478  }
479 
480  // Rotation mode
481  {
482  QAction *rotationGroupSeparator = new QAction(crosshairModesMenu);
483  rotationGroupSeparator->setSeparator(true);
484  rotationGroupSeparator->setText("Rotation mode");
485  crosshairModesMenu->addAction(rotationGroupSeparator);
486 
487  QActionGroup *rotationModeActionGroup = new QActionGroup(crosshairModesMenu);
488  rotationModeActionGroup->setExclusive(true);
489 
490  QAction *noCrosshairRotation = new QAction(crosshairModesMenu);
491  noCrosshairRotation->setActionGroup(rotationModeActionGroup);
492  noCrosshairRotation->setText("No crosshair rotation");
493  noCrosshairRotation->setCheckable(true);
494  noCrosshairRotation->setChecked(m_CrosshairRotationMode == 0);
495  noCrosshairRotation->setData(0);
496  crosshairModesMenu->addAction(noCrosshairRotation);
497 
498  QAction *singleCrosshairRotation = new QAction(crosshairModesMenu);
499  singleCrosshairRotation->setActionGroup(rotationModeActionGroup);
500  singleCrosshairRotation->setText("Crosshair rotation");
501  singleCrosshairRotation->setCheckable(true);
502  singleCrosshairRotation->setChecked(m_CrosshairRotationMode == 1);
503  singleCrosshairRotation->setData(1);
504  crosshairModesMenu->addAction(singleCrosshairRotation);
505 
506  QAction *coupledCrosshairRotation = new QAction(crosshairModesMenu);
507  coupledCrosshairRotation->setActionGroup(rotationModeActionGroup);
508  coupledCrosshairRotation->setText("Coupled crosshair rotation");
509  coupledCrosshairRotation->setCheckable(true);
510  coupledCrosshairRotation->setChecked(m_CrosshairRotationMode == 2);
511  coupledCrosshairRotation->setData(2);
512  crosshairModesMenu->addAction(coupledCrosshairRotation);
513 
514  QAction *swivelMode = new QAction(crosshairModesMenu);
515  swivelMode->setActionGroup(rotationModeActionGroup);
516  swivelMode->setText("Swivel mode");
517  swivelMode->setCheckable(true);
518  swivelMode->setChecked(m_CrosshairRotationMode == 3);
519  swivelMode->setData(3);
520  crosshairModesMenu->addAction(swivelMode);
521 
522  connect(rotationModeActionGroup, &QActionGroup::triggered, this, &QmitkRenderWindowMenu::OnCrosshairRotationModeSelected);
523  }
524 
525  // auto rotation support
526  if (m_Renderer.IsNotNull() && m_Renderer->GetMapperID() == mitk::BaseRenderer::Standard3D)
527  {
528  QAction *autoRotationGroupSeparator = new QAction(crosshairModesMenu);
529  autoRotationGroupSeparator->setSeparator(true);
530  crosshairModesMenu->addAction(autoRotationGroupSeparator);
531 
532  QAction *autoRotationAction = crosshairModesMenu->addAction("Auto Rotation");
533  autoRotationAction->setCheckable(true);
534  autoRotationAction->setChecked(m_AutoRotationTimer->isActive());
535  connect(autoRotationAction, &QAction::triggered, this, &QmitkRenderWindowMenu::OnAutoRotationActionTriggered);
536  }
537 
538  // Thickslices support
539  if (m_Renderer.IsNotNull() && m_Renderer->GetMapperID() == mitk::BaseRenderer::Standard2D)
540  {
541  QAction *thickSlicesGroupSeparator = new QAction(crosshairModesMenu);
542  thickSlicesGroupSeparator->setSeparator(true);
543  thickSlicesGroupSeparator->setText("ThickSlices mode");
544  crosshairModesMenu->addAction(thickSlicesGroupSeparator);
545 
546  QActionGroup *thickSlicesActionGroup = new QActionGroup(crosshairModesMenu);
547  thickSlicesActionGroup->setExclusive(true);
548 
549  int currentMode = 0;
550  {
552  m_Renderer->GetCurrentWorldPlaneGeometryNode()->GetProperty("reslice.thickslices"));
553  if (m.IsNotNull())
554  currentMode = m->GetValueAsId();
555  }
556 
557  int currentNum = 1;
558  {
559  mitk::IntProperty::Pointer m = dynamic_cast<mitk::IntProperty *>(
560  m_Renderer->GetCurrentWorldPlaneGeometryNode()->GetProperty("reslice.thickslices.num"));
561  if (m.IsNotNull())
562  {
563  currentNum = m->GetValue();
564  }
565  }
566 
567  if (currentMode == 0)
568  currentNum = 0;
569 
570  QSlider *m_TSSlider = new QSlider(crosshairModesMenu);
571  m_TSSlider->setMinimum(0);
572  m_TSSlider->setMaximum(50);
573  m_TSSlider->setValue(currentNum);
574 
575  m_TSSlider->setOrientation(Qt::Horizontal);
576 
577  connect(m_TSSlider, &QSlider::valueChanged, this, &QmitkRenderWindowMenu::OnTSNumChanged);
578 
579  QHBoxLayout *tsLayout = new QHBoxLayout;
580  tsLayout->setContentsMargins(4, 4, 4, 4);
581  tsLayout->addWidget(new QLabel("TS: "));
582  tsLayout->addWidget(m_TSSlider);
583  tsLayout->addWidget(m_TSLabel = new QLabel(QString::number(currentNum * 2 + 1), this));
584 
585  QWidget *tsWidget = new QWidget;
586  tsWidget->setLayout(tsLayout);
587 
588  QWidgetAction *m_TSSliderAction = new QWidgetAction(crosshairModesMenu);
589  m_TSSliderAction->setDefaultWidget(tsWidget);
590  crosshairModesMenu->addAction(m_TSSliderAction);
591  }
592 }
593 
595 {
596  m_CrosshairVisibility = visible;
597  emit CrosshairVisibilityChanged(visible);
598 }
599 
601 {
602  m_CrosshairRotationMode = action->data().toInt();
603  emit CrosshairRotationModeChanged(m_CrosshairRotationMode);
604 }
605 
607 {
608  if (!m_FullScreenMode)
609  {
610  m_FullScreenMode = true;
611  m_OldLayoutDesign = m_LayoutDesign;
612 
614  }
615  else
616  {
617  m_FullScreenMode = false;
618  emit LayoutDesignChanged(m_OldLayoutDesign);
619  }
620 
623 
625 }
626 
628 {
629  if (nullptr == m_LayoutActionsMenu)
630  {
632  }
633 
634  QPoint point = mapToGlobal(m_LayoutDesignButton->geometry().topLeft());
635  m_LayoutActionsMenu->setVisible(true);
636  m_LayoutActionsMenu->exec(point);
637 }
638 
640 {
641  m_FullScreenMode = false;
643 
644  m_LayoutDesign = layoutDesign;
645  emit LayoutDesignChanged(m_LayoutDesign);
646 
648 }
virtual IdType GetValueAsId() const
The QmitkRenderWindowMenu is a popup Widget which shows up when the mouse cursor enter a QmitkRenderW...
void OnCrosshairRotationModeSelected(QAction *)
void OnLayoutDesignButton(bool checked)
void leaveEvent(QEvent *) override
void enterEvent(QEvent *) override
void OnSetLayout(LayoutDesign layoutDesign)
Organizes the rendering process.
QmitkRenderWindowMenu(QWidget *parent=nullptr, Qt::WindowFlags f=nullptr, mitk::BaseRenderer *b=nullptr)
void UpdateLayoutDesignList(LayoutDesign layoutDesign)
#define MITK_DEBUG
Definition: mitkLogMacros.h:22
DataCollection - Class to facilitate loading/accessing structured data.
void CrosshairVisibilityChanged(bool)
void LayoutDesignChanged(LayoutDesign layoutDesign)
static Pointer New()
void OnFullScreenButton(bool checked)
static RenderingManager * GetInstance()
void SetLayoutIndex(LayoutIndex layoutIndex)
static Pointer New()
void paintEvent(QPaintEvent *event) override
ViewDirection
Possible view directions for render windows.
void CrosshairRotationModeChanged(int)
void RequestUpdateAll(RequestType type=REQUEST_UPDATE_ALL)