diff --git a/Modules/SegmentationUI/Qmitk/QmitkMultiLabelManager.cpp b/Modules/SegmentationUI/Qmitk/QmitkMultiLabelManager.cpp new file mode 100644 index 0000000000..280189591b --- /dev/null +++ b/Modules/SegmentationUI/Qmitk/QmitkMultiLabelManager.cpp @@ -0,0 +1,464 @@ +/*============================================================================ + +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 "QmitkMultiLabelManager.h" + +// mitk +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Qmitk +#include + +// Qt +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +// itk +#include + +#include "ui_QmitkMultiLabelManagerControls.h" + + +QmitkMultiLabelManager::QmitkMultiLabelManager(QWidget *parent) + : QWidget(parent), m_Controls(new Ui::QmitkMultiLabelManagerControls), m_Completer(nullptr), m_ProcessingManualSelection(false) +{ + m_Controls->setupUi(this); + + m_Controls->labelSearchBox->setAlwaysShowClearIcon(true); + m_Controls->labelSearchBox->setShowSearchIcon(true); + + QStringList completionList; + completionList << ""; + m_Completer = new QCompleter(completionList, this); + m_Completer->setCaseSensitivity(Qt::CaseInsensitive); + m_Controls->labelSearchBox->setCompleter(m_Completer); + + m_Controls->labelInspector->SetAllowLabelModification(true); + connect(m_Controls->labelInspector, &QmitkMultiLabelInspector::CurrentSelectionChanged, this, &QmitkMultiLabelManager::UpdateControls); + + connect(m_Controls->labelSearchBox, SIGNAL(returnPressed()), this, SLOT(OnSearchLabel())); + + QStringListModel *completeModel = static_cast(m_Completer->model()); + completeModel->setStringList(GetLabelStringList()); + + m_Controls->btnSavePreset->setIcon(QmitkStyleManager::ThemeIcon(QStringLiteral(":/org_mitk_icons/icons/awesome/scalable/actions/document-save.svg"))); + m_Controls->btnLoadPreset->setIcon(QmitkStyleManager::ThemeIcon(QStringLiteral(":/org_mitk_icons/icons/awesome/scalable/actions/document-open.svg"))); + + connect(m_Controls->btnAddLabel, &QToolButton::clicked, this->m_Controls->labelInspector, &QmitkMultiLabelInspector::AddNewLabel); + connect(m_Controls->btnAddInstance, &QToolButton::clicked, this->m_Controls->labelInspector, &QmitkMultiLabelInspector::AddNewLabelInstance); + connect(m_Controls->btnRemoveLabel, &QToolButton::clicked, this->m_Controls->labelInspector, &QmitkMultiLabelInspector::RemoveLabel); + connect(m_Controls->btnAddGroup, &QToolButton::clicked, this->m_Controls->labelInspector, &QmitkMultiLabelInspector::AddNewGroup); + connect(m_Controls->btnRemoveGroup, &QToolButton::clicked, this->m_Controls->labelInspector, &QmitkMultiLabelInspector::RemoveGroup); + connect(m_Controls->btnSavePreset, &QToolButton::clicked, this, &QmitkMultiLabelManager::OnSavePreset); + connect(m_Controls->btnSavePreset, &QToolButton::clicked, this, &QmitkMultiLabelManager::OnLoadPreset); + + connect(this->m_Controls->labelInspector, &QmitkMultiLabelInspector::GoToLabel, this, &QmitkMultiLabelManager::OnGoToLabel); + + auto* renameLabelShortcut = new QShortcut(QKeySequence(Qt::CTRL | Qt::Key::Key_L, Qt::CTRL | Qt::Key::Key_R), this); + connect(renameLabelShortcut, &QShortcut::activated, this, &QmitkMultiLabelManager::OnRenameLabelShortcutActivated); + + auto* newLabelShortcut = new QShortcut(QKeySequence(Qt::CTRL | Qt::Key::Key_L, Qt::CTRL | Qt::Key::Key_N), this); + connect(newLabelShortcut, &QShortcut::activated, this->m_Controls->labelInspector, &QmitkMultiLabelInspector::AddNewLabel); + + this->UpdateControls(); +} + +QmitkMultiLabelManager::~QmitkMultiLabelManager() +{ + delete m_Controls; +} + +QmitkMultiLabelManager::LabelValueVectorType QmitkMultiLabelManager::GetSelectedLabels() const +{ + return m_Controls->labelInspector->GetSelectedLabels(); +} + + +void QmitkMultiLabelManager::OnRenameLabelShortcutActivated() +{ + if (this->GetSelectedLabels().size() == 1) + { + //TODO delegate like inspector -> will call QmitkNewSegmentationDialog::RenameLabel() + } +} + +void QmitkMultiLabelManager::OnSelectedLabelChanged(LabelValueVectorType labels) +{ + if (labels.empty() || labels.size() > 1) return; + + //TODO das sollte eigentlich raus und in die View. Das Widget sollte am besten keine dependency zum interpolator aufbauen!!! + auto labelValue = labels.front(); + auto groupID = this->m_Segmentation->GetGroupIndexOfLabel(labelValue); + this->m_Segmentation->SetActiveLayer(groupID); + this->m_Segmentation->GetActiveLabelSet()->SetActiveLabel(labelValue); + + mitk::SurfaceBasedInterpolationController *interpolator = mitk::SurfaceBasedInterpolationController::GetInstance(); + if (interpolator) + { + interpolator->SetActiveLabel(labelValue); + } + + this->m_Segmentation->Modified(); + mitk::RenderingManager::GetInstance()->RequestUpdateAll(); + + emit CurrentSelectionChanged(labels); +} + +QStringList &QmitkMultiLabelManager::GetLabelStringList() +{ + return m_LabelStringList; +} + +void QmitkMultiLabelManager::SetDefaultLabelNaming(bool defaultLabelNaming) +{ + this->m_Controls->labelInspector->SetDefaultLabelNaming(defaultLabelNaming); +} + +void QmitkMultiLabelManager::setEnabled(bool enabled) +{ + QWidget::setEnabled(enabled); + UpdateControls(); +} + +void QmitkMultiLabelManager::SetSelectedLabels(const LabelValueVectorType& selectedLabels) +{ + this->m_Controls->labelInspector->SetSelectedLabels(selectedLabels); + UpdateControls(); +} + +void QmitkMultiLabelManager::SetSelectedLabel(mitk::LabelSetImage::LabelValueType selectedLabel) +{ + this->m_Controls->labelInspector->SetSelectedLabel(selectedLabel); + UpdateControls(); +} + +void QmitkMultiLabelManager::SetMultiLabelSegmentation(mitk::LabelSetImage* segmentation) +{ + if (segmentation != this->m_Segmentation.GetPointer()) + { + m_Segmentation = segmentation; + this->m_Controls->labelInspector->SetMultiLabelSegmentation(segmentation); + UpdateControls(); + } +} + +void QmitkMultiLabelManager::SetDataStorage(mitk::DataStorage *storage) +{ + m_DataStorage = storage; +} + +void QmitkMultiLabelManager::OnSearchLabel() +{ + //std::string text = m_Controls->labelSearchBox->text().toStdString(); + //int pixelValue = -1; + //int row = -1; + //for (int i = 0; i < m_Controls->m_LabelSetTableWidget->rowCount(); ++i) + //{ + // if (m_Controls->m_LabelSetTableWidget->item(i, 0)->text().toStdString().compare(text) == 0) + // { + // pixelValue = m_Controls->m_LabelSetTableWidget->item(i, 0)->data(Qt::UserRole).toInt(); + // row = i; + // break; + // } + //} + //if (pixelValue == -1) + //{ + // return; + //} + + //GetWorkingImage()->GetActiveLabelSet()->SetActiveLabel(pixelValue); + + //QTableWidgetItem *nameItem = m_Controls->m_LabelSetTableWidget->item(row, NAME_COL); + //if (!nameItem) + //{ + // return; + //} + + //m_Controls->m_LabelSetTableWidget->clearSelection(); + //m_Controls->m_LabelSetTableWidget->selectRow(row); + //m_Controls->m_LabelSetTableWidget->scrollToItem(nameItem); + + //GetWorkingImage()->GetActiveLabelSet()->SetActiveLabel(pixelValue); + + //this->WaitCursorOn(); + //mitk::Point3D pos = + // GetWorkingImage()->GetLabel(pixelValue, GetWorkingImage()->GetActiveLayer())->GetCenterOfMassCoordinates(); + + //m_ToolManager->WorkingDataChanged(); + + //if (pos.GetVnlVector().max_value() > 0.0) + //{ + // emit goToLabel(pos); + //} + //else + //{ + // GetWorkingImage()->UpdateCenterOfMass(pixelValue, GetWorkingImage()->GetActiveLayer()); + // mitk::Point3D pos = + // GetWorkingImage()->GetLabel(pixelValue, GetWorkingImage()->GetActiveLayer())->GetCenterOfMassCoordinates(); + // emit goToLabel(pos); + //} + + //this->WaitCursorOff(); +} + +void QmitkMultiLabelManager::UpdateControls() +{ + bool hasWorkingData = m_Segmentation.IsNotNull(); + + auto labels = this->m_Controls->labelInspector->GetSelectedLabels(); + + m_Controls->labelSearchBox->setEnabled(hasWorkingData); + m_Controls->btnAddGroup->setEnabled(hasWorkingData); + m_Controls->btnAddInstance->setEnabled(hasWorkingData && labels.size()==1); + m_Controls->btnAddLabel->setEnabled(hasWorkingData); + m_Controls->btnLoadPreset->setEnabled(hasWorkingData); + m_Controls->btnRemoveGroup->setEnabled(hasWorkingData && !labels.empty() && m_Segmentation->GetNumberOfLayers()>1); + m_Controls->btnRemoveLabel->setEnabled(hasWorkingData && !labels.empty()); + m_Controls->btnSavePreset->setEnabled(hasWorkingData); + + if (!hasWorkingData) + return; + + QStringListModel *completeModel = dynamic_cast(m_Completer->model()); + completeModel->setStringList(GetLabelStringList()); +} + +void QmitkMultiLabelManager::OnCreateCroppedMask(bool) +{ + mitk::ToolManagerProvider::GetInstance()->GetToolManager()->ActivateTool(-1); + + mitk::Image::Pointer maskImage; + auto currentLabel = this->m_Segmentation->GetLabel(this->GetSelectedLabels().front()); + auto pixelValue = currentLabel->GetValue(); + try + { + this->WaitCursorOn(); + + mitk::AutoCropImageFilter::Pointer cropFilter = mitk::AutoCropImageFilter::New(); + cropFilter->SetInput(this->m_Segmentation->CreateLabelMask(pixelValue)); + cropFilter->SetBackgroundValue(0); + cropFilter->SetMarginFactor(1.15); + cropFilter->Update(); + + maskImage = cropFilter->GetOutput(); + + this->WaitCursorOff(); + } + catch (mitk::Exception &e) + { + this->WaitCursorOff(); + MITK_ERROR << "Exception caught: " << e.GetDescription(); + QMessageBox::information(this, "Create Mask", "Could not create a mask out of the selected label.\n"); + return; + } + + if (maskImage.IsNull()) + { + QMessageBox::information(this, "Create Mask", "Could not create a mask out of the selected label.\n"); + return; + } + + mitk::DataNode::Pointer maskNode = mitk::DataNode::New(); + std::string name = currentLabel->GetName(); + name += "-mask"; + maskNode->SetName(name); + maskNode->SetData(maskImage); + maskNode->SetBoolProperty("binary", true); + maskNode->SetBoolProperty("outline binary", true); + maskNode->SetBoolProperty("outline binary shadow", true); + maskNode->SetFloatProperty("outline width", 2.0); + maskNode->SetColor(currentLabel->GetColor()); + maskNode->SetOpacity(1.0); + + m_DataStorage->Add(maskNode, this->m_SegmentationNode); +} + +void QmitkMultiLabelManager::OnCreateMask(bool /*triggered*/) +{ + mitk::ToolManagerProvider::GetInstance()->GetToolManager()->ActivateTool(-1); + + auto currentLabel = this->m_Segmentation->GetLabel(this->GetSelectedLabels().front()); + auto pixelValue = currentLabel->GetValue(); + mitk::Image::Pointer maskImage; + try + { + this->WaitCursorOn(); + maskImage = m_Segmentation->CreateLabelMask(pixelValue); + this->WaitCursorOff(); + } + catch (mitk::Exception &e) + { + this->WaitCursorOff(); + MITK_ERROR << "Exception caught: " << e.GetDescription(); + QMessageBox::information(this, "Create Mask", "Could not create a mask out of the selected label.\n"); + return; + } + + if (maskImage.IsNull()) + { + QMessageBox::information(this, "Create Mask", "Could not create a mask out of the selected label.\n"); + return; + } + + mitk::DataNode::Pointer maskNode = mitk::DataNode::New(); + std::string name = currentLabel->GetName(); + name += "-mask"; + maskNode->SetName(name); + maskNode->SetData(maskImage); + maskNode->SetBoolProperty("binary", true); + maskNode->SetBoolProperty("outline binary", true); + maskNode->SetBoolProperty("outline binary shadow", true); + maskNode->SetFloatProperty("outline width", 2.0); + maskNode->SetColor(currentLabel->GetColor()); + maskNode->SetOpacity(1.0); + + m_DataStorage->Add(maskNode, m_SegmentationNode); +} + +void QmitkMultiLabelManager::OnCreateSmoothedSurface(bool /*triggered*/) +{ + mitk::ToolManagerProvider::GetInstance()->GetToolManager()->ActivateTool(-1); + + auto currentLabel = this->m_Segmentation->GetLabel(this->GetSelectedLabels().front()); + auto pixelValue = currentLabel->GetValue(); + + mitk::LabelSetImageToSurfaceThreadedFilter::Pointer surfaceFilter = mitk::LabelSetImageToSurfaceThreadedFilter::New(); + + itk::SimpleMemberCommand::Pointer successCommand = + itk::SimpleMemberCommand::New(); + successCommand->SetCallbackFunction(this, &QmitkMultiLabelManager::OnThreadedCalculationDone); + surfaceFilter->AddObserver(mitk::ResultAvailable(), successCommand); + + itk::SimpleMemberCommand::Pointer errorCommand = + itk::SimpleMemberCommand::New(); + errorCommand->SetCallbackFunction(this, &QmitkMultiLabelManager::OnThreadedCalculationDone); + surfaceFilter->AddObserver(mitk::ProcessingError(), errorCommand); + + mitk::DataNode::Pointer groupNode = m_SegmentationNode; + surfaceFilter->SetPointerParameter("Group node", groupNode); + surfaceFilter->SetPointerParameter("Input", m_Segmentation); + surfaceFilter->SetParameter("RequestedLabel", pixelValue); + surfaceFilter->SetParameter("Smooth", true); + surfaceFilter->SetDataStorage(*m_DataStorage); + + mitk::StatusBar::GetInstance()->DisplayText("Surface creation is running in background..."); + + try + { + surfaceFilter->StartAlgorithm(); + } + catch (mitk::Exception &e) + { + MITK_ERROR << "Exception caught: " << e.GetDescription(); + QMessageBox::information(this, + "Create Surface", + "Could not create a surface mesh out of the selected label. See error log for details.\n"); + } +} + +void QmitkMultiLabelManager::OnCreateDetailedSurface(bool /*triggered*/) +{ + mitk::ToolManagerProvider::GetInstance()->GetToolManager()->ActivateTool(-1); + + auto currentLabel = this->m_Segmentation->GetLabel(this->GetSelectedLabels().front()); + auto pixelValue = currentLabel->GetValue(); + + mitk::LabelSetImageToSurfaceThreadedFilter::Pointer surfaceFilter = mitk::LabelSetImageToSurfaceThreadedFilter::New(); + + itk::SimpleMemberCommand::Pointer successCommand = + itk::SimpleMemberCommand::New(); + successCommand->SetCallbackFunction(this, &QmitkMultiLabelManager::OnThreadedCalculationDone); + surfaceFilter->AddObserver(mitk::ResultAvailable(), successCommand); + + itk::SimpleMemberCommand::Pointer errorCommand = + itk::SimpleMemberCommand::New(); + errorCommand->SetCallbackFunction(this, &QmitkMultiLabelManager::OnThreadedCalculationDone); + surfaceFilter->AddObserver(mitk::ProcessingError(), errorCommand); + + mitk::DataNode::Pointer groupNode = m_SegmentationNode; + surfaceFilter->SetPointerParameter("Group node", groupNode); + surfaceFilter->SetPointerParameter("Input", m_Segmentation); + surfaceFilter->SetParameter("RequestedLabel", pixelValue); + surfaceFilter->SetParameter("Smooth", false); + surfaceFilter->SetDataStorage(*m_DataStorage); + + mitk::StatusBar::GetInstance()->DisplayText("Surface creation is running in background..."); + + try + { + surfaceFilter->StartAlgorithm(); + } + catch (mitk::Exception &e) + { + MITK_ERROR << "Exception caught: " << e.GetDescription(); + QMessageBox::information(this, + "Create Surface", + "Could not create a surface mesh out of the selected label. See error log for details.\n"); + } +} + + +void QmitkMultiLabelManager::OnSavePreset() +{ + +} + +void QmitkMultiLabelManager::OnLoadPreset() +{ + +} + +void QmitkMultiLabelManager::OnGoToLabel(mitk::LabelSetImage::LabelValueType label, const mitk::Point3D& position) +{ + emit GoToLabel(label, position); +} + + +void QmitkMultiLabelManager::WaitCursorOn() +{ + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); +} + +void QmitkMultiLabelManager::WaitCursorOff() +{ + this->RestoreOverrideCursor(); +} + +void QmitkMultiLabelManager::RestoreOverrideCursor() +{ + QApplication::restoreOverrideCursor(); +} + +void QmitkMultiLabelManager::OnThreadedCalculationDone() +{ + mitk::StatusBar::GetInstance()->Clear(); +} diff --git a/Modules/SegmentationUI/Qmitk/QmitkMultiLabelManager.h b/Modules/SegmentationUI/Qmitk/QmitkMultiLabelManager.h new file mode 100644 index 0000000000..beecf2168b --- /dev/null +++ b/Modules/SegmentationUI/Qmitk/QmitkMultiLabelManager.h @@ -0,0 +1,147 @@ +/*============================================================================ + +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 QmitkMultiLabelManager_h +#define QmitkMultiLabelManager_h + +#include + +#include +#include +#include + +#include + +class QmitkDataStorageComboBox; +class QCompleter; + +namespace Ui +{ + class QmitkMultiLabelManagerControls; +} + +namespace mitk +{ + class DataStorage; +} + +class MITKSEGMENTATIONUI_EXPORT QmitkMultiLabelManager : public QWidget +{ + Q_OBJECT + +public: + explicit QmitkMultiLabelManager(QWidget *parent = nullptr); + ~QmitkMultiLabelManager() override; + + + using LabelValueVectorType = mitk::LabelSetImage::LabelValueVectorType; + + /** + * @brief Retrieve the currently selected labels (equals the last CurrentSelectionChanged values). + */ + LabelValueVectorType GetSelectedLabels() const; + +Q_SIGNALS: + /** + * @brief A signal that will be emitted if the selected labels change. + * + * @param labels A list of label values that are now selected. + */ + void CurrentSelectionChanged(LabelValueVectorType labels); + + void GoToLabel(mitk::LabelSetImage::LabelValueType label, const mitk::Point3D&); + +public Q_SLOTS: + + /** + * @brief Transform a list label values into a model selection and set this as a new selection of the view + * + * @param selectedNodes A list of data nodes that should be newly selected. + */ + void SetSelectedLabels(const LabelValueVectorType& selectedLabels); + void SetSelectedLabel(mitk::LabelSetImage::LabelValueType selectedLabel); + + /** + * @brief Sets the segmentation that will be used /monitored by the widget. + * + * @param segmentation A pointer to the segmentation to set. + */ + void SetMultiLabelSegmentation(mitk::LabelSetImage* segmentation); + + void SetDataStorage(mitk::DataStorage *storage); + + void UpdateControls(); + + virtual void setEnabled(bool enabled); + + QStringList &GetLabelStringList(); + + void SetDefaultLabelNaming(bool defaultLabelNaming); + +private Q_SLOTS: + + // LabelSet dependent + + void OnRenameLabelShortcutActivated(); + + // reaction to "returnPressed" signal from ... + void OnSearchLabel(); + // reaction to the change of labels. If multiple labels are selected, it is ignored. + void OnSelectedLabelChanged(LabelValueVectorType labels); + + // LabelSetImage Dependet + void OnCreateDetailedSurface(bool); + void OnCreateSmoothedSurface(bool); + // reaction to the signal "createMask" from QmitkLabelSetTableWidget + void OnCreateMask(bool); + // reaction to the signal "createCroppedMask" from QmitkLabelSetTableWidget + void OnCreateCroppedMask(bool); + + void OnSavePreset(); + void OnLoadPreset(); + + void OnGoToLabel(mitk::LabelSetImage::LabelValueType label, const mitk::Point3D& position); + +private: + enum TableColumns + { + NAME_COL = 0, + LOCKED_COL, + COLOR_COL, + VISIBLE_COL + }; + + void WaitCursorOn(); + + void WaitCursorOff(); + + void RestoreOverrideCursor(); + + void OnThreadedCalculationDone(); + + Ui::QmitkMultiLabelManagerControls* m_Controls; + + QCompleter *m_Completer; + + QStringList m_OrganColors; + + QStringList m_LabelStringList; + + bool m_ProcessingManualSelection; + + mitk::LabelSetImage::Pointer m_Segmentation; + mitk::DataNode::Pointer m_SegmentationNode; + mitk::DataStorage* m_DataStorage; + +}; + +#endif diff --git a/Modules/SegmentationUI/Qmitk/QmitkMultiLabelManagerControls.ui b/Modules/SegmentationUI/Qmitk/QmitkMultiLabelManagerControls.ui new file mode 100644 index 0000000000..4c4f694cbb --- /dev/null +++ b/Modules/SegmentationUI/Qmitk/QmitkMultiLabelManagerControls.ui @@ -0,0 +1,201 @@ + + + QmitkMultiLabelManagerControls + + + + 0 + 0 + 312 + 366 + + + + + 0 + 0 + + + + + + + + 6 + + + 6 + + + 6 + + + 6 + + + + + + + Add a new label to the current group. + + + ... + + + true + + + + + + + Add a new instance of the current label. + + + ... + + + + 32 + 32 + + + + true + + + + + + + Remove the current label. + + + ... + + + true + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 40 + 20 + + + + + + + + Add a new group. + + + ... + + + true + + + + + + + Remove the current group (including all labels). + + + ... + + + true + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + Save the labels preset. + + + ... + + + true + + + + + + + Load a label preset from file. + + + ... + + + true + + + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + + + + + ctkSearchBox + QLineEdit +
ctkSearchBox.h
+
+ + QmitkMultiLabelInspector + QWidget +
QmitkMultiLabelInspector.h
+
+
+ + +
diff --git a/Modules/SegmentationUI/files.cmake b/Modules/SegmentationUI/files.cmake index 37a210ef5d..649fc755b7 100644 --- a/Modules/SegmentationUI/files.cmake +++ b/Modules/SegmentationUI/files.cmake @@ -1,110 +1,113 @@ set(CPP_FILES Qmitk/QmitkSegWithPreviewToolGUIBase.cpp Qmitk/QmitkMultiLabelSegWithPreviewToolGUIBase.cpp Qmitk/QmitkBinaryThresholdToolGUIBase.cpp Qmitk/QmitkBinaryThresholdToolGUI.cpp Qmitk/QmitkBinaryThresholdULToolGUI.cpp Qmitk/QmitkConfirmSegmentationDialog.cpp Qmitk/QmitkCopyToClipBoardDialog.cpp Qmitk/QmitkDrawPaintbrushToolGUI.cpp Qmitk/QmitkErasePaintbrushToolGUI.cpp Qmitk/QmitkEditableContourToolGUIBase.cpp Qmitk/QmitkGrowCutToolGUI.cpp Qmitk/QmitkLiveWireTool2DGUI.cpp Qmitk/QmitkLassoToolGUI.cpp Qmitk/QmitkOtsuTool3DGUI.cpp Qmitk/QmitkPaintbrushToolGUI.cpp Qmitk/QmitkPickingToolGUI.cpp Qmitk/QmitkSlicesInterpolator.cpp Qmitk/QmitkToolGUI.cpp Qmitk/QmitkToolGUIArea.cpp Qmitk/QmitkToolSelectionBox.cpp Qmitk/QmitknnUNetFolderParser.cpp Qmitk/QmitknnUNetToolGUI.cpp Qmitk/QmitknnUNetWorker.cpp Qmitk/QmitknnUNetGPU.cpp Qmitk/QmitkSurfaceStampWidget.cpp Qmitk/QmitkMaskStampWidget.cpp Qmitk/QmitkStaticDynamicSegmentationDialog.cpp Qmitk/QmitkSimpleLabelSetListWidget.cpp Qmitk/QmitkSegmentationTaskListWidget.cpp Qmitk/QmitkMultiLabelInspector.cpp + Qmitk/QmitkMultiLabelManager.cpp Qmitk/QmitkMultiLabelTreeModel.cpp Qmitk/QmitkMultiLabelTreeView.cpp Qmitk/QmitkLabelColorItemDelegate.cpp Qmitk/QmitkLabelToggleItemDelegate.cpp SegmentationUtilities/QmitkBooleanOperationsWidget.cpp SegmentationUtilities/QmitkContourModelToImageWidget.cpp SegmentationUtilities/QmitkImageMaskingWidget.cpp SegmentationUtilities/QmitkMorphologicalOperationsWidget.cpp SegmentationUtilities/QmitkSurfaceToImageWidget.cpp SegmentationUtilities/QmitkSegmentationUtilityWidget.cpp SegmentationUtilities/QmitkDataSelectionWidget.cpp ) set(MOC_H_FILES Qmitk/QmitkSegWithPreviewToolGUIBase.h Qmitk/QmitkMultiLabelSegWithPreviewToolGUIBase.h Qmitk/QmitkBinaryThresholdToolGUIBase.h Qmitk/QmitkBinaryThresholdToolGUI.h Qmitk/QmitkBinaryThresholdULToolGUI.h Qmitk/QmitkConfirmSegmentationDialog.h Qmitk/QmitkCopyToClipBoardDialog.h Qmitk/QmitkDrawPaintbrushToolGUI.h Qmitk/QmitkErasePaintbrushToolGUI.h Qmitk/QmitkEditableContourToolGUIBase.h Qmitk/QmitkGrowCutToolGUI.h Qmitk/QmitkLiveWireTool2DGUI.h Qmitk/QmitkLassoToolGUI.h Qmitk/QmitkOtsuTool3DGUI.h Qmitk/QmitkPaintbrushToolGUI.h Qmitk/QmitkPickingToolGUI.h Qmitk/QmitkSlicesInterpolator.h Qmitk/QmitkToolGUI.h Qmitk/QmitkToolGUIArea.h Qmitk/QmitkToolSelectionBox.h Qmitk/QmitknnUNetFolderParser.h Qmitk/QmitknnUNetToolGUI.h Qmitk/QmitknnUNetGPU.h Qmitk/QmitknnUNetWorker.h Qmitk/QmitknnUNetEnsembleLayout.h Qmitk/QmitkSurfaceStampWidget.h Qmitk/QmitkMaskStampWidget.h Qmitk/QmitkStaticDynamicSegmentationDialog.h Qmitk/QmitkSimpleLabelSetListWidget.h Qmitk/QmitkSegmentationTaskListWidget.h Qmitk/QmitkMultiLabelInspector.h + Qmitk/QmitkMultiLabelManager.h Qmitk/QmitkMultiLabelTreeModel.h Qmitk/QmitkMultiLabelTreeView.h Qmitk/QmitkLabelColorItemDelegate.h Qmitk/QmitkLabelToggleItemDelegate.h SegmentationUtilities/QmitkBooleanOperationsWidget.h SegmentationUtilities/QmitkContourModelToImageWidget.h SegmentationUtilities/QmitkImageMaskingWidget.h SegmentationUtilities/QmitkMorphologicalOperationsWidget.h SegmentationUtilities/QmitkSurfaceToImageWidget.h SegmentationUtilities/QmitkSegmentationUtilityWidget.h SegmentationUtilities/QmitkDataSelectionWidget.h ) set(UI_FILES Qmitk/QmitkConfirmSegmentationDialog.ui Qmitk/QmitkGrowCutToolWidgetControls.ui Qmitk/QmitkOtsuToolWidgetControls.ui Qmitk/QmitkSurfaceStampWidgetGUIControls.ui Qmitk/QmitkMaskStampWidgetGUIControls.ui Qmitk/QmitknnUNetToolGUIControls.ui Qmitk/QmitkEditableContourToolGUIControls.ui Qmitk/QmitkSegmentationTaskListWidget.ui Qmitk/QmitkMultiLabelInspectorControls.ui + Qmitk/QmitkMultiLabelManagerControls.ui SegmentationUtilities/QmitkBooleanOperationsWidgetControls.ui SegmentationUtilities/QmitkContourModelToImageWidgetControls.ui SegmentationUtilities/QmitkImageMaskingWidgetControls.ui SegmentationUtilities/QmitkMorphologicalOperationsWidgetControls.ui SegmentationUtilities/QmitkSurfaceToImageWidgetControls.ui SegmentationUtilities/QmitkDataSelectionWidgetControls.ui ) set(QRC_FILES resources/SegmentationUI.qrc )