81 ClassImp(TEveDigitSet);
85 TEveDigitSet::TEveDigitSet(
const char* n,
const char* t) :
90 fDefaultValue (kMinInt),
91 fValueIsColor (kFALSE),
92 fSingleColor (kFALSE),
102 fRenderMode (kRM_AsIs),
103 fSelectViaFrame (kFALSE),
104 fHighlightFrame (kFALSE),
105 fDisableLighting(kTRUE),
106 fHistoButtons (kTRUE),
107 fEmitSignals (kFALSE),
113 fCanEditMainColor = kTRUE;
114 fCanEditMainTransparency = kTRUE;
123 TEveDigitSet::~TEveDigitSet()
135 TEveDigitSet::DigitBase_t* TEveDigitSet::NewDigit()
137 fLastIdx = fPlex.Size();
138 fLastDigit =
new (fPlex.NewAtom()) DigitBase_t(fDefaultValue);
146 void TEveDigitSet::ReleaseIds()
150 const Int_t N = fDigitIds->GetSize();
152 for (Int_t i = 0; i < N; ++i)
153 delete fDigitIds->At(i);
155 fDigitIds->Expand(0);
163 void TEveDigitSet::UseSingleColor()
165 fSingleColor = kTRUE;
171 void TEveDigitSet::SetMainColor(Color_t color)
175 TEveElement::SetMainColor(color);
179 fFrame->SetFrameColor(color);
180 fFrame->StampBackPtrElements(kCBColorSelection);
188 void TEveDigitSet::UnSelected()
190 fSelectedSet.clear();
191 TEveElement::UnSelected();
198 void TEveDigitSet::UnHighlighted()
200 fHighlightedSet.clear();
201 TEveElement::UnHighlighted();
208 TString TEveDigitSet::GetHighlightTooltip()
210 if (fHighlightedSet.empty())
return "";
212 if (GetAlwaysSecSelect())
216 return (fTooltipCBFoo)(
this, *fHighlightedSet.begin());
220 TObject *o = GetId(*fHighlightedSet.begin());
222 return TString(o->GetName());
224 return TString::Format(
"%s; idx=%d", GetElementName(), *fHighlightedSet.begin());
228 return TEveElement::GetHighlightTooltip();
236 void TEveDigitSet::RefitPlex()
244 void TEveDigitSet::ScanMinMaxValues(Int_t& min, Int_t& max)
246 if (fValueIsColor || fPlex.Size() == 0)
254 for (Int_t c=0; c<fPlex.VecSize(); ++c)
256 Char_t* a = fPlex.Chunk(c);
257 Int_t n = fPlex.NAtoms(c);
260 Int_t v = ((DigitBase_t*)a)->fValue;
261 if (v < min) min = v;
262 if (v > max) max = v;
276 void TEveDigitSet::SetCurrentDigit(Int_t idx)
279 fLastDigit = GetDigit(idx);
285 void TEveDigitSet::DigitValue(Int_t value)
287 fLastDigit->fValue = value;
293 void TEveDigitSet::DigitColor(Color_t ci)
295 TEveUtil::ColorFromIdx(ci, (UChar_t*) & fLastDigit->fValue, kTRUE);
301 void TEveDigitSet::DigitColor(Color_t ci, Char_t transparency)
303 TEveUtil::ColorFromIdx(ci, (UChar_t*) & fLastDigit->fValue, transparency);
309 void TEveDigitSet::DigitColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a)
311 UChar_t* x = (UChar_t*) & fLastDigit->fValue;
312 x[0] = r; x[1] = g; x[2] = b; x[3] = a;
318 void TEveDigitSet::DigitColor(UChar_t* rgba)
320 UChar_t* x = (UChar_t*) & fLastDigit->fValue;
321 x[0] = rgba[0]; x[1] = rgba[1]; x[2] = rgba[2]; x[3] = rgba[3];
327 void TEveDigitSet::DigitId(TObject*
id)
329 DigitId(fLastIdx,
id);
335 void TEveDigitSet::DigitUserData(
void* ud)
337 fLastDigit->fUserData = ud;
343 void TEveDigitSet::DigitId(Int_t n, TObject*
id)
346 fDigitIds =
new TRefArray;
348 if (fOwnIds && n < fDigitIds->GetSize() && fDigitIds->At(n))
349 delete fDigitIds->At(n);
351 fDigitIds->AddAtAndExpand(
id, n);
357 void TEveDigitSet::DigitUserData(Int_t n,
void* ud)
359 GetDigit(n)->fUserData = ud;
365 TObject* TEveDigitSet::GetId(Int_t n)
const
367 return fDigitIds ? fDigitIds->At(n) : 0;
373 void* TEveDigitSet::GetUserData(Int_t n)
const
375 return GetDigit(n)->fUserData;
381 void TEveDigitSet::Paint(Option_t*)
390 void TEveDigitSet::DigitSelected(Int_t idx)
392 DigitBase_t *qb = GetDigit(idx);
393 TObject *obj = GetId(idx);
396 (fCallbackFoo)(
this, idx, obj);
399 SecSelected(
this, idx);
401 printf(
"TEveDigitSet::DigitSelected idx=%d, value=%d, obj=0x%lx\n",
402 idx, qb->fValue, (ULong_t)obj);
412 void TEveDigitSet::SecSelected(TEveDigitSet* qs, Int_t idx)
415 args[0] = (Long_t) qs;
416 args[1] = (Long_t) idx;
418 Emit(
"SecSelected(TEveDigitSet*, Int_t)", args);
424 void TEveDigitSet::SetFrame(TEveFrameBox* b)
426 if (fFrame == b)
return;
427 if (fFrame) fFrame->DecRefCount(
this);
430 fFrame->IncRefCount(
this);
432 SetMainColorPtr(fFrame->PtrFrameColor());
435 SetMainColorPtr(&fColor);
442 void TEveDigitSet::SetPalette(TEveRGBAPalette* p)
444 if (fPalette == p)
return;
445 if (fPalette) fPalette->DecRefCount();
447 if (fPalette) fPalette->IncRefCount();
455 TEveRGBAPalette* TEveDigitSet::AssertPalette()
458 fPalette =
new TEveRGBAPalette;
459 if (!fValueIsColor) {
461 ScanMinMaxValues(min, max);
462 fPalette->SetLimits(min, max);
463 fPalette->SetMinMax(min, max);