TNamed(n, t),
fQuadType(QT_Undef),
- fValueIsColor(kFALSE),
fDefaultValue(kMinInt),
+ fValueIsColor(kFALSE),
+ fOwnIds (kFALSE),
fPlex(),
fLastQuad(0),
TNamed(n, t),
fQuadType(quadType),
- fValueIsColor(valIsCol),
fDefaultValue(valIsCol ? 0 : kMinInt),
+ fValueIsColor(valIsCol),
+ fOwnIds (kFALSE),
fPlex(SizeofAtom(quadType), chunkSize),
fLastQuad(0),
{
SetFrame(0);
SetPalette(0);
+ if (fOwnIds)
+ ReleaseIds();
+}
+
+void QuadSet::ReleaseIds()
+{
+ VoidCPlex::iterator qi(fPlex);
+ while (qi.next()) {
+ QuadBase& q = * (QuadBase*) qi();
+ if (q.fId.GetObject()) {
+ delete q.fId.GetObject();
+ q.fId = 0;
+ }
+ }
}
/**************************************************************************/
fQuadType = quadType;
fValueIsColor = valIsCol;
fDefaultValue = valIsCol ? 0 : kMinInt;
+ ReleaseIds();
fPlex.Reset(SizeofAtom(fQuadType), chunkSize);
}
x[0] = r; x[1] = g; x[2] = b; x[3] = a;
}
+/**************************************************************************/
+
+void QuadSet::QuadId(TObject* id)
+{
+ fLastQuad->fId = id;
+}
+
+/**************************************************************************/
+
+void QuadSet::QuadSelected(Int_t idx)
+{
+ QuadBase* qb = GetQuad(idx);
+ TObject* obj = qb->fId.GetObject();
+ printf("QuadSet::QuadSelected idx=%d, value=%d, obj=0x%lx\n",
+ idx, qb->fValue, (ULong_t)obj);
+ if (obj)
+ obj->Print();
+}
+
/**************************************************************************/
/**************************************************************************/
struct QuadBase
{
Int_t fValue;
+ TRef fId;
+
// Here could have additional integer (like time, second threshold).
QuadBase(Int_t v=0) : fValue(v) {}
protected:
QuadType_e fQuadType;
- Bool_t fValueIsColor;
Int_t fDefaultValue;
+ Bool_t fValueIsColor;
+ Bool_t fOwnIds; //Flag specifying if id-objects are owned by the QuadSet
VoidCPlex fPlex;
QuadBase* fLastQuad; //!
static Int_t SizeofAtom(QuadType_e qt);
QuadBase* NewQuad();
+ void ReleaseIds();
+
public:
QuadSet(const Text_t* n="QuadSet", const Text_t* t="");
QuadSet(QuadType_e quadType, Bool_t valIsCol, Int_t chunkSize,
void QuadColor(Color_t ci);
void QuadColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a=255);
+ void QuadId(TObject* id);
+ Bool_t GetOwnIds() const { return fOwnIds; }
+ void SetOwnIds(Bool_t o) { fOwnIds = o; }
+
+ QuadBase* GetQuad(Int_t n) { return (QuadBase*) fPlex.Atom(n); }
+ TObject* GetId(Int_t n) { return GetQuad(n)->fId.GetObject(); }
+
+ virtual void QuadSelected(Int_t idx);
+
// --------------------------------
// void Test(Int_t nquads);