Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
QmitkToolReferenceDataSelectionBox.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 
15 //#include "QmitkPropertyListPopup.h"
16 
17 #include "mitkNodePredicateAnd.h"
20 #include "mitkNodePredicateNot.h"
21 #include "mitkNodePredicateOr.h"
23 
24 #include "mitkRenderingManager.h"
25 
27 
29  : QWidget(parent), m_SelfCall(false), m_DisplayMode(ListDataIfAnyToolMatches), m_ToolGroupsForFiltering("default")
30 {
32 
33  m_Layout = new QVBoxLayout(this);
34  this->setLayout(m_Layout);
35 
38 
40  SIGNAL(OnSelectionChanged(const mitk::DataNode *)),
41  this,
43 
46 }
47 
49 {
52 }
53 
55 {
56  return m_ToolManager->GetDataStorage();
57 }
58 
60 {
61  m_ToolManager->SetDataStorage(storage);
62 }
63 
65 {
67 
69 }
70 
72 {
73  return m_ToolManager;
74 }
75 
77  mitk::ToolManager &newManager) // no nullptr pointer allowed here, a manager is required
78 {
81 
82  m_ToolManager = &newManager;
83 
84  m_ToolManager->ReferenceDataChanged += mitk::MessageDelegate<QmitkToolReferenceDataSelectionBox>(
86 
88 }
89 
91 {
94 }
95 
97 {
98  emit ReferenceNodeSelected(selectedNode);
99 
100  m_SelfCall = true;
101  m_ToolManager->SetReferenceData(const_cast<mitk::DataNode *>(selectedNode)); // maybe nullptr
102  m_SelfCall = false;
103 
105 }
106 
108 {
109  mitk::DataNode *selectedNode = m_ToolManager->GetReferenceData(0);
110 
111  mitk::DataStorage::SetOfObjects::ConstPointer allImageNodes = GetAllPossibleReferenceImages();
112  for (mitk::DataStorage::SetOfObjects::const_iterator nodeIter = allImageNodes->begin();
113  nodeIter != allImageNodes->end();
114  ++nodeIter)
115  {
116  mitk::DataNode *currentNode = (*nodeIter).GetPointer();
117 
118  currentNode->SetVisibility(currentNode ==
119  selectedNode); // only the selected one is visible, everything else is invisible
120  }
121 
123 }
124 
126 {
127  if (m_SelfCall)
128  return;
129 
130  const mitk::DataNode *node = m_ToolManager->GetReferenceData(0);
131  emit ReferenceNodeSelected(node);
132 
134 }
135 
137 {
146  std::vector<mitk::NodePredicateBase::ConstPointer> m_Predicates;
147  m_Predicates.clear();
148  mitk::NodePredicateBase::ConstPointer completePredicate = nullptr;
149 
150  const mitk::ToolManager::ToolVectorTypeConst allTools = m_ToolManager->GetTools();
151 
152  for (mitk::ToolManager::ToolVectorTypeConst::const_iterator iter = allTools.begin(); iter != allTools.end(); ++iter)
153  {
154  const mitk::Tool *tool = *iter;
155 
156  if ((m_ToolGroupsForFiltering.empty()) || (m_ToolGroupsForFiltering.find(tool->GetGroup()) != std::string::npos) ||
157  (m_ToolGroupsForFiltering.find(tool->GetName()) != std::string::npos))
158  {
159  if (completePredicate)
160  {
162  {
163  m_Predicates.push_back(
164  mitk::NodePredicateOr::New(completePredicate, tool->GetReferenceDataPreference()).GetPointer());
165  }
166  else
167  {
168  m_Predicates.push_back(
169  mitk::NodePredicateAnd::New(completePredicate, tool->GetReferenceDataPreference()).GetPointer());
170  }
171  completePredicate = m_Predicates.back();
172  }
173  else
174  {
175  completePredicate = tool->GetReferenceDataPreference();
176  }
177  }
178  }
179 
180  return completePredicate;
181 }
182 
183 mitk::DataStorage::SetOfObjects::ConstPointer QmitkToolReferenceDataSelectionBox::GetAllPossibleReferenceImages()
184 {
185  mitk::DataStorage *dataStorage = m_ToolManager->GetDataStorage();
186  if (!dataStorage)
187  {
188  return mitk::DataStorage::SetOfObjects::New().GetPointer();
189  }
190 
192 
193  mitk::DataStorage::SetOfObjects::ConstPointer allObjects;
194 
198  if (completePredicate.IsNotNull())
199  {
200  allObjects = dataStorage->GetSubset(completePredicate);
201  }
202  else
203  {
204  allObjects = dataStorage->GetAll();
205  }
206 
208 
209  for (mitk::DataStorage::SetOfObjects::const_iterator objectIter = allObjects->begin();
210  objectIter != allObjects->end();
211  ++objectIter)
212  {
213  mitk::DataNode *node = (*objectIter).GetPointer();
214  resultVector.push_back(node);
215  }
216 
217  mitk::DataStorage::SetOfObjects::ConstPointer sceneImages = dataStorage->GetSubset(completePredicate);
218  return sceneImages;
219 }
220 
222 {
223  m_ToolGroupsForFiltering = groups;
225 }
226 
228 {
229  if (m_DisplayMode != mode)
230  {
231  m_DisplayMode = mode;
233  }
234 }
virtual const char * GetName() const =0
Returns the name of this tool. Make it short!
std::vector< Tool::ConstPointer > ToolVectorTypeConst
virtual const char * GetGroup() const
Name of a group.
Definition: mitkTool.cpp:108
mitk::NodePredicateBase::ConstPointer GetAllPossibleReferenceImagesPredicate()
Base class of all tools used by mitk::ToolManager.
Definition: mitkTool.h:86
Data management class that handles &#39;was created by&#39; relations.
static Pointer New()
void Initialize(mitk::DataStorage *)
initialization with a data storage object
void SetVisibility(bool visible, const mitk::BaseRenderer *renderer=nullptr, const char *propertyKey="visible")
Convenience method for setting visibility properties (instances of BoolProperty)
Displays all or a subset (defined by a predicate) of nodes of the Data Storage.
std::vector< DataNode * > DataVectorType
static Pointer New()
virtual mitk::ToolManager * GetToolManager()
Returns ToolManager object.
void SetPredicate(const mitk::NodePredicateBase *predicate)
Set the predicate for this ComboBox. (QmitkDataStorageComboBox is now owner of the predicate) ...
void SetToolGroupsForFiltering(const std::string &groups)
No brief description.
virtual SetOfObjects::ConstPointer GetAll() const =0
returns a set of all data objects that are stored in the data storage
static RenderingManager * GetInstance()
SetOfObjects::ConstPointer GetSubset(const NodePredicateBase *condition) const
returns a set of data objects that meet the given condition(s)
virtual NodePredicateBase::ConstPointer GetReferenceDataPreference() const
Definition: mitkTool.cpp:200
void OnReferenceDataSelected(const mitk::DataNode *node)
mitk::DataStorage::SetOfObjects::ConstPointer GetAllPossibleReferenceImages()
DisplayMode
What kind of items should be displayed.
void SetDisplayMode(DisplayMode mode)
How the list contents is determined.
void ReferenceNodeSelected(const mitk::DataNode *)
void RequestUpdateAll(RequestType type=REQUEST_UPDATE_ALL)
Class for nodes of the DataTree.
Definition: mitkDataNode.h:57
static mitk::ToolManagerProvider * GetInstance()
Returns an instance of ToolManagerProvider service.
void SetDataStorage(mitk::DataStorage *dataStorage)
Set the DataStorage this ComboBox should listen to.
Manages and coordinates instances of mitk::Tool.