Implemented dtor for RenderElement removing all instances from browsers.
[u/mrichter/AliRoot.git] / EVE / Reve / RenderElement.cxx
CommitLineData
5a5a1232 1// $Header$
2
3#include "RenderElement.h"
4#include "RGTopFrame.h"
5
6#include <TColor.h>
7#include <TCanvas.h>
8#include <TGListTree.h>
9#include <THashList.h>
10
11using namespace Reve;
12using namespace Reve;
13
14//______________________________________________________________________
15// Reve
16//
17
18ClassImp(RenderElement)
19
20RenderElement::RenderElement()
21{
a87df773 22 fRnrElement = kTRUE;
5a5a1232 23 fMainColorPtr = 0;
24}
25
26RenderElement::RenderElement(Color_t& main_color) : fMainColorPtr(&main_color)
27{
a87df773 28 fRnrElement = kTRUE;
29}
30
31RenderElement::~RenderElement()
32{
33 for(sLTI_i i=fItems.begin(); i!=fItems.end(); ++i) {
34 i->fTree->DeleteItem(i->fItem);
35 gClient->NeedRedraw(i->fTree);
36 }
5a5a1232 37}
38
39/**************************************************************************/
40
41TObject* RenderElement::GetObject(Exc_t eh)
42{
43 TObject* obj = dynamic_cast<TObject*>(this);
44 if(obj == 0)
45 throw(eh + "not a TObject.");
46 return obj;
47}
48
49/**************************************************************************/
50
51TGListTreeItem* RenderElement::AddIntoListTree(TGListTree* ltree,
52 TGListTreeItem* parent)
53{
54 static const Exc_t eH("RenderElement::AddIntoListTree ");
55
56 TObject* tobj = GetObject(eH);
092578a7 57 TGListTreeItem* item = ltree->AddItem(parent, tobj->GetName(), this,
a87df773 58 0, 0, kTRUE);
5a5a1232 59 item->CheckItem(GetRnrElement());
a87df773 60 if(fMainColorPtr != 0) item->SetColor(GetMainColor());
5a5a1232 61 item->SetTipText(tobj->GetTitle());
62
63 fItems.insert(ListTreeInfo(ltree, item));
64
65 return item;
66}
67
68/**************************************************************************/
69
70void RenderElement::FullUpdate()
71{
72 for(sLTI_i i=fItems.begin(); i!=fItems.end(); ++i) {
73 // Setup name and title/tooltip? Need update calls from setname/title as well.
74 i->fItem->CheckItem(fRnrElement);
a87df773 75 if(fMainColorPtr != 0) i->fItem->SetColor(GetMainColor());
5a5a1232 76 }
77 gReve->Redraw3D();
78 gReve->NotifyBrowser();
79}
80
81/**************************************************************************/
82
83void RenderElement::SpawnEditor()
84{
85 // Here spawn a sub-class of TGedFrame with special UpdateMethod.
86 gReve->EditRenderElement(this);
87}
88
89void RenderElement::ExportToCINT(Text_t* var_name)
90{
91 static const Exc_t eH("RenderElement::ExportToCINT ");
92
93 TObject* obj = GetObject(eH);
94 const char* cname = obj->IsA()->GetName();
95 gROOT->ProcessLine(Form("%s* %s = (%s*) %p;", cname, var_name, cname, obj));
96}
97
98/**************************************************************************/
99/*
100void RenderElement::DumpSourceObject()
101{
102 TObject* o = GetSourceObject();
103 if(o == 0) {
104 printf("Source object not set.\n");
105 } else {
106 o->Dump();
107 }
108}
109
110void RenderElement::InspectSourceObject()
111{
112 TObject* o = GetSourceObject();
113 if(o == 0) {
114 printf("Source object not set.\n");
115 } else {
116 o->Inspect();
117 }
118}
119*/
120/**************************************************************************/
121
122void RenderElement::SetRnrElement(Bool_t rnr)
123{
124 if(rnr != fRnrElement) {
125 fRnrElement = rnr;
126 FullUpdate();
127 }
128}
092578a7 129
5a5a1232 130/**************************************************************************/
131
132void RenderElement::SetMainColor(Color_t color)
133{
134 if (fMainColorPtr) {
135 *fMainColorPtr = color;
136 FullUpdate();
137 }
138}
139
140void RenderElement::SetMainColorByPixel(Pixel_t pixel)
141{
142 SetMainColor(Color_t(TColor::GetColor(pixel)));
143}
144
145/**************************************************************************/
146/**************************************************************************/
147
092578a7 148ClassImp(RenderElementObjPtr)
149
150RenderElementObjPtr::RenderElementObjPtr(TObject* obj) :
151 RenderElement(),
152 fObject(obj)
153{}
154
155RenderElementObjPtr::RenderElementObjPtr(TObject* obj, Color_t& mainColor) :
156 RenderElement(mainColor),
157 fObject(obj)
158{}
159
160RenderElementObjPtr::~RenderElementObjPtr()
161{
162 delete fObject;
163}
164
165/**************************************************************************/
166
167TObject* RenderElementObjPtr::GetObject(Reve::Exc_t eh)
168{
169 if(fObject == 0)
170 throw(eh + "fObject not set.");
171 return fObject;
172}
173
174void RenderElementObjPtr::SetRnrElement(Bool_t rnr)
175{
176 if(rnr != fRnrElement) {
177 fRnrElement = rnr;
178 if(rnr) {
179 gReve->GetCC()->GetListOfPrimitives()->Add(fObject);
180 } else {
181 gReve->GetCC()->GetListOfPrimitives()->Remove(fObject);
182 }
183 FullUpdate();
184 }
185}
186
187/**************************************************************************/
188/**************************************************************************/
189
5a5a1232 190ClassImp(RenderElementListBase)
191
192Int_t RenderElementListBase::ExpandIntoListTree(TGListTree* ltree,
193 TGListTreeItem* parent)
194{
195 // Populates parent with elements.
196 // parent must be an already existing representation of *this*.
197 // Returns number of inserted elements.
198 // If parent already has children, it does nothing.
199 //
200 // RnrEl can be inserted in a list-tree several times, thus we can not
201 // search through fItems to get parent here.
202 // Anyhow, it is probably known as it must have been selected by the user.
203
204 if(parent->GetFirstChild() != 0)
205 return 0;
206 Int_t n = 0;
207 for(lpRE_i i=fList.begin(); i!=fList.end(); ++i) {
208 (*i)->AddIntoListTree(ltree, parent);
209 ++n;
210 }
211 return n;
212}
213
214/**************************************************************************/
215
216void RenderElementListBase::EnableListElements()
217{
218 for(lpRE_i i=fList.begin(); i!=fList.end(); ++i)
a87df773 219 (*i)->SetRnrElement(kTRUE);
5a5a1232 220}
221
222void RenderElementListBase::DisableListElements()
223{
224 for(lpRE_i i=fList.begin(); i!=fList.end(); ++i)
a87df773 225 (*i)->SetRnrElement(kFALSE);
5a5a1232 226}
227
228/**************************************************************************/
229
230void RenderElementListBase::SetMainColor(Color_t col)
231{
232 Color_t oldcol = GetMainColor();
233 for(lpRE_i i=fList.begin(); i!=fList.end(); ++i) {
234 if((*i)->GetMainColor() == oldcol) (*i)->SetMainColor(col);
235 }
236 RenderElement::SetMainColor(col);
237}
238
239void RenderElementListBase::SetMainColor(Pixel_t pixel)
240{
241 // This one needed for proper calling via CINT (signals).
242
243 SetMainColor(Color_t(TColor::GetColor(pixel)));
244}
245
246/**************************************************************************/
247
248void RenderElementListBase::PaintElements(Option_t* option)
249{
250 if(fRnrElement) {
251 for(lpRE_i i=fList.begin(); i!=fList.end(); ++i) {
252 if((*i)->GetRnrElement())
253 (*i)->GetObject()->Paint(option);
254 }
255 }
256}
257
258/**************************************************************************/
259/**************************************************************************/
260
261ClassImp(RenderElementList)