ROOT logo
// @(#)root/eve:$Id$
// Author: Matevz Tadel 2007

/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

#include "AliEveMacroExecutorWindow.h"
#include "AliEveMacroExecutor.h"
#include "AliEveMacro.h"
#include "AliEveEventManager.h"

#include <TGedEditor.h>
#include <TGLabel.h>
#include <TGListBox.h>
#include <TGTextEntry.h>
#include <Buttons.h>

#include <TPRegexp.h>

class AliEveMEWListBox : public TGListBox
{
public:
  AliEveMEWListBox(const TGWindow* p = 0, Int_t id = -1) : TGListBox(p, id)
  {
    if (gfGC == 0)
    {
      const TGGC& old = TGTextLBEntry::GetDefaultGC();

      gfFont = gClient->GetFontPool()->GetFont("-*-lucidatypewriter-*-*-*-*-12-*-*-*-*-*-iso8859-1");
      gfGC   = gClient->GetGCPool()->GetGC((GCValues_t*) old.GetAttributes(), kTRUE);
      gfGC->SetFont(gVirtualX->GetFontHandle(gfFont->GetFontStruct()));
    }
  }

  using TGListBox::AddEntry;
  virtual void AddEntry(const char* s, Int_t id)
  {
    static const Pixel_t gkBackground[] = { 0x00ffffff, 0xf5f7f8 };

    TGTextLBEntry *lbe = new TGTextLBEntry(fLbc, new TGString(s), id,
					   gfGC->GetGC(), gfFont->GetFontStruct());
    fItemVsize = TMath::Max(fItemVsize, lbe->GetDefaultHeight());
    fLbc->AddEntry(lbe, new TGLayoutHints(kLHintsExpandX | kLHintsTop));
    // Need to set it here as the above line sets it to white (for some strange reason).
    lbe->SetBackgroundColor(gkBackground[id%2]);
  }

protected:
  static TGGC    *gfGC;
  static TGFont  *gfFont;

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

TGGC   *AliEveMEWListBox::gfGC   = 0;
TGFont *AliEveMEWListBox::gfFont = 0;


class AliEveMEWEditor : public TGedEditor
{
public:
  AliEveMEWEditor(AliEveMacroExecutorWindow* w) : TGedEditor(0), fMEW(w) {}
  virtual ~AliEveMEWEditor() {}
  virtual void Update(TGedFrame* gframe=0)
  {
    TGedEditor::Update(gframe);
    fMEW->PopulateMacros();
  }
  virtual void Refresh()
  {
    SetModel(fPad, fModel, kButton1Down);
  }
protected:
  AliEveMacroExecutorWindow* fMEW;
private:
  AliEveMEWEditor(const AliEveMEWEditor&);            // Not implemented
  AliEveMEWEditor& operator=(const AliEveMEWEditor&); // Not implemented
};

//______________________________________________________________________________
// Full description of AliEveMacroExecutorWindow
//

ClassImp(AliEveMacroExecutorWindow)

//______________________________________________________________________________
AliEveMacroExecutorWindow::AliEveMacroExecutorWindow(AliEveMacroExecutor* master) :
  TGMainFrame(gClient->GetRoot()), fM(master),
  fMainFrame(0), fCtrlFrame(0), fListBox(0), fEditor(0),
  fSelectTags(0),
  fBoxContents()
{
  // Constructor.

  fMainFrame = new TGVerticalFrame(this);
  AddFrame(fMainFrame, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));

  // TGHorizontalFrame *f = 0;
  TGButton          *b = 0;
  {
    fCtrlFrame = MkHFrame(fMainFrame);
    fCtrlFrame->Resize(400, 22);

    b = new TGTextButton(fCtrlFrame, "Reload event");
    fCtrlFrame->AddFrame(b);
    b->Connect("Clicked()", "AliEveMacroExecutorWindow", this,
	       "DoReloadEvent()");

    MkLabel(fCtrlFrame, "Select: ", 48);
    fSelectTags = new TGTextEntry(fCtrlFrame);
    fCtrlFrame->AddFrame(fSelectTags, new TGLayoutHints(kLHintsNormal));//|kLHintsExpandX));
    fSelectTags->Connect("ReturnPressed()", "AliEveMacroExecutorWindow", this,
			 "DoSelectTags()");
    b = new TGTextButton(fCtrlFrame, "Select");
    fCtrlFrame->AddFrame(b);
    b->Connect("Clicked()", "AliEveMacroExecutorWindow", this,
	       "DoSelectTags()");

    b = new TGTextButton(fCtrlFrame, "Enable all");
    fCtrlFrame->AddFrame(b);
    b->Connect("Clicked()", "AliEveMacroExecutorWindow", this,
	       "DoEnableAll()");

    b = new TGTextButton(fCtrlFrame, "Disable all");
    fCtrlFrame->AddFrame(b);
    b->Connect("Clicked()", "AliEveMacroExecutorWindow", this,
	       "DoDisableAll()");
  }

  fListBox = new AliEveMEWListBox(fMainFrame);
  fMainFrame->AddFrame(fListBox, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
  fListBox->Resize(400, 400);
  fListBox->Connect("Selected(Int_t)", "AliEveMacroExecutorWindow", this,
		    "DoMacroSelected(Int_t)");

  fMainFrame->SetEditDisabled(kEditEnable);
  fMainFrame->SetEditable();
  fEditor = new AliEveMEWEditor(this);
  fEditor->SetGlobal(kFALSE);
  fMainFrame->SetEditable(kEditDisable);
  fMainFrame->SetEditable(kFALSE);
  {
    TGFrameElement *el = 0;
    TIter next(fMainFrame->GetList());
    while ((el = (TGFrameElement *) next())) {
      if (el->fFrame == fEditor)
	if (el->fLayout) {
	  el->fLayout->SetLayoutHints(kLHintsExpandX);
	  el->fLayout->SetPadLeft(1); el->fLayout->SetPadRight(1);
	  el->fLayout->SetPadTop(2);  el->fLayout->SetPadBottom(2);
	  break;
	}
    }
  }
  fEditor->Resize(400, 150);
  fEditor->ChangeOptions(fEditor->GetOptions() | kFixedHeight);

  Resize(400, 700);

  //SetCleanup(kDeepCleanup);
  Layout();
  MapSubwindows();
  MapWindow();

  AliEveEventManager::GetMaster()->Connect("NewEventLoaded()", "AliEveMacroExecutorWindow", this,
			"NewEventLoaded()");
}

AliEveMacroExecutorWindow::~AliEveMacroExecutorWindow()
{
  // Destructor.
	fBoxContents.clear();
    AliEveEventManager::GetMaster()->Disconnect("NewEventLoaded");/*()", this);*/
}

/******************************************************************************/

void AliEveMacroExecutorWindow::PopulateMacros(Bool_t keep_selected)
{
  // Populate list-box (or whatever will replace it) with all macros.
  // prototype: no selection, sorting

  // printf("AliEveMacroExecutorWindow::PopulateMacros()\n");

  AliEveMacro* ex_sel = 0;
  if (keep_selected && fListBox->GetSelected() != -1)
    ex_sel = fBoxContents[fListBox->GetSelected()];

  Int_t sbar_pos = fListBox->GetVScrollbar()->GetPosition();

  fListBox->RemoveAll();
  fBoxContents.clear();

  TPMERegexp *regexp = 0;
  TString     select = fSelectTags->GetText();
  if ( ! select.IsNull())
  {
    regexp = new TPMERegexp(select, "io");
  }

  TIter next(fM->fMacros);
  AliEveMacro *mac;
  Int_t        id =  0;
  Int_t    sel_id = -1;
  while ((mac = (AliEveMacro*) next()))
  {
    if (regexp && regexp->Match(mac->GetTags()) == 0)
      continue;
    if (mac == ex_sel)
      sel_id = id;

    fListBox->AddEntry(mac->FormForDisplay(), id++);
    fBoxContents.push_back(mac);
  }

  if (sel_id != -1)
    fListBox->Select(sel_id);

  fListBox->Layout();
  fListBox->GetVScrollbar()->SetPosition(sbar_pos);
  fListBox->MapSubwindows();
}

void AliEveMacroExecutorWindow::SetActiveStateOfShownMacros(Bool_t active)
{
  // Set active-state of all shown macros to active.
  // Automatically refreshes the list and editor.

  for (std::vector<AliEveMacro*>::iterator m = fBoxContents.begin(); m != fBoxContents.end(); ++m)
    (*m)->SetActive(active);
  PopulateMacros();
  fEditor->Refresh();
}

/******************************************************************************/

void AliEveMacroExecutorWindow::NewEventLoaded()
{
  // Slot called after a new event has been loaded

  // !!! Once we have exit status from the macro, can update GUI showing this.
}

void AliEveMacroExecutorWindow::DoReloadEvent()
{
  // Slot for reload-event.

  AliEveEventManager::GetMaster()->GotoEvent(AliEveEventManager::GetMaster()->GetEventId());
}

void AliEveMacroExecutorWindow::DoSelectTags()
{
  // Slot for select-tags.

  PopulateMacros();
}

void AliEveMacroExecutorWindow::DoMacroSelected(Int_t mid)
{
  // Slot for macro-selected.

  fEditor->SetModel(0, fBoxContents[mid], kButton1Down);
}

/******************************************************************************/

TGHorizontalFrame* AliEveMacroExecutorWindow::MkHFrame(TGCompositeFrame* p)
{
  // Make standard horizontal frame.

  if (p == 0)
    p = this;
  TGHorizontalFrame* f = new TGHorizontalFrame(p);
  p->AddFrame(f, new TGLayoutHints(kLHintsNormal|kLHintsExpandX));
  return f;
}

TGLabel* AliEveMacroExecutorWindow::MkLabel(TGCompositeFrame* p, const char* txt, Int_t width,
					    Int_t lo, Int_t ro, Int_t to, Int_t bo)
{
  // Make standard label.

  TGLabel *l = new TGLabel(p, txt);
  p->AddFrame(l, new TGLayoutHints(kLHintsNormal, lo,ro,to,bo));
  l->SetTextJustify(kTextRight);
  l->SetWidth(width);
  l->ChangeOptions(l->GetOptions() | kFixedWidth);
  return l;
}
 AliEveMacroExecutorWindow.cxx:1
 AliEveMacroExecutorWindow.cxx:2
 AliEveMacroExecutorWindow.cxx:3
 AliEveMacroExecutorWindow.cxx:4
 AliEveMacroExecutorWindow.cxx:5
 AliEveMacroExecutorWindow.cxx:6
 AliEveMacroExecutorWindow.cxx:7
 AliEveMacroExecutorWindow.cxx:8
 AliEveMacroExecutorWindow.cxx:9
 AliEveMacroExecutorWindow.cxx:10
 AliEveMacroExecutorWindow.cxx:11
 AliEveMacroExecutorWindow.cxx:12
 AliEveMacroExecutorWindow.cxx:13
 AliEveMacroExecutorWindow.cxx:14
 AliEveMacroExecutorWindow.cxx:15
 AliEveMacroExecutorWindow.cxx:16
 AliEveMacroExecutorWindow.cxx:17
 AliEveMacroExecutorWindow.cxx:18
 AliEveMacroExecutorWindow.cxx:19
 AliEveMacroExecutorWindow.cxx:20
 AliEveMacroExecutorWindow.cxx:21
 AliEveMacroExecutorWindow.cxx:22
 AliEveMacroExecutorWindow.cxx:23
 AliEveMacroExecutorWindow.cxx:24
 AliEveMacroExecutorWindow.cxx:25
 AliEveMacroExecutorWindow.cxx:26
 AliEveMacroExecutorWindow.cxx:27
 AliEveMacroExecutorWindow.cxx:28
 AliEveMacroExecutorWindow.cxx:29
 AliEveMacroExecutorWindow.cxx:30
 AliEveMacroExecutorWindow.cxx:31
 AliEveMacroExecutorWindow.cxx:32
 AliEveMacroExecutorWindow.cxx:33
 AliEveMacroExecutorWindow.cxx:34
 AliEveMacroExecutorWindow.cxx:35
 AliEveMacroExecutorWindow.cxx:36
 AliEveMacroExecutorWindow.cxx:37
 AliEveMacroExecutorWindow.cxx:38
 AliEveMacroExecutorWindow.cxx:39
 AliEveMacroExecutorWindow.cxx:40
 AliEveMacroExecutorWindow.cxx:41
 AliEveMacroExecutorWindow.cxx:42
 AliEveMacroExecutorWindow.cxx:43
 AliEveMacroExecutorWindow.cxx:44
 AliEveMacroExecutorWindow.cxx:45
 AliEveMacroExecutorWindow.cxx:46
 AliEveMacroExecutorWindow.cxx:47
 AliEveMacroExecutorWindow.cxx:48
 AliEveMacroExecutorWindow.cxx:49
 AliEveMacroExecutorWindow.cxx:50
 AliEveMacroExecutorWindow.cxx:51
 AliEveMacroExecutorWindow.cxx:52
 AliEveMacroExecutorWindow.cxx:53
 AliEveMacroExecutorWindow.cxx:54
 AliEveMacroExecutorWindow.cxx:55
 AliEveMacroExecutorWindow.cxx:56
 AliEveMacroExecutorWindow.cxx:57
 AliEveMacroExecutorWindow.cxx:58
 AliEveMacroExecutorWindow.cxx:59
 AliEveMacroExecutorWindow.cxx:60
 AliEveMacroExecutorWindow.cxx:61
 AliEveMacroExecutorWindow.cxx:62
 AliEveMacroExecutorWindow.cxx:63
 AliEveMacroExecutorWindow.cxx:64
 AliEveMacroExecutorWindow.cxx:65
 AliEveMacroExecutorWindow.cxx:66
 AliEveMacroExecutorWindow.cxx:67
 AliEveMacroExecutorWindow.cxx:68
 AliEveMacroExecutorWindow.cxx:69
 AliEveMacroExecutorWindow.cxx:70
 AliEveMacroExecutorWindow.cxx:71
 AliEveMacroExecutorWindow.cxx:72
 AliEveMacroExecutorWindow.cxx:73
 AliEveMacroExecutorWindow.cxx:74
 AliEveMacroExecutorWindow.cxx:75
 AliEveMacroExecutorWindow.cxx:76
 AliEveMacroExecutorWindow.cxx:77
 AliEveMacroExecutorWindow.cxx:78
 AliEveMacroExecutorWindow.cxx:79
 AliEveMacroExecutorWindow.cxx:80
 AliEveMacroExecutorWindow.cxx:81
 AliEveMacroExecutorWindow.cxx:82
 AliEveMacroExecutorWindow.cxx:83
 AliEveMacroExecutorWindow.cxx:84
 AliEveMacroExecutorWindow.cxx:85
 AliEveMacroExecutorWindow.cxx:86
 AliEveMacroExecutorWindow.cxx:87
 AliEveMacroExecutorWindow.cxx:88
 AliEveMacroExecutorWindow.cxx:89
 AliEveMacroExecutorWindow.cxx:90
 AliEveMacroExecutorWindow.cxx:91
 AliEveMacroExecutorWindow.cxx:92
 AliEveMacroExecutorWindow.cxx:93
 AliEveMacroExecutorWindow.cxx:94
 AliEveMacroExecutorWindow.cxx:95
 AliEveMacroExecutorWindow.cxx:96
 AliEveMacroExecutorWindow.cxx:97
 AliEveMacroExecutorWindow.cxx:98
 AliEveMacroExecutorWindow.cxx:99
 AliEveMacroExecutorWindow.cxx:100
 AliEveMacroExecutorWindow.cxx:101
 AliEveMacroExecutorWindow.cxx:102
 AliEveMacroExecutorWindow.cxx:103
 AliEveMacroExecutorWindow.cxx:104
 AliEveMacroExecutorWindow.cxx:105
 AliEveMacroExecutorWindow.cxx:106
 AliEveMacroExecutorWindow.cxx:107
 AliEveMacroExecutorWindow.cxx:108
 AliEveMacroExecutorWindow.cxx:109
 AliEveMacroExecutorWindow.cxx:110
 AliEveMacroExecutorWindow.cxx:111
 AliEveMacroExecutorWindow.cxx:112
 AliEveMacroExecutorWindow.cxx:113
 AliEveMacroExecutorWindow.cxx:114
 AliEveMacroExecutorWindow.cxx:115
 AliEveMacroExecutorWindow.cxx:116
 AliEveMacroExecutorWindow.cxx:117
 AliEveMacroExecutorWindow.cxx:118
 AliEveMacroExecutorWindow.cxx:119
 AliEveMacroExecutorWindow.cxx:120
 AliEveMacroExecutorWindow.cxx:121
 AliEveMacroExecutorWindow.cxx:122
 AliEveMacroExecutorWindow.cxx:123
 AliEveMacroExecutorWindow.cxx:124
 AliEveMacroExecutorWindow.cxx:125
 AliEveMacroExecutorWindow.cxx:126
 AliEveMacroExecutorWindow.cxx:127
 AliEveMacroExecutorWindow.cxx:128
 AliEveMacroExecutorWindow.cxx:129
 AliEveMacroExecutorWindow.cxx:130
 AliEveMacroExecutorWindow.cxx:131
 AliEveMacroExecutorWindow.cxx:132
 AliEveMacroExecutorWindow.cxx:133
 AliEveMacroExecutorWindow.cxx:134
 AliEveMacroExecutorWindow.cxx:135
 AliEveMacroExecutorWindow.cxx:136
 AliEveMacroExecutorWindow.cxx:137
 AliEveMacroExecutorWindow.cxx:138
 AliEveMacroExecutorWindow.cxx:139
 AliEveMacroExecutorWindow.cxx:140
 AliEveMacroExecutorWindow.cxx:141
 AliEveMacroExecutorWindow.cxx:142
 AliEveMacroExecutorWindow.cxx:143
 AliEveMacroExecutorWindow.cxx:144
 AliEveMacroExecutorWindow.cxx:145
 AliEveMacroExecutorWindow.cxx:146
 AliEveMacroExecutorWindow.cxx:147
 AliEveMacroExecutorWindow.cxx:148
 AliEveMacroExecutorWindow.cxx:149
 AliEveMacroExecutorWindow.cxx:150
 AliEveMacroExecutorWindow.cxx:151
 AliEveMacroExecutorWindow.cxx:152
 AliEveMacroExecutorWindow.cxx:153
 AliEveMacroExecutorWindow.cxx:154
 AliEveMacroExecutorWindow.cxx:155
 AliEveMacroExecutorWindow.cxx:156
 AliEveMacroExecutorWindow.cxx:157
 AliEveMacroExecutorWindow.cxx:158
 AliEveMacroExecutorWindow.cxx:159
 AliEveMacroExecutorWindow.cxx:160
 AliEveMacroExecutorWindow.cxx:161
 AliEveMacroExecutorWindow.cxx:162
 AliEveMacroExecutorWindow.cxx:163
 AliEveMacroExecutorWindow.cxx:164
 AliEveMacroExecutorWindow.cxx:165
 AliEveMacroExecutorWindow.cxx:166
 AliEveMacroExecutorWindow.cxx:167
 AliEveMacroExecutorWindow.cxx:168
 AliEveMacroExecutorWindow.cxx:169
 AliEveMacroExecutorWindow.cxx:170
 AliEveMacroExecutorWindow.cxx:171
 AliEveMacroExecutorWindow.cxx:172
 AliEveMacroExecutorWindow.cxx:173
 AliEveMacroExecutorWindow.cxx:174
 AliEveMacroExecutorWindow.cxx:175
 AliEveMacroExecutorWindow.cxx:176
 AliEveMacroExecutorWindow.cxx:177
 AliEveMacroExecutorWindow.cxx:178
 AliEveMacroExecutorWindow.cxx:179
 AliEveMacroExecutorWindow.cxx:180
 AliEveMacroExecutorWindow.cxx:181
 AliEveMacroExecutorWindow.cxx:182
 AliEveMacroExecutorWindow.cxx:183
 AliEveMacroExecutorWindow.cxx:184
 AliEveMacroExecutorWindow.cxx:185
 AliEveMacroExecutorWindow.cxx:186
 AliEveMacroExecutorWindow.cxx:187
 AliEveMacroExecutorWindow.cxx:188
 AliEveMacroExecutorWindow.cxx:189
 AliEveMacroExecutorWindow.cxx:190
 AliEveMacroExecutorWindow.cxx:191
 AliEveMacroExecutorWindow.cxx:192
 AliEveMacroExecutorWindow.cxx:193
 AliEveMacroExecutorWindow.cxx:194
 AliEveMacroExecutorWindow.cxx:195
 AliEveMacroExecutorWindow.cxx:196
 AliEveMacroExecutorWindow.cxx:197
 AliEveMacroExecutorWindow.cxx:198
 AliEveMacroExecutorWindow.cxx:199
 AliEveMacroExecutorWindow.cxx:200
 AliEveMacroExecutorWindow.cxx:201
 AliEveMacroExecutorWindow.cxx:202
 AliEveMacroExecutorWindow.cxx:203
 AliEveMacroExecutorWindow.cxx:204
 AliEveMacroExecutorWindow.cxx:205
 AliEveMacroExecutorWindow.cxx:206
 AliEveMacroExecutorWindow.cxx:207
 AliEveMacroExecutorWindow.cxx:208
 AliEveMacroExecutorWindow.cxx:209
 AliEveMacroExecutorWindow.cxx:210
 AliEveMacroExecutorWindow.cxx:211
 AliEveMacroExecutorWindow.cxx:212
 AliEveMacroExecutorWindow.cxx:213
 AliEveMacroExecutorWindow.cxx:214
 AliEveMacroExecutorWindow.cxx:215
 AliEveMacroExecutorWindow.cxx:216
 AliEveMacroExecutorWindow.cxx:217
 AliEveMacroExecutorWindow.cxx:218
 AliEveMacroExecutorWindow.cxx:219
 AliEveMacroExecutorWindow.cxx:220
 AliEveMacroExecutorWindow.cxx:221
 AliEveMacroExecutorWindow.cxx:222
 AliEveMacroExecutorWindow.cxx:223
 AliEveMacroExecutorWindow.cxx:224
 AliEveMacroExecutorWindow.cxx:225
 AliEveMacroExecutorWindow.cxx:226
 AliEveMacroExecutorWindow.cxx:227
 AliEveMacroExecutorWindow.cxx:228
 AliEveMacroExecutorWindow.cxx:229
 AliEveMacroExecutorWindow.cxx:230
 AliEveMacroExecutorWindow.cxx:231
 AliEveMacroExecutorWindow.cxx:232
 AliEveMacroExecutorWindow.cxx:233
 AliEveMacroExecutorWindow.cxx:234
 AliEveMacroExecutorWindow.cxx:235
 AliEveMacroExecutorWindow.cxx:236
 AliEveMacroExecutorWindow.cxx:237
 AliEveMacroExecutorWindow.cxx:238
 AliEveMacroExecutorWindow.cxx:239
 AliEveMacroExecutorWindow.cxx:240
 AliEveMacroExecutorWindow.cxx:241
 AliEveMacroExecutorWindow.cxx:242
 AliEveMacroExecutorWindow.cxx:243
 AliEveMacroExecutorWindow.cxx:244
 AliEveMacroExecutorWindow.cxx:245
 AliEveMacroExecutorWindow.cxx:246
 AliEveMacroExecutorWindow.cxx:247
 AliEveMacroExecutorWindow.cxx:248
 AliEveMacroExecutorWindow.cxx:249
 AliEveMacroExecutorWindow.cxx:250
 AliEveMacroExecutorWindow.cxx:251
 AliEveMacroExecutorWindow.cxx:252
 AliEveMacroExecutorWindow.cxx:253
 AliEveMacroExecutorWindow.cxx:254
 AliEveMacroExecutorWindow.cxx:255
 AliEveMacroExecutorWindow.cxx:256
 AliEveMacroExecutorWindow.cxx:257
 AliEveMacroExecutorWindow.cxx:258
 AliEveMacroExecutorWindow.cxx:259
 AliEveMacroExecutorWindow.cxx:260
 AliEveMacroExecutorWindow.cxx:261
 AliEveMacroExecutorWindow.cxx:262
 AliEveMacroExecutorWindow.cxx:263
 AliEveMacroExecutorWindow.cxx:264
 AliEveMacroExecutorWindow.cxx:265
 AliEveMacroExecutorWindow.cxx:266
 AliEveMacroExecutorWindow.cxx:267
 AliEveMacroExecutorWindow.cxx:268
 AliEveMacroExecutorWindow.cxx:269
 AliEveMacroExecutorWindow.cxx:270
 AliEveMacroExecutorWindow.cxx:271
 AliEveMacroExecutorWindow.cxx:272
 AliEveMacroExecutorWindow.cxx:273
 AliEveMacroExecutorWindow.cxx:274
 AliEveMacroExecutorWindow.cxx:275
 AliEveMacroExecutorWindow.cxx:276
 AliEveMacroExecutorWindow.cxx:277
 AliEveMacroExecutorWindow.cxx:278
 AliEveMacroExecutorWindow.cxx:279
 AliEveMacroExecutorWindow.cxx:280
 AliEveMacroExecutorWindow.cxx:281
 AliEveMacroExecutorWindow.cxx:282
 AliEveMacroExecutorWindow.cxx:283
 AliEveMacroExecutorWindow.cxx:284
 AliEveMacroExecutorWindow.cxx:285
 AliEveMacroExecutorWindow.cxx:286
 AliEveMacroExecutorWindow.cxx:287
 AliEveMacroExecutorWindow.cxx:288
 AliEveMacroExecutorWindow.cxx:289
 AliEveMacroExecutorWindow.cxx:290
 AliEveMacroExecutorWindow.cxx:291
 AliEveMacroExecutorWindow.cxx:292
 AliEveMacroExecutorWindow.cxx:293
 AliEveMacroExecutorWindow.cxx:294