diff --git a/Plugins/org.mitk.gui.qt.custommultiwidgeteditor/src/QmitkCustomMultiWidgetEditor.cpp b/Plugins/org.mitk.gui.qt.custommultiwidgeteditor/src/QmitkCustomMultiWidgetEditor.cpp index dd8ae78e06..4bc9597c4e 100644 --- a/Plugins/org.mitk.gui.qt.custommultiwidgeteditor/src/QmitkCustomMultiWidgetEditor.cpp +++ b/Plugins/org.mitk.gui.qt.custommultiwidgeteditor/src/QmitkCustomMultiWidgetEditor.cpp @@ -1,269 +1,284 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical Image Computing. 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. ===================================================================*/ #include "QmitkCustomMultiWidgetEditor.h" #include #include -#include #include #include +#include -#include +// custom multi widget editor plugin +#include "QmitkMultiWidgetDecorationManager.h" -// mitk core -#include -#include +// mitk qt widgets module +#include +#include +#include const QString QmitkCustomMultiWidgetEditor::EDITOR_ID = "org.mitk.editors.custommultiwidget"; -QmitkCustomMultiWidgetEditor::QmitkCustomMultiWidgetEditor() +class QmitkCustomMultiWidgetEditor::Impl final +{ + +public: + + Impl(); + ~Impl(); + + void SetControlledRenderer(); + + QmitkCustomMultiWidget* m_CustomMultiWidget; + QmitkInteractionSchemeToolBar* m_InteractionSchemeToolBar; + QmitkMultiWidgetConfigurationToolBar* m_ConfigurationToolBar; + + std::unique_ptr m_MultiWidgetDecorationManager; + + std::unique_ptr m_RenderWindowViewDirectionController; +}; + +QmitkCustomMultiWidgetEditor::Impl::Impl() : m_CustomMultiWidget(nullptr) , m_InteractionSchemeToolBar(nullptr) , m_ConfigurationToolBar(nullptr) { // nothing here } -QmitkCustomMultiWidgetEditor::~QmitkCustomMultiWidgetEditor() +QmitkCustomMultiWidgetEditor::Impl::~Impl() { // nothing here } -void QmitkCustomMultiWidgetEditor::Activated() +void QmitkCustomMultiWidgetEditor::Impl::SetControlledRenderer() { - // nothing here -} + if (nullptr == m_RenderWindowViewDirectionController || nullptr == m_CustomMultiWidget) + { + return; + } -void QmitkCustomMultiWidgetEditor::Deactivated() -{ - // nothing here + RenderWindowLayerUtilities::RendererVector controlledRenderer; + auto renderWindowWidgets = m_CustomMultiWidget->GetRenderWindowWidgets(); + for (const auto& renderWindowWidget : renderWindowWidgets) + { + auto renderWindow = renderWindowWidget.second->GetRenderWindow(); + auto vtkRenderWindow = renderWindow->GetRenderWindow(); + mitk::BaseRenderer* baseRenderer = mitk::BaseRenderer::GetInstance(vtkRenderWindow); + if (nullptr != baseRenderer) + { + controlledRenderer.push_back(baseRenderer); + } + } + + m_RenderWindowViewDirectionController->SetControlledRenderer(controlledRenderer); } -void QmitkCustomMultiWidgetEditor::Visible() +////////////////////////////////////////////////////////////////////////// +// QmitkCustomMultiWidgetEditor +////////////////////////////////////////////////////////////////////////// +QmitkCustomMultiWidgetEditor::QmitkCustomMultiWidgetEditor() + : m_Impl(new Impl()) { // nothing here } -void QmitkCustomMultiWidgetEditor::Hidden() +QmitkCustomMultiWidgetEditor::~QmitkCustomMultiWidgetEditor() { // nothing here } QmitkRenderWindow* QmitkCustomMultiWidgetEditor::GetActiveQmitkRenderWindow() const { - if (nullptr != m_CustomMultiWidget) + if (nullptr != m_Impl->m_CustomMultiWidget) { - auto activeRenderWindowWidget = m_CustomMultiWidget->GetActiveRenderWindowWidget(); + auto activeRenderWindowWidget = m_Impl->m_CustomMultiWidget->GetActiveRenderWindowWidget(); if (nullptr != activeRenderWindowWidget) { return activeRenderWindowWidget->GetRenderWindow(); } } return nullptr; } QHash QmitkCustomMultiWidgetEditor::GetQmitkRenderWindows() const { QHash result; - if (nullptr == m_CustomMultiWidget) + if (nullptr == m_Impl->m_CustomMultiWidget) { return result; } // create QHash on demand - QmitkCustomMultiWidget::RenderWindowWidgetMap renderWindowWidgets = m_CustomMultiWidget->GetRenderWindowWidgets(); + QmitkCustomMultiWidget::RenderWindowWidgetMap renderWindowWidgets = m_Impl->m_CustomMultiWidget->GetRenderWindowWidgets(); for (const auto& renderWindowWidget : renderWindowWidgets) { result.insert(renderWindowWidget.first, renderWindowWidget.second->GetRenderWindow()); } return result; } QmitkRenderWindow* QmitkCustomMultiWidgetEditor::GetQmitkRenderWindow(const QString& id) const { - if (nullptr == m_CustomMultiWidget) + if (nullptr == m_Impl->m_CustomMultiWidget) { return nullptr; } - return m_CustomMultiWidget->GetRenderWindow(id); + return m_Impl->m_CustomMultiWidget->GetRenderWindow(id); } mitk::Point3D QmitkCustomMultiWidgetEditor::GetSelectedPosition(const QString& id) const { - if (nullptr == m_CustomMultiWidget) + if (nullptr == m_Impl->m_CustomMultiWidget) { return mitk::Point3D(); } - return m_CustomMultiWidget->GetCrossPosition(id); + return m_Impl->m_CustomMultiWidget->GetCrossPosition(id); } void QmitkCustomMultiWidgetEditor::SetSelectedPosition(const mitk::Point3D& pos, const QString& id) { - if (nullptr != m_CustomMultiWidget) + if (nullptr != m_Impl->m_CustomMultiWidget) { - m_CustomMultiWidget->MoveCrossToPosition(id, pos); + m_Impl->m_CustomMultiWidget->MoveCrossToPosition(id, pos); } } void QmitkCustomMultiWidgetEditor::EnableDecorations(bool enable, const QStringList& decorations) { - m_MultiWidgetDecorationManager->ShowDecorations(enable, decorations); + m_Impl->m_MultiWidgetDecorationManager->ShowDecorations(enable, decorations); } bool QmitkCustomMultiWidgetEditor::IsDecorationEnabled(const QString& decoration) const { - return m_MultiWidgetDecorationManager->IsDecorationVisible(decoration); + return m_Impl->m_MultiWidgetDecorationManager->IsDecorationVisible(decoration); } QStringList QmitkCustomMultiWidgetEditor::GetDecorations() const { - return m_MultiWidgetDecorationManager->GetDecorations(); + return m_Impl->m_MultiWidgetDecorationManager->GetDecorations(); } void QmitkCustomMultiWidgetEditor::EnableSlicingPlanes(bool enable) { - // #TODO: nothing here + // nothing here } bool QmitkCustomMultiWidgetEditor::IsSlicingPlanesEnabled() const { - // #TODO: nothing here + // nothing here return false; } QmitkCustomMultiWidget* QmitkCustomMultiWidgetEditor::GetCustomMultiWidget() { - return m_CustomMultiWidget; + return m_Impl->m_CustomMultiWidget; } void QmitkCustomMultiWidgetEditor::OnLayoutSet(int row, int column) { - m_CustomMultiWidget->ResetLayout(row, column); - SetControlledRenderer(); + m_Impl->m_CustomMultiWidget->ResetLayout(row, column); + m_Impl->SetControlledRenderer(); FirePropertyChange(berry::IWorkbenchPartConstants::PROP_INPUT); } void QmitkCustomMultiWidgetEditor::OnSynchronize(bool synchronized) { - m_CustomMultiWidget->Synchronize(synchronized); + m_Impl->m_CustomMultiWidget->Synchronize(synchronized); } -void QmitkCustomMultiWidgetEditor::OnViewDirectionChanged(mitk::SliceNavigationController::ViewDirection viewDirection) +void QmitkCustomMultiWidgetEditor::OnViewDirectionChanged(ViewDirection viewDirection) { - m_RenderWindowViewDirectionController->SetViewDirectionOfRenderer(viewDirection); + m_Impl->m_RenderWindowViewDirectionController->SetViewDirectionOfRenderer(viewDirection); } ////////////////////////////////////////////////////////////////////////// // PRIVATE ////////////////////////////////////////////////////////////////////////// void QmitkCustomMultiWidgetEditor::SetFocus() { - if (nullptr != m_CustomMultiWidget) + if (nullptr != m_Impl->m_CustomMultiWidget) { - m_CustomMultiWidget->setFocus(); + m_Impl->m_CustomMultiWidget->setFocus(); } } void QmitkCustomMultiWidgetEditor::CreateQtPartControl(QWidget* parent) { - if (nullptr == m_CustomMultiWidget) + if (nullptr == m_Impl->m_CustomMultiWidget) { QHBoxLayout* layout = new QHBoxLayout(parent); layout->setContentsMargins(0, 0, 0, 0); berry::IBerryPreferences* preferences = dynamic_cast(GetPreferences().GetPointer()); mitk::BaseRenderer::RenderingMode::Type renderingMode = static_cast(preferences->GetInt("Rendering Mode", 0)); - m_CustomMultiWidget = new QmitkCustomMultiWidget(parent, 0, 0, renderingMode); + m_Impl->m_CustomMultiWidget = new QmitkCustomMultiWidget(parent, 0, 0, renderingMode); // create left toolbar: interaction scheme toolbar to switch how the render window navigation behaves - if (nullptr == m_InteractionSchemeToolBar) + if (nullptr == m_Impl->m_InteractionSchemeToolBar) { - m_InteractionSchemeToolBar = new QmitkInteractionSchemeToolBar(parent); - layout->addWidget(m_InteractionSchemeToolBar); + m_Impl->m_InteractionSchemeToolBar = new QmitkInteractionSchemeToolBar(parent); + layout->addWidget(m_Impl->m_InteractionSchemeToolBar); } - m_InteractionSchemeToolBar->SetInteractionEventHandler(m_CustomMultiWidget->GetInteractionEventHandler()); + m_Impl->m_InteractionSchemeToolBar->SetInteractionEventHandler(m_Impl->m_CustomMultiWidget->GetInteractionEventHandler()); // add center widget: the custom multi widget - layout->addWidget(m_CustomMultiWidget); + layout->addWidget(m_Impl->m_CustomMultiWidget); - m_CustomMultiWidget->SetDataStorage(GetDataStorage()); - m_CustomMultiWidget->InitializeRenderWindowWidgets(); + m_Impl->m_CustomMultiWidget->SetDataStorage(GetDataStorage()); + m_Impl->m_CustomMultiWidget->InitializeRenderWindowWidgets(); // create right toolbar: configuration toolbar to change the render window widget layout - if (nullptr == m_ConfigurationToolBar) + if (nullptr == m_Impl->m_ConfigurationToolBar) { - m_ConfigurationToolBar = new QmitkMultiWidgetConfigurationToolBar(m_CustomMultiWidget); - layout->addWidget(m_ConfigurationToolBar); + m_Impl->m_ConfigurationToolBar = new QmitkMultiWidgetConfigurationToolBar(m_Impl->m_CustomMultiWidget); + layout->addWidget(m_Impl->m_ConfigurationToolBar); } - connect(m_ConfigurationToolBar, SIGNAL(LayoutSet(int, int)), SLOT(OnLayoutSet(int, int))); - connect(m_ConfigurationToolBar, SIGNAL(Synchronized(bool)), SLOT(OnSynchronize(bool))); - connect(m_ConfigurationToolBar, SIGNAL(ViewDirectionChanged(mitk::SliceNavigationController::ViewDirection)), SLOT(OnViewDirectionChanged(mitk::SliceNavigationController::ViewDirection))); + connect(m_Impl->m_ConfigurationToolBar, &QmitkMultiWidgetConfigurationToolBar::LayoutSet, this, &QmitkCustomMultiWidgetEditor::OnLayoutSet); + connect(m_Impl->m_ConfigurationToolBar, &QmitkMultiWidgetConfigurationToolBar::Synchronized, this, &QmitkCustomMultiWidgetEditor::OnSynchronize); + connect(m_Impl->m_ConfigurationToolBar, &QmitkMultiWidgetConfigurationToolBar::ViewDirectionChanged, this, &QmitkCustomMultiWidgetEditor::OnViewDirectionChanged); - m_MultiWidgetDecorationManager = std::make_unique(m_CustomMultiWidget); + m_Impl->m_MultiWidgetDecorationManager = std::make_unique(m_Impl->m_CustomMultiWidget); - m_RenderWindowViewDirectionController = std::make_unique(); - m_RenderWindowViewDirectionController->SetDataStorage(GetDataStorage()); - SetControlledRenderer(); + m_Impl->m_RenderWindowViewDirectionController = std::make_unique(); + m_Impl->m_RenderWindowViewDirectionController->SetDataStorage(GetDataStorage()); + m_Impl->SetControlledRenderer(); OnPreferencesChanged(preferences); } } void QmitkCustomMultiWidgetEditor::OnPreferencesChanged(const berry::IBerryPreferences* preferences) { - if (m_CustomMultiWidget->GetRenderWindowWidgets().empty()) + if (m_Impl->m_CustomMultiWidget->GetRenderWindowWidgets().empty()) { return; } // update decoration preferences - m_MultiWidgetDecorationManager->DecorationPreferencesChanged(preferences); + m_Impl->m_MultiWidgetDecorationManager->DecorationPreferencesChanged(preferences); // zooming and panning preferences bool constrainedZooming = preferences->GetBool("Use constrained zooming and panning", true); mitk::RenderingManager::GetInstance()->SetConstrainedPanningZooming(constrainedZooming); mitk::RenderingManager::GetInstance()->InitializeViewsByBoundingObjects(GetDataStorage()); mitk::RenderingManager::GetInstance()->RequestUpdateAll(); } - -void QmitkCustomMultiWidgetEditor::SetControlledRenderer() -{ - if (nullptr == m_RenderWindowViewDirectionController || nullptr == m_CustomMultiWidget) - { - return; - } - - RenderWindowLayerUtilities::RendererVector controlledRenderer; - auto renderWindowWidgets = m_CustomMultiWidget->GetRenderWindowWidgets(); - for (const auto& renderWindowWidget : renderWindowWidgets) - { - auto renderWindow = renderWindowWidget.second->GetRenderWindow(); - auto vtkRenderWindow = renderWindow->GetRenderWindow(); - mitk::BaseRenderer* baseRenderer = mitk::BaseRenderer::GetInstance(vtkRenderWindow); - if (nullptr != baseRenderer) - { - controlledRenderer.push_back(baseRenderer); - } - } - - m_RenderWindowViewDirectionController->SetControlledRenderer(controlledRenderer); -} diff --git a/Plugins/org.mitk.gui.qt.custommultiwidgeteditor/src/QmitkCustomMultiWidgetEditor.h b/Plugins/org.mitk.gui.qt.custommultiwidgeteditor/src/QmitkCustomMultiWidgetEditor.h index 598862755a..571a7a9571 100644 --- a/Plugins/org.mitk.gui.qt.custommultiwidgeteditor/src/QmitkCustomMultiWidgetEditor.h +++ b/Plugins/org.mitk.gui.qt.custommultiwidgeteditor/src/QmitkCustomMultiWidgetEditor.h @@ -1,150 +1,117 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical Image Computing. 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 QMITKCUSTOMMULTIWIDGETEDITOR_H #define QMITKCUSTOMMULTIWIDGETEDITOR_H #include -#include #include // custom multi widget editor #include -#include "QmitkMultiWidgetDecorationManager.h" - -// mitk qt widgets module -#include -#include -#include // mitk render window manager #include #include -class QmitkMouseModeSwitcher; +class QmitkCustomMultiWidget; -class CUSTOMMULTIWIDGETEDITOR_EXPORT QmitkCustomMultiWidgetEditor final : public QmitkAbstractRenderEditor, public mitk::ILifecycleAwarePart, public mitk::ILinkedRenderWindowPart +class CUSTOMMULTIWIDGETEDITOR_EXPORT QmitkCustomMultiWidgetEditor final : public QmitkAbstractRenderEditor, public mitk::ILinkedRenderWindowPart { Q_OBJECT public: + using ViewDirection = mitk::SliceNavigationController::ViewDirection; + berryObjectMacro(QmitkCustomMultiWidgetEditor) static const QString EDITOR_ID; QmitkCustomMultiWidgetEditor(); ~QmitkCustomMultiWidgetEditor(); - /** - * @brief Overridden from mitk::ILifecycleAwarePart - */ - virtual void Activated() override; - /** - * @brief Overridden from mitk::ILifecycleAwarePart - */ - virtual void Deactivated() override; - /** - * @brief Overridden from mitk::ILifecycleAwarePart - */ - virtual void Visible() override; - /** - * @brief Overridden from mitk::ILifecycleAwarePart - */ - virtual void Hidden() override; - /** * @brief Overridden from mitk::ILinkedRenderWindowPart : IRenderWindowPart */ virtual QmitkRenderWindow* GetActiveQmitkRenderWindow() const override; /** * @brief Overridden from mitk::ILinkedRenderWindowPart : IRenderWindowPart */ virtual QHash GetQmitkRenderWindows() const override; /** * @brief Overridden from mitk::ILinkedRenderWindowPart : IRenderWindowPart */ virtual QmitkRenderWindow* GetQmitkRenderWindow(const QString& id) const override; /** * @brief Overridden from mitk::ILinkedRenderWindowPart : IRenderWindowPart */ virtual mitk::Point3D GetSelectedPosition(const QString& id = QString()) const override; /** * @brief Overridden from mitk::ILinkedRenderWindowPart : IRenderWindowPart */ virtual void SetSelectedPosition(const mitk::Point3D& pos, const QString& id = QString()) override; /** * @brief Overridden from mitk::ILinkedRenderWindowPart : IRenderWindowPart */ virtual void EnableDecorations(bool enable, const QStringList& decorations = QStringList()) override; /** * @brief Overridden from mitk::ILinkedRenderWindowPart : IRenderWindowPart */ virtual bool IsDecorationEnabled(const QString& decoration) const override; /** * @brief Overridden from mitk::ILinkedRenderWindowPart : IRenderWindowPart */ virtual QStringList GetDecorations() const override; /** * @brief Overridden from mitk::ILinkedRenderWindowPart */ virtual void EnableSlicingPlanes(bool enable) override; /** * @brief Overridden from mitk::ILinkedRenderWindowPart */ virtual bool IsSlicingPlanesEnabled() const override; - + /** + * @brief Return the current custom multi widget of this editor. + */ QmitkCustomMultiWidget* GetCustomMultiWidget(); -private slots: +private Q_SLOTS: void OnLayoutSet(int row, int column); void OnSynchronize(bool synchronized); - void OnViewDirectionChanged(mitk::SliceNavigationController::ViewDirection viewDirection); + void OnViewDirectionChanged(ViewDirection viewDirection); private: /** * @brief Overridden from QmitkAbstractRenderEditor */ virtual void SetFocus() override; /** * @brief Overridden from QmitkAbstractRenderEditor */ virtual void CreateQtPartControl(QWidget* parent) override; /** * @brief Overridden from QmitkAbstractRenderEditor */ virtual void OnPreferencesChanged(const berry::IBerryPreferences* preferences) override; - void SetControlledRenderer(); - /** - * @brief - * - * - */ - void RequestActivateMenuWidget(bool on); - - QmitkCustomMultiWidget* m_CustomMultiWidget; - QmitkInteractionSchemeToolBar* m_InteractionSchemeToolBar; - QmitkMultiWidgetConfigurationToolBar* m_ConfigurationToolBar; - std::unique_ptr m_MultiWidgetDecorationManager; - - std::unique_ptr m_RenderWindowViewDirectionController; - + class Impl; + const std::unique_ptr m_Impl; }; #endif // QMITKCUSTOMMULTIWIDGETEDITOR_H