diff --git a/Modules/RenderWindowManagerUI/src/QmitkDataStorageRenderWindowInspector.cpp b/Modules/RenderWindowManagerUI/src/QmitkDataStorageRenderWindowInspector.cpp index 7ea07d286e..7f9a37659d 100644 --- a/Modules/RenderWindowManagerUI/src/QmitkDataStorageRenderWindowInspector.cpp +++ b/Modules/RenderWindowManagerUI/src/QmitkDataStorageRenderWindowInspector.cpp @@ -1,163 +1,164 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ // render window manager UI module #include "QmitkDataStorageRenderWindowInspector.h" #include "QmitkCustomVariants.h" // mitk core #include // qt #include QmitkDataStorageRenderWindowInspector::QmitkDataStorageRenderWindowInspector(QWidget* parent /*=nullptr*/) : QmitkAbstractDataStorageInspector(parent) { m_Controls.setupUi(this); // initialize the render window view direction controller // and set the controlled renderer (in constructor) and the data storage m_RenderWindowViewDirectionController = std::make_unique(); // create a new model m_StorageModel = std::make_unique(this); m_Controls.renderWindowListView->setModel(m_StorageModel.get()); m_Controls.renderWindowListView->setEditTriggers(QAbstractItemView::NoEditTriggers); m_Controls.renderWindowListView->setSelectionBehavior(QAbstractItemView::SelectRows); m_Controls.renderWindowListView->setSelectionMode(QAbstractItemView::ExtendedSelection); m_Controls.renderWindowListView->setAlternatingRowColors(true); m_Controls.renderWindowListView->setDragEnabled(true); m_Controls.renderWindowListView->setDropIndicatorShown(true); m_Controls.renderWindowListView->setAcceptDrops(true); + m_Controls.renderWindowListView->setContextMenuPolicy(Qt::CustomContextMenu); SetUpConnections(); } QAbstractItemView* QmitkDataStorageRenderWindowInspector::GetView() { return m_Controls.renderWindowListView; }; const QAbstractItemView* QmitkDataStorageRenderWindowInspector::GetView() const { return m_Controls.renderWindowListView; }; void QmitkDataStorageRenderWindowInspector::SetSelectionMode(SelectionMode mode) { m_Controls.renderWindowListView->setSelectionMode(mode); } QmitkDataStorageRenderWindowInspector::SelectionMode QmitkDataStorageRenderWindowInspector::GetSelectionMode() const { return m_Controls.renderWindowListView->selectionMode(); } void QmitkDataStorageRenderWindowInspector::Initialize() { m_StorageModel->SetDataStorage(m_DataStorage.Lock()); m_StorageModel->SetNodePredicate(m_NodePredicate); m_RenderWindowViewDirectionController->SetDataStorage(m_DataStorage.Lock()); m_Connector->SetView(m_Controls.renderWindowListView); } void QmitkDataStorageRenderWindowInspector::SetUpConnections() { connect(m_Controls.pushButtonSetAsBaseLayer, SIGNAL(clicked()), this, SLOT(SetAsBaseLayer())); connect(m_Controls.pushButtonResetRenderer, SIGNAL(clicked()), this, SLOT(ResetRenderer())); connect(m_Controls.pushButtonClearRenderer, SIGNAL(clicked()), this, SLOT(ClearRenderer())); QSignalMapper* changeViewDirectionSignalMapper = new QSignalMapper(this); changeViewDirectionSignalMapper->setMapping(m_Controls.radioButtonAxial, QString("axial")); changeViewDirectionSignalMapper->setMapping(m_Controls.radioButtonCoronal, QString("coronal")); changeViewDirectionSignalMapper->setMapping(m_Controls.radioButtonSagittal, QString("sagittal")); connect(changeViewDirectionSignalMapper, SIGNAL(mapped(const QString&)), this, SLOT(ChangeViewDirection(const QString&))); connect(m_Controls.radioButtonAxial, SIGNAL(clicked()), changeViewDirectionSignalMapper, SLOT(map())); connect(m_Controls.radioButtonCoronal, SIGNAL(clicked()), changeViewDirectionSignalMapper, SLOT(map())); connect(m_Controls.radioButtonSagittal, SIGNAL(clicked()), changeViewDirectionSignalMapper, SLOT(map())); } void QmitkDataStorageRenderWindowInspector::SetControlledRenderer(mitk::RenderWindowLayerUtilities::RendererVector controlledRenderer) { m_StorageModel->SetControlledRenderer(controlledRenderer); m_RenderWindowViewDirectionController->SetControlledRenderer(controlledRenderer); } void QmitkDataStorageRenderWindowInspector::SetActiveRenderWindow(const QString& renderWindowId) { mitk::BaseRenderer* selectedRenderer = mitk::BaseRenderer::GetByName(renderWindowId.toStdString()); if (nullptr == selectedRenderer) { return; } m_StorageModel->SetCurrentRenderer(selectedRenderer); mitk::SliceNavigationController::ViewDirection viewDirection = selectedRenderer->GetSliceNavigationController()->GetDefaultViewDirection(); switch (viewDirection) { case mitk::SliceNavigationController::Axial: m_Controls.radioButtonAxial->setChecked(true); break; case mitk::SliceNavigationController::Frontal: m_Controls.radioButtonCoronal->setChecked(true); break; case mitk::SliceNavigationController::Sagittal: m_Controls.radioButtonSagittal->setChecked(true); break; default: break; } } void QmitkDataStorageRenderWindowInspector::SetAsBaseLayer() { /* QModelIndex selectedIndex = m_Controls.renderWindowListView->currentIndex(); if (selectedIndex.isValid()) { QVariant qvariantDataNode = m_StorageModel->data(selectedIndex, Qt::UserRole); if (qvariantDataNode.canConvert()) { mitk::DataNode* dataNode = qvariantDataNode.value(); m_RenderWindowLayerController->SetBaseDataNode(dataNode, m_StorageModel->GetCurrentRenderer()); m_Controls.renderWindowListView->clearSelection(); } } */ } void QmitkDataStorageRenderWindowInspector::ResetRenderer() { //m_RenderWindowLayerController->ResetRenderer(true, m_StorageModel->GetCurrentRenderer()); m_Controls.renderWindowListView->clearSelection(); } void QmitkDataStorageRenderWindowInspector::ClearRenderer() { //m_RenderWindowLayerController->ResetRenderer(false, m_StorageModel->GetCurrentRenderer()); m_Controls.renderWindowListView->clearSelection(); } void QmitkDataStorageRenderWindowInspector::ChangeViewDirection(const QString& viewDirection) { m_RenderWindowViewDirectionController->SetViewDirectionOfRenderer(viewDirection.toStdString(), m_StorageModel->GetCurrentRenderer()); } diff --git a/Plugins/org.mitk.gui.qt.renderwindowmanager/manifest_headers.cmake b/Plugins/org.mitk.gui.qt.renderwindowmanager/manifest_headers.cmake index 047fb72062..72676e48b5 100644 --- a/Plugins/org.mitk.gui.qt.renderwindowmanager/manifest_headers.cmake +++ b/Plugins/org.mitk.gui.qt.renderwindowmanager/manifest_headers.cmake @@ -1,5 +1,5 @@ set(Plugin-Name "MITK Render window layer manager") set(Plugin-Version "0.1") set(Plugin-Vendor "DKFZ") set(Plugin-ContactAddress "http://www.mitk.org") -set(Require-Plugin org.mitk.gui.qt.common) +set(Require-Plugin org.mitk.gui.qt.application org.mitk.gui.qt.common) diff --git a/Plugins/org.mitk.gui.qt.renderwindowmanager/src/internal/QmitkRenderWindowManagerView.cpp b/Plugins/org.mitk.gui.qt.renderwindowmanager/src/internal/QmitkRenderWindowManagerView.cpp index 78e159649f..b3b5016eb4 100644 --- a/Plugins/org.mitk.gui.qt.renderwindowmanager/src/internal/QmitkRenderWindowManagerView.cpp +++ b/Plugins/org.mitk.gui.qt.renderwindowmanager/src/internal/QmitkRenderWindowManagerView.cpp @@ -1,72 +1,83 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ // render window manager plugin #include "QmitkRenderWindowManagerView.h" // mitk core #include #include const std::string QmitkRenderWindowManagerView::VIEW_ID = "org.mitk.views.renderwindowmanager"; void QmitkRenderWindowManagerView::SetFocus() { // nothing here } void QmitkRenderWindowManagerView::CreateQtPartControl(QWidget* parent) { // create GUI widgets m_Controls.setupUi(parent); // add custom render window manager UI widget to the 'renderWindowManagerTab' m_RenderWindowInspector = new QmitkDataStorageRenderWindowInspector(parent); m_RenderWindowInspector->SetDataStorage(GetDataStorage()); m_RenderWindowInspector->setObjectName(QStringLiteral("m_RenderWindowManipulatorWidget")); m_Controls.verticalLayout->addWidget(m_RenderWindowInspector); SetControlledRenderer(); for (const auto& renderer : m_ControlledRenderer) { m_Controls.comboBoxRenderWindowSelection->addItem(renderer->GetName()); } OnRenderWindowSelectionChanged(m_Controls.comboBoxRenderWindowSelection->itemText(0)); - connect(m_Controls.comboBoxRenderWindowSelection, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(OnRenderWindowSelectionChanged(const QString&))); + + // data node context menu and menu actions + m_InspectorView = m_RenderWindowInspector->GetView(); + m_DataNodeContextMenu = new QmitkDataNodeContextMenu(GetSite(), m_InspectorView); + m_DataNodeContextMenu->SetDataStorage(GetDataStorage()); + //m_DataNodeContextMenu->SetSurfaceDecimation(m_SurfaceDecimation); + connect(m_InspectorView, SIGNAL(customContextMenuRequested(const QPoint&)), m_DataNodeContextMenu, SLOT(OnContextMenuRequested(const QPoint&))); } void QmitkRenderWindowManagerView::SetControlledRenderer() { const mitk::RenderingManager::RenderWindowVector allRegisteredRenderWindows = mitk::RenderingManager::GetInstance()->GetAllRegisteredRenderWindows(); mitk::BaseRenderer* baseRenderer = nullptr; for (const auto &renderWindow : allRegisteredRenderWindows) { baseRenderer = mitk::BaseRenderer::GetInstance(renderWindow); if (nullptr != baseRenderer) { m_ControlledRenderer.push_back(baseRenderer); } } m_RenderWindowInspector->SetControlledRenderer(m_ControlledRenderer); } void QmitkRenderWindowManagerView::OnRenderWindowSelectionChanged(const QString &renderWindowId) { m_RenderWindowInspector->SetActiveRenderWindow(renderWindowId); } + +QItemSelectionModel* QmitkRenderWindowManagerView::GetDataNodeSelectionModel() const +{ + return m_InspectorView->selectionModel(); +} diff --git a/Plugins/org.mitk.gui.qt.renderwindowmanager/src/internal/QmitkRenderWindowManagerView.h b/Plugins/org.mitk.gui.qt.renderwindowmanager/src/internal/QmitkRenderWindowManagerView.h index 1c1cbdcff1..e94bf0afac 100644 --- a/Plugins/org.mitk.gui.qt.renderwindowmanager/src/internal/QmitkRenderWindowManagerView.h +++ b/Plugins/org.mitk.gui.qt.renderwindowmanager/src/internal/QmitkRenderWindowManagerView.h @@ -1,66 +1,75 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef QMITKRENDERWINDOWMANAGERVIEW_H #define QMITKRENDERWINDOWMANAGERVIEW_H // render window manager plugin #include "ui_QmitkRenderWindowManagerControls.h" // render window manager UI module #include +// mitk gui qt application +#include + // mitk gui qt common plugin #include /** * @brief RenderWindowManager */ class QmitkRenderWindowManagerView : public QmitkAbstractView { Q_OBJECT public: static const std::string VIEW_ID; protected: virtual void SetFocus() override; virtual void CreateQtPartControl(QWidget* parent) override; private Q_SLOTS: /** * @brief Called when the user changes the render window selection in the combo box. * * @param renderWindowId The text inside the combo box. */ void OnRenderWindowSelectionChanged(const QString &renderWindowId); private: void SetControlledRenderer(); QWidget* m_Parent; Ui::QmitkRenderWindowManagerControls m_Controls; QmitkDataStorageRenderWindowInspector* m_RenderWindowInspector; + QmitkDataNodeContextMenu* m_DataNodeContextMenu; + QAbstractItemView* m_InspectorView; + mitk::RenderWindowLayerUtilities::RendererVector m_ControlledRenderer; + + virtual QItemSelectionModel* GetDataNodeSelectionModel() const override; + }; #endif // QMITKRENDERWINDOWMANAGERVIEW_H