]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/Reve/RenderElement.h
Added nested class RedrawDisabler allowing exception-safe disabling of 3d-redraw.
[u/mrichter/AliRoot.git] / EVE / Reve / RenderElement.h
1 // $Header$
2
3 #ifndef REVE_RenderElement_H
4 #define REVE_RenderElement_H
5
6 #include <Reve/Reve.h>
7
8 #include <TNamed.h>
9 #include <TRef.h>
10
11 class TGListTree;
12 class TGListTreeItem;
13
14 namespace Reve {
15
16 class RenderElement
17 {
18   friend class RGTopFrame;
19
20   RenderElement(const RenderElement&);            // Not implemented
21   RenderElement& operator=(const RenderElement&); // Not implemented
22
23 public:
24   class ListTreeInfo
25   {
26   public:
27     TGListTree*     fTree;
28     TGListTreeItem* fItem;
29
30     ListTreeInfo() : fTree(0), fItem(0) {}
31     ListTreeInfo(TGListTree* lt, TGListTreeItem* lti) : fTree(lt), fItem(lti) {}
32     ListTreeInfo(const ListTreeInfo& l) : fTree(l.fTree), fItem(l.fItem) {}
33     virtual ~ListTreeInfo() {}
34
35     ListTreeInfo& operator=(const ListTreeInfo& l)
36     { fTree = l.fTree; fItem = l.fItem; return *this; }
37
38     bool operator==(const ListTreeInfo& x) const
39     { return fTree == x.fTree && fItem == x.fItem; }
40     bool operator<(const ListTreeInfo& x) const
41     { return fTree == x.fTree ? fItem < x.fItem : fTree < x.fTree; }
42
43     ClassDef(ListTreeInfo, 0);
44   };
45   typedef std::set<ListTreeInfo>               sLTI_t;
46   typedef std::set<ListTreeInfo>::iterator     sLTI_i;
47
48   typedef std::list<RenderElement*>            List_t;
49   typedef std::list<RenderElement*>::iterator  List_i;
50
51 protected:
52   // TRef     fSource;
53
54   Bool_t   fRnrElement;
55   Color_t* fMainColorPtr;
56
57   sLTI_t fItems;
58   List_t fParents;
59
60   Bool_t fDestroyOnZeroRefCnt;
61   Bool_t fDenyDestroy;
62
63 public:
64   RenderElement();
65   RenderElement(Color_t& main_color);
66   virtual ~RenderElement();
67
68   virtual void AddParent(RenderElement* re);
69   virtual void RemoveParent(RenderElement* re);
70
71   List_i BeginParents() { return fParents.begin(); }
72   List_i EndParents()   { return fParents.end();   }
73   Int_t  GetNParents() const { return fParents.size(); }
74
75
76   Bool_t GetDestroyOnZeroRefCnt() const   { return fDestroyOnZeroRefCnt; }
77   void   SetDestroyOnZeroRefCnt(Bool_t d) { fDestroyOnZeroRefCnt = d; }
78
79   Bool_t GetDenyDestroy() const   { return fDenyDestroy; }
80   void   SetDenyDestroy(Bool_t d) { fDenyDestroy = d; }
81
82   virtual TObject* GetObject(Reve::Exc_t eh="RenderElement::GetObject ");
83
84   /*
85     TRef&    GetSource() { return fSource; }
86     TObject* GetSourceObject() const { return fSource.GetObject(); }
87     void SetSourceObject(TObject* o) { fSource.SetObject(o); }
88
89     void DumpSourceObject();    // *MENU*
90     void InspectSourceObject(); // *MENU*
91   */
92
93   virtual TGListTreeItem* AddIntoListTree(TGListTree* ltree,
94                                           TGListTreeItem* parent_lti);
95   virtual TGListTreeItem* AddIntoListTree(TGListTree* ltree,
96                                           RenderElement* parent);
97   virtual Bool_t          RemoveFromListTree(TGListTree* ltree);
98   virtual Bool_t          RemoveFromListTree(TGListTree* ltree,
99                                              TGListTreeItem* parent_lti);
100
101   virtual sLTI_i          FindItem(TGListTree* ltree);
102   virtual sLTI_i          FindItem(TGListTree* ltree,
103                                    TGListTreeItem* parent_lti);
104   virtual TGListTreeItem* FindListTreeItem(TGListTree* ltree);
105   virtual TGListTreeItem* FindListTreeItem(TGListTree* ltree,
106                                            TGListTreeItem* parent_lti);
107
108   virtual void UpdateItems();
109
110   void SpawnEditor();                          // *MENU*
111   virtual void ExportToCINT(Text_t* var_name); // *MENU*
112
113   virtual void Destroy();                      // *MENU*
114
115   virtual Bool_t CanEditRnrElement()   { return kTRUE; }
116   virtual Bool_t GetRnrElement() const { return fRnrElement; }
117   virtual void   SetRnrElement(Bool_t rnr);
118
119   virtual Bool_t CanEditMainColor()        { return kFALSE; }
120   Color_t* GetMainColorPtr()               { return fMainColorPtr; }
121   void     SetMainColorPtr(Color_t* color) { fMainColorPtr = color; }
122
123   virtual Color_t GetMainColor() const { return fMainColorPtr ? *fMainColorPtr : 0; }
124   virtual void    SetMainColor(Color_t color);
125           void    SetMainColor(Pixel_t pixel);
126
127   ClassDef(RenderElement, 1);
128 }; // endclass RenderElement
129
130 /**************************************************************************/
131
132 class RenderElementObjPtr : public RenderElement,
133                             public TObject
134 {
135   RenderElementObjPtr(const RenderElementObjPtr&);            // Not implemented
136   RenderElementObjPtr& operator=(const RenderElementObjPtr&); // Not implemented
137
138 protected:
139   TObject* fObject;
140   Bool_t   fOwnObject;
141
142 public:
143   RenderElementObjPtr(TObject* obj, Bool_t own=kTRUE);
144   RenderElementObjPtr(TObject* obj, Color_t& mainColor, Bool_t own=kTRUE);
145   virtual ~RenderElementObjPtr();
146
147   virtual TObject* GetObject(Exc_t eh="RenderElementObjPtr::GetObject ");
148   virtual void     ExportToCINT(Text_t* var_name);
149
150   Bool_t GetOwnObject() const   { return fOwnObject; }
151   void   SetOwnObject(Bool_t o) { fOwnObject = o; }
152
153   ClassDef(RenderElementObjPtr, 1);
154 }; // endclass RenderElementObjPtr
155
156 /**************************************************************************/
157
158 class RenderElementListBase : public RenderElement
159 {
160 protected:
161   List_t fChildren;
162
163   void PaintElements(Option_t* option="");
164
165 public:
166   RenderElementListBase() : RenderElement(), fChildren() {}
167   RenderElementListBase(Color_t& col) : RenderElement(col), fChildren() {}
168   virtual ~RenderElementListBase();
169
170   virtual void AddElement(RenderElement* el);
171   virtual void RemoveElement(RenderElement* el);
172   virtual void RemoveElementLocal(RenderElement* el);
173   virtual void RemoveElements();
174
175   virtual void DestroyElements();
176
177   List_i BeginChildren() { return fChildren.begin(); }
178   List_i EndChildren()   { return fChildren.end();   }
179   Int_t  GetNChildren() const { return fChildren.size(); }
180
181   virtual Int_t ExpandIntoListTree(TGListTree* ltree, TGListTreeItem* parent);
182   virtual Int_t DestroyListSubTree(TGListTree* ltree, TGListTreeItem* parent);
183
184   void EnableListElements();   // *MENU*
185   void DisableListElements();  // *MENU*
186
187   virtual void SetMainColor(Color_t color);
188   virtual void SetMainColor(Pixel_t pixel);
189
190   ClassDef(RenderElementListBase, 1);
191 };
192
193 /**************************************************************************/
194
195 class RenderElementList : public RenderElementListBase,
196                           public TNamed
197 {
198 protected:
199   Color_t   fColor;
200   Bool_t    fDoColor;
201
202 public:
203   RenderElementList(const Text_t* n="RenderElementList", const Text_t* t="",
204                     Bool_t doColor=kFALSE);
205   virtual ~RenderElementList() {}
206
207   virtual Bool_t CanEditMainColor()  { return fDoColor; }
208
209   virtual void Paint(Option_t* option = "") { PaintElements(option); }
210
211   ClassDef(RenderElementList, 1);
212 };
213
214
215 }
216
217 #endif