Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "QmitkNodeDescriptorManager.h"
00019 #include <memory>
00020 #include <mitkNodePredicateProperty.h>
00021 #include <mitkNodePredicateAnd.h>
00022 #include <mitkNodePredicateNot.h>
00023 #include <mitkNodePredicateDataType.h>
00024 #include <mitkProperties.h>
00025 #include <QList>
00026
00027
00028 QmitkNodeDescriptorManager* QmitkNodeDescriptorManager::GetInstance()
00029 {
00030 static QmitkNodeDescriptorManager _Instance;
00031 return &_Instance;
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 }
00042
00043 void QmitkNodeDescriptorManager::Initialize()
00044 {
00045
00046 mitk::NodePredicateDataType::Pointer isImage = mitk::NodePredicateDataType::New("Image");
00047 this->AddDescriptor(new QmitkNodeDescriptor(tr("Image"), QString(":/Qmitk/Images_48.png"), isImage, this));
00048
00049
00050 mitk::NodePredicateProperty::Pointer isBinary = mitk::NodePredicateProperty::New("binary", mitk::BoolProperty::New(true));
00051 mitk::NodePredicateAnd::Pointer isBinaryImage = mitk::NodePredicateAnd::New(isBinary, isImage);
00052 this->AddDescriptor(new QmitkNodeDescriptor(tr("ImageMask"), QString(":/Qmitk/Binaerbilder_48.png"), isBinaryImage, this));
00053
00054
00055 mitk::NodePredicateDataType::Pointer isPointSet = mitk::NodePredicateDataType::New("PointSet");
00056 this->AddDescriptor(new QmitkNodeDescriptor(tr("PointSet"), QString(":/Qmitk/PointSet_48.png"), isPointSet, this));
00057
00058
00059 mitk::NodePredicateDataType::Pointer isSurface = mitk::NodePredicateDataType::New("Surface");
00060 this->AddDescriptor(new QmitkNodeDescriptor(tr("Surface"), QString(":/Qmitk/Surface_48.png"), isSurface, this));
00061
00062
00063 mitk::NodePredicateNot::Pointer isNotBinary = mitk::NodePredicateNot::New(isBinary);
00064 mitk::NodePredicateAnd::Pointer isNoneBinaryImage = mitk::NodePredicateAnd::New(isImage, isNotBinary);
00065 this->AddDescriptor(new QmitkNodeDescriptor(tr("NoneBinaryImage"), QString(":/Qmitk/Images_48.png"), isNoneBinaryImage, this));
00066
00067 }
00068
00069 void QmitkNodeDescriptorManager::AddDescriptor( QmitkNodeDescriptor* _Descriptor )
00070 {
00071 _Descriptor->setParent(this);
00072 m_NodeDescriptors.push_back(_Descriptor);
00073 }
00074
00075 void QmitkNodeDescriptorManager::RemoveDescriptor( QmitkNodeDescriptor* _Descriptor )
00076 {
00077 int index = m_NodeDescriptors.indexOf(_Descriptor);
00078
00079 if(index != -1)
00080 {
00081 m_NodeDescriptors.removeAt(index);
00082 _Descriptor->setParent(0);
00083 delete _Descriptor;
00084 }
00085
00086 }
00087
00088 QmitkNodeDescriptor* QmitkNodeDescriptorManager::GetDescriptor( const mitk::DataNode* _Node ) const
00089 {
00090 QmitkNodeDescriptor* _Descriptor = m_UnknownDataNodeDescriptor;
00091
00092 for(QList<QmitkNodeDescriptor*>::const_iterator it = m_NodeDescriptors.begin(); it != m_NodeDescriptors.end(); ++it)
00093 {
00094 if((*it)->CheckNode(_Node))
00095 _Descriptor = *it;
00096 }
00097
00098 return _Descriptor;
00099 }
00100
00101 QmitkNodeDescriptor* QmitkNodeDescriptorManager::GetDescriptor( const QString& _ClassName ) const
00102 {
00103 QmitkNodeDescriptor* _Descriptor = 0;
00104
00105 for(QList<QmitkNodeDescriptor*>::const_iterator it = m_NodeDescriptors.begin(); it != m_NodeDescriptors.end(); ++it)
00106 {
00107 if((*it)->GetClassName() == _ClassName)
00108 _Descriptor = *it;
00109 }
00110
00111 return _Descriptor;
00112 }
00113 QList<QAction*> QmitkNodeDescriptorManager::GetActions( const mitk::DataNode* _Node ) const
00114 {
00115 QList<QAction*> actions = m_UnknownDataNodeDescriptor->GetBatchActions();
00116 actions.append(m_UnknownDataNodeDescriptor->GetActions());
00117 QmitkNodeDescriptor* lastDescriptor = m_UnknownDataNodeDescriptor;
00118
00119 for(QList<QmitkNodeDescriptor*>::const_iterator it = m_NodeDescriptors.begin(); it != m_NodeDescriptors.end(); ++it)
00120 {
00121 if((*it)->CheckNode(_Node))
00122 {
00123 actions.append(lastDescriptor->GetSeparator());
00124 lastDescriptor = *it;
00125 actions.append(lastDescriptor->GetBatchActions());
00126 actions.append(lastDescriptor->GetActions());
00127 }
00128 }
00129
00130 return actions;
00131 }
00132
00133 QList<QAction*> QmitkNodeDescriptorManager::GetActions( const std::vector<mitk::DataNode*>& _Nodes ) const
00134 {
00135 QList<QAction*> actions = m_UnknownDataNodeDescriptor->GetBatchActions();
00136 std::vector<QmitkNodeDescriptor*> nodeDescriptors;
00137 QmitkNodeDescriptor* lastDescriptor;
00138
00139
00140 for( std::vector<mitk::DataNode*>::const_iterator it = _Nodes.begin()
00141 ; it != _Nodes.end(); ++it)
00142 {
00143 lastDescriptor = this->GetDescriptor(*it);
00144 if(std::find(nodeDescriptors.begin(), nodeDescriptors.end(), lastDescriptor) == nodeDescriptors.end())
00145 nodeDescriptors.push_back(lastDescriptor);
00146 }
00147
00148 lastDescriptor = m_UnknownDataNodeDescriptor;
00149 for( std::vector<QmitkNodeDescriptor*>::const_iterator it = nodeDescriptors.begin()
00150 ; it != nodeDescriptors.end(); ++it)
00151 {
00152 actions.append(lastDescriptor->GetSeparator());
00153 lastDescriptor = *it;
00154 actions.append(lastDescriptor->GetBatchActions());
00155 }
00156
00157 return actions;
00158 }
00159
00160 QmitkNodeDescriptorManager::QmitkNodeDescriptorManager()
00161 : m_UnknownDataNodeDescriptor(new QmitkNodeDescriptor("Unknown", QString(":/Qmitk/DataTypeUnknown_48.png"), 0, this))
00162 {
00163 this->Initialize();
00164 }
00165
00166 QmitkNodeDescriptorManager::~QmitkNodeDescriptorManager()
00167 {
00168
00169
00170 }
00171
00172 QmitkNodeDescriptor* QmitkNodeDescriptorManager::GetUnknownDataNodeDescriptor() const
00173 {
00174 return m_UnknownDataNodeDescriptor;
00175 }