25 ClassImp(TEveSelection);
30 TEveSelection::TEveSelection(
const char* n,
const char* t) :
31 TEveElementList(n, t),
32 fPickToSelect (kPS_Projectable),
36 fSelElement = &TEveElement::SelectElement;
37 fIncImpSelElement = &TEveElement::IncImpliedSelected;
38 fDecImpSelElement = &TEveElement::DecImpliedSelected;
44 void TEveSelection::SetHighlightMode()
50 fPickToSelect = kPS_Projectable;
53 fSelElement = &TEveElement::HighlightElement;
54 fIncImpSelElement = &TEveElement::IncImpliedHighlighted;
55 fDecImpSelElement = &TEveElement::DecImpliedHighlighted;
62 void TEveSelection::DoElementSelect(TEveSelection::SelMap_i entry)
64 TEveElement *el = entry->first;
65 Set_t &set = entry->second;
67 (el->*fSelElement)(kTRUE);
68 el->FillImpliedSelectedSet(set);
69 for (Set_i i = set.begin(); i != set.end(); ++i)
70 ((*i)->*fIncImpSelElement)();
77 void TEveSelection::DoElementUnselect(TEveSelection::SelMap_i entry)
79 TEveElement *el = entry->first;
80 Set_t &set = entry->second;
82 for (Set_i i = set.begin(); i != set.end(); ++i)
83 ((*i)->*fDecImpSelElement)();
85 (el->*fSelElement)(kFALSE);
92 Bool_t TEveSelection::AcceptElement(TEveElement* el)
94 return el !=
this && fImpliedSelected.find(el) == fImpliedSelected.end() &&
95 el->IsA()->InheritsFrom(TEveSelection::Class()) == kFALSE;
101 void TEveSelection::AddElement(TEveElement* el)
103 TEveElementList::AddElement(el);
105 SelMap_i i = fImpliedSelected.insert(std::make_pair(el, Set_t())).first;
117 void TEveSelection::RemoveElement(TEveElement* el)
119 TEveElementList::RemoveElement(el);
120 SelectionRemoved(el);
126 void TEveSelection::RemoveElementLocal(TEveElement* el)
128 SelMap_i i = fImpliedSelected.find(el);
130 if (i != fImpliedSelected.end())
134 DoElementUnselect(i);
136 fImpliedSelected.erase(i);
140 Warning(
"TEveSelection::RemoveElementLocal",
"element not found in map.");
148 void TEveSelection::RemoveElements()
150 TEveElementList::RemoveElements();
157 void TEveSelection::RemoveElementsLocal()
161 for (SelMap_i i = fImpliedSelected.begin(); i != fImpliedSelected.end(); ++i)
162 DoElementUnselect(i);
164 fImpliedSelected.clear();
174 void TEveSelection::RemoveImpliedSelected(TEveElement* el)
176 for (SelMap_i i = fImpliedSelected.begin(); i != fImpliedSelected.end(); ++i)
178 Set_i j = i->second.find(el);
179 if (j != i->second.end())
189 void TEveSelection::RecheckImpliedSet(SelMap_i smi)
192 smi->first->FillImpliedSelectedSet(set);
193 for (Set_i i = set.begin(); i != set.end(); ++i)
195 if (smi->second.find(*i) == smi->second.end())
197 smi->second.insert(*i);
198 ((*i)->*fIncImpSelElement)();
207 void TEveSelection::RecheckImpliedSetForElement(TEveElement* el)
211 SelMap_i i = fImpliedSelected.find(el);
212 if (i != fImpliedSelected.end())
213 RecheckImpliedSet(i);
218 for (SelMap_i i = fImpliedSelected.begin(); i != fImpliedSelected.end(); ++ i)
220 if (i->second.find(el) != i->second.end())
221 RecheckImpliedSet(i);
229 void TEveSelection::SelectionAdded(TEveElement* el)
231 Emit(
"SelectionAdded(TEveElement*)", (Long_t)el);
237 void TEveSelection::SelectionRemoved(TEveElement* el)
239 Emit(
"SelectionRemoved(TEveElement*)", (Long_t)el);
245 void TEveSelection::SelectionCleared()
247 Emit(
"SelectionCleared()");
253 void TEveSelection::SelectionRepeated(TEveElement* el)
255 Emit(
"SelectionRepeated(TEveElement*)", (Long_t)el);
261 void TEveSelection::ActivateSelection()
263 for (SelMap_i i = fImpliedSelected.begin(); i != fImpliedSelected.end(); ++i)
271 void TEveSelection::DeactivateSelection()
274 for (SelMap_i i = fImpliedSelected.begin(); i != fImpliedSelected.end(); ++i)
275 DoElementUnselect(i);
283 TEveElement* TEveSelection::MapPickedToSelected(TEveElement* el)
288 if (el->ForwardSelection())
290 return el->ForwardSelection();
293 switch (fPickToSelect)
303 case kPS_Projectable:
305 TEveProjected* pted =
dynamic_cast<TEveProjected*
>(el);
307 return dynamic_cast<TEveElement*
>(pted->GetProjectable());
312 TEveElement* cmpnd = el->GetCompound();
317 case kPS_PableCompound:
319 TEveProjected* pted =
dynamic_cast<TEveProjected*
>(el);
321 el =
dynamic_cast<TEveElement*
>(pted->GetProjectable());
322 TEveElement* cmpnd = el->GetCompound();
329 TEveElement* mstr = el->GetMaster();
344 void TEveSelection::UserPickedElement(TEveElement* el, Bool_t multi)
346 TEveElement *edit_el = el ? el->ForwardEdit() : 0;
348 el = MapPickedToSelected(el);
350 if (el || HasChildren())
362 gEve->ElementSelect(edit_el ? edit_el : el);
370 void TEveSelection::UserRePickedElement(TEveElement* el)
372 el = MapPickedToSelected(el);
373 if (el && HasChild(el))
375 SelectionRepeated(el);
383 void TEveSelection::UserUnPickedElement(TEveElement* el)
385 el = MapPickedToSelected(el);