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