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