]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/EveDet/AliEveTRDTrackListEditor.cxx
new track visualization/analysis framework (Ben Hess)
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTRDTrackListEditor.cxx
1 #include "AliEveTRDTrackListEditor.h"
2
3 ClassImp(AliEveTRDTrackListEditor)
4
5 ///////////////////////////////////////////////////////////
6 /////////////   AliEveTRDTrackListEditor //////////////////
7 ///////////////////////////////////////////////////////////
8 AliEveTRDTrackListEditor::AliEveTRDTrackListEditor(const TGWindow* p, Int_t width, Int_t height,
9                                                    UInt_t options, Pixel_t back) :
10   TGedFrame(p, width, height, options, back),
11   fM(0),
12   fMainFrame(0),
13   fMemberFrame(0),
14   fBrowseFrame(0),
15   bBrowse(0),
16   bApplyMacros(0),
17   bRemoveMacros(0),
18   teField(0),
19   tvMemberList(0),
20   tlMacroList(0),
21   fileInfo(0),
22   fileTypes(0)
23 {
24   // Constructor.
25   fMainFrame = CreateEditorTabSubFrame("Apply macros");
26   
27   // Functionality for adding macros 
28   fBrowseFrame = new TGHorizontalFrame(fMainFrame);
29
30   teField = new TGTextEntry(fBrowseFrame);
31   teField->Connect("ReturnPressed()","AliEveTRDTrackListEditor", this, "HandleMacroPathSet()"); 
32   fBrowseFrame->AddFrame(teField);
33   
34   bBrowse = new TGTextButton(fBrowseFrame, "Browse");
35   bBrowse->Connect("Clicked()", "AliEveTRDTrackListEditor", this, "BrowseMacros()");
36   fBrowseFrame->AddFrame(bBrowse);
37   fMainFrame->AddFrame(fBrowseFrame);
38
39   tlMacroList = new TGListBox(fMainFrame);
40   tlMacroList->Resize(194, 120);
41   tlMacroList->SetMultipleSelections(kTRUE);
42   fMainFrame->AddFrame(tlMacroList);
43
44   bApplyMacros = new TGTextButton(fMainFrame, "Apply selected macro(s)");
45   bApplyMacros->Connect("Clicked()", "AliEveTRDTrackListEditor", this, "ApplyMacros()");
46   bApplyMacros->SetRightMargin(12);
47   fMainFrame->AddFrame(bApplyMacros);
48
49   bRemoveMacros = new TGTextButton(fMainFrame, "Remove selected macro(s)");
50   bRemoveMacros->Connect("Clicked()", "AliEveTRDTrackListEditor", this, "RemoveMacros()");
51   fMainFrame->AddFrame(bRemoveMacros);
52
53   // List members
54   fMemberFrame = CreateEditorTabSubFrame("Members");
55   
56   tvMemberList = new TGTextView(fMemberFrame, 220, 120, "");
57   fMemberFrame->AddFrame(tvMemberList);
58
59   // Set up file dialog
60   fileInfo = new TGFileInfo();
61   fileInfo->SetMultipleSelection(kTRUE);
62
63   fileTypes = new Char_t*[6];
64   fileTypes[0] = "All files"; fileTypes[1] = "*";
65   fileTypes[2] = "ROOT macros"; fileTypes[3] = "*.C";
66   fileTypes[4] = 0; fileTypes[5] = 0;
67   fileInfo->fFileTypes = (const Char_t**)fileTypes;
68   fileInfo->fFileTypeIdx = 2;
69   fileInfo->fMultipleSelection = kTRUE;
70 }
71
72 void AliEveTRDTrackListEditor::AddMacro(const Char_t* pathname)
73 {
74   // Only add macro, if it is not already in the list
75   if (fM->macroList->FindObject(pathname) == 0)
76   {
77       fM->macroList->Add(new TObjString(pathname));
78       fM->macroList->Sort();
79
80       UpdateMacroList();
81   }
82   else
83   {
84       new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Warning", "Macro is already in list (won't be added again)!",
85                    kMBIconExclamation, kMBOk);
86   }
87 }
88
89 void AliEveTRDTrackListEditor::ApplyMacros()
90 {
91   TList* iterator = new TList();
92   //TEveMacro* macro = NULL;
93   Char_t name[100];
94   Char_t path[300];
95   Char_t pathname[400];
96   Char_t cmd[430];
97
98   memset(name, '\0', sizeof(Char_t) * 100);
99   memset(path, '\0', sizeof(Char_t) * 300);
100   memset(pathname, '\0', sizeof(Char_t) * 400);
101   memset(cmd, '\0', sizeof(Char_t) * 430);
102
103   tlMacroList->GetSelectedEntries(iterator);
104
105   // Make tracklist availabe
106   fM->ExportToCINT("trackList");
107   for (Int_t i = 0; i < iterator->GetEntries(); i++)
108   {
109       // Extract path and name -> Make pathname
110       sscanf(iterator->At(i)->GetTitle(), "%s (Path: %s)", name, path);
111       // Delete ")" at the end of path
112       path[strlen(path) - 1] = '\0';
113       sprintf(pathname, "%s/%s", path, name);
114
115       TString sPathname(pathname);
116       gSystem->ExpandPathName(sPathname);
117  
118       sprintf(cmd, ".x %s(trackList)", pathname);
119       gROOT->ProcessLine(cmd);
120       // Load and execute macro
121       //macro = new TEveMacro(sPathname);
122
123       //macro->Exec("trackList");
124       //if (macro != NULL)    delete macro;
125   }
126
127   if (iterator != NULL) delete iterator;    
128 }
129 /*
130 void AliEveTRDTrackListEditor::BrowseMacros()
131 {
132   new TGFileDialog(gClient->GetRoot(), new TGWindow(), kFDOpen, fileInfo);
133   
134   if (fileInfo->fFilename != 0 && fileInfo->fIniDir != 0)
135   {                             
136     Char_t pathname[300];
137     
138     // Extract filename
139     Char_t* name = strrchr(fileInfo->fFilename, '/');
140     // Delete '"' at the end
141     name[strlen(name)] = '\0';
142     sprintf(pathname, "%s (Path: %s)", name + 1, fileInfo->fIniDir);
143   
144     AddMacro(pathname); 
145   }
146 }
147 */
148
149 void AliEveTRDTrackListEditor::BrowseMacros()
150 {
151   new TGFileDialog(gClient->GetRoot(), GetMainFrame(), kFDOpen, fileInfo);
152   
153   if (fileInfo->fIniDir != 0)
154   {                             
155     Char_t pathname[300];
156     
157     // Extract filenames
158     TObject* iter = fileInfo->fFileNamesList->First();
159  
160     Char_t* name = 0;
161
162     while (iter != 0)
163     {
164       name = strrchr(iter->GetName(), '/');
165       // Delete '"' at the end
166       name[strlen(name)] = '\0';
167       sprintf(pathname, "%s (Path: %s)", name + 1, fileInfo->fIniDir);
168   
169       AddMacro(pathname); 
170       iter = (TObjString*)fileInfo->fFileNamesList->After(iter);
171     }
172   }
173 }
174
175 void AliEveTRDTrackListEditor::HandleMacroPathSet()
176 {
177   if (strlen(teField->GetText()) != 0)
178   {                             
179     // Check if file exists
180     FILE* fp = NULL;
181
182     fp = fopen(teField->GetText(), "rb");
183     if (fp != NULL)
184     {
185         fclose(fp);
186         Char_t pathname[300];
187     
188         // Extract filename
189         Char_t* name = strrchr(teField->GetText(), '/');
190
191         // Current path
192         if (name == NULL)
193         {
194             sprintf(pathname, "%s (Path: .)", teField->GetText());
195         }
196         // Different path
197         else
198         {
199             // Extract path
200             Char_t* path = new Char_t[240];
201             memset(path, '\0', sizeof(Char_t) * 240);
202             strncpy(path, teField->GetText(), strlen(teField->GetText()) - strlen(name));
203             sprintf(pathname, "%s (Path: %s)", name + 1, path);
204
205             if (path != NULL)  delete path;
206         }
207
208         AddMacro(pathname);   
209     }
210     else
211     {
212         new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error", 
213                      "File does not exist or you do not have read permission!", kMBIconExclamation, kMBOk);
214     }
215   }
216 }
217
218 void AliEveTRDTrackListEditor::RemoveMacros()
219 {
220   TList* iterator = new TList();
221   
222   tlMacroList->GetSelectedEntries(iterator);
223
224   for (Int_t i = 0; i < iterator->GetEntries(); i++)
225   {
226       fM->macroList->Remove(fM->macroList->FindObject(iterator->At(i)->GetTitle()));
227   }
228
229   UpdateMacroList();
230 }
231
232 void AliEveTRDTrackListEditor::SetModel(TObject* obj)
233 {
234   // Set model object.
235   fM = dynamic_cast<AliEveTRDTrackList*>(obj);
236
237   // Add members to a list
238   tvMemberList->Clear();
239   for (TEveElement::List_i iterator = fM->BeginChildren(); iterator != fM->EndChildren(); ++iterator)
240   {
241     tvMemberList->AddLineFast(((AliEveTRDTrack*)(*iterator))->GetName());
242   }  
243   tvMemberList->ShowTop();
244   tvMemberList->Update();
245
246   UpdateMacroList();
247 }
248
249 void AliEveTRDTrackListEditor::UpdateMacroList()
250 {
251   tlMacroList->RemoveAll();
252  
253   TObjString* iter = (TObjString*)fM->macroList->First();
254
255   while (iter != 0)
256   {
257     tlMacroList->AddEntry(iter->GetName(), -1);
258     iter = (TObjString*)fM->macroList->After(iter);
259   }
260
261   tlMacroList->SortByName();
262 }