Go to the documentation of this file.00001 #include "QmitkToolRoiDataSelectionBox.h"
00002 #include <mitkProperties.h>
00003 #include <QBoxLayout>
00004 #include <QLabel>
00005
00006 QmitkToolRoiDataSelectionBox::QmitkToolRoiDataSelectionBox(QWidget* parent, mitk::DataStorage* storage)
00007 :QWidget(parent),
00008 m_SelfCall(false),
00009 m_lastSelection(NULL),
00010 m_lastSelectedName(tr("none"))
00011 {
00012
00013 QBoxLayout* mainLayout = new QVBoxLayout(this);
00014 m_segmentationComboBox = new QComboBox(this);
00015 QLabel* label = new QLabel("region of interest:", this);
00016 m_boundingObjectWidget = new QmitkBoundingObjectWidget();
00017
00018 mainLayout->addWidget(label);
00019 mainLayout->addWidget(m_segmentationComboBox);
00020 mainLayout->addWidget(m_boundingObjectWidget);
00021
00022
00023 connect(m_segmentationComboBox, SIGNAL(activated(const QString&)), this, SLOT(OnRoiDataSelectionChanged(const QString&)) );
00024 connect(m_boundingObjectWidget, SIGNAL(BoundingObjectsChanged(const QString&)), this, SLOT(OnRoiDataSelectionChanged(const QString&)) );
00025
00026
00027 m_ToolManager = mitk::ToolManager::New(storage);
00028
00029
00030 m_ToolManager->RoiDataChanged += mitk::MessageDelegate<QmitkToolRoiDataSelectionBox> (this, &QmitkToolRoiDataSelectionBox::OnToolManagerRoiDataModified);
00031
00032 }
00033
00034 QmitkToolRoiDataSelectionBox::~QmitkToolRoiDataSelectionBox()
00035 {
00036 }
00037
00038 void QmitkToolRoiDataSelectionBox::SetDataStorage(mitk::DataStorage &storage)
00039 {
00040 m_ToolManager->SetDataStorage(storage);
00041 m_boundingObjectWidget->SetDataStorage(&storage);
00042 UpdateComboBoxData();
00043 }
00044
00045 mitk::DataStorage* QmitkToolRoiDataSelectionBox::GetDataStorage()
00046 {
00047 return m_ToolManager->GetDataStorage();
00048 }
00049
00050 void QmitkToolRoiDataSelectionBox::SetToolManager(mitk::ToolManager& manager)
00051 {
00052
00053 m_ToolManager->RoiDataChanged -= mitk::MessageDelegate<QmitkToolRoiDataSelectionBox> (this, &QmitkToolRoiDataSelectionBox::OnToolManagerRoiDataModified);
00054
00055 m_ToolManager = &manager;
00056
00057 m_ToolManager->RoiDataChanged += mitk::MessageDelegate<QmitkToolRoiDataSelectionBox> (this, &QmitkToolRoiDataSelectionBox::OnToolManagerRoiDataModified);
00058 }
00059
00060 mitk::ToolManager* QmitkToolRoiDataSelectionBox::GetToolManager()
00061 {
00062 return m_ToolManager;
00063 }
00064
00065 void QmitkToolRoiDataSelectionBox::OnToolManagerRoiDataModified()
00066 {
00067 if (m_SelfCall)
00068 return;
00069
00070 }
00071
00072 void QmitkToolRoiDataSelectionBox::OnRoiDataSelectionChanged(const QString& name)
00073 {
00074 if (name.compare(tr("")) == 0)
00075 return;
00076
00077 m_lastSelectedName = name;
00078 m_boundingObjectWidget->setEnabled(false);
00079 mitk::DataNode::Pointer selection = NULL;
00080
00081 if ( name.compare(tr("none"))==0);
00082 else if (name.compare(tr("bounding objects"))==0)
00083 {
00084 m_boundingObjectWidget->setEnabled(true);
00085 selection = m_boundingObjectWidget->GetAllBoundingObjects();
00086 }
00087 else
00088 {
00089 selection = m_ToolManager->GetDataStorage()->GetNamedNode(name.toLocal8Bit().data());
00090 }
00091
00092 if (selection == m_lastSelection)
00093 return;
00094
00095 m_lastSelection = selection;
00096 m_SelfCall = true;
00097 m_ToolManager->SetRoiData(selection);
00098 m_SelfCall = false;
00099 }
00100
00101 void QmitkToolRoiDataSelectionBox::UpdateComboBoxData()
00102 {
00103 m_segmentationComboBox->clear();
00104 m_segmentationComboBox->addItem(tr("none"));
00105 m_segmentationComboBox->insertSeparator(1);
00106
00107
00108
00109 mitk::NodePredicateProperty::Pointer isBinary= mitk::NodePredicateProperty::New("binary", mitk::BoolProperty::New(true));
00110 mitk::NodePredicateDataType::Pointer isImage= mitk::NodePredicateDataType::New("Image");
00111 mitk::NodePredicateProperty::Pointer isHelperObject= mitk::NodePredicateProperty::New("helper object", mitk::BoolProperty::New(true));
00112 mitk::NodePredicateNot::Pointer isNotHelperObject = mitk::NodePredicateNot::New(isHelperObject);
00113 mitk::NodePredicateAnd::Pointer segmentationPredicate = mitk::NodePredicateAnd::New(isImage, isBinary, isNotHelperObject);
00114
00115 mitk::DataStorage::SetOfObjects::ConstPointer allSegmentations = m_ToolManager->GetDataStorage()->GetSubset(segmentationPredicate);
00116 QStringList names;
00117
00118 for (mitk::DataStorage::SetOfObjects::const_iterator it = allSegmentations->begin(); it != allSegmentations->end(); ++it)
00119 {
00120 mitk::DataNode::Pointer node = *it;
00121
00122 QString name = QString::fromLocal8Bit(node->GetName().c_str());
00123 names.append(name);
00124 }
00125 if (names.length() > 0)
00126 {
00127 m_segmentationComboBox->addItems(names);
00128 m_segmentationComboBox->insertSeparator(names.length()+2);
00129 }
00130
00131 m_segmentationComboBox->addItem(tr("bounding objects"));
00132
00133 int id = m_segmentationComboBox->findText(m_lastSelectedName);
00134 if (id < 0)
00135 this->OnRoiDataSelectionChanged(tr("none"));
00136 else
00137 m_segmentationComboBox->setCurrentIndex(id);
00138 }
00139
00140 void QmitkToolRoiDataSelectionBox::setEnabled(bool flag)
00141 {
00142 if (!flag)
00143 this->OnRoiDataSelectionChanged(tr("none"));
00144 m_segmentationComboBox->setEnabled(flag);
00145 }