ae1ac13703b373fe49df76c60c804b2e83283d44
[u/mrichter/AliRoot.git] / EVE / Reve / RenderElement.cxx
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
11 using namespace Reve;
12 using namespace Reve;
13
14 //______________________________________________________________________
15 // Reve
16 //
17
18 ClassImp(RenderElement)
19
20 RenderElement::RenderElement()
21 {
22   fRnrElement    = true;
23   fMainColorPtr  = 0;
24 }
25
26 RenderElement::RenderElement(Color_t& main_color) : fMainColorPtr(&main_color)
27 {
28   fRnrElement    = true;
29 }
30
31 /**************************************************************************/
32
33 TObject* RenderElement::GetObject(Exc_t eh)
34 {
35   TObject* obj = dynamic_cast<TObject*>(this);
36   if(obj == 0)
37     throw(eh + "not a TObject.");
38   return obj;
39 }
40
41 /**************************************************************************/
42
43 TGListTreeItem* RenderElement::AddIntoListTree(TGListTree* ltree,
44                                                TGListTreeItem* parent)
45 {
46   static const Exc_t eH("RenderElement::AddIntoListTree ");
47
48   TObject* tobj = GetObject(eH);
49   TGListTreeItem* item = ltree->AddItem(parent, tobj->GetName(), tobj,
50                                          0, 0, kTRUE);
51   item->CheckItem(GetRnrElement());
52   item->SetColor(GetMainColor());
53   // printf("%s setting title for %s, '%s'\n", eH.Data(), tobj->GetName(), tobj->GetTitle());
54   item->SetTipText(tobj->GetTitle());
55
56   fItems.insert(ListTreeInfo(ltree, item));
57
58   return item;
59 }
60
61 /**************************************************************************/
62
63 void RenderElement::FullUpdate()
64 {
65   for(sLTI_i i=fItems.begin(); i!=fItems.end(); ++i) {
66     // Setup name and title/tooltip? Need update calls from setname/title as well.
67     i->fItem->CheckItem(fRnrElement);
68     i->fItem->SetColor(GetMainColor());
69   }
70   gReve->Redraw3D();
71   gReve->NotifyBrowser();
72 }
73
74 /**************************************************************************/
75
76 void RenderElement::SpawnEditor()
77 {
78   // Here spawn a sub-class of TGedFrame with special UpdateMethod.
79   gReve->EditRenderElement(this);
80 }
81
82 void RenderElement::ExportToCINT(Text_t* var_name)
83 {
84   static const Exc_t eH("RenderElement::ExportToCINT ");
85
86   TObject* obj = GetObject(eH);
87   const char* cname = obj->IsA()->GetName();
88   gROOT->ProcessLine(Form("%s* %s = (%s*) %p;", cname, var_name, cname, obj));
89 }
90
91 /**************************************************************************/
92 /*
93 void RenderElement::DumpSourceObject()
94 {
95   TObject* o = GetSourceObject();
96   if(o == 0) {
97     printf("Source object not set.\n");
98   } else {
99     o->Dump();
100   }
101 }
102
103 void RenderElement::InspectSourceObject()
104 {
105   TObject* o = GetSourceObject();
106   if(o == 0) {
107     printf("Source object not set.\n");
108   } else {
109     o->Inspect();
110   }
111 }
112 */
113 /**************************************************************************/
114
115 void RenderElement::SetRnrElement(Bool_t rnr)
116 {
117   if(rnr != fRnrElement) {
118     fRnrElement = rnr;
119     FullUpdate();
120   }
121 }
122 /**************************************************************************/
123
124 void RenderElement::SetMainColor(Color_t color)
125 {
126   if (fMainColorPtr) {
127     *fMainColorPtr = color;
128     FullUpdate();
129   }
130 }
131
132 void RenderElement::SetMainColorByPixel(Pixel_t pixel)
133 {
134   SetMainColor(Color_t(TColor::GetColor(pixel)));
135 }
136
137 /**************************************************************************/
138 /**************************************************************************/
139
140 ClassImp(RenderElementListBase)
141
142 Int_t RenderElementListBase::ExpandIntoListTree(TGListTree* ltree,
143                                                 TGListTreeItem* parent)
144 {
145   // Populates parent with elements.
146   // parent must be an already existing representation of *this*.
147   // Returns number of inserted elements.
148   // If parent already has children, it does nothing.
149   //
150   // RnrEl can be inserted in a list-tree several times, thus we can not
151   // search through fItems to get parent here.
152   // Anyhow, it is probably known as it must have been selected by the user.
153
154   if(parent->GetFirstChild() != 0)
155     return 0;
156   Int_t n = 0;
157   for(lpRE_i i=fList.begin(); i!=fList.end(); ++i) {
158     (*i)->AddIntoListTree(ltree, parent);
159     ++n;
160   }
161   return n;
162 }
163
164 /**************************************************************************/
165
166 void RenderElementListBase::EnableListElements()
167 {
168   for(lpRE_i i=fList.begin(); i!=fList.end(); ++i)
169     (*i)->SetRnrElement(true);
170 }
171
172 void RenderElementListBase::DisableListElements()
173 {
174   for(lpRE_i i=fList.begin(); i!=fList.end(); ++i)
175     (*i)->SetRnrElement(false);
176 }
177
178 /**************************************************************************/
179
180 void RenderElementListBase::SetMainColor(Color_t col)
181 {
182   Color_t oldcol = GetMainColor();
183   for(lpRE_i i=fList.begin(); i!=fList.end(); ++i) {
184     if((*i)->GetMainColor() == oldcol) (*i)->SetMainColor(col);
185   }
186   RenderElement::SetMainColor(col);
187 }
188
189 void RenderElementListBase::SetMainColor(Pixel_t pixel)
190 {
191   // This one needed for proper calling via CINT (signals).
192
193   SetMainColor(Color_t(TColor::GetColor(pixel)));
194 }
195
196 /**************************************************************************/
197
198 void RenderElementListBase::PaintElements(Option_t* option)
199 {
200   if(fRnrElement) {
201     for(lpRE_i i=fList.begin(); i!=fList.end(); ++i) {
202       if((*i)->GetRnrElement())
203         (*i)->GetObject()->Paint(option);
204     }
205   }
206 }
207
208 /**************************************************************************/
209 /**************************************************************************/
210
211 ClassImp(RenderElementList)