ROOT logo
// Author: Benjamin Hess   29/01/2010

/*************************************************************************
 * Copyright (C) 2009-2010, Alexandru Bercuci, Benjamin Hess.            *
 * All rights reserved.                                                  *
 *************************************************************************/

#ifndef AliEveTRDTrackListEditor_H
#define AliEveTRDTrackListEditor_H

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// AliEveTRDTrackListEditor                                             //
//                                                                      //
// The AliEveTRDTrackListEditor provides the graphical functionality    //
// for the AliEveTRDTrackList. It creates the tabs and canvases, when   //
// they are needed and, as well, frees allocated memory on destruction  //
// (or if new events are loaded and thus some tabs are closed).         //
// The function DrawHistos() accesses the temporary file created by the //
// AliEveTRDTrackList and draws the desired data (the file will be      //
// created within the call of ApplyMacros()). Have a look at this       //
// function to learn more about the structure of the file and how to    //
// access the data.                                                     //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TGedFrame
#include <TGedFrame.h>
#endif

#ifndef ROOT_TGFrame
#include <TGFrame.h>
#endif

class AliEveTRDTrack;
class AliEveTRDTrackList;
class AliTRDReconstructor;
class TCanvas;     
class TEveBrowser;           
class TEveGedEditor;
class TEveManager;
class TFile;
class TGButtonGroup;
class TGCheckButton;
class TGFileInfo;
class TGGroupFrame;
class TGHorizontal3DLine;
class TGHorizontalFrame;
class TGLabel;
class TGListBox;
class TGRadioButton;
class TGString;
class TGTab;
class TGTextButton;
class TGTextEntry;
class TGVerticalFrame;
class TH1;
class TMacroData;
class TMap;
class TMapIter;
class TTree;

class AliEveTRDTrackListEditor: public TGedFrame
{
public:
  AliEveTRDTrackListEditor(const TGWindow* p = 0, Int_t width = 170, Int_t height = 30,
		                       UInt_t options = kChildFrame, Pixel_t back = GetDefaultFrameBackground());
  virtual ~AliEveTRDTrackListEditor();
  virtual void SetModel(TObject* obj);

  void    AddMacro(const Char_t* name, const Char_t* path = ".");  
  void    ApplyMacros();
  void    BrowseMacros();
  void    CloseTabs();
  void    DrawHistos();
  Int_t   GetNSelectedHistograms() const;
  void    HandleMacroPathSet();
  void    HandleNewEventLoaded();
  void    HandleTabChangedToIndex(Int_t);
  void    NewMacros();
  void    RemoveMacros();
  void    SaveMacroList(TMap* list);
  void    SetTrackColor(Int_t ind);
  void    SetTrackModel(Int_t ind);
  void    UpdateDataFromMacroListSelection();
  void    UpdateHistoList();
  void    UpdateMacroList();
  void    UpdateMacroListSelection(Int_t ind);
  
protected:
  AliEveTRDTrackList* fM;                                               // Model object

  void InheritMacroList();                               
  void InheritStyle();                                    

private:
  AliEveTRDTrackListEditor(const AliEveTRDTrackListEditor&);            // Not implemented
  AliEveTRDTrackListEditor& operator=(const AliEveTRDTrackListEditor&); // Not implemented 

  TCanvas*          fHistoCanvas;            // Canvas for the histograms
  TGString*         fHistoCanvasName;        // Name of the histogram canvas

  TMap*             fInheritedMacroList;     // Stores the from the track list inherited macro list

  Bool_t            fInheritSettings;        // Flag indicating, whether the macro list and the style settings will be 
                                             // inherited from the previously loaded track list within the next call 
                                             // of SetModel

  TGHorizontalFrame* fStyleFrame;            // Frame for the style stuff
  TGVerticalFrame*   fMainFrame;             // Top frame for macro functionality.
  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
  TGButtonGroup*     fbgStyleColor;          // Button group for the color model
  TGButtonGroup*     fbgStyleTrack;          // Button group for the track model
  
  TGRadioButton**    frbColor;               // Radio buttons for the color model
  TGRadioButton**    frbTrack;               // Radio buttons for the track model

  TGTextButton*   fbBrowse;                  // "Browse" button
  TGTextButton*   fbNew;                     // "New" button
  TGTextButton*   fbApplyMacros;             // "Apply macros" button
  TGTextButton*   fbRemoveMacros;            // "Remove macros" button
  TGTextButton*   fbDrawHisto;               // "Draw histogram" 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

  TGFileInfo*     fFileInfo;                 // Holds data about opening macros
  Char_t**        fFileTypes;                // File types (for macros)

  // Some labels
  TGLabel* fLabel1;
  TGLabel* fLabel2;
  TGLabel* fLabel3;
  TGLabel* fLabel4;
     
  // Some lines
  TGHorizontal3DLine *fLine1;
  TGHorizontal3DLine *fLine2;
  TGHorizontal3DLine *fLine3;
  TGHorizontal3DLine *fLine4;
  TGHorizontal3DLine *fLine5;  

  TGCheckButton** fCheckButtons;            // Check buttons for histograms

  // Help functions
  void SetDrawingToHistoCanvasTab(Int_t canvas=1);        
  void UpdateHistoCanvasTab(Int_t canvas=1);              

  ClassDef(AliEveTRDTrackListEditor, 0);    // Editor for AliEveTRDTrackList.
};

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// AliEveTRDMacroWizard                                                //
//                                                                      //
// Wizard for creating new macros.                                     //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

class TGTextEdit;
class TGComboBox;
class AliEveTRDMacroWizard : public TGMainFrame
{
public:
  AliEveTRDMacroWizard(const TGWindow* p = 0);
  void Create(Int_t type); //*SIGNAL*
  void Create(Char_t *pname); //*SIGNAL*
  void HandleCreate();

private:
  AliEveTRDMacroWizard(const AliEveTRDMacroWizard&);
  AliEveTRDMacroWizard& operator=(const AliEveTRDMacroWizard&);

  TGTextEntry *fText;
  TGComboBox  *fCombo;
  TGTextEdit  *fTextEdit;
  TGTextButton *fbCreate;                  // "Done" button
  TGTextButton *fbCancel;                  // "Cancel" button
  
  ClassDef(AliEveTRDMacroWizard, 0);      // Helper class to create macro templates 
};

#endif
 AliEveTRDTrackListEditor.h:1
 AliEveTRDTrackListEditor.h:2
 AliEveTRDTrackListEditor.h:3
 AliEveTRDTrackListEditor.h:4
 AliEveTRDTrackListEditor.h:5
 AliEveTRDTrackListEditor.h:6
 AliEveTRDTrackListEditor.h:7
 AliEveTRDTrackListEditor.h:8
 AliEveTRDTrackListEditor.h:9
 AliEveTRDTrackListEditor.h:10
 AliEveTRDTrackListEditor.h:11
 AliEveTRDTrackListEditor.h:12
 AliEveTRDTrackListEditor.h:13
 AliEveTRDTrackListEditor.h:14
 AliEveTRDTrackListEditor.h:15
 AliEveTRDTrackListEditor.h:16
 AliEveTRDTrackListEditor.h:17
 AliEveTRDTrackListEditor.h:18
 AliEveTRDTrackListEditor.h:19
 AliEveTRDTrackListEditor.h:20
 AliEveTRDTrackListEditor.h:21
 AliEveTRDTrackListEditor.h:22
 AliEveTRDTrackListEditor.h:23
 AliEveTRDTrackListEditor.h:24
 AliEveTRDTrackListEditor.h:25
 AliEveTRDTrackListEditor.h:26
 AliEveTRDTrackListEditor.h:27
 AliEveTRDTrackListEditor.h:28
 AliEveTRDTrackListEditor.h:29
 AliEveTRDTrackListEditor.h:30
 AliEveTRDTrackListEditor.h:31
 AliEveTRDTrackListEditor.h:32
 AliEveTRDTrackListEditor.h:33
 AliEveTRDTrackListEditor.h:34
 AliEveTRDTrackListEditor.h:35
 AliEveTRDTrackListEditor.h:36
 AliEveTRDTrackListEditor.h:37
 AliEveTRDTrackListEditor.h:38
 AliEveTRDTrackListEditor.h:39
 AliEveTRDTrackListEditor.h:40
 AliEveTRDTrackListEditor.h:41
 AliEveTRDTrackListEditor.h:42
 AliEveTRDTrackListEditor.h:43
 AliEveTRDTrackListEditor.h:44
 AliEveTRDTrackListEditor.h:45
 AliEveTRDTrackListEditor.h:46
 AliEveTRDTrackListEditor.h:47
 AliEveTRDTrackListEditor.h:48
 AliEveTRDTrackListEditor.h:49
 AliEveTRDTrackListEditor.h:50
 AliEveTRDTrackListEditor.h:51
 AliEveTRDTrackListEditor.h:52
 AliEveTRDTrackListEditor.h:53
 AliEveTRDTrackListEditor.h:54
 AliEveTRDTrackListEditor.h:55
 AliEveTRDTrackListEditor.h:56
 AliEveTRDTrackListEditor.h:57
 AliEveTRDTrackListEditor.h:58
 AliEveTRDTrackListEditor.h:59
 AliEveTRDTrackListEditor.h:60
 AliEveTRDTrackListEditor.h:61
 AliEveTRDTrackListEditor.h:62
 AliEveTRDTrackListEditor.h:63
 AliEveTRDTrackListEditor.h:64
 AliEveTRDTrackListEditor.h:65
 AliEveTRDTrackListEditor.h:66
 AliEveTRDTrackListEditor.h:67
 AliEveTRDTrackListEditor.h:68
 AliEveTRDTrackListEditor.h:69
 AliEveTRDTrackListEditor.h:70
 AliEveTRDTrackListEditor.h:71
 AliEveTRDTrackListEditor.h:72
 AliEveTRDTrackListEditor.h:73
 AliEveTRDTrackListEditor.h:74
 AliEveTRDTrackListEditor.h:75
 AliEveTRDTrackListEditor.h:76
 AliEveTRDTrackListEditor.h:77
 AliEveTRDTrackListEditor.h:78
 AliEveTRDTrackListEditor.h:79
 AliEveTRDTrackListEditor.h:80
 AliEveTRDTrackListEditor.h:81
 AliEveTRDTrackListEditor.h:82
 AliEveTRDTrackListEditor.h:83
 AliEveTRDTrackListEditor.h:84
 AliEveTRDTrackListEditor.h:85
 AliEveTRDTrackListEditor.h:86
 AliEveTRDTrackListEditor.h:87
 AliEveTRDTrackListEditor.h:88
 AliEveTRDTrackListEditor.h:89
 AliEveTRDTrackListEditor.h:90
 AliEveTRDTrackListEditor.h:91
 AliEveTRDTrackListEditor.h:92
 AliEveTRDTrackListEditor.h:93
 AliEveTRDTrackListEditor.h:94
 AliEveTRDTrackListEditor.h:95
 AliEveTRDTrackListEditor.h:96
 AliEveTRDTrackListEditor.h:97
 AliEveTRDTrackListEditor.h:98
 AliEveTRDTrackListEditor.h:99
 AliEveTRDTrackListEditor.h:100
 AliEveTRDTrackListEditor.h:101
 AliEveTRDTrackListEditor.h:102
 AliEveTRDTrackListEditor.h:103
 AliEveTRDTrackListEditor.h:104
 AliEveTRDTrackListEditor.h:105
 AliEveTRDTrackListEditor.h:106
 AliEveTRDTrackListEditor.h:107
 AliEveTRDTrackListEditor.h:108
 AliEveTRDTrackListEditor.h:109
 AliEveTRDTrackListEditor.h:110
 AliEveTRDTrackListEditor.h:111
 AliEveTRDTrackListEditor.h:112
 AliEveTRDTrackListEditor.h:113
 AliEveTRDTrackListEditor.h:114
 AliEveTRDTrackListEditor.h:115
 AliEveTRDTrackListEditor.h:116
 AliEveTRDTrackListEditor.h:117
 AliEveTRDTrackListEditor.h:118
 AliEveTRDTrackListEditor.h:119
 AliEveTRDTrackListEditor.h:120
 AliEveTRDTrackListEditor.h:121
 AliEveTRDTrackListEditor.h:122
 AliEveTRDTrackListEditor.h:123
 AliEveTRDTrackListEditor.h:124
 AliEveTRDTrackListEditor.h:125
 AliEveTRDTrackListEditor.h:126
 AliEveTRDTrackListEditor.h:127
 AliEveTRDTrackListEditor.h:128
 AliEveTRDTrackListEditor.h:129
 AliEveTRDTrackListEditor.h:130
 AliEveTRDTrackListEditor.h:131
 AliEveTRDTrackListEditor.h:132
 AliEveTRDTrackListEditor.h:133
 AliEveTRDTrackListEditor.h:134
 AliEveTRDTrackListEditor.h:135
 AliEveTRDTrackListEditor.h:136
 AliEveTRDTrackListEditor.h:137
 AliEveTRDTrackListEditor.h:138
 AliEveTRDTrackListEditor.h:139
 AliEveTRDTrackListEditor.h:140
 AliEveTRDTrackListEditor.h:141
 AliEveTRDTrackListEditor.h:142
 AliEveTRDTrackListEditor.h:143
 AliEveTRDTrackListEditor.h:144
 AliEveTRDTrackListEditor.h:145
 AliEveTRDTrackListEditor.h:146
 AliEveTRDTrackListEditor.h:147
 AliEveTRDTrackListEditor.h:148
 AliEveTRDTrackListEditor.h:149
 AliEveTRDTrackListEditor.h:150
 AliEveTRDTrackListEditor.h:151
 AliEveTRDTrackListEditor.h:152
 AliEveTRDTrackListEditor.h:153
 AliEveTRDTrackListEditor.h:154
 AliEveTRDTrackListEditor.h:155
 AliEveTRDTrackListEditor.h:156
 AliEveTRDTrackListEditor.h:157
 AliEveTRDTrackListEditor.h:158
 AliEveTRDTrackListEditor.h:159
 AliEveTRDTrackListEditor.h:160
 AliEveTRDTrackListEditor.h:161
 AliEveTRDTrackListEditor.h:162
 AliEveTRDTrackListEditor.h:163
 AliEveTRDTrackListEditor.h:164
 AliEveTRDTrackListEditor.h:165
 AliEveTRDTrackListEditor.h:166
 AliEveTRDTrackListEditor.h:167
 AliEveTRDTrackListEditor.h:168
 AliEveTRDTrackListEditor.h:169
 AliEveTRDTrackListEditor.h:170
 AliEveTRDTrackListEditor.h:171
 AliEveTRDTrackListEditor.h:172
 AliEveTRDTrackListEditor.h:173
 AliEveTRDTrackListEditor.h:174
 AliEveTRDTrackListEditor.h:175
 AliEveTRDTrackListEditor.h:176
 AliEveTRDTrackListEditor.h:177
 AliEveTRDTrackListEditor.h:178
 AliEveTRDTrackListEditor.h:179
 AliEveTRDTrackListEditor.h:180
 AliEveTRDTrackListEditor.h:181
 AliEveTRDTrackListEditor.h:182
 AliEveTRDTrackListEditor.h:183
 AliEveTRDTrackListEditor.h:184