#include <TTreeStream.h>
#include <TMethodCall.h>
+//TODO - NEW -> Ordering! resp. remove the non-needed files
+#include <TQObject.h>
+#include <TEveManager.h>
+#include <TGLSelectRecord.h>
+#include <TGLViewer.h>
+
#include <AliTRDReconstructor.h>
#include <EveDet/AliEveListAnalyser.h>
///////////////////////////////////////////////////////////
AliEveListAnalyser::AliEveListAnalyser(const Text_t* n, const Text_t* t, Bool_t doColor):
TEveElementList(n, t, doColor),
- fEditor(0x0),
+ fConnected(kFALSE),
fDataFromMacroList(0x0),
+ fEditor(0x0),
fMacroList(0x0),
fDataTree(0x0),
fHistoDataSelected(0),
fMacroListSelected(0),
- fSelectedTab(1) // Standard tab: "Apply macros" (index 1)
+ fSelectedTab(2) // Standard tab: "Apply macros" (index 2)
{
// Creates the AliEveListAnalyser.
{
// Frees allocated memory (lists etc.).
+ // Stop adding objects
+ StopAddingObjects();
+
// Let the editor know that the list will be destroyed -> The editor will save the data
if (fEditor != 0)
{
//______________________________________________________
Int_t AliEveListAnalyser::AddMacro(const Char_t* path, const Char_t* nameC, Bool_t forceReload)
{
-// TODO: Update the comment concerning the supported types: TObject->'OBJECTTYPE'
// Checks, if the file exists and if the signature is correct.
// If these criteria are fullfilled, the library for this macro is built
// and the macro is added to the corresponding list.
return success;
}
+//TODO - NEW - To be implemented, tested, documented
+//______________________________________________________
+void AliEveListAnalyser::AddObjectToList(Int_t pointId)
+{
+ TEvePointSet* ps = dynamic_cast<TEvePointSet*>((TQObject*) gTQSender);
+
+ if (!ps)
+ {
+ Error("AliEveListAnalyser::AddObjectToList", "Zero pointer!\n");
+ return;
+ }
+
+ // Check, if object is already there. If so, remove it!
+
+ // 1st possibility: Object of the list clicked
+ if (this->HasChild(ps))
+ {
+ this->RemoveElement(ps);
+ return;
+ }
+
+ TObject* obj = ps->GetPointId(pointId);
+ if (obj)
+ {
+ // 2nd possibility: Same object clicked again
+ TEveElement* listObj = 0x0;
+ listObj = this->FindChild(Form("[viewer:%d] %s%d", obj->GetUniqueID(), obj->GetName(), pointId));
+ if (listObj)
+ {
+ this->RemoveElement(listObj);
+ return;
+ }
+
+ // Object clicked that is not in the list -> Add this object to list
+ TEvePointSet* newPS = new TEvePointSet(Form("[viewer:%d] %s%d", obj->GetUniqueID(), obj->GetName(), pointId));
+ Double_t x = 0, y = 0, z = 0;
+ ps->GetPoint(pointId, x, y, z);
+ newPS->SetPoint(0, x, y, z);
+ newPS->SetUserData(obj);
+ newPS->SetMarkerColor(5);
+ newPS->SetMarkerStyle(2);
+ newPS->SetMarkerSize(2.0);
+
+ AddElement(newPS);
+ gEve->Redraw3D();
+ }
+ else
+ {
+ Error("AliEveListAnalyser::AddObjectToList", "Selected object is NULL and therefore ignored!");
+ }
+
+/*
+ TGLSelectRecord rec = gEve->GetDefaultGLViewer()->GetSelRec();
+
+ printf("Objects (%d):\n", rec.GetN());
+ for (int i = 0; i < rec.GetN(); i++)
+ {
+ //printf("%s\n", ((TObject*)rec.GetItem(i))->IsA()->GetName());
+ }
+*/
+
+ //printf("Type: %s\npointID: %s\n\n", ps->IsA()->GetName(), pointId);
+ //printf("Type objectsender: %s\nType sender: %s\n", ((TQObject*)gTQSender)->IsA()->GetName(), ((TQObjSender*)gTQSender)->IsA()->GetName());
+}
+
//______________________________________________________
void AliEveListAnalyser::AddStandardContent()
{
mProcType = new AliEveListAnalyserMacroType[procIterator->GetEntries()];
}
- //TODO
TClass** mProcObjectType = 0;
if (procIterator->GetEntries() > 0) {
mProcObjectType = new TClass*[procIterator->GetEntries()];
mSelType = new AliEveListAnalyserMacroType[selIterator->GetEntries()];
}
- //TODO
TClass** mSelObjectType = 0;
if (selIterator->GetEntries() > 0) {
mSelObjectType = new TClass*[selIterator->GetEntries()];
printf("AliEveListAnalyser: Checking process macro: %s\n", macro->GetName());
#endif
-//TODO
// Find the object type of the macro
mProcObjectType[i] = macro->GetObjectType();
printf("AliEveListAnalyser: Checking selection macro: %s\n", macro->GetName());
#endif
-//TODO
// Find the object type of the macro
mSelObjectType[i] = macro->GetObjectType();
// Collect data for each macro
for (Int_t i = 0, histoIndex = 0; i < procIterator->GetEntries(); i++){
-//TODO
// Find the type of the object and relate it to the macro object type
// Only apply macro to this object, if...
// ... the macro takes objects of exactly this type.
// Skip objects that have not been selected
if (!object2->GetRnrState()) continue;
-//TODO
// Same check of the macro object type as before
if (((TObject*)object2->GetUserData())->IsA() != mProcObjectType[i] &&
!((TObject*)object2->GetUserData())->InheritsFrom(mProcObjectType[i])) continue;
selectedByCorrSelMacro = kTRUE;
for (Int_t j = 0; j < selIterator->GetEntries(); j++){
if (mSelType[j] == kCorrelObjectSelect){
-//TODO
// Check, whether the macro can deal with both objects. If not, skip it.
// Note: Again, via selCmds[i], the automatic objects are casted to the correct type!
if (((TObject*)object1->GetUserData())->IsA() != mSelObjectType[j] &&
// Skip objects that have not been selected
if (!object2->GetRnrState()) continue;
-//TODO
// Same check of the macro object type as before
if (((TObject*)object2->GetUserData())->IsA() != mProcObjectType[i] &&
!((TObject*)object2->GetUserData())->InheritsFrom(mProcObjectType[i])) continue;
selectedByCorrSelMacro = kTRUE;
for (Int_t j = 0; j < selIterator->GetEntries(); j++) {
if (mSelType[j] == kCorrelObjectSelect) {
-//TODO
// Check, whether the macro can deal with both objects. If not, skip it.
// Note: Again, via selCmds[i], the automatic objects are casted to the correct type!
if (((TObject*)object1->GetUserData())->IsA() != mSelObjectType[j] &&
// If the object has already been deselected, nothing is to do here
if (!object1->GetRnrState()) continue;
-//TODO
// Find the type of the object and relate it to the macro object type
// Only apply macro to this object, if...
// ... the macro takes objects of exactly this type.
}
}
}
+
+//______________________________________________________
+void AliEveListAnalyser::ResetObjectList()
+{
+ // Remove all objects from the list.
+
+ RemoveElements();
+}
+
+//______________________________________________________
+Bool_t AliEveListAnalyser::StartAddingObjects()
+{
+ // Start adding objects for the analysis. Returns kTRUE on success.
+
+ if (fConnected == kFALSE)
+ {
+ fConnected = TQObject::Connect("TEvePointSet", "PointSelected(Int_t)", "AliEveListAnalyser", this, "AddObjectToList(Int_t)");
+ //fConnected = TQObject::Connect("TEvePointSet", "Message(char*)", "AliEveListAnalyser", this, "AddObjectToList(char*)");
+ if (fConnected) return kTRUE;
+
+ Error("AliEveListAnalyser::StartAddingObjects", "Connection failed!");
+ }
+
+ return kFALSE;
+}
+
+//______________________________________________________
+Bool_t AliEveListAnalyser::StopAddingObjects()
+{
+ // Stop adding objects for the analysis. Returns kTRUE on success.
+
+ if (fConnected)
+ {
+ //if (TQObject::Disconnect("TEvePointSet", "AddObjectToList(Char_t*)")) fConnected = kFALSE;
+ if (TQObject::Disconnect("TEvePointSet", "PointSelected(Int_t)", this, "AddObjectToList(Int_t)"))
+ {
+ fConnected = kFALSE;
+ return kTRUE;
+ }
+ else
+ {
+ Error("AliEveListAnalyser::StopAddingObjects", "Disconnection failed!");
+ return kFALSE;
+ }
+ }
+
+ return kTRUE;
+}
fHistoCanvasName(0),
fInheritedMacroList(0),
fInheritSettings(kFALSE),
- fMainFrame(0),
+ fBrowseFrame(0),
fHistoFrame(0),
fHistoSubFrame(0),
- fBrowseFrame(0),
+ fMainFrame(0),
+ fObjectFrame(0),
+ fbApplyMacros(0),
fbBrowse(0),
+ fbDrawHisto(0),
fbNew(0),
- fbApplyMacros(0),
fbRemoveMacros(0),
- fbDrawHisto(0),
+ fbReset(0),
+ fbStart(0),
+ fbStop(0),
fteField(0),
ftlMacroList(0),
ftlMacroSelList(0),
{
// Creates the AliEveListAnalyserEditor.
+ // Functionality for adding objects
+ fObjectFrame = CreateEditorTabSubFrame("List");
+
+ fbStart = new TGTextButton(fObjectFrame, "Start");
+ fObjectFrame->AddFrame(fbStart, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 4, 1, 3, 1));
+ fbStart->SetToolTipText("Start \"adding objects by clicking\":\nSimply hold ALT+CTRL and left-click an item in the viewer with your mouse\nto add this item to the list analyser.\nIf you click (in this way!) an item that is already in the list, it will be removed from it.\nNote: The key combination depends on your operating system!");
+ fbStart->Connect("Clicked()", "AliEveListAnalyserEditor", this, "DoStartAddingObjects()");
+
+ fbReset = new TGTextButton(fObjectFrame, "Reset");
+ fObjectFrame->AddFrame(fbReset, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 4, 1, 1, 1));
+ fbReset->SetToolTipText("Remove all objects from the list");
+ fbReset->Connect("Clicked()", "AliEveListAnalyserEditor", this, "DoResetObjectList()");
+
+ fbStop = new TGTextButton(fObjectFrame, "Stop");
+ fObjectFrame->AddFrame(fbStop, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 4, 1, 1, 4));
+ fbStop->SetToolTipText("Stop \"adding objects by clicking\"");
+ fbStop->Connect("Clicked()", "AliEveListAnalyserEditor", this, "DoStopAddingObjects()");
+
// Functionality for adding macros
fMainFrame = CreateEditorTabSubFrame("Process");
}
}
+//______________________________________________________
+void AliEveListAnalyserEditor::DoResetObjectList()
+{
+ fM->ResetObjectList();
+ Update();
+}
+
+//______________________________________________________
+void AliEveListAnalyserEditor::DoStartAddingObjects()
+{
+ if (fM->StartAddingObjects())
+ {
+ fbStart->SetState(kButtonDisabled);
+ fbStop->SetState(kButtonUp);
+ }
+ else
+ {
+ new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error", "Failed to connect socket!", kMBIconExclamation, kMBOk);
+ }
+}
+
+//______________________________________________________
+void AliEveListAnalyserEditor::DoStopAddingObjects()
+{
+ if (fM->StopAddingObjects())
+ {
+ fbStop->SetState(kButtonDisabled);
+ fbStart->SetState(kButtonUp);
+ }
+ else
+ {
+ new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error", "Failed to disconnect socket!", kMBIconExclamation, kMBOk);
+ }
+}
+
//______________________________________________________
void AliEveListAnalyserEditor::DrawHistos()
{
// View correct tab
GetGedEditor()->GetTab()->SetTab(fM->GetSelectedTab());
+
+ // Set connection buttons correctly
+ if(fM->GetConnected())
+ {
+ fbStart->SetState(kButtonDisabled);
+ fbStop->SetState(kButtonUp);
+ }
+ else
+ {
+ fbStop->SetState(kButtonDisabled);
+ fbStart->SetState(kButtonEngaged);
+ fbStart->SetState(kButtonUp);
+ }
}
//______________________________________________________
//______________________________________________________
AliEveGeneralMacroWizard::AliEveGeneralMacroWizard(const TGWindow* p)
:TGMainFrame(p ? p : gClient->GetRoot(), 10, 10, kMainFrame | kVerticalFrame)
- ,fTextName(0x0)
- ,fTextObjectType(0x0)
+ ,fbCancel(0x0)
+ ,fbCreate(0x0)
,fCombo(0x0)
,fTextEdit(0x0)
- ,fbCreate(0x0)
- ,fbCancel(0x0)
+ ,fTextIncludes(0x0)
+ ,fTextName(0x0)
+ ,fTextObjectType(0x0)
{
const Int_t width = 300;
fFrameObjectType->AddFrame(fLabel, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
fTextObjectType = new TGTextEntry(fFrameObjectType);
- fTextObjectType->SetMaxLength(255);
fTextObjectType->SetAlignment(kTextLeft);
fTextObjectType->SetText("");
// Limit max.length to 80 characters
fTextObjectType->Resize(width, fTextObjectType->GetDefaultHeight());
fFrameObjectType->AddFrame(fTextObjectType, new TGLayoutHints(kLHintsRight | kLHintsTop,2,2,2,2));
+ // horizontal frame
+ TGHorizontalFrame *fFrameIncludes = new TGHorizontalFrame(this,10,10,kHorizontalFrame);
+ fLabel = new TGLabel(fFrameIncludes, "Include files");
+ fLabel->SetTextJustify(36);
+ fLabel->SetMargins(0,0,0,0);
+ fLabel->SetWrapLength(-1);
+ fFrameIncludes->AddFrame(fLabel, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
+
+ fTextIncludes = new TGTextEntry(fFrameIncludes);
+ fTextObjectType->SetAlignment(kTextLeft);
+ fTextIncludes->SetText("<TRD/AliTRDgeometry.h>,<TRD/AliTRDcluster.h>,<TRD/AliTRDseedV1.h>,<TRD/AliTRDtrackV1.h>");
+ fTextIncludes->SetCursorPosition(0);
+ fTextIncludes->SetToolTipText("The include files for your macro - separated by commas! -\n e.g. \"<TRD/AliTRDcluster.h>,<TRD/AliTRDtrackV1.h>\".\nThe suggested/default files can be used for track analysis");
+ fTextIncludes->Resize(width, fTextIncludes->GetDefaultHeight());
+ fFrameIncludes->AddFrame(fTextIncludes, new TGLayoutHints(kLHintsRight | kLHintsTop,2,2,2,2));
+
// horizontal frame
TGHorizontalFrame *fFrameComment = new TGHorizontalFrame(this,10,10,kHorizontalFrame);
fLabel = new TGLabel(fFrameComment, "Comment");
fbCreate->SetToolTipText("Use settings to create the macro");
fFrameAction->AddFrame(fbCreate, new TGLayoutHints(kLHintsRight | kLHintsTop,2,2,2,2));
-
// horizontal frame
TGHorizontalFrame *fFrameText = new TGHorizontalFrame(this,10,10,kHorizontalFrame);
fLabel = new TGLabel(fFrameText, "(*) Mandatory fields");
// put things together
AddFrame(fFrameName, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,2,2,2,2));
AddFrame(fFrameObjectType, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,2,2,2,2));
+ AddFrame(fFrameIncludes, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,2,2,2,2));
AddFrame(fFrameComment, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,2,2,2,2));
AddFrame(fFrameType, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,2,2,2,2));
AddFrame(fFrameAction, new TGLayoutHints(kLHintsRight | kLHintsTop | kLHintsExpandX,2,2,2,2));
MapWindow();
// Do the linking
- //fCombo->Connect("Selected(Int_t)", "AliEveGeneralMacroWizard", this, "Create(Int_t)");
fbCreate->Connect("Clicked()", "AliEveGeneralMacroWizard", this, "HandleCreate()");
fbCancel->Connect("Clicked()", "AliEveGeneralMacroWizard", this, "CloseWindow()");
}
const Char_t *fGeneralIncludes =
-// TODO: Remove include files corresponding to a track list
"#if !defined(__CINT__) || defined(__MAKECINT__)\n"
"#include <TROOT.h>\n"
-"#include <TH1.h>\n"
-"#include <TRD/AliTRDgeometry.h>\n"
-"#include <TRD/AliTRDcluster.h>\n"
-"#include <TRD/AliTRDseedV1.h>\n"
-"#include <TRD/AliTRDtrackV1.h>\n"
-"#endif\n";
+"#include <TH1.h>\n";
const Char_t *fGeneralMacroTemplate[7] = {
""
" } else h->Reset();\n"
};
-
-//TODO: Needed?
-/*
-const Char_t *fGeneralMacroTemplate_WithType[7] = {
-""
-," if (!object) return kFALSE;\n"
-" if (object->IsA() != OBJECTTYPE::Class()) return kFALSE;\n\n"
-" const OBJECTTYPE* myObject = dynamic_cast<const OBJECTTYPE*>(object);\n"
-" if (!myObject) return kFALSE;\n"
-
-," n = 0;\n"
-" r = 0x0;\n"
-" if (!object) return;\n"
-" if (object->IsA() != OBJECTTYPE::Class()) return;\n\n"
-" const OBJECTTYPE* myObject = dynamic_cast<const OBJECTTYPE*>(object);\n"
-" if (!myObject) return;\n"
-
-," if (!object) return 0x0;\n"
-" if (object->IsA() != OBJECTTYPE::Class()) return 0x0;\n\n"
-" const OBJECTTYPE* myObject = dynamic_cast<const OBJECTTYPE*>(object);\n"
-" if (!myObject) return 0x0;\n\n"
-" TH1* h = 0x0;\n\n"
-"// Set bins, xmin and xmax here\n"
-" Int_t n = 1;\n"
-" Double_t xmin = 0;\n"
-" Double_t xmax = 100;\n\n"
-" if(!(h = (TH1*)gROOT->FindObject(\"h\"))){\n"
-" h = new TH1(\"h\", \"Title\", n, xmin, xmax);\n"
-" h->GetXaxis()->SetTitle("");\n"
-" h->GetYaxis()->SetTitle("");\n"
-" } else h->Reset();\n"
-
-," if (!object) return kFALSE;\n"
-" if (!object2) return kFALSE;\n"
-" if (object->IsA() != OBJECTTYPE::Class()) return kFALSE;\n"
-" if (object2->IsA() != OBJECTTYPE::Class()) return kFALSE;\n\n"
-" const OBJECTTYPE* myObject = dynamic_cast<const OBJECTTYPE*>(object);\n"
-" const OBJECTTYPE* myObject2 = dynamic_cast<const OBJECTTYPE*>(object2);\n"
-" if (!myObject) return kFALSE;\n"
-" if (!myObject2) return kFALSE;\n"
-
-," n = 0;\n"
-" r = 0x0;\n"
-" if (!object) return;\n"
-" if (!object2) return;\n"
-" if (object->IsA() != OBJECTTYPE::Class()) return;\n"
-" if (object2->IsA() != OBJECTTYPE::Class()) return;\n\n"
-" const OBJECTTYPE* myObject = dynamic_cast<const OBJECTTYPE*>(object);\n"
-" const OBJECTTYPE* myObject2 = dynamic_cast<const OBJECTTYPE*>(object2);\n"
-" if (!myObject) return;\n"
-" if (!myObject2) return;\n"
-
-," if (!object) return 0x0;\n"
-" if (!object2) return 0x0;\n"
-" if (object->IsA() != OBJECTTYPE::Class()) return 0x0;\n"
-" if (object2->IsA() != OBJECTTYPE::Class()) return 0x0;\n\n"
-" const OBJECTTYPE* myObject = dynamic_cast<const OBJECTTYPE*>(object);\n"
-" const OBJECTTYPE* myObject2 = dynamic_cast<const OBJECTTYPE*>(object2);\n"
-" if (!myObject) return 0x0;\n"
-" if (!myObject2) return 0x0;\n"
-" TH1* h = 0x0;\n\n"
-"// Set bins, xmin and xmax here\n"
-" Int_t n = 1;\n"
-" Double_t xmin = 0;\n"
-" Double_t xmax = 100;\n\n"
-" if(!(h = (TH1*)gROOT->FindObject(\"h\"))){\n"
-" h = new TH1(\"h\", \"Title\", n, xmin, xmax);\n"
-" h->GetXaxis()->SetTitle("");\n"
-" h->GetYaxis()->SetTitle("");\n"
-" } else h->Reset();\n"
-};
-*/
-
//______________________________________________________
void AliEveGeneralMacroWizard::Create(Int_t type)
{
Error("AliEveGeneralMacroWizard::Create", "Please specify a name for your macro.");
new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error",
"Please specify a name for your macro.", kMBIconExclamation, kMBOk);
- //fCombo->Select(-1);
return;
}
Error("AliEveGeneralMacroWizard::Create", Form("A macro \"%s.C\" already exists in the current directory!\nPlease choose another name!", name));
new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error",
Form("A macro \"%s.C\" already exists in the current directory!\nPlease choose another name!", name), kMBIconExclamation, kMBOk);
- //fCombo->Select(-1);
return;
}
Error("AliEveGeneralMacroWizard::Create", "Couldn't create macro file.");
new TGMsgBox(gClient->GetRoot(), GetMainFrame(), "Error",
"Couldn't create macro file.", kMBIconExclamation, kMBOk);
- //fCombo->Select(-1);
return;
}
Char_t* line = 0x0; Int_t iline = 0;
while((line = comment->GetLine(TGLongPosition(0,iline++), 200))) fprintf(fp, "// %s\n", line);
- fprintf(fp, "\n%s\n", fGeneralIncludes);
-
TString* tempStr = new TString();
+ // Add include files:
+ // Remove white-spaces and replace commas
+ tempStr->Append(fTextIncludes->GetText());
+ tempStr->ReplaceAll(" ", "");
+ tempStr->ReplaceAll(",","\n#include ");
+ // If there are files, add the first "#include " in front
+ if (tempStr->Length() > 3) tempStr->Prepend("#include ");
+
+ fprintf(fp, "\n%s%s\n#endif\n\n", fGeneralIncludes, tempStr->Data());
+
+ tempStr->Clear();
+
// Use default type
if (!useGivenType)
{
Form("Unknown type[%d]", type), kMBIconExclamation, kMBOk);
fclose(fp);
gSystem->Exec(Form("rm -f %s.C", name));
- //fCombo->Select(-1);
tempStr->Clear();
if (tempStr != 0) delete tempStr;
if (typeStr != 0) delete typeStr;
typeStr = 0;
-//TODO: Version below?!
fprintf(fp, "{\n%s\n", fGeneralMacroTemplate[type]);
-/*
- if (useGivenType)
- {
- // Replace "OBJECTTYPE" with the class name
- TString* tempStr = new TString();
- tempStr->Append(fGeneralMacroTemplate_WithType[type]);
-
- tempStr->ReplaceAll("OBJECTTYPE", fTextObjectType->GetText());
-
- fprintf(fp, "{\n%s\n", tempStr->Data());
- if (tempStr != 0)
- {
- tempStr->Clear();
- delete tempStr;
- tempStr = 0;
- }
- }
- else
- {
- fprintf(fp, "{\n%s\n", fGeneralMacroTemplate[type]);
- }
-*/
fprintf(fp, "// add your own code here\n\n\n}\n");
fclose(fp);
void ApplyMacros();
void BrowseMacros();
void CloseTabs();
+ void DoResetObjectList();
+ void DoStartAddingObjects();
+ void DoStopAddingObjects();
void DrawHistos();
Int_t GetNSelectedHistograms() const;
void HandleMacroPathSet();
AliEveListAnalyserEditor(const AliEveListAnalyserEditor&); // Not implemented
AliEveListAnalyserEditor& operator=(const AliEveListAnalyserEditor&); // Not implemented
+ // Help functions
+ void SetDrawingToHistoCanvasTab();
+ void UpdateHistoCanvasTab();
+
TCanvas* fHistoCanvas; // Canvas for the histograms
TGString* fHistoCanvasName; // Name of the histogram canvas
Bool_t fInheritSettings; // Flag indicating, whether the macro list will be inherited from
// the previously loaded analyse object list within the next call of SetModel
- TGVerticalFrame* fMainFrame; // Top frame for macro functionality.
+ TGHorizontalFrame* fBrowseFrame; // Frame for features corresponding to searching macros
TGVerticalFrame* fHistoFrame; // Top frame for the histogram stuff
TGVerticalFrame* fHistoSubFrame; // Frame for the histogram buttons themselves
- TGHorizontalFrame* fBrowseFrame; // Frame for features corresponding to searching macros
-
- TGTextButton* fbBrowse; // "Browse" button
- TGTextButton* fbNew; // "New" button
+ TGVerticalFrame* fMainFrame; // Top frame for macro functionality.
+ TGVerticalFrame* fObjectFrame; // Frame for features corresponding to adding objects to the list
+
TGTextButton* fbApplyMacros; // "Apply macros" button
- TGTextButton* fbRemoveMacros; // "Remove macros" button
+ TGTextButton* fbBrowse; // "Browse" button
TGTextButton* fbDrawHisto; // "Draw histogram" button
+ TGTextButton* fbNew; // "New" button
+ TGTextButton* fbRemoveMacros; // "Remove macros" button
+ TGTextButton* fbReset; // "Reset" (list of added objects) button
+ TGTextButton* fbStart; // "Start" (adding objects to list) button
+ TGTextButton* fbStop; // "Stop" (adding objects to list) button
TGTextEntry* fteField; // Text field to insert macro path manually
TGListBox* ftlMacroList; // To display the list of (process) macros
TGListBox* ftlMacroSelList; // To display the list of (selection) macros
TGHorizontal3DLine *fLine3;
TGHorizontal3DLine *fLine4;
- TGCheckButton** fCheckButtons; // Check buttons for histograms
-
- // Help functions
- void SetDrawingToHistoCanvasTab();
- void UpdateHistoCanvasTab();
+ TGCheckButton** fCheckButtons; // Check buttons for histograms
ClassDef(AliEveListAnalyserEditor, 0); // Editor for AliEveListAnalyser.
};
AliEveGeneralMacroWizard(const AliEveGeneralMacroWizard&);
AliEveGeneralMacroWizard& operator=(const AliEveGeneralMacroWizard&);
- TGTextEntry *fTextName;
- TGTextEntry *fTextObjectType;
- TGComboBox *fCombo;
- TGTextEdit *fTextEdit;
- TGTextButton *fbCreate; // "Done" button
TGTextButton *fbCancel; // "Cancel" button
+ TGTextButton *fbCreate; // "Done" button
+ TGComboBox *fCombo; // "Type"
+ TGTextEdit *fTextEdit; // "Comments"
+ TGTextEntry *fTextIncludes; // "Includes"
+ TGTextEntry *fTextName; // "Name"
+ TGTextEntry *fTextObjectType; // "ObjectType"
ClassDef(AliEveGeneralMacroWizard, 0); // Helper class to create macro templates
};