20 #include <QHBoxLayout> 23 #include <QSpacerItem> 27 #include <QRadioButton> 28 #include <QWidgetAction> 31 #include "iconCrosshairMode.xpm" 32 #include "iconFullScreen.xpm" 34 #include "iconSettings.xpm" 36 #include "iconLeaveFullScreen.xpm" 41 unsigned int QmitkRenderWindowMenu::m_DefaultThickMode(1);
43 #ifdef QMITK_USE_EXTERNAL_RENDERWINDOW_MENU 47 : QWidget(nullptr, Qt::Tool | Qt::FramelessWindowHint)
51 Qt::WindowFlags flags,
52 mitk::BaseRenderer* baseRenderer)
53 : QWidget(parent, flags)
56 , m_LayoutActionsMenu(nullptr)
57 , m_CrosshairMenu(nullptr)
58 , m_FullScreenMode(false)
59 , m_Renderer(baseRenderer)
61 , m_CrosshairRotationMode(0)
62 , m_CrosshairVisibility(true)
70 setAutoFillBackground(
true);
78 this->setWindowOpacity(0.0f);
80 this->setVisible(
false);
83 m_AutoRotationTimer =
new QTimer(
this);
84 m_AutoRotationTimer->setInterval(75);
86 m_HideTimer =
new QTimer(
this);
87 m_HideTimer->setSingleShot(
true);
91 connect(m_Parent, &QObject::destroyed,
this, &QmitkRenderWindowMenu::deleteLater);
96 if (m_AutoRotationTimer->isActive())
98 m_AutoRotationTimer->stop();
104 m_Layout = layoutIndex;
109 m_LayoutDesign = layoutDesign;
128 switch (m_LayoutDesign)
192 #ifdef QMITK_USE_EXTERNAL_RENDERWINDOW_MENU 198 #ifdef QMITK_USE_EXTERNAL_RENDERWINDOW_MENU 199 int X = floor(
double(this->m_Parent->width() - this->width() - 8.0));
202 QPoint pos = this->m_Parent->mapToGlobal(QPoint(0, 0));
204 this->move(X + pos.x(), Y + pos.y());
208 else if (opacity > 1)
211 this->setWindowOpacity(opacity);
213 int moveX = floor(
double(this->m_Parent->width() - this->width() - 4.0));
214 this->move(moveX, 3);
233 QPainter painter(
this);
234 QColor semiTransparentColor = Qt::black;
235 semiTransparentColor.setAlpha(255);
236 painter.fillRect(rect(), semiTransparentColor);
241 QHBoxLayout *layout =
new QHBoxLayout(
this);
242 layout->setAlignment(Qt::AlignRight);
243 layout->setContentsMargins(1, 1, 1, 1);
356 #if defined(Q_OS_MAC) 357 this->setWindowOpacity(1.0f);
359 this->setVisible(
true);
371 #if defined(Q_OS_MAC) 372 this->setWindowOpacity(0.0f);
374 this->setVisible(
false);
381 m_HideTimer->start(10);
398 if (m_Renderer->GetCameraRotationController())
400 m_Renderer->GetCameraRotationController()->GetSlice()->Next();
406 if (m_AutoRotationTimer->isActive())
408 m_AutoRotationTimer->stop();
409 m_Renderer->GetCameraRotationController()->GetSlice()->PingPongOff();
413 m_Renderer->GetCameraRotationController()->GetSlice()->PingPongOn();
414 m_AutoRotationTimer->start();
420 MITK_DEBUG <<
"Thickslices num: " << num <<
" on renderer " << m_Renderer.GetPointer();
422 if (m_Renderer.IsNotNull())
424 unsigned int thickSlicesMode = 0;
428 if(m_Renderer->GetCurrentWorldPlaneGeometryNode()->GetProperty(resliceMethodEnumProperty,
"reslice.thickslices") && resliceMethodEnumProperty)
430 thickSlicesMode = resliceMethodEnumProperty->
GetValueAsId();
431 if(thickSlicesMode!=0)
432 m_DefaultThickMode = thickSlicesMode;
435 if(thickSlicesMode==0 && num>0)
437 thickSlicesMode = m_DefaultThickMode;
438 m_Renderer->GetCurrentWorldPlaneGeometryNode()->SetProperty(
"reslice.thickslices.showarea",
444 m_Renderer->GetCurrentWorldPlaneGeometryNode()->SetProperty(
"reslice.thickslices.showarea",
448 m_Renderer->GetCurrentWorldPlaneGeometryNode()->SetProperty(
"reslice.thickslices",
450 m_Renderer->GetCurrentWorldPlaneGeometryNode()->SetProperty(
"reslice.thickslices.num",
453 m_TSLabel->setText(QString::number(num * 2 + 1));
454 m_Renderer->SendUpdateSlice();
463 crosshairModesMenu->clear();
465 QAction *resetViewAction =
new QAction(crosshairModesMenu);
466 resetViewAction->setText(
"Reset view");
467 crosshairModesMenu->addAction(resetViewAction);
472 QAction *showHideCrosshairVisibilityAction =
new QAction(crosshairModesMenu);
473 showHideCrosshairVisibilityAction->setText(
"Show crosshair");
474 showHideCrosshairVisibilityAction->setCheckable(
true);
475 showHideCrosshairVisibilityAction->setChecked(m_CrosshairVisibility);
476 crosshairModesMenu->addAction(showHideCrosshairVisibilityAction);
482 QAction *rotationGroupSeparator =
new QAction(crosshairModesMenu);
483 rotationGroupSeparator->setSeparator(
true);
484 rotationGroupSeparator->setText(
"Rotation mode");
485 crosshairModesMenu->addAction(rotationGroupSeparator);
487 QActionGroup *rotationModeActionGroup =
new QActionGroup(crosshairModesMenu);
488 rotationModeActionGroup->setExclusive(
true);
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);
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);
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);
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);
528 QAction *autoRotationGroupSeparator =
new QAction(crosshairModesMenu);
529 autoRotationGroupSeparator->setSeparator(
true);
530 crosshairModesMenu->addAction(autoRotationGroupSeparator);
532 QAction *autoRotationAction = crosshairModesMenu->addAction(
"Auto Rotation");
533 autoRotationAction->setCheckable(
true);
534 autoRotationAction->setChecked(m_AutoRotationTimer->isActive());
541 QAction *thickSlicesGroupSeparator =
new QAction(crosshairModesMenu);
542 thickSlicesGroupSeparator->setSeparator(
true);
543 thickSlicesGroupSeparator->setText(
"ThickSlices mode");
544 crosshairModesMenu->addAction(thickSlicesGroupSeparator);
546 QActionGroup *thickSlicesActionGroup =
new QActionGroup(crosshairModesMenu);
547 thickSlicesActionGroup->setExclusive(
true);
552 m_Renderer->GetCurrentWorldPlaneGeometryNode()->GetProperty(
"reslice.thickslices"));
554 currentMode = m->GetValueAsId();
560 m_Renderer->GetCurrentWorldPlaneGeometryNode()->GetProperty(
"reslice.thickslices.num"));
563 currentNum = m->GetValue();
567 if (currentMode == 0)
570 QSlider *m_TSSlider =
new QSlider(crosshairModesMenu);
571 m_TSSlider->setMinimum(0);
572 m_TSSlider->setMaximum(50);
573 m_TSSlider->setValue(currentNum);
575 m_TSSlider->setOrientation(Qt::Horizontal);
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));
585 QWidget *tsWidget =
new QWidget;
586 tsWidget->setLayout(tsLayout);
588 QWidgetAction *m_TSSliderAction =
new QWidgetAction(crosshairModesMenu);
589 m_TSSliderAction->setDefaultWidget(tsWidget);
590 crosshairModesMenu->addAction(m_TSSliderAction);
596 m_CrosshairVisibility = visible;
602 m_CrosshairRotationMode = action->data().toInt();
611 m_OldLayoutDesign = m_LayoutDesign;
644 m_LayoutDesign = layoutDesign;
virtual IdType GetValueAsId() const
Organizes the rendering process.
DataCollection - Class to facilitate loading/accessing structured data.
static RenderingManager * GetInstance()
ViewDirection
Possible view directions for render windows.
void RequestUpdateAll(RequestType type=REQUEST_UPDATE_ALL)