#ifndef ROOT_TEveDigitSet
#define ROOT_TEveDigitSet
#include "TNamed.h"
#include "TQObject.h"
#include "TAtt3D.h"
#include "TAttBBox.h"
#include "TEveUtil.h"
#include "TEveElement.h"
#include "TEveFrameBox.h"
#include "TEveRGBAPalette.h"
#include "TEveChunkManager.h"
#include "TEveSecondarySelectable.h"
class TRefArray;
class TEveDigitSet : public TEveElement,
public TNamed, public TQObject,
public TAtt3D,
public TAttBBox,
public TEveSecondarySelectable
{
friend class TEveDigitSetEditor;
friend class TEveDigitSetGL;
TEveDigitSet(const TEveDigitSet&);
TEveDigitSet& operator=(const TEveDigitSet&);
public:
enum ERenderMode_e { kRM_AsIs, kRM_Line, kRM_Fill };
typedef void (*Callback_foo)(TEveDigitSet*, Int_t, TObject*);
typedef TString (*TooltipCB_foo)(TEveDigitSet*, Int_t);
struct DigitBase_t
{
Int_t fValue;
void *fUserData;
DigitBase_t(Int_t v=0) : fValue(v), fUserData(0) {}
};
protected:
TRefArray *fDigitIds;
Int_t fDefaultValue;
Bool_t fValueIsColor;
Bool_t fSingleColor;
Bool_t fAntiFlick;
Bool_t fOwnIds;
TEveChunkManager fPlex;
DigitBase_t* fLastDigit;
Int_t fLastIdx;
Color_t fColor;
TEveFrameBox* fFrame;
TEveRGBAPalette* fPalette;
ERenderMode_e fRenderMode;
Bool_t fSelectViaFrame;
Bool_t fHighlightFrame;
Bool_t fDisableLighting;
Bool_t fHistoButtons;
Bool_t fEmitSignals;
Callback_foo fCallbackFoo;
TooltipCB_foo fTooltipCBFoo;
DigitBase_t* NewDigit();
void ReleaseIds();
public:
TEveDigitSet(const char* n="TEveDigitSet", const char* t="");
virtual ~TEveDigitSet();
virtual TObject* GetObject(const TEveException&) const
{ const TObject* obj = this; return const_cast<TObject*>(obj); }
void UseSingleColor();
Bool_t GetAntiFlick() const { return fAntiFlick; }
void SetAntiFlick(Bool_t f) { fAntiFlick = f; }
virtual void SetMainColor(Color_t color);
virtual void UnSelected();
virtual void UnHighlighted();
virtual TString GetHighlightTooltip();
void RefitPlex();
void ScanMinMaxValues(Int_t& min, Int_t& max);
void SetCurrentDigit(Int_t idx);
void DigitValue(Int_t value);
void DigitColor(Color_t ci);
void DigitColor(Color_t ci, Char_t transparency);
void DigitColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a=255);
void DigitColor(UChar_t* rgba);
Bool_t GetOwnIds() const { return fOwnIds; }
void SetOwnIds(Bool_t o) { fOwnIds = o; }
void DigitId(TObject* id);
void DigitUserData(void* ud);
void DigitId(Int_t n, TObject* id);
void DigitUserData(Int_t n, void* ud);
DigitBase_t* GetDigit(Int_t n) const { return (DigitBase_t*) fPlex.Atom(n); }
TObject* GetId(Int_t n) const;
void* GetUserData(Int_t n) const;
using TEveElement::GetUserData;
virtual void Paint(Option_t* option="");
virtual void DigitSelected(Int_t idx);
virtual void SecSelected(TEveDigitSet* qs, Int_t idx);
TEveChunkManager* GetPlex() { return &fPlex; }
TEveFrameBox* GetFrame() const { return fFrame; }
void SetFrame(TEveFrameBox* b);
Bool_t GetSelectViaFrame() const { return fSelectViaFrame; }
void SetSelectViaFrame(Bool_t sf) { fSelectViaFrame = sf; }
Bool_t GetHighlightFrame() const { return fHighlightFrame; }
void SetHighlightFrame(Bool_t hf) { fHighlightFrame = hf; }
Bool_t GetValueIsColor() const { return fValueIsColor; }
TEveRGBAPalette* GetPalette() const { return fPalette; }
void SetPalette(TEveRGBAPalette* p);
TEveRGBAPalette* AssertPalette();
ERenderMode_e GetRenderMode() const { return fRenderMode; }
void SetRenderMode(ERenderMode_e rm) { fRenderMode = rm; }
Bool_t GetDisableLighting() const { return fDisableLighting; }
void SetDisableLighting(Bool_t l) { fDisableLighting = l; }
Bool_t GetHistoButtons() const { return fHistoButtons; }
void SetHistoButtons(Bool_t f) { fHistoButtons = f; }
Bool_t GetEmitSignals() const { return fEmitSignals; }
void SetEmitSignals(Bool_t f) { fEmitSignals = f; }
Callback_foo GetCallbackFoo() const { return fCallbackFoo; }
void SetCallbackFoo(Callback_foo f) { fCallbackFoo = f; }
TooltipCB_foo GetTooltipCBFoo() const { return fTooltipCBFoo; }
void SetTooltipCBFoo(TooltipCB_foo f) { fTooltipCBFoo = f; }
ClassDef(TEveDigitSet, 0);
};
#endif