diff --git a/Modules/QtWidgetsExt/files.cmake b/Modules/QtWidgetsExt/files.cmake index e8bd9dd1f6..ca5f9bc69e 100644 --- a/Modules/QtWidgetsExt/files.cmake +++ b/Modules/QtWidgetsExt/files.cmake @@ -1,106 +1,107 @@ file(GLOB_RECURSE H_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/include/*") set(CPP_FILES qclickablelabel.cpp QmitkAboutDialog.cpp QmitkBasePropertyView.cpp QmitkBoolPropertyWidget.cpp QmitkBoundingObjectWidget.cpp QmitkCallbackFromGUIThread.cpp QmitkColorPropertyEditor.cpp QmitkColorPropertyView.cpp QmitkColorTransferFunctionCanvas.cpp QmitkCrossWidget.cpp QmitkEditPointDialog.cpp QmitkEnumerationPropertyWidget.cpp QmitkFFmpegWriter.cpp QmitkFileChooser.cpp QmitkGnuplotWidget.cpp QmitkHistogram.cpp QmitkHotkeyLineEdit.cpp QmitkModulesDialog.cpp QmitkModuleTableModel.cpp QmitkNumberPropertyEditor.cpp QmitkNumberPropertySlider.cpp QmitkNumberPropertyView.cpp QmitkPiecewiseFunctionCanvas.cpp QmitkPlotDialog.cpp QmitkPlotWidget.cpp QmitkPointListModel.cpp QmitkPointListView.cpp QmitkPointListViewWidget.cpp QmitkPointListWidget.cpp QmitkPrimitiveMovieNavigatorWidget.cpp QmitkPropertyViewFactory.cpp QmitkSelectableGLWidget.cpp QmitkSliceWidget.cpp QmitkSliderNavigatorWidget.cpp QmitkStandardViews.cpp QmitkStepperAdapter.cpp QmitkStringPropertyEditor.cpp QmitkStringPropertyOnDemandEdit.cpp QmitkStringPropertyView.cpp QmitkTransferFunctionCanvas.cpp QmitkTransferFunctionGeneratorWidget.cpp QmitkTransferFunctionWidget.cpp QmitkUGCombinedRepresentationPropertyWidget.cpp QmitkVideoBackground.cpp QtWidgetsExtRegisterClasses.cpp ) set(MOC_H_FILES include/qclickablelabel.h include/QmitkAboutDialog.h include/QmitkBasePropertyView.h include/QmitkBoolPropertyWidget.h include/QmitkBoundingObjectWidget.h include/QmitkCallbackFromGUIThread.h include/QmitkColorPropertyEditor.h include/QmitkColorPropertyView.h include/QmitkColorTransferFunctionCanvas.h include/QmitkCrossWidget.h include/QmitkEditPointDialog.h include/QmitkEnumerationPropertyWidget.h include/QmitkFFmpegWriter.h include/QmitkFileChooser.h include/QmitkGnuplotWidget.h include/QmitkHotkeyLineEdit.h include/QmitkNumberPropertyEditor.h include/QmitkNumberPropertySlider.h include/QmitkNumberPropertyView.h include/QmitkPiecewiseFunctionCanvas.h include/QmitkPlotWidget.h include/QmitkPointListModel.h include/QmitkPointListView.h include/QmitkPointListViewWidget.h include/QmitkPointListWidget.h include/QmitkPrimitiveMovieNavigatorWidget.h include/QmitkSelectableGLWidget.h include/QmitkSliceWidget.h include/QmitkSliderNavigatorWidget.h include/QmitkStandardViews.h include/QmitkStepperAdapter.h include/QmitkStringPropertyEditor.h include/QmitkStringPropertyOnDemandEdit.h include/QmitkStringPropertyView.h include/QmitkTransferFunctionCanvas.h include/QmitkTransferFunctionGeneratorWidget.h include/QmitkTransferFunctionWidget.h include/QmitkUGCombinedRepresentationPropertyWidget.h include/QmitkVideoBackground.h ) set(UI_FILES src/QmitkAboutDialogGUI.ui src/QmitkGnuplotWidget.ui src/QmitkPrimitiveMovieNavigatorWidget.ui src/QmitkSelectableGLWidget.ui src/QmitkSliceWidget.ui src/QmitkSliderNavigator.ui src/QmitkTransferFunctionGeneratorWidget.ui src/QmitkTransferFunctionWidget.ui + src/QmitkPointListWidget.ui ) set(QRC_FILES resource/QtWidgetsExt.qrc ) diff --git a/Modules/QtWidgetsExt/include/QmitkPointListWidget.h b/Modules/QtWidgetsExt/include/QmitkPointListWidget.h index a7136b489f..7b91d07ca7 100644 --- a/Modules/QtWidgetsExt/include/QmitkPointListWidget.h +++ b/Modules/QtWidgetsExt/include/QmitkPointListWidget.h @@ -1,150 +1,152 @@ /*=================================================================== 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 QmitkPointListWidget_H #define QmitkPointListWidget_H #include "MitkQtWidgetsExtExports.h" #include #include #include #include #include #include #include +#include "ui_QmitkPointListWidget.h" + /*! * \brief Widget for regular operations on point sets * * Displays a list of point coordinates and a couple of * buttons which * * \li enable point set interaction * \li clear all points from a set * \li load points from file * \li save points to file * * The user/application module of this widget needs to * assign a mitk::PointSet object to this widget. The user * also has to decide whether it wants to put the point set * into (a) DataStorage. This widget will not add/remove * point sets to DataStorage. * * If the render window crosshair should be moved to the * currently selected point, the widget user has to provide * a QmitkStdMultiWidget object. */ -class MITKQTWIDGETSEXT_EXPORT QmitkPointListWidget : public QWidget +class MITKQTWIDGETSEXT_EXPORT QmitkPointListWidget : public QWidget, public Ui::QmitkPointListWidgetUi { Q_OBJECT public: QmitkPointListWidget(QWidget *parent = 0, int orientation = 0); ~QmitkPointListWidget() override; void SetupConnections(); /** * @brief Add a mitk::SliceNavigationController instance. * @param snc The mitk::SliceNavigationController instance. * * This method adds \c snc to the set of slice navigation controllers which are * used to navigate to the selected point. */ void AddSliceNavigationController(mitk::SliceNavigationController *snc); /** * @brief Remove a mitk::SliceNavigationController instance. * @param snc The mitk::SliceNavigationController instance. * * This method removes \c snc from the set of slice navigation controllers which are * used to navigate to the selected point. */ void RemoveSliceNavigationController(mitk::SliceNavigationController *snc); /** @brief assign a point set (contained in a node of DataStorage) for observation */ void SetPointSet(mitk::PointSet *newPs); mitk::PointSet *GetPointSet(); /** @brief assign a point set (contained in a node of DataStorage) for observation */ void SetPointSetNode(mitk::DataNode *newNode); mitk::DataNode *GetPointSetNode(); /** @brief assign a QmitkStdMultiWidget for updating render window crosshair */ void SetMultiWidget(QmitkStdMultiWidget *multiWidget); /** @brief itk observer for node "delete" events */ void OnNodeDeleted(const itk::EventObject &e); /** @brief Unselects the edit button if it is selected. */ void UnselectEditButton(); public slots: void DeactivateInteractor(bool deactivate); void EnableEditButton(bool enabled); signals: /** @brief signal to inform about the state of the EditPointSetButton, whether an interactor for setting points is * active or not */ void EditPointSets(bool active); /// signal to inform that the selection of a point in the pointset has changed void PointSelectionChanged(); /// signal to inform about cleared or loaded point sets void PointListChanged(); protected slots: void OnBtnSavePoints(); void OnBtnLoadPoints(); void RemoveSelectedPoint(); void MoveSelectedPointDown(); void MoveSelectedPointUp(); void OnBtnAddPoint(bool checked); void OnBtnAddPointManually(); /*! \brief pass through signal from PointListView that point selection has changed */ void OnPointSelectionChanged(); void OnListDoubleClick(); protected: void SetupUi(); void ObserveNewNode(mitk::DataNode *node); - QmitkPointListView *m_PointListView; + // QmitkPointListView *m_PointListView; mitk::DataNode::Pointer m_PointSetNode; int m_Orientation; - QPushButton *m_MovePointUpBtn; - QPushButton *m_MovePointDownBtn; - QPushButton *m_RemovePointBtn; - QPushButton *m_SavePointsBtn; - QPushButton *m_LoadPointsBtn; - QPushButton *m_ToggleAddPoint; - QPushButton *m_AddPoint; + //QPushButton *m_MovePointUpBtn; + //QPushButton *m_MovePointDownBtn; + //QPushButton *m_RemovePointBtn; + //QPushButton *m_SavePointsBtn; + //QPushButton *m_LoadPointsBtn; + //QPushButton *m_ToggleAddPoint; + //QPushButton *m_AddPoint; mitk::DataInteractor::Pointer m_DataInteractor; int m_TimeStep; bool m_EditAllowed; unsigned long m_NodeObserverTag; }; #endif diff --git a/Modules/QtWidgetsExt/src/QmitkPointListWidget.cpp b/Modules/QtWidgetsExt/src/QmitkPointListWidget.cpp index b4179590be..d4fc8627b4 100644 --- a/Modules/QtWidgetsExt/src/QmitkPointListWidget.cpp +++ b/Modules/QtWidgetsExt/src/QmitkPointListWidget.cpp @@ -1,463 +1,464 @@ /*=================================================================== 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. ===================================================================*/ #include "QmitkPointListWidget.h" #include #include #include #include #include #include #include #include QmitkPointListWidget::QmitkPointListWidget(QWidget *parent, int orientation) - : QWidget(parent), - m_PointListView(nullptr), - m_PointSetNode(nullptr), - m_Orientation(0), - m_MovePointUpBtn(nullptr), - m_MovePointDownBtn(nullptr), - m_RemovePointBtn(nullptr), - m_SavePointsBtn(nullptr), - m_LoadPointsBtn(nullptr), - m_ToggleAddPoint(nullptr), - m_AddPoint(nullptr), - m_DataInteractor(nullptr), - m_TimeStep(0), - m_EditAllowed(true), - m_NodeObserverTag(0) + : QWidget(parent)//, + //m_PointListView(nullptr), + //m_PointSetNode(nullptr), + //m_Orientation(0), + //m_MovePointUpBtn(nullptr), + //m_MovePointDownBtn(nullptr), + //m_RemovePointBtn(nullptr), + //m_SavePointsBtn(nullptr), + //m_LoadPointsBtn(nullptr), + //m_ToggleAddPoint(nullptr), + //m_AddPoint(nullptr), + //m_DataInteractor(nullptr), + //m_TimeStep(0), + //m_EditAllowed(true), + //m_NodeObserverTag(0) { - m_PointListView = new QmitkPointListView(); + // m_PointListView = new QmitkPointListView(); if (orientation != 0) m_Orientation = orientation; - SetupUi(); + this->setupUi(this); SetupConnections(); ObserveNewNode(nullptr); } QmitkPointListWidget::~QmitkPointListWidget() { m_DataInteractor = nullptr; if (m_PointSetNode && m_NodeObserverTag) { m_PointSetNode->RemoveObserver(m_NodeObserverTag); m_NodeObserverTag = 0; } delete m_PointListView; } void QmitkPointListWidget::SetupConnections() { - connect(this->m_LoadPointsBtn, SIGNAL(clicked()), this, SLOT(OnBtnLoadPoints())); + connect(m_LoadPointsBtn, SIGNAL(clicked()), this, SLOT(OnBtnLoadPoints())); connect(this->m_SavePointsBtn, SIGNAL(clicked()), this, SLOT(OnBtnSavePoints())); connect(this->m_MovePointUpBtn, SIGNAL(clicked()), this, SLOT(MoveSelectedPointUp())); connect(this->m_MovePointDownBtn, SIGNAL(clicked()), this, SLOT(MoveSelectedPointDown())); connect(this->m_RemovePointBtn, SIGNAL(clicked()), this, SLOT(RemoveSelectedPoint())); connect(this->m_ToggleAddPoint, SIGNAL(toggled(bool)), this, SLOT(OnBtnAddPoint(bool))); connect(this->m_AddPoint, SIGNAL(clicked()), this, SLOT(OnBtnAddPointManually())); connect(this->m_PointListView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(OnListDoubleClick())); connect(this->m_PointListView, SIGNAL(SignalPointSelectionChanged()), this, SLOT(OnPointSelectionChanged())); } -void QmitkPointListWidget::SetupUi() -{ - // Setup the buttons - - m_ToggleAddPoint = new QPushButton(); - m_ToggleAddPoint->setMaximumSize(25, 25); - m_ToggleAddPoint->setCheckable(true); - m_ToggleAddPoint->setToolTip("Toggle point editing (use SHIFT + Left Mouse Button to add Points)"); - QIcon iconAdd(":/QtWidgetsExt/btnSetPoints.xpm"); - m_ToggleAddPoint->setIcon(iconAdd); - - m_AddPoint = new QPushButton(); - m_AddPoint->setMaximumSize(25, 25); - m_AddPoint->setToolTip("Manually add point"); - QIcon iconAddManually(":/QtWidgetsExt/btnSetPointsManually.xpm"); - m_AddPoint->setIcon(iconAddManually); - - m_RemovePointBtn = new QPushButton(); - m_RemovePointBtn->setMaximumSize(25, 25); - const QIcon iconDel(":/QtWidgetsExt/btnClear.xpm"); - m_RemovePointBtn->setIcon(iconDel); - m_RemovePointBtn->setToolTip("Erase one point from list (Hotkey: DEL)"); - - m_MovePointUpBtn = new QPushButton(); - m_MovePointUpBtn->setMaximumSize(25, 25); - const QIcon iconUp(":/QtWidgetsExt/btnUp.xpm"); - m_MovePointUpBtn->setIcon(iconUp); - m_MovePointUpBtn->setToolTip("Swap selected point upwards (Hotkey: F2)"); - - m_MovePointDownBtn = new QPushButton(); - m_MovePointDownBtn->setMaximumSize(25, 25); - const QIcon iconDown(":/QtWidgetsExt/btnDown.xpm"); - m_MovePointDownBtn->setIcon(iconDown); - m_MovePointDownBtn->setToolTip("Swap selected point downwards (Hotkey: F3)"); - - m_SavePointsBtn = new QPushButton(); - m_SavePointsBtn->setMaximumSize(25, 25); - QIcon iconSave(":/QtWidgetsExt/btnSave.xpm"); - m_SavePointsBtn->setIcon(iconSave); - m_SavePointsBtn->setToolTip("Save points to file"); - - m_LoadPointsBtn = new QPushButton(); - m_LoadPointsBtn->setMaximumSize(25, 25); - QIcon iconLoad(":/QtWidgetsExt/btnLoad.xpm"); - m_LoadPointsBtn->setIcon(iconLoad); - m_LoadPointsBtn->setToolTip("Load list of points from file (REPLACES current content)"); - - int i; - - QBoxLayout *lay1; - QBoxLayout *lay2; - - switch (m_Orientation) - { - case 0: - lay1 = new QVBoxLayout(this); - lay2 = new QHBoxLayout(); - i = 0; - break; - - case 1: - lay1 = new QHBoxLayout(this); - lay2 = new QVBoxLayout(); - i = -1; - break; - - case 2: - lay1 = new QHBoxLayout(this); - lay2 = new QVBoxLayout(); - i = 0; - break; - - default: - lay1 = new QVBoxLayout(this); - lay2 = new QHBoxLayout(); - i = -1; - break; - } - - // setup Layouts - - this->setLayout(lay1); - lay1->addLayout(lay2); - - lay2->stretch(true); - lay2->addWidget(m_ToggleAddPoint); - lay2->addWidget(m_AddPoint); - lay2->addWidget(m_RemovePointBtn); - lay2->addWidget(m_MovePointUpBtn); - lay2->addWidget(m_MovePointDownBtn); - lay2->addWidget(m_SavePointsBtn); - lay2->addWidget(m_LoadPointsBtn); - - lay1->insertWidget(i, m_PointListView); - this->setLayout(lay1); -} +//void QmitkPointListWidget::SetupUi() +//{ +// +// // Setup the buttons +// +// m_ToggleAddPoint = new QPushButton(); +// m_ToggleAddPoint->setMaximumSize(25, 25); +// m_ToggleAddPoint->setCheckable(true); +// m_ToggleAddPoint->setToolTip("Toggle point editing (use SHIFT + Left Mouse Button to add Points)"); +// QIcon iconAdd(":/QtWidgetsExt/btnSetPoints.xpm"); +// m_ToggleAddPoint->setIcon(iconAdd); +// +// m_AddPoint = new QPushButton(); +// m_AddPoint->setMaximumSize(25, 25); +// m_AddPoint->setToolTip("Manually add point"); +// QIcon iconAddManually(":/QtWidgetsExt/btnSetPointsManually.xpm"); +// m_AddPoint->setIcon(iconAddManually); +// +// m_RemovePointBtn = new QPushButton(); +// m_RemovePointBtn->setMaximumSize(25, 25); +// const QIcon iconDel(":/QtWidgetsExt/btnClear.xpm"); +// m_RemovePointBtn->setIcon(iconDel); +// m_RemovePointBtn->setToolTip("Erase one point from list (Hotkey: DEL)"); +// +// m_MovePointUpBtn = new QPushButton(); +// m_MovePointUpBtn->setMaximumSize(25, 25); +// const QIcon iconUp(":/QtWidgetsExt/btnUp.xpm"); +// m_MovePointUpBtn->setIcon(iconUp); +// m_MovePointUpBtn->setToolTip("Swap selected point upwards (Hotkey: F2)"); +// +// m_MovePointDownBtn = new QPushButton(); +// m_MovePointDownBtn->setMaximumSize(25, 25); +// const QIcon iconDown(":/QtWidgetsExt/btnDown.xpm"); +// m_MovePointDownBtn->setIcon(iconDown); +// m_MovePointDownBtn->setToolTip("Swap selected point downwards (Hotkey: F3)"); +// +// m_SavePointsBtn = new QPushButton(); +// m_SavePointsBtn->setMaximumSize(25, 25); +// QIcon iconSave(":/QtWidgetsExt/btnSave.xpm"); +// m_SavePointsBtn->setIcon(iconSave); +// m_SavePointsBtn->setToolTip("Save points to file"); +// +// m_LoadPointsBtn = new QPushButton(); +// m_LoadPointsBtn->setMaximumSize(25, 25); +// QIcon iconLoad(":/QtWidgetsExt/btnLoad.xpm"); +// m_LoadPointsBtn->setIcon(iconLoad); +// m_LoadPointsBtn->setToolTip("Load list of points from file (REPLACES current content)"); +// +// int i; +// +// QBoxLayout *lay1; +// QBoxLayout *lay2; +// +// switch (m_Orientation) +// { +// case 0: +// lay1 = new QVBoxLayout(this); +// lay2 = new QHBoxLayout(); +// i = 0; +// break; +// +// case 1: +// lay1 = new QHBoxLayout(this); +// lay2 = new QVBoxLayout(); +// i = -1; +// break; +// +// case 2: +// lay1 = new QHBoxLayout(this); +// lay2 = new QVBoxLayout(); +// i = 0; +// break; +// +// default: +// lay1 = new QVBoxLayout(this); +// lay2 = new QHBoxLayout(); +// i = -1; +// break; +// } +// +// // setup Layouts +// +// this->setLayout(lay1); +// lay1->addLayout(lay2); +// +// lay2->stretch(true); +// lay2->addWidget(m_ToggleAddPoint); +// lay2->addWidget(m_AddPoint); +// lay2->addWidget(m_RemovePointBtn); +// lay2->addWidget(m_MovePointUpBtn); +// lay2->addWidget(m_MovePointDownBtn); +// lay2->addWidget(m_SavePointsBtn); +// lay2->addWidget(m_LoadPointsBtn); +// +// lay1->insertWidget(i, m_PointListView); +// this->setLayout(lay1); +//} void QmitkPointListWidget::SetPointSet(mitk::PointSet *newPs) { if (newPs == nullptr) return; this->m_PointSetNode->SetData(newPs); dynamic_cast(this->m_PointListView->model())->SetPointSetNode(m_PointSetNode); ObserveNewNode(m_PointSetNode); } void QmitkPointListWidget::SetPointSetNode(mitk::DataNode *newNode) { if (m_DataInteractor.IsNotNull()) m_DataInteractor->SetDataNode(newNode); ObserveNewNode(newNode); dynamic_cast(this->m_PointListView->model())->SetPointSetNode(newNode); } void QmitkPointListWidget::OnBtnSavePoints() { if ((dynamic_cast(m_PointSetNode->GetData())) == nullptr) return; // don't write empty point sets. If application logic requires something else then do something else. if ((dynamic_cast(m_PointSetNode->GetData()))->GetSize() == 0) return; // take the previously defined name of node as proposal for filename std::string nodeName = m_PointSetNode->GetName(); nodeName = "/" + nodeName + ".mps"; QString fileNameProposal = QString(); fileNameProposal.append(nodeName.c_str()); QString aFilename = QFileDialog::getSaveFileName( nullptr, "Save point set", QDir::currentPath() + fileNameProposal, "MITK Pointset (*.mps)"); if (aFilename.isEmpty()) return; try { mitk::IOUtil::Save(m_PointSetNode->GetData(), aFilename.toStdString()); } catch (...) { QMessageBox::warning(this, "Save point set", QString("File writer reported problems writing %1\n\n" "PLEASE CHECK output file!") .arg(aFilename)); } } void QmitkPointListWidget::OnBtnLoadPoints() { // get the name of the file to load QString filename = QFileDialog::getOpenFileName(nullptr, "Open MITK Pointset", "", "MITK Point Sets (*.mps)"); if (filename.isEmpty()) return; // attempt to load file try { mitk::PointSet::Pointer pointSet = dynamic_cast(mitk::IOUtil::Load(filename.toStdString())[0].GetPointer()); if (pointSet.IsNull()) { QMessageBox::warning(this, "Load point set", QString("File reader could not read %1").arg(filename)); return; } // loading successful this->SetPointSet(pointSet); } catch (...) { QMessageBox::warning(this, "Load point set", QString("File reader collapsed while reading %1").arg(filename)); } emit PointListChanged(); mitk::RenderingManager::GetInstance()->RequestUpdateAll(); } mitk::PointSet *QmitkPointListWidget::GetPointSet() { return dynamic_cast(m_PointSetNode->GetData()); } mitk::DataNode *QmitkPointListWidget::GetPointSetNode() { return m_PointSetNode; } void QmitkPointListWidget::SetMultiWidget(QmitkStdMultiWidget *multiWidget) { m_PointListView->SetMultiWidget(multiWidget); } void QmitkPointListWidget::RemoveSelectedPoint() { if (!m_PointSetNode) return; mitk::PointSet *pointSet = dynamic_cast(m_PointSetNode->GetData()); if (!pointSet) return; if (pointSet->GetSize() == 0) return; QmitkPointListModel *pointListModel = dynamic_cast(m_PointListView->model()); pointListModel->RemoveSelectedPoint(); emit PointListChanged(); } void QmitkPointListWidget::MoveSelectedPointDown() { if (!m_PointSetNode) return; mitk::PointSet *pointSet = dynamic_cast(m_PointSetNode->GetData()); if (!pointSet) return; if (pointSet->GetSize() == 0) return; QmitkPointListModel *pointListModel = dynamic_cast(m_PointListView->model()); pointListModel->MoveSelectedPointDown(); emit PointListChanged(); } void QmitkPointListWidget::MoveSelectedPointUp() { if (!m_PointSetNode) return; mitk::PointSet *pointSet = dynamic_cast(m_PointSetNode->GetData()); if (!pointSet) return; if (pointSet->GetSize() == 0) return; QmitkPointListModel *pointListModel = dynamic_cast(m_PointListView->model()); pointListModel->MoveSelectedPointUp(); emit PointListChanged(); } void QmitkPointListWidget::OnBtnAddPoint(bool checked) { if (m_PointSetNode.IsNotNull()) { if (checked) { m_DataInteractor = m_PointSetNode->GetDataInteractor(); // If no data Interactor is present create a new one if (m_DataInteractor.IsNull()) { // Create PointSetData Interactor m_DataInteractor = mitk::PointSetDataInteractor::New(); // Load the according state machine for regular point set interaction m_DataInteractor->LoadStateMachine("PointSet.xml"); // Set the configuration file that defines the triggers for the transitions m_DataInteractor->SetEventConfig("PointSetConfig.xml"); // set the DataNode (which already is added to the DataStorage m_DataInteractor->SetDataNode(m_PointSetNode); } } else { m_PointSetNode->SetDataInteractor(nullptr); m_DataInteractor = nullptr; } emit EditPointSets(checked); } } void QmitkPointListWidget::OnBtnAddPointManually() { mitk::PointSet *pointSet = this->GetPointSet(); QmitkEditPointDialog editPointDialog(this); if (this->GetPointSet()->IsEmpty()) { editPointDialog.SetPoint(pointSet, 0, m_TimeStep); } else { mitk::PointSet::PointsIterator maxIt = pointSet->GetMaxId(); mitk::PointSet::PointIdentifier maxId = maxIt->Index(); editPointDialog.SetPoint(pointSet, maxId + 1, m_TimeStep); } editPointDialog.exec(); } void QmitkPointListWidget::OnListDoubleClick() { } void QmitkPointListWidget::OnPointSelectionChanged() { emit this->PointSelectionChanged(); } void QmitkPointListWidget::DeactivateInteractor(bool) { } void QmitkPointListWidget::EnableEditButton(bool enabled) { m_EditAllowed = enabled; if (enabled == false) m_ToggleAddPoint->setEnabled(false); else m_ToggleAddPoint->setEnabled(true); OnBtnAddPoint(enabled); } void QmitkPointListWidget::ObserveNewNode(mitk::DataNode *node) { if (m_DataInteractor.IsNotNull()) m_DataInteractor->SetDataNode(node); // remove old observer if (m_PointSetNode) { if (m_DataInteractor) { m_DataInteractor = nullptr; m_ToggleAddPoint->setChecked(false); } m_PointSetNode->RemoveObserver(m_NodeObserverTag); m_NodeObserverTag = 0; } m_PointSetNode = node; // add new observer if necessary if (m_PointSetNode) { itk::ReceptorMemberCommand::Pointer command = itk::ReceptorMemberCommand::New(); command->SetCallbackFunction(this, &QmitkPointListWidget::OnNodeDeleted); m_NodeObserverTag = m_PointSetNode->AddObserver(itk::DeleteEvent(), command); } else { m_NodeObserverTag = 0; } if (m_EditAllowed == true) m_ToggleAddPoint->setEnabled(m_PointSetNode); else m_ToggleAddPoint->setEnabled(false); m_RemovePointBtn->setEnabled(m_PointSetNode); m_LoadPointsBtn->setEnabled(m_PointSetNode); m_SavePointsBtn->setEnabled(m_PointSetNode); m_AddPoint->setEnabled(m_PointSetNode); } void QmitkPointListWidget::OnNodeDeleted(const itk::EventObject &) { if (m_PointSetNode.IsNotNull() && !m_NodeObserverTag) m_PointSetNode->RemoveObserver(m_NodeObserverTag); m_NodeObserverTag = 0; m_PointSetNode = nullptr; m_PointListView->SetPointSetNode(nullptr); m_ToggleAddPoint->setEnabled(false); m_RemovePointBtn->setEnabled(false); m_LoadPointsBtn->setEnabled(false); m_SavePointsBtn->setEnabled(false); m_AddPoint->setEnabled(false); } void QmitkPointListWidget::AddSliceNavigationController(mitk::SliceNavigationController *snc) { m_PointListView->AddSliceNavigationController(snc); } void QmitkPointListWidget::RemoveSliceNavigationController(mitk::SliceNavigationController *snc) { m_PointListView->RemoveSliceNavigationController(snc); } void QmitkPointListWidget::UnselectEditButton() { m_ToggleAddPoint->setChecked(false); } diff --git a/Modules/QtWidgetsExt/src/QmitkPointListWidget.ui b/Modules/QtWidgetsExt/src/QmitkPointListWidget.ui new file mode 100644 index 0000000000..bfd58a7003 --- /dev/null +++ b/Modules/QtWidgetsExt/src/QmitkPointListWidget.ui @@ -0,0 +1,169 @@ + + + QmitkPointListWidgetUi + + + + 0 + 0 + 385 + 381 + + + + QmitkSliceWidget + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 20 + 231 + 191 + + + + + + + + + + + true + + + Toggle point editing (use SHIFT + Left Mouse Button to add Points) + + + + + + + :/images/btnSetPoints.png:/images/btnSetPoints.png + + + true + + + false + + + + + + + Manually add point + + + + + + + :/images/btnSetPointsManually.xpm:/images/btnSetPointsManually.xpm + + + + + + + Erase one point from list (Hotkey: DEL) + + + false + + + + + + + :/images/btnClear.xpm:/images/btnClear.xpm + + + + + + + Swap selected point upwards (Hotkey: F2) + + + + + + + :/images/btnMoveUp.png:/images/btnMoveUp.png + + + + + + + Swap selected point downwards (Hotkey: F3) + + + + + + + :/images/btnMoveDown.png:/images/btnMoveDown.png + + + + + + + Save points to file + + + + + + + :/images/btnSave.xpm:/images/btnSave.xpm + + + + + + + Load list of points from file (REPLACES current content) + + + + + + + :/images/btnLoad.xpm:/images/btnLoad.xpm + + + + + + + + + + + + + QmitkPointListView + QWidget +
qmitkpointlistview.h
+
+
+ + + + +