35REveSelection::REveSelection(
const std::string&
n,
const std::string& t,
38 fVisibleEdgeColor (col_visible),
39 fHiddenEdgeColor (col_hidden),
104 Set_t &imp_set = entry->second.f_implied;
106 entry->first->FillImpliedSelectedSet(imp_set);
108 auto i = imp_set.begin();
109 while (i != imp_set.end())
111 if ((*i)->GetElementId() == 0)
115 Info(
"REveSelection::DoElementSelect",
116 "Element '%s' [%s] with 0 id detected and removed.",
117 (*i)->GetCName(), (*i)->IsA()->GetName());
124 (*i)->IncImpliedSelected();
136 Set_t &imp_set = entry->second.f_implied;
138 for (
auto &imp_el: imp_set) imp_el->DecImpliedSelected();
156 return !
fMap.empty();
165 return el !=
this &&
fMap.find(el) ==
fMap.end() &&
187 auto i =
fMap.find(el);
201 Warning(
"REveSelection::RemoveNieceLocal",
"element not found in map.");
213 for (
auto i =
fMap.begin(); i !=
fMap.end(); ++i)
215 i->first->RemoveAunt(
this);
232 bool changed =
false;
236 auto j = i.second.f_implied.find(el);
237 if (j != i.second.f_implied.end())
239 i.second.f_implied.erase(j);
254 bool changed =
false;
256 smi->first->FillImpliedSelectedSet(set);
259 if (smi->second.f_implied.find(i) == smi->second.f_implied.end())
261 smi->second.f_implied.insert(i);
262 i->IncImpliedSelected();
278 auto i =
fMap.find(el);
287 for (
auto i =
fMap.begin(); i !=
fMap.end(); ++i)
289 if (i->second.f_implied.find(el) != i->second.f_implied.end())
339 for (
auto i =
fMap.begin(); i !=
fMap.end(); ++i) {
352 for (
auto i =
fMap.begin(); i !=
fMap.end(); ++i) {
371 switch (pick_to_select)
478 static const REveException eh(
"REveSelection::NewElementPicked ");
483 std::set<int> secondary_idcs = in_secondary_idcs;
489 if ( ! pel)
throw eh +
"picked element id=" +
id +
" not found.";
495 if (!secondary && ss) {
503 std::string debug_secondary;
505 debug_secondary =
" {";
506 for (
auto si : secondary_idcs) {
507 debug_secondary.append(
" ");
508 debug_secondary.append(std::to_string(si));
510 debug_secondary.append(
" }");
512 ::Info(
"REveSelection::NewElementPicked",
"%p -> %p, multi: %d, secondary: %d %s", pel, el, multi, secondary, debug_secondary.c_str());
529 for (
auto &ns : secondary_idcs)
538 for (
auto &dit : dup)
542 if (!secondary_idcs.empty()) {
576 bool modified = (rec->
f_sec_idcs != secondary_idcs);
639 auto j = i.second.f_implied.find(el);
641 if (j != i.second.f_implied.end())
643 i.second.f_implied.erase(j);
662 nlohmann::json sel_list = nlohmann::json::array();
666 nlohmann::json rec = {}, imp = nlohmann::json::array(), sec = nlohmann::json::array();
668 rec[
"primary"] = i.first->GetElementId();
671 for (
auto &sec_id : i.second.f_sec_idcs)
672 sec.push_back(sec_id);
675 for (
auto &imp_el : i.second.f_implied) {
676 imp.push_back(imp_el->GetElementId());
677 imp_el->FillExtraSelectionData(rec[
"extra"], sec);
680 rec[
"implied"] = imp;
683 if (i.first->RequiresExtraSelectionData()) {
684 i.first->FillExtraSelectionData(rec[
"extra"], sec);
687 rec[
"sec_idcs"] = sec;
691 rec[
"tooltip"] = i.first->GetHighlightTooltip(i.second.f_sec_idcs);
693 sel_list.push_back(rec);
696 j[
"sel_list"] = sel_list;
698 j[
"UT_PostStream"] =
"UT_Selection_Refresh_State";
void Info(const char *location, const char *msgfmt,...)
Use this function for informational messages.
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
virtual void AddNiece(REveElement *el)
virtual void RemoveNiece(REveElement *el)
TClass * IsA() const
Return class for this element.
REveCompound * GetCompound()
virtual REveElement * GetSelectionMaster()
Returns the master element - that is:
virtual Int_t WriteCoreJson(nlohmann::json &cj, Int_t rnr_offset)
Write core json.
void StampObjPropsPreChk()
void DecImpliedSelected()
std::set< REveElement * > Set_t
REveException Exception-type thrown by Eve classes.
REveElement * FindElementById(ElementId_t id) const
Lookup ElementId in element map and return corresponding REveElement*.
REveProjectable * GetProjectable() const
SelectionSet_t & RefSelectedSet()
void RemoveNieceInternal(REveElement *el) override
Virtual from REveAunt.
void NewElementPicked(ElementId_t id, bool multi, bool secondary, const std::set< int > &secondary_idcs={})
bool HasNiece(REveElement *el) const override
Check if elemenet el is selected (not implied selected).
bool AcceptNiece(REveElement *el) override
Pre-addition check.
void AddNieceInternal(REveElement *el) override
Add an element into selection, virtual from REveAunt.
REveElement * MapPickedToSelected(REveElement *el)
Given element el that was picked or clicked by the user, find the parent/ancestor element that should...
void RemoveImpliedSelected(REveElement *el)
Remove element from all implied-selected sets.
int RemoveImpliedSelectedReferencesTo(REveElement *el)
Remove pointers to el from implied selected sets.
void SelectionRemoved(REveElement *el)
Emit SelectionRemoved signal.
void SetHiddenEdgeColorRGB(UChar_t r, UChar_t g, UChar_t b)
Set hidden highlight color.
virtual ~REveSelection()
Destructor.
void SetVisibleEdgeColorRGB(UChar_t r, UChar_t g, UChar_t b)
Set visible highlight color.
Color_t fHiddenEdgeColor
!
std::vector< int > fPickToSelect
!
virtual void ActivateSelection()
Activate this selection.
bool HasNieces() const override
Check if any elements are selected.
void SetHighlightMode()
Set to 'highlight' mode.
void SelectionCleared()
Emit SelectionCleared signal.
virtual void DeactivateSelection()
Deactivate this selection.
void DoElementSelect(SelMap_i &entry)
Select element indicated by the entry and fill its implied-selected set.
Int_t WriteCoreJson(nlohmann::json &cj, Int_t rnr_offset) override
Write core json. If rnr_offset negative, render data will not be written.
Record * find_record(REveElement *el)
SelMap_t::iterator SelMap_i
virtual void UserRePickedElement(REveElement *el)
Called when element selection is repeated.
virtual void UserPickedElement(REveElement *el, Bool_t multi=kFALSE)
Called when user picks/clicks on an element.
void AddPickToSelect(int ps)
void RecheckImpliedSetForElement(REveElement *el)
If given element is selected or implied-selected within this selection then recheck implied-set for g...
void SelectionRepeated(REveElement *el)
Emit SelectionRepeated signal.
void RecheckImpliedSet(SelMap_i &entry)
Recalculate implied-selected state for given selection entry.
void SelectionAdded(REveElement *el)
Emit SelectionAdded signal.
void RemoveNieces() override
Add an element into selection, virtual from REveAunt.
Color_t fVisibleEdgeColor
!
void DoElementUnselect(SelMap_i &entry)
Deselect element indicated by the entry and clear its implied-selected set.
void ClearSelection()
Clear selection if not empty.
virtual void UserUnPickedElement(REveElement *el)
Called when an element is unselected.
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
static Int_t GetColor(const char *hexcolor)
Static method returning color number for color specified by hex color string of form: "#rrggbb",...
R__EXTERN REveManager * gEve
bool is_secondary() const
std::set< int > f_sec_idcs
bool f_is_sec
! is secondary-selected – XXXX do i need it ????