Coverity
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTRDLoaderManager.cxx
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
4 /**************************************************************************
5  * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6  * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9
10 #include "AliEveTRDLoaderManager.h"
11 #include "AliEveTRDLoader.h"
12 #include "AliEveTRDLoaderImp.h"
13
14 #include <TEveManager.h>
15
16 #include <TGLabel.h>
17 #include <TGButton.h>
18 #include <TGComboBox.h>
19 #include <TGListBox.h>
20 //#include <TGListTree.h>
21 //#include <TGString.h>
22 //#include <TGToolTip.h>
23 #include <TClonesArray.h>
24
25 #include "AliLog.h"
26
27 ClassImp(AliEveTRDLoaderManager)
28 ClassImp(AliEveTRDLoaderManagerEditor)
29
30 ///////////////////////////////////////////////////////////
31 /////////        AliEveTRDLoaderManager      //////////////
32 ///////////////////////////////////////////////////////////
33
34 //______________________________________________________________________________
35 AliEveTRDLoaderManager::AliEveTRDLoaderManager(const Text_t* n, const Text_t* t) :
36   TEveElementList(n, t)
37 {
38   // Constructor.
39 }
40
41 //______________________________________________________________________________
42 void AliEveTRDLoaderManager::Add(Int_t type, const Text_t *name, const Text_t *title)
43 {
44   // Add something.
45
46   AliEveTRDLoader *trdl = 0x0;
47   switch(type){
48   case AliEveTRDLoader::kTRDHits:
49   case AliEveTRDLoader::kTRDDigits:
50   case AliEveTRDLoader::kTRDClusters:
51   case AliEveTRDLoader::kTRDTracklets:
52     AddElement(trdl = new AliEveTRDLoader(name, title));
53     break;
54   case AliEveTRDLoader::kTRDRawRoot:
55   case AliEveTRDLoader::kTRDRawDate:
56     AddElement(trdl = new AliEveTRDLoaderRaw(name, title));
57     break;
58   default:
59     AddElement(trdl = new AliEveTRDLoaderSim(name, title));
60     break;
61   }
62   trdl->SetDataType(type);
63
64   gEve->Redraw3D();
65 }
66
67
68 //______________________________________________________________________________
69 void AliEveTRDLoaderManager::Paint(Option_t *option)
70 {
71   // Paint object.
72
73   AliEveTRDLoader *loader(NULL);
74   List_i ichmb = fChildren.begin();
75   while(ichmb != fChildren.end()){
76     if((loader = dynamic_cast<AliEveTRDLoader*>(*ichmb))) loader->Paint(option);
77     ichmb++;
78   }
79 }
80
81 //______________________________________________________________________________
82 void AliEveTRDLoaderManager::Remove(Int_t entry)
83 {
84   // Remove something.
85
86   //printf("AliEveTRDLoaderManager::Remove(%d)\n", entry);
87   List_i it = fChildren.begin();
88   for(int i=0; i<entry; i++) it++;
89   gEve->RemoveElement((*it), this);
90   fChildren.erase(it);
91 }
92
93 ///////////////////////////////////////////////////////////
94 //////////   AliEveTRDLoaderManagerEditor       ///////////
95 ///////////////////////////////////////////////////////////
96
97 //______________________________________________________________________________
98 AliEveTRDLoaderManagerEditor::
99 AliEveTRDLoaderManagerEditor(const TGWindow* p, Int_t width, Int_t height,
100                              UInt_t options, Pixel_t back) :
101   TGedFrame(p, width, height, options | kVerticalFrame, back),
102   fM(0), fSelector(0), fAdd(0), fRemoveButton(0), fGroupFrame(0), fRemove(0)
103 {
104   // Constructor.
105
106   MakeTitle("AliEveTRDLoaderManager");
107
108   // control frame - always there
109   TGHorizontalFrame *fHorizontalFrame539 = new TGHorizontalFrame(this, 300, 26, kHorizontalFrame);
110
111   TGLabel *fLabel546 = new TGLabel(fHorizontalFrame539,"Register Loader",TGLabel::GetDefaultGC()(),TGLabel::GetDefaultFontStruct(),kChildFrame);
112   fLabel546->SetTextJustify(36);
113   fHorizontalFrame539->AddFrame(fLabel546, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY,2,2,2,2));
114
115   // combo box
116   fSelector = new TGComboBox(fHorizontalFrame539,-1,kHorizontalFrame | kSunkenFrame | kDoubleBorder | kOwnBackground);
117   fSelector->AddEntry("MC (gAlice) ", AliEveTRDLoader::kTRDHits | AliEveTRDLoader::kTRDDigits | AliEveTRDLoader::kTRDClusters);
118   fSelector->AddEntry("Hits ", AliEveTRDLoader::kTRDHits);
119   fSelector->AddEntry("Digits ", AliEveTRDLoader::kTRDDigits);
120   fSelector->AddEntry("Clusters ", AliEveTRDLoader::kTRDClusters);
121   fSelector->AddEntry("Tracklets ", AliEveTRDLoader::kTRDTracklets);
122   fSelector->AddEntry("Raw (ROOT) ", AliEveTRDLoader::kTRDRawRoot);
123   fSelector->AddEntry("Raw (DATE) ", AliEveTRDLoader::kTRDRawDate);
124   fSelector->Resize(136,22);
125   fHorizontalFrame539->AddFrame(fSelector, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY,2,2,2,2));
126   //fSelector->SetToolTipText("Select TRD data loader and add it to the list.\nThe loader can be removed by clicking the \"Remove\" button");
127   fSelector->Connect("Selected(char*)", "AliEveTRDLoaderManagerEditor", this, "Add(char*)");
128   AddFrame(fHorizontalFrame539, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,2,2,2,2));
129
130   fGroupFrame = 0;
131   fRemove     = 0;
132 }
133
134
135 //______________________________________________________________________________
136 void AliEveTRDLoaderManagerEditor::Add(Char_t *name)
137 {
138   // Slot to add something.
139   if(!fGroupFrame){
140     // "TRD Loaders" group frame
141     fGroupFrame = new TGGroupFrame(this,"TRD Loaders",kVerticalFrame,TGGroupFrame::GetDefaultGC()(),TGGroupFrame::GetDefaultFontStruct());
142     fGroupFrame->SetLayoutManager(new TGVerticalLayout(fGroupFrame));
143     fGroupFrame->Resize(300,128);
144     AddFrame(fGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX, 2,2,2,2));
145
146     fRemove = new TClonesArray("TGTextButton", 3);
147   }
148
149
150   // horizontal frame
151   TGHorizontalFrame *fHorizontalFrame = new TGHorizontalFrame(fGroupFrame, 264, 26, kHorizontalFrame);
152
153   TGLabel *fLabel717 = new TGLabel(fHorizontalFrame, name);
154   fLabel717->SetTextJustify(36);
155   fHorizontalFrame->AddFrame(fLabel717, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
156
157
158   Int_t nbutton = fM->fChildren.size();
159   fRemoveButton = new((*fRemove)[nbutton]) TGTextButton(fHorizontalFrame, "Remove", nbutton);
160   fRemoveButton->SetTextJustify(36);
161   fRemoveButton->Resize(53,22);
162   fRemoveButton->Connect("Clicked()", "AliEveTRDLoaderManagerEditor", this, Form("Remove(=%d)", nbutton));
163   fRemoveButton->SetToolTipText(Form("Remove %s Loader", name));
164   fHorizontalFrame->AddFrame(fRemoveButton, new TGLayoutHints(kLHintsLeft | kLHintsCenterX | kLHintsTop | kLHintsCenterY,2,2,2,2));
165
166   fGroupFrame->AddFrame(fHorizontalFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY | kLHintsExpandX,2,2,2,2));
167
168
169   MapSubwindows();
170   Resize(GetDefaultSize());
171   MapWindow();
172
173   const char *title[] = {"MC loader", "Single file loader", "Raw data loader"};
174   // char *color[] = {"#ff0000", "#0000ff", "#59d454"};
175   int id = fSelector->GetSelected(), type;
176   switch(id){
177   case AliEveTRDLoader::kTRDHits:
178   case AliEveTRDLoader::kTRDDigits:
179   case AliEveTRDLoader::kTRDClusters:
180   case AliEveTRDLoader::kTRDTracklets:
181     type = 1;
182     break;
183   case AliEveTRDLoader::kTRDRawRoot:
184   case AliEveTRDLoader::kTRDRawDate:
185     type = 2;
186     break;
187   default:
188     type = 0;
189     break;
190   }
191   fM->Add(id, name, title[type]);
192 }
193
194
195 //______________________________________________________________________________
196 void AliEveTRDLoaderManagerEditor::Remove(Int_t entry)
197 {
198   // Slot to remove something.
199
200   TIterator *it = fGroupFrame->GetList()->MakeIterator();
201   int ientry = 0;
202   while(/*TGFrame *f=(TGFrame*)*/it->Next()){
203     //printf("%s\n", f->IsA()->GetName());
204     if(entry == ientry){
205       //fGroupFrame->RemoveFrame(f);
206       break;
207     }
208     ientry++;
209   }
210
211
212   MapSubwindows();
213   Resize(GetDefaultSize());
214   MapWindow();
215
216   //fM->Remove(entry);
217 }
218
219 //______________________________________________________________________________
220 void AliEveTRDLoaderManagerEditor::SetModel(TObject* obj)
221 {
222   // Set model object.
223
224   fM = dynamic_cast<AliEveTRDLoaderManager*>(obj);
225 }
226