diff --git a/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionView.cpp b/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionView.cpp index d71ae26799..ecbe3d7f4b 100755 --- a/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionView.cpp +++ b/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionView.cpp @@ -1,138 +1,136 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #include "QmitkPointSetInteractionView.h" #include #include #include #include #include #include -#include +#include +#include +#include +#include #include #include const std::string QmitkPointSetInteractionView::VIEW_ID = "org.mitk.views.pointsetinteraction"; QmitkPointSetInteractionView::QmitkPointSetInteractionView() : m_Controls(nullptr) { } QmitkPointSetInteractionView::~QmitkPointSetInteractionView() { } void QmitkPointSetInteractionView::CreateQtPartControl(QWidget *parent) { m_Controls = new Ui::QmitkPointSetInteractionViewControls; m_Controls->setupUi(parent); + m_Controls->selectedPointSetWidget->SetDataStorage(GetDataStorage()); + m_Controls->selectedPointSetWidget->SetNodePredicate(mitk::NodePredicateAnd::New( + mitk::TNodePredicateDataType::New(), + mitk::NodePredicateNot::New(mitk::NodePredicateProperty::New("helper object")))); + + m_Controls->selectedPointSetWidget->SetSelectionIsOptional(true); + m_Controls->selectedPointSetWidget->SetEmptyInfo(QString("Please select a point set")); + m_Controls->selectedPointSetWidget->SetPopUpTitel(QString("Select point set")); + + m_SelectionServiceConnector = std::make_unique(); + + m_SelectionServiceConnector->AddPostSelectionListener(GetSite()->GetWorkbenchWindow()->GetSelectionService()); + connect(m_SelectionServiceConnector.get(), &QmitkSelectionServiceConnector::ServiceSelectionChanged, + m_Controls->selectedPointSetWidget, &QmitkSingleNodeSelectionWidget::SetCurrentSelection); + + connect(m_Controls->selectedPointSetWidget, &QmitkSingleNodeSelectionWidget::CurrentSelectionChanged, + this, &QmitkPointSetInteractionView::OnCurrentSelectionChanged); + connect(m_Controls->addPointSetPushButton, &QPushButton::clicked, this, &QmitkPointSetInteractionView::OnAddPointSetClicked); if (mitk::IRenderWindowPart* renderWindowPart = GetRenderWindowPart()) { RenderWindowPartActivated(renderWindowPart); } } void QmitkPointSetInteractionView::SetFocus() { m_Controls->addPointSetPushButton->setFocus(); } -void QmitkPointSetInteractionView::OnSelectionChanged(berry::IWorkbenchPart::Pointer, const QList& nodes) +void QmitkPointSetInteractionView::OnCurrentSelectionChanged(QList nodes) { - mitk::DataNode::Pointer selectedNode; - - if (!nodes.empty()) - { - selectedNode = nodes.front(); - } - - mitk::PointSet::Pointer pointSet; - - if (selectedNode.IsNotNull()) + if (nodes.empty() || nodes.front().IsNull()) { - pointSet = dynamic_cast(selectedNode->GetData()); + m_Controls->poinSetListWidget->SetPointSetNode(nullptr); + return; } - if (pointSet.IsNotNull()) + auto selectedPointSet = dynamic_cast(nodes.front()->GetData()); + if (nullptr == selectedPointSet) { - m_SelectedPointSetNode = selectedNode; - m_Controls->currentPointSetLabel->setText(QString::fromStdString(selectedNode->GetName())); - m_Controls->poinSetListWidget->SetPointSetNode(selectedNode); - } - else - { - m_Controls->currentPointSetLabel->setText(tr("None")); m_Controls->poinSetListWidget->SetPointSetNode(nullptr); + return; } -} -void QmitkPointSetInteractionView::NodeChanged(const mitk::DataNode* node) -{ - if (node == m_SelectedPointSetNode && m_Controls->currentPointSetLabel->text().toStdString() != node->GetName()) - { - m_Controls->currentPointSetLabel->setText(QString::fromStdString(node->GetName())); - } + m_Controls->poinSetListWidget->SetPointSetNode(nodes.front()); } void QmitkPointSetInteractionView::RenderWindowPartActivated(mitk::IRenderWindowPart* renderWindowPart) { if (nullptr != m_Controls) { m_Controls->poinSetListWidget->AddSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("axial")->GetSliceNavigationController()); m_Controls->poinSetListWidget->AddSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("sagittal")->GetSliceNavigationController()); m_Controls->poinSetListWidget->AddSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("coronal")->GetSliceNavigationController()); } } void QmitkPointSetInteractionView::RenderWindowPartDeactivated(mitk::IRenderWindowPart* renderWindowPart) { if (nullptr != m_Controls) { m_Controls->poinSetListWidget->RemoveSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("axial")->GetSliceNavigationController()); m_Controls->poinSetListWidget->RemoveSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("sagittal")->GetSliceNavigationController()); m_Controls->poinSetListWidget->RemoveSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("coronal")->GetSliceNavigationController()); } } void QmitkPointSetInteractionView::OnAddPointSetClicked() { // ask for the name of the point set bool ok = false; QString name = QInputDialog::getText(QApplication::activeWindow(), tr("Add point set..."), tr("Enter name for the new point set"), QLineEdit::Normal, tr("PointSet"), &ok); if (!ok || name.isEmpty()) { return; } mitk::PointSet::Pointer pointSet = mitk::PointSet::New(); mitk::DataNode::Pointer pointSetNode = mitk::DataNode::New(); pointSetNode->SetData(pointSet); pointSetNode->SetProperty("name", mitk::StringProperty::New(name.toStdString())); pointSetNode->SetProperty("opacity", mitk::FloatProperty::New(1)); pointSetNode->SetColor(1.0, 1.0, 0.0); this->GetDataStorage()->Add(pointSetNode); - // create a new selection and emulate selection for this - berry::IWorkbenchPart::Pointer nullPart; - QList selection; - selection.push_back(pointSetNode); - this->OnSelectionChanged(nullPart, selection); + m_Controls->selectedPointSetWidget->SetCurrentSelectedNode(pointSetNode); } diff --git a/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionView.h b/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionView.h index f19f838937..802555cab1 100755 --- a/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionView.h +++ b/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionView.h @@ -1,69 +1,64 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #ifndef QMITKPOINTSETINTERACTIONVIEW_H #define QMITKPOINTSETINTERACTIONVIEW_H #include "ui_QmitkPointSetInteractionViewControls.h" // mitk core #include -#include // org mitk gui common plugin -#include #include // org mitk gui qt common plugin #include - -#include +#include /** * @brief * * */ class QmitkPointSetInteractionView : public QmitkAbstractView, public mitk::IRenderWindowPartListener { Q_OBJECT public: static const std::string VIEW_ID; QmitkPointSetInteractionView(); ~QmitkPointSetInteractionView() override; void SetFocus() override; - void OnSelectionChanged(berry::IWorkbenchPart::Pointer part, const QList& nodes) override; - void NodeChanged(const mitk::DataNode* node) override; - void RenderWindowPartActivated(mitk::IRenderWindowPart* renderWindowPart) override; void RenderWindowPartDeactivated(mitk::IRenderWindowPart* renderWindowPart) override; -protected Q_SLOT: +private Q_SLOT: + void OnCurrentSelectionChanged(QList nodes); void OnAddPointSetClicked(); private: void CreateQtPartControl(QWidget *parent) override; Ui::QmitkPointSetInteractionViewControls* m_Controls; - mitk::WeakPointer m_SelectedPointSetNode; + std::unique_ptr m_SelectionServiceConnector; }; #endif // QMITKPOINTSETINTERACTIONVIEW_H diff --git a/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionViewControls.ui b/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionViewControls.ui index 68ee724c07..e25b3ed02b 100755 --- a/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionViewControls.ui +++ b/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionViewControls.ui @@ -1,77 +1,91 @@ QmitkPointSetInteractionViewControls 0 0 300 600 0 0 PointSet Interaction - + - Selected point set: + Selected point set - - - none + + + + 0 + 0 + + + + + 0 + 40 + Add new point set 0 0 Current pointset + + QmitkSingleNodeSelectionWidget + QWidget +
QmitkSingleNodeSelectionWidget.h
+
QmitkPointListWidget QWidget
QmitkPointListWidget.h