Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
QmitkNodeDescriptorManager.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
14 #include <memory>
15 #include <mitkNodePredicateAnd.h>
17 #include <mitkNodePredicateNot.h>
19 #include <mitkProperties.h>
20 
21 #include <QList>
22 #include <QSet>
23 
25 {
26  static QmitkNodeDescriptorManager instance;
27  return &instance;
28 }
29 
31 {
32  auto isImage = mitk::NodePredicateDataType::New("Image");
33  AddDescriptor(new QmitkNodeDescriptor(tr("Image"), QString(":/Qmitk/Images_48.png"), isImage, this));
34 
35  auto isMultiComponentImage = mitk::NodePredicateAnd::New(isImage, mitk::NodePredicateProperty::New("Image.Displayed Component"));
36  AddDescriptor(new QmitkNodeDescriptor(tr("MultiComponentImage"), QString(": / Qmitk / Images_48.png"), isMultiComponentImage, this));
37 
38  auto isBinary = mitk::NodePredicateProperty::New("binary", mitk::BoolProperty::New(true));
39  auto isBinaryImage = mitk::NodePredicateAnd::New(isBinary, isImage);
40  AddDescriptor(new QmitkNodeDescriptor(tr("ImageMask"), QString(":/Qmitk/Binaerbilder_48.png"), isBinaryImage, this));
41 
42  auto isLabelSetImage = mitk::NodePredicateDataType::New("LabelSetImage");
43  AddDescriptor(new QmitkNodeDescriptor(tr("LabelSetImage"), QString(":/Qmitk/LabelSetImage_48.png"), isLabelSetImage, this));
44 
45  auto isPointSet = mitk::NodePredicateDataType::New("PointSet");
46  AddDescriptor(new QmitkNodeDescriptor(tr("PointSet"), QString(":/Qmitk/PointSet_48.png"), isPointSet, this));
47 
48  auto isSurface = mitk::NodePredicateDataType::New("Surface");
49  AddDescriptor(new QmitkNodeDescriptor(tr("Surface"), QString(":/Qmitk/Surface_48.png"), isSurface, this));
50 
51  auto isNotBinary = mitk::NodePredicateNot::New(isBinary);
52  auto isNoneBinaryImage = mitk::NodePredicateAnd::New(isImage, isNotBinary);
53  AddDescriptor(new QmitkNodeDescriptor(tr("NoneBinaryImage"), QString(":/Qmitk/Images_48.png"), isNoneBinaryImage, this));
54 }
55 
57 {
58  descriptor->setParent(this);
59  m_NodeDescriptors.push_back(descriptor);
60 }
61 
63 {
64  int index = m_NodeDescriptors.indexOf(descriptor);
65 
66  if (index != -1)
67  {
68  m_NodeDescriptors.removeAt(index);
69  descriptor->setParent(nullptr);
70  delete descriptor;
71  }
72 }
73 
75 {
77 
78  for (QList<QmitkNodeDescriptor *>::const_iterator it = m_NodeDescriptors.begin(); it != m_NodeDescriptors.end(); ++it)
79  {
80  if ((*it)->CheckNode(node))
81  descriptor = *it;
82  }
83 
84  return descriptor;
85 }
86 
88 {
89  QmitkNodeDescriptor* descriptor = nullptr;
90 
91  if (className == "Unknown")
92  {
94  }
95  else
96  {
97  for (QList<QmitkNodeDescriptor *>::const_iterator it = m_NodeDescriptors.begin(); it != m_NodeDescriptors.end(); ++it)
98  {
99  if ((*it)->GetNameOfClass() == className)
100  descriptor = *it;
101  }
102  }
103 
104  return descriptor;
105 }
106 
107 QList<QAction*> QmitkNodeDescriptorManager::GetActions(const mitk::DataNode* node) const
108 {
109  QList<QAction*> actions = m_UnknownDataNodeDescriptor->GetBatchActions();
110  actions.append(m_UnknownDataNodeDescriptor->GetActions());
112 
113  for (QList<QmitkNodeDescriptor *>::const_iterator it = m_NodeDescriptors.begin(); it != m_NodeDescriptors.end(); ++it)
114  {
115  if ((*it)->CheckNode(node))
116  {
117  actions.append(lastDescriptor->GetSeparator());
118  lastDescriptor = *it;
119  actions.append(lastDescriptor->GetBatchActions());
120  actions.append(lastDescriptor->GetActions());
121  }
122  }
123 
124  return actions;
125 }
126 
127 QList<QAction*> QmitkNodeDescriptorManager::GetActions(const QList<mitk::DataNode::Pointer>& nodes) const
128 {
129  QList<QAction*> actions = m_UnknownDataNodeDescriptor->GetBatchActions();
131 
132  // find all descriptors for the nodes (unique)
133  QSet<QmitkNodeDescriptor*> nodeDescriptors;
134  for (const auto& node : nodes)
135  {
136  for (QList<QmitkNodeDescriptor*>::const_iterator it = m_NodeDescriptors.begin(); it != m_NodeDescriptors.end(); ++it)
137  {
138  if ((*it)->CheckNode(node))
139  {
140  nodeDescriptors.insert(*it);
141  }
142  }
143  }
144 
145  // add all actions for the found descriptors
146  for (const auto& nodeDescriptor : nodeDescriptors)
147  {
148  actions.append(lastDescriptor->GetSeparator());
149  lastDescriptor = nodeDescriptor;
150  actions.append(lastDescriptor->GetBatchActions());
151  }
152 
153  return actions;
154 }
155 
157  : m_UnknownDataNodeDescriptor(new QmitkNodeDescriptor("Unknown", QString(":/Qmitk/DataTypeUnknown_48.png"), nullptr, this))
158 {
159  Initialize();
160 }
161 
163 {
164  // delete m_UnknownDataNodeDescriptor;
165  // qDeleteAll(m_NodeDescriptors);
166 }
167 
169 {
171 }
virtual QAction * GetSeparator() const
static Pointer New()
QList< QmitkNodeDescriptor * > m_NodeDescriptors
Decorator class for mitk::DataNode.
void AddDescriptor(QmitkNodeDescriptor *descriptor)
virtual QList< QAction * > GetBatchActions() const
QmitkNodeDescriptorManager manages a set of QmitkNodeDescriptors.
static Pointer New()
QmitkNodeDescriptor * GetDescriptor(const mitk::DataNode *node) const
static Pointer New(const mitk::NodePredicateBase *_arg)
void RemoveDescriptor(QmitkNodeDescriptor *descriptor)
static Pointer New(const char *_arg)
static Pointer New(const char *_arg)
virtual QList< QAction * > GetActions() const
QmitkNodeDescriptor * GetUnknownDataNodeDescriptor() const
QList< QAction * > GetActions(const mitk::DataNode *node) const
QmitkNodeDescriptor * m_UnknownDataNodeDescriptor
static QmitkNodeDescriptorManager * GetInstance()
Class for nodes of the DataTree.
Definition: mitkDataNode.h:57