diff --git a/Plugins/org.mitk.gui.qt.pointsetinteraction/files.cmake b/Plugins/org.mitk.gui.qt.pointsetinteraction/files.cmake index 10c9760fe6..0255405a6f 100644 --- a/Plugins/org.mitk.gui.qt.pointsetinteraction/files.cmake +++ b/Plugins/org.mitk.gui.qt.pointsetinteraction/files.cmake @@ -1,35 +1,31 @@ -set(SRC_CPP_FILES - -) - set(INTERNAL_CPP_FILES QmitkPointSetInteractionView.cpp mitkPluginActivator.cpp ) set(UI_FILES src/internal/QmitkPointSetInteractionViewControls.ui ) set(MOC_H_FILES src/internal/mitkPluginActivator.h src/internal/QmitkPointSetInteractionView.h ) set(CACHED_RESOURCE_FILES resources/pointset_interaction.svg plugin.xml ) set(QRC_FILES resources/QmitkPointSetInteractionView.qrc ) foreach(file ${SRC_CPP_FILES}) set(CPP_FILES ${CPP_FILES} src/${file}) endforeach(file ${SRC_CPP_FILES}) foreach(file ${INTERNAL_CPP_FILES}) set(CPP_FILES ${CPP_FILES} src/internal/${file}) endforeach(file ${INTERNAL_CPP_FILES}) diff --git a/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionView.cmake b/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionView.cmake deleted file mode 100755 index 3734c47189..0000000000 --- a/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionView.cmake +++ /dev/null @@ -1,11 +0,0 @@ -# QmitkPointSetInteractionView - -message(STATUS "processing QmitkPointSetInteractionView.cmake") -message(STATUS "APPMOD_CPP before: ${APPMOD_CPP}") - -set( APPMOD_H ${APPMOD_H} QmitkPointSetInteractionView.h ) -set( APPMOD_MOC_H ${APPMOD_MOC_H} QmitkPointSetInteractionView.h ) -set( APPMOD_CPP ${APPMOD_CPP} QmitkPointSetInteractionView.cpp ) -set(APPMOD_FORMS ${APPMOD_FORMS} QmitkPointSetInteractionControls.ui) -message(STATUS "APPMOD_CPP after: ${APPMOD_CPP}") - 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 1c1d18734f..d63cf1e9d6 100755 --- a/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionView.cpp +++ b/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionView.cpp @@ -1,147 +1,127 @@ /*============================================================================ 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. ============================================================================*/ -// Qmitk related includes #include "QmitkPointSetInteractionView.h" -#include "ui_QmitkPointSetInteractionViewControls.h" -#include <berryIWorkbenchWindow.h> -#include <berryISelectionService.h> #include <QInputDialog> #include <QLineEdit> -#include <mitkDataNodeObject.h> -#include <mitkDataNodeSelection.h> -#include <mitkProperties.h> +#include <mitkNodePredicateDataType.h> +#include <mitkNodePredicateAnd.h> +#include <mitkNodePredicateNot.h> +#include <mitkNodePredicateProperty.h> #include <QmitkPointListWidget.h> #include <QmitkRenderWindow.h> const std::string QmitkPointSetInteractionView::VIEW_ID = "org.mitk.views.pointsetinteraction"; - -QmitkPointSetInteractionView::QmitkPointSetInteractionView( QObject* /*parent*/ ) -: m_Controls(nullptr) +QmitkPointSetInteractionView::QmitkPointSetInteractionView() + : m_Controls(nullptr) { } QmitkPointSetInteractionView::~QmitkPointSetInteractionView() { } -void QmitkPointSetInteractionView::CreateQtPartControl( QWidget *parent ) +void QmitkPointSetInteractionView::CreateQtPartControl(QWidget *parent) { - m_Controls = new Ui::QmitkPointSetInteractionControls; + m_Controls = new Ui::QmitkPointSetInteractionViewControls; m_Controls->setupUi(parent); - m_Controls->m_PbAddPointSet->connect( m_Controls->m_PbAddPointSet, SIGNAL( clicked() ) - , this, SLOT( OnAddPointSetClicked() ) ); - if (mitk::IRenderWindowPart *renderWindowPart = GetRenderWindowPart()) + m_Controls->selectedPointSetWidget->SetDataStorage(GetDataStorage()); + m_Controls->selectedPointSetWidget->SetNodePredicate(mitk::NodePredicateAnd::New( + mitk::TNodePredicateDataType<mitk::PointSet>::New(), + mitk::NodePredicateNot::New(mitk::NodePredicateProperty::New("helper object")))); + + m_Controls->selectedPointSetWidget->SetSelectionIsOptional(true); + m_Controls->selectedPointSetWidget->SetAutoSelectNewNodes(true); + m_Controls->selectedPointSetWidget->SetEmptyInfo(QString("Please select a point set")); + m_Controls->selectedPointSetWidget->SetPopUpTitel(QString("Select point set")); + + connect(m_Controls->selectedPointSetWidget, &QmitkSingleNodeSelectionWidget::CurrentSelectionChanged, + this, &QmitkPointSetInteractionView::OnCurrentSelectionChanged); + + connect(m_Controls->addPointSetPushButton, &QPushButton::clicked, + this, &QmitkPointSetInteractionView::OnAddPointSetClicked); + + if (mitk::IRenderWindowPart* renderWindowPart = GetRenderWindowPart()) { - // let the point set widget know about the render window part (crosshair updates) RenderWindowPartActivated(renderWindowPart); } } void QmitkPointSetInteractionView::SetFocus() { - m_Controls->m_PbAddPointSet->setFocus(); -} - -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; - - // - //Create a new empty pointset - // - mitk::PointSet::Pointer pointSet = mitk::PointSet::New(); - // - // Create a new data tree node - // - mitk::DataNode::Pointer pointSetNode = mitk::DataNode::New(); - // - // fill the data tree node with the appropriate information - // - 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 ); - // - // add the node to the ds - // - this->GetDataStorage()->Add(pointSetNode); - - // make new selection and emulate selection for this - berry::IWorkbenchPart::Pointer nullPart; - QList<mitk::DataNode::Pointer> selection; - selection.push_back(pointSetNode); - this->OnSelectionChanged(nullPart, selection); + m_Controls->addPointSetPushButton->setFocus(); } -void QmitkPointSetInteractionView::OnSelectionChanged(berry::IWorkbenchPart::Pointer, const QList<mitk::DataNode::Pointer>& nodes) +void QmitkPointSetInteractionView::OnCurrentSelectionChanged(QList<mitk::DataNode::Pointer> nodes) { - mitk::DataNode::Pointer selectedNode; - - if(!nodes.empty()) - selectedNode = nodes.front(); - - mitk::PointSet::Pointer pointSet; - - if(selectedNode.IsNotNull()) - pointSet = dynamic_cast<mitk::PointSet*>(selectedNode->GetData()); - - if (pointSet.IsNotNull()) + if (nodes.empty() || nodes.front().IsNull()) { - m_SelectedPointSetNode = selectedNode; - m_Controls->m_CurrentPointSetLabel->setText(QString::fromStdString(selectedNode->GetName())); - m_Controls->m_PointListWidget->SetPointSetNode(selectedNode); + m_Controls->poinSetListWidget->SetPointSetNode(nullptr); + return; } - else + + auto selectedPointSet = dynamic_cast<mitk::PointSet*>(nodes.front()->GetData()); + if (nullptr == selectedPointSet) { - m_Controls->m_CurrentPointSetLabel->setText(tr("None")); - m_Controls->m_PointListWidget->SetPointSetNode(nullptr); + m_Controls->poinSetListWidget->SetPointSetNode(nullptr); + return; } + + m_Controls->poinSetListWidget->SetPointSetNode(nodes.front()); } -void QmitkPointSetInteractionView::NodeChanged( const mitk::DataNode* node ) +void QmitkPointSetInteractionView::RenderWindowPartActivated(mitk::IRenderWindowPart* renderWindowPart) { - if(node == m_SelectedPointSetNode && m_Controls->m_CurrentPointSetLabel->text().toStdString() != node->GetName()) + if (nullptr != m_Controls) { - m_Controls->m_CurrentPointSetLabel->setText(QString::fromStdString(node->GetName())); + 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::RenderWindowPartActivated(mitk::IRenderWindowPart* renderWindowPart) +void QmitkPointSetInteractionView::RenderWindowPartDeactivated(mitk::IRenderWindowPart* renderWindowPart) { - if(m_Controls) + if (nullptr != m_Controls) { - m_Controls->m_PointListWidget->AddSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("axial")->GetSliceNavigationController()); - m_Controls->m_PointListWidget->AddSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("sagittal")->GetSliceNavigationController()); - m_Controls->m_PointListWidget->AddSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("coronal")->GetSliceNavigationController()); + 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::RenderWindowPartDeactivated(mitk::IRenderWindowPart* renderWindowPart) +void QmitkPointSetInteractionView::OnAddPointSetClicked() { - if(m_Controls) + // 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()) { - m_Controls->m_PointListWidget->RemoveSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("axial")->GetSliceNavigationController()); - m_Controls->m_PointListWidget->RemoveSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("sagittal")->GetSliceNavigationController()); - m_Controls->m_PointListWidget->RemoveSliceNavigationController(renderWindowPart->GetQmitkRenderWindow("coronal")->GetSliceNavigationController()); + 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); + + 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 2087d208e8..769d6dc3ab 100755 --- a/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionView.h +++ b/Plugins/org.mitk.gui.qt.pointsetinteraction/src/internal/QmitkPointSetInteractionView.h @@ -1,59 +1,61 @@ /*============================================================================ 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. ============================================================================*/ -#if !defined(QmitkPointSetInteraction_H__INCLUDED) -#define QmitkPointSetInteraction_H__INCLUDED +#ifndef QMITKPOINTSETINTERACTIONVIEW_H +#define QMITKPOINTSETINTERACTIONVIEW_H -#include <berryISelectionListener.h> -#include <QmitkAbstractView.h> -#include <mitkILifecycleAwarePart.h> -#include <mitkIRenderWindowPartListener.h> -#include <mitkWeakPointer.h> +#include "ui_QmitkPointSetInteractionViewControls.h" + +// mitk core #include <mitkDataNode.h> -namespace Ui -{ -class QmitkPointSetInteractionControls; -}; +// org mitk gui common plugin +#include <mitkIRenderWindowPartListener.h> + +// org mitk gui qt common plugin +#include <QmitkAbstractView.h> -/*! -\brief QmitkPointSetInteractionView +/** +* @brief +* +* */ class QmitkPointSetInteractionView : public QmitkAbstractView, public mitk::IRenderWindowPartListener { Q_OBJECT public: + static const std::string VIEW_ID; - QmitkPointSetInteractionView(QObject *parent=nullptr); + QmitkPointSetInteractionView(); ~QmitkPointSetInteractionView() override; - - void CreateQtPartControl(QWidget *parent) override; - - /// - /// Sets the focus to an internal widget. - /// void SetFocus() override; - void OnSelectionChanged(berry::IWorkbenchPart::Pointer part, const QList<mitk::DataNode::Pointer>& nodes) override; - void NodeChanged(const mitk::DataNode* node) override; void RenderWindowPartActivated(mitk::IRenderWindowPart* renderWindowPart) override; void RenderWindowPartDeactivated(mitk::IRenderWindowPart* renderWindowPart) override; -protected slots: + +private Q_SLOT: + + void OnCurrentSelectionChanged(QList<mitk::DataNode::Pointer> nodes); void OnAddPointSetClicked(); -protected: - Ui::QmitkPointSetInteractionControls * m_Controls; - mitk::WeakPointer<mitk::DataNode> m_SelectedPointSetNode; + +private: + + void CreateQtPartControl(QWidget *parent) override; + + Ui::QmitkPointSetInteractionViewControls* m_Controls; + }; -#endif // !defined(QmitkPointSetInteraction_H__INCLUDED) + +#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 9f398951c2..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,179 +1,91 @@ <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> - <class>QmitkPointSetInteractionControls</class> - <widget class="QWidget" name="QmitkPointSetInteractionControls"> + <class>QmitkPointSetInteractionViewControls</class> + <widget class="QWidget" name="QmitkPointSetInteractionViewControls"> <property name="geometry"> <rect> <x>0</x> <y>0</y> - <width>376</width> - <height>580</height> + <width>300</width> + <height>600</height> </rect> </property> <property name="minimumSize"> <size> <width>0</width> <height>0</height> </size> </property> <property name="windowTitle"> - <string>QmitkPointSetInteractionView</string> + <string>PointSet Interaction</string> </property> <layout class="QVBoxLayout"> - <property name="spacing"> - <number>6</number> - </property> - <property name="leftMargin"> - <number>9</number> - </property> - <property name="topMargin"> - <number>9</number> - </property> - <property name="rightMargin"> - <number>9</number> - </property> - <property name="bottomMargin"> - <number>9</number> - </property> <item> - <layout class="QHBoxLayout"> - <property name="spacing"> - <number>2</number> - </property> - <property name="leftMargin"> - <number>2</number> - </property> - <property name="topMargin"> - <number>2</number> - </property> - <property name="rightMargin"> - <number>2</number> - </property> - <property name="bottomMargin"> - <number>2</number> - </property> - <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Selected point set:</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="m_CurrentPointSetLabel"> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="selectedPointSetLabel"> <property name="text"> - <string>none</string> + <string>Selected point set</string> </property> </widget> </item> - </layout> - </item> - <item> - <layout class="QVBoxLayout"> - <property name="spacing"> - <number>2</number> - </property> - <property name="leftMargin"> - <number>2</number> - </property> - <property name="topMargin"> - <number>2</number> - </property> - <property name="rightMargin"> - <number>2</number> - </property> - <property name="bottomMargin"> - <number>2</number> - </property> - <item> - <widget class="QPushButton" name="m_PbAddPointSet"> + <item row="0" column="1"> + <widget class="QmitkSingleNodeSelectionWidget" name="selectedPointSetWidget" native="true"> <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>40</height> + </size> + </property> + </widget> + </item> + <item row="1" column="0" colspan="2"> + <widget class="QPushButton" name="addPointSetPushButton"> <property name="text"> <string>Add new point set</string> </property> </widget> </item> </layout> </item> <item> <widget class="QGroupBox" name="groupBox"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> - <property name="font"> - <font> - <weight>50</weight> - <italic>false</italic> - <bold>false</bold> - </font> - </property> <property name="title"> <string>Current pointset</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> - <property name="spacing"> - <number>2</number> - </property> - <property name="leftMargin"> - <number>2</number> - </property> - <property name="topMargin"> - <number>2</number> - </property> - <property name="rightMargin"> - <number>2</number> - </property> - <property name="bottomMargin"> - <number>2</number> - </property> <item> - <widget class="QmitkPointListWidget" name="m_PointListWidget" native="true"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> + <widget class="QmitkPointListWidget" name="poinSetListWidget" native="true"/> </item> </layout> </widget> </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <customwidgets> + <customwidget> + <class>QmitkSingleNodeSelectionWidget</class> + <extends>QWidget</extends> + <header location="global">QmitkSingleNodeSelectionWidget.h</header> + </customwidget> <customwidget> <class>QmitkPointListWidget</class> <extends>QWidget</extends> <header location="global">QmitkPointListWidget.h</header> </customwidget> </customwidgets> - <includes> - <include location="global">mitkDataNode.h</include> - <include location="global">mitkPointSet.h</include> - </includes> <resources/> <connections/> </ui>