1 #include "AliEveTRDTrackListEditor.h"
3 ClassImp(AliEveTRDTrackListEditor)
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),
25 fMainFrame = CreateEditorTabSubFrame("Apply macros");
27 // Functionality for adding macros
28 fBrowseFrame = new TGHorizontalFrame(fMainFrame);
30 teField = new TGTextEntry(fBrowseFrame);
31 teField->Connect("ReturnPressed()","AliEveTRDTrackListEditor", this, "HandleMacroPathSet()");
32 fBrowseFrame->AddFrame(teField);
34 bBrowse = new TGTextButton(fBrowseFrame, "Browse");
35 bBrowse->Connect("Clicked()", "AliEveTRDTrackListEditor", this, "BrowseMacros()");
36 fBrowseFrame->AddFrame(bBrowse);
37 fMainFrame->AddFrame(fBrowseFrame);
39 tlMacroList = new TGListBox(fMainFrame);
40 tlMacroList->Resize(194, 120);
41 tlMacroList->SetMultipleSelections(kTRUE);
42 fMainFrame->AddFrame(tlMacroList);
44 bApplyMacros = new TGTextButton(fMainFrame, "Apply selected macro(s)");
45 bApplyMacros->Connect("Clicked()", "AliEveTRDTrackListEditor", this, "ApplyMacros()");
46 bApplyMacros->SetRightMargin(12);
47 fMainFrame->AddFrame(bApplyMacros);
49 bRemoveMacros = new TGTextButton(fMainFrame, "Remove selected macro(s)");
50 bRemoveMacros->Connect("Clicked()", "AliEveTRDTrackListEditor", this, "RemoveMacros()");
51 fMainFrame->AddFrame(bRemoveMacros);
54 fMemberFrame = CreateEditorTabSubFrame("Members");
56 tvMemberList = new TGTextView(fMemberFrame, 220, 120, "");
57 fMemberFrame->AddFrame(tvMemberList);
60 fileInfo = new TGFileInfo();
61 fileInfo->SetMultipleSelection(kTRUE);
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;
72 void AliEveTRDTrackListEditor::AddMacro(const Char_t* pathname)
74 // Only add macro, if it is not already in the list
75 if (fM->macroList->FindObject(pathname) == 0)
77 fM->macroList->Add(new TObjString(pathname));
78 fM->macroList->Sort();
84 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Warning", "Macro is already in list (won't be added again)!",
85 kMBIconExclamation, kMBOk);
89 void AliEveTRDTrackListEditor::ApplyMacros()
91 TList* iterator = new TList();
92 //TEveMacro* macro = NULL;
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);
103 tlMacroList->GetSelectedEntries(iterator);
105 // Make tracklist availabe
106 fM->ExportToCINT("trackList");
107 for (Int_t i = 0; i < iterator->GetEntries(); i++)
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);
115 TString sPathname(pathname);
116 gSystem->ExpandPathName(sPathname);
118 sprintf(cmd, ".x %s(trackList)", pathname);
119 gROOT->ProcessLine(cmd);
120 // Load and execute macro
121 //macro = new TEveMacro(sPathname);
123 //macro->Exec("trackList");
124 //if (macro != NULL) delete macro;
127 if (iterator != NULL) delete iterator;
130 void AliEveTRDTrackListEditor::BrowseMacros()
132 new TGFileDialog(gClient->GetRoot(), new TGWindow(), kFDOpen, fileInfo);
134 if (fileInfo->fFilename != 0 && fileInfo->fIniDir != 0)
136 Char_t pathname[300];
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);
149 void AliEveTRDTrackListEditor::BrowseMacros()
151 new TGFileDialog(gClient->GetRoot(), GetMainFrame(), kFDOpen, fileInfo);
153 if (fileInfo->fIniDir != 0)
155 Char_t pathname[300];
158 TObject* iter = fileInfo->fFileNamesList->First();
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);
170 iter = (TObjString*)fileInfo->fFileNamesList->After(iter);
175 void AliEveTRDTrackListEditor::HandleMacroPathSet()
177 if (strlen(teField->GetText()) != 0)
179 // Check if file exists
182 fp = fopen(teField->GetText(), "rb");
186 Char_t pathname[300];
189 Char_t* name = strrchr(teField->GetText(), '/');
194 sprintf(pathname, "%s (Path: .)", teField->GetText());
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);
205 if (path != NULL) delete path;
212 new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error",
213 "File does not exist or you do not have read permission!", kMBIconExclamation, kMBOk);
218 void AliEveTRDTrackListEditor::RemoveMacros()
220 TList* iterator = new TList();
222 tlMacroList->GetSelectedEntries(iterator);
224 for (Int_t i = 0; i < iterator->GetEntries(); i++)
226 fM->macroList->Remove(fM->macroList->FindObject(iterator->At(i)->GetTitle()));
232 void AliEveTRDTrackListEditor::SetModel(TObject* obj)
235 fM = dynamic_cast<AliEveTRDTrackList*>(obj);
237 // Add members to a list
238 tvMemberList->Clear();
239 for (TEveElement::List_i iterator = fM->BeginChildren(); iterator != fM->EndChildren(); ++iterator)
241 tvMemberList->AddLineFast(((AliEveTRDTrack*)(*iterator))->GetName());
243 tvMemberList->ShowTop();
244 tvMemberList->Update();
249 void AliEveTRDTrackListEditor::UpdateMacroList()
251 tlMacroList->RemoveAll();
253 TObjString* iter = (TObjString*)fM->macroList->First();
257 tlMacroList->AddEntry(iter->GetName(), -1);
258 iter = (TObjString*)fM->macroList->After(iter);
261 tlMacroList->SortByName();