Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
QmitkDataStorageTreeModelInternalItem.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 
16 #include <QmitkCustomVariants.h>
17 #include <QmitkEnums.h>
18 #include <QmitkMimeTypes.h>
19 
21  : m_Parent(_Parent), m_DataNode(_DataNode)
22 {
23  if (m_Parent)
24  m_Parent->AddChild(this);
25 }
26 
28 {
29  if (m_Parent)
30  m_Parent->RemoveChild(this);
31 }
32 
34 {
35  while (m_Children.size() > 0)
36  delete m_Children.back();
37 
38  delete this;
39 }
40 
42 {
44  if (_DataNode)
45  {
46  if (m_DataNode == _DataNode)
47  item = const_cast<QmitkDataStorageTreeModelInternalItem *>(this);
48  else
49  {
50  for (std::vector<QmitkDataStorageTreeModelInternalItem *>::const_iterator it = m_Children.begin(); it != m_Children.end(); ++it)
51  {
52  if (item)
53  break;
54  item = (*it)->Find(_DataNode);
55  }
56  }
57  }
58  return item;
59 }
60 
62 {
63  std::vector<QmitkDataStorageTreeModelInternalItem *>::const_iterator it = std::find(m_Children.begin(), m_Children.end(), item);
64  return it != m_Children.end() ? std::distance(m_Children.begin(), it) : -1;
65 }
66 
68 {
69  return (m_Children.size() > 0 && index >= 0 && index < (int)m_Children.size()) ? m_Children.at(index) : nullptr;
70 }
71 
73 {
74  this->InsertChild(item);
75 }
76 
78 {
79  std::vector<QmitkDataStorageTreeModelInternalItem *>::iterator it = std::find(m_Children.begin(), m_Children.end(), item);
80  if (it != m_Children.end())
81  {
82  m_Children.erase(it);
83  item->SetParent(nullptr);
84  }
85 }
86 
88 {
89  return m_Children.size();
90 }
91 
93 {
94  if (m_Parent)
95  return m_Parent->IndexOfChild(this);
96 
97  return 0;
98 }
99 
101 {
102  return m_Parent;
103 }
104 
106 {
107  return m_DataNode.Lock();
108 }
109 
111 {
112  std::vector<QmitkDataStorageTreeModelInternalItem *>::iterator it = std::find(m_Children.begin(), m_Children.end(), item);
113  if (it == m_Children.end())
114  {
115  if (m_Children.size() > 0 && index >= 0 && index < (int)m_Children.size())
116  {
117  it = m_Children.begin();
118  std::advance(it, index);
119  m_Children.insert(it, item);
120  }
121  else
122  m_Children.push_back(item);
123 
124  // add parent if necessary
125  if (item->GetParent() != this)
126  item->SetParent(this);
127  }
128 }
129 
130 std::vector<QmitkDataStorageTreeModelInternalItem *> QmitkDataStorageTreeModelInternalItem::GetChildren() const
131 {
132  return m_Children;
133 }
134 
136 {
137  m_Parent = _Parent;
138  if (m_Parent)
139  m_Parent->AddChild(this);
140 }
int IndexOfChild(const QmitkDataStorageTreeModelInternalItem *item) const
itk::SmartPointer< T > Lock() const
void AddChild(QmitkDataStorageTreeModelInternalItem *item)
QmitkDataStorageTreeModelInternalItem * m_Parent
QmitkDataStorageTreeModelInternalItem * GetChild(int index) const
QmitkDataStorageTreeModelInternalItem * GetParent() const
QmitkDataStorageTreeModelInternalItem * Find(const mitk::DataNode *_DataNode) const
QmitkDataStorageTreeModelInternalItem(mitk::DataNode *_DataNode, QmitkDataStorageTreeModelInternalItem *_Parent=nullptr)
std::vector< QmitkDataStorageTreeModelInternalItem * > m_Children
std::vector< QmitkDataStorageTreeModelInternalItem * > GetChildren() const
Class for nodes of the DataTree.
Definition: mitkDataNode.h:57
void SetParent(QmitkDataStorageTreeModelInternalItem *_Parent)
Sets the parent on the QmitkDataStorageTreeModelInternalItem.
void InsertChild(QmitkDataStorageTreeModelInternalItem *item, int index=-1)
void RemoveChild(QmitkDataStorageTreeModelInternalItem *item)