// @(#)root/sessionviewer:$Id$
// Author: G Ganis, Jul 2005

/*************************************************************************
 * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "TError.h"
#include "TPRegexp.h"
#include "TGFrame.h"
#include "TGTextView.h"
#include "TGScrollBar.h"
#include "TGLabel.h"
#include "TProof.h"
#include "TProofProgressDialog.h"
#include "TProofProgressLog.h"
#include "TProofLog.h"
#include "TGNumberEntry.h"
#include "TGListBox.h"
#include "TGMenu.h"
#include "TGButton.h"

const UInt_t kLogElemFilled = BIT(17); // If the log element has been retrieved at least once
const UInt_t kDefaultActive = BIT(18); // If the log element is active by default

///////////////////////////////////////////////////////////////////////////
//                                                                       //
// TProofProgressLog                                                     //
//                                                                       //
// Dialog used to display Proof session logs from the Proof progress     //
// dialog.                                                               //
// It uses TProofMgr::GetSessionLogs() mechanism internally              //
//                                                                       //
///////////////////////////////////////////////////////////////////////////

ClassImp(TProofProgressLog)

//____________________________________________________________________________
TProofProgressLog::TProofProgressLog(TProofProgressDialog *d, Int_t w, Int_t h) :
   TGTransientFrame(gClient->GetRoot(), gClient->GetRoot(), w, h)
{
   // Create a window frame for log messages.

   fDialog = d;
   if (fDialog) fSessionUrl = fDialog->fSessionUrl;
   fSessionIdx = 0;

   Init(w, h);
}

//____________________________________________________________________________
TProofProgressLog::TProofProgressLog(const char *url, Int_t idx, Int_t w, Int_t h) :
   TGTransientFrame(gClient->GetRoot(), gClient->GetRoot(), w, h)
{
   // Create a window frame for log messages.

   fDialog = 0;
   fSessionUrl = url;
   fSessionIdx = (idx > 0) ? -idx : idx;

   Init(w, h);
}

//____________________________________________________________________________
void TProofProgressLog::Init(Int_t w, Int_t h)
{
   // Init window frame for log messages.

   fProofLog = 0;
   fFullText = kFALSE;
   fTextType = kStd;
   // use hierarchical cleaning
   SetCleanup(kDeepCleanup);

   //The text window
   TGHorizontalFrame *htotal = new TGHorizontalFrame(this, w, h);
   TGVerticalFrame *vtextbox = new TGVerticalFrame(htotal, w, h);
   //fText = new TGTextView(this, w, h);
   fText = new TGTextView(vtextbox, w, h);
   vtextbox->AddFrame(fText, new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY, 3, 3, 3, 3));

   //The frame for choosing workers
   fVworkers = new TGVerticalFrame(htotal);
   // URL choice
   TGLabel *laburl = new TGLabel(fVworkers, "Enter cluster URL:");
   fVworkers->AddFrame(laburl, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 2, 2, 2));
   fUrlText = new TGTextEntry(fVworkers);
   fUrlText->SetText(fSessionUrl.Data());
   fVworkers->AddFrame(fUrlText, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 5, 0, 0, 0));
   //The lower row of number entries and buttons
   TGHorizontalFrame *hfurlbox = new TGHorizontalFrame(fVworkers, 20, 20);
   TGLabel *labsess = new TGLabel(hfurlbox, "Enter session:");
   hfurlbox->AddFrame(labsess, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 2, 2, 2));
   fSessNum = new TGNumberEntry(hfurlbox, 0, 5, -1, TGNumberFormat::kNESInteger);
   fSessNum->SetLimits(TGNumberFormat::kNELLimitMax, 0., 0.);
   fSessNum->SetIntNumber(0);
   fSessNum->GetNumberEntry()->SetToolTipText("Use 0 for the last known one,"
                                              " negative numbers for the previous ones, e.g. -1 for the last-but-one");
   hfurlbox->AddFrame(fSessNum, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 0, 0, 0));
   fUrlButton = new TGTextButton(hfurlbox, "Get logs info");
   fUrlButton->Connect("Clicked()", "TProofProgressLog", this, "Rebuild()");
   hfurlbox->AddFrame(fUrlButton, new TGLayoutHints(kLHintsCenterY | kLHintsRight, 4, 0, 0, 0));
   fVworkers->AddFrame(hfurlbox, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2));

   TGNumberEntry *nent = new TGNumberEntry(hfurlbox);
   fVworkers->AddFrame(nent, new TGLayoutHints(kLHintsTop | kLHintsLeft, 4, 0, 0, 0));

   //The list of workers
   fLogList = 0;
   BuildLogList(kTRUE);
   fLogList->Resize(102,52);
   fLogList->SetMultipleSelections(kTRUE);

   //The SelectAll/ClearAll buttons
   TGHorizontalFrame *hfselbox = new TGHorizontalFrame(fVworkers, 20, 20);
   TGLabel *label1 = new TGLabel(hfselbox,"Choose workers:");
   hfselbox->AddFrame(label1, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 0, 0, 0, 0));
   TGTextButton *selall = new TGTextButton(hfselbox,   "     &All      ");
   selall->Connect("Clicked()", "TProofProgressLog", this, "Select(=0)");
   hfselbox->AddFrame(selall, new TGLayoutHints(kLHintsCenterY | kLHintsRight, 10, 0, 0, 0));
   TGTextButton *clearall = new TGTextButton(hfselbox, "     &Clear    ");
   clearall->Connect("Clicked()", "TProofProgressLog", this, "Select(=1)");
   hfselbox->AddFrame(clearall, new TGLayoutHints(kLHintsCenterY | kLHintsRight, 10, 0, 0, 0));

   //select the defaut actives to start with
   Select(0, kFALSE);

   //Display button
   fLogNew = new TGTextButton(fVworkers, "&Display");
   fLogNew->Connect("Clicked()", "TProofProgressLog", this, "DoLog(=kFALSE)");
   //fLogNew->Resize(102, 20);
   // fLogNew->SetMargins(1, 1, 0, 1);
   fLogNew->SetTextColor(0xffffff, kFALSE);
   fLogNew->SetBackgroundColor(0x000044);
   fVworkers->AddFrame(hfselbox, new TGLayoutHints(kLHintsExpandX | kLHintsTop, 5, 2, 2, 2));
   fVworkers->AddFrame(fLogList, new TGLayoutHints(kLHintsExpandX | kLHintsTop | kLHintsExpandY, 2, 2, 5, 2));
   fVworkers->AddFrame(fLogNew, new TGLayoutHints(kLHintsExpandX | kLHintsTop , 2, 2, 1, 5));

   htotal->AddFrame(fVworkers, new TGLayoutHints(kLHintsCenterY | kLHintsLeft | kLHintsExpandY, 2, 2, 2, 2));

   //The lower row of number entries and buttons
   TGHorizontalFrame *hflogbox = new TGHorizontalFrame(vtextbox, 550, 20);
   fClose = new TGTextButton(hflogbox, "  &Close  ");
   fClose->Connect("Clicked()", "TProofProgressLog", this, "CloseWindow()");
   hflogbox->AddFrame(fClose, new TGLayoutHints(kLHintsCenterY |
                                                kLHintsRight, 10, 2, 2, 2));

   //Saving to a file controls
   fSave = new TGTextButton(hflogbox, "&Save");
   fSave->Connect("Clicked()", "TProofProgressLog", this, "SaveToFile()");
   hflogbox->AddFrame(fSave, new TGLayoutHints(kLHintsCenterY | kLHintsRight, 4, 0, 0, 0));
   fFileName = new TGTextEntry(hflogbox);
   fFileName->SetText("<session-tag>.log");
   hflogbox->AddFrame(fFileName, new TGLayoutHints(kLHintsCenterY | kLHintsRight | kLHintsExpandX));
   TGLabel *label10 = new TGLabel(hflogbox, "Save to a file:");
   hflogbox->AddFrame(label10, new TGLayoutHints(kLHintsCenterY | kLHintsRight, 50, 2, 2, 2));

   //Choose the number of lines to display
   TGVerticalFrame *vlines = new TGVerticalFrame(hflogbox);
   TGHorizontalFrame *vlines_buttons = new TGHorizontalFrame(vlines);
   TGLabel *label2 = new TGLabel(vlines_buttons, "Lines:");
   vlines_buttons->AddFrame(label2, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));

   fAllLines = new TGCheckButton(vlines_buttons, "all");
   fAllLines->SetToolTipText("Retrieve all lines (service messages excluded)");
   fAllLines->SetState(kButtonUp);
   fAllLines->Connect("Clicked()", "TProofProgressLog", this, "NoLineEntry()");
   vlines_buttons->AddFrame(fAllLines, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));

   fRawLines = new TGCheckButton(vlines_buttons, "svcmsg");
   fRawLines->SetToolTipText("Retrieve all type of lines, service messages included");
   fRawLines->SetState(kButtonUp);
   vlines_buttons->AddFrame(fRawLines, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));

   TGLabel *label11 = new TGLabel(vlines_buttons, "From");
   vlines_buttons->AddFrame(label11, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));

   fLinesFrom = new TGNumberEntry(vlines_buttons, 0, 5, -1, TGNumberFormat::kNESInteger);
   // coverity[negative_returns]: no problem with -100, the format is kNESInteger
   fLinesFrom->SetIntNumber(-100);
   fLinesFrom->GetNumberEntry()->SetToolTipText("Negative values indicate \"tail\" action");


   vlines_buttons->AddFrame(fLinesFrom, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));

   TGLabel *label3 = new TGLabel(vlines_buttons, "to");
   vlines_buttons->AddFrame(label3, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
   fLinesTo = new TGNumberEntry(vlines_buttons, 0, 5, -1, TGNumberFormat::kNESInteger);
   vlines_buttons->AddFrame(fLinesTo, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
   vlines->AddFrame(vlines_buttons, new TGLayoutHints(kLHintsCenterY));
   hflogbox->AddFrame(vlines, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));

   //
   // Lowest line, with filter (grep or cmd pipe) controls
   //

   TGHorizontalFrame *hfgrepbox = new TGHorizontalFrame(vtextbox, 550, 20);

   // Grep/pipe label, textbox and button
   fGrepLabel = new TGLabel(hfgrepbox, "");
   hfgrepbox->AddFrame(fGrepLabel, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
   fGrepText = new TGTextEntry(hfgrepbox);
   {
      TGDimension dim = fGrepText->GetDefaultSize();
      fGrepText->SetDefaultSize(400, dim.fHeight);
   }
   hfgrepbox->AddFrame(fGrepText, new TGLayoutHints( kLHintsCenterY | kLHintsLeft | kLHintsExpandX));
   fGrepButton = new TGTextButton(hfgrepbox, "Filter");
   fGrepButton->Connect("Clicked()", "TProofProgressLog", this, "DoLog(=kTRUE)");
   hfgrepbox->AddFrame(fGrepButton, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 4, 10, 0, 0));  // l r t b

   // Checkbox for inverting selection or giving a pipe command
   fGrepCheckInv = new TGCheckButton(hfgrepbox, "invert match");
   fGrepCheckInv->Connect("Clicked()", "TProofProgressLog", this, "SetGrepView()");
   hfgrepbox->AddFrame(fGrepCheckInv, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));

   fGrepCheckCmd = new TGCheckButton(hfgrepbox, "is a pipe command");
   fGrepCheckCmd->Connect("Clicked()", "TProofProgressLog", this, "SetGrepView()");
   hfgrepbox->AddFrame(fGrepCheckCmd, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));

   // fRawLines->SetToolTipText("Retrieve all type of lines, service messages included");
   // fRawLines->SetState(kButtonUp);
   // vlines_buttons->AddFrame(fRawLines, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));

   //
   // Add frames to the global picture
   //

   vtextbox->AddFrame(hflogbox, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2));
   vtextbox->AddFrame(hfgrepbox, new TGLayoutHints(kLHintsBottom | kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2));
   htotal->AddFrame(vtextbox, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY | kLHintsRight, 3, 3, 3, 3));
   AddFrame(htotal, new TGLayoutHints(kLHintsExpandX |
                                        kLHintsExpandY, 3, 3, 3, 3));
   SetGrepView();
   MapSubwindows();
   Resize();
   CenterOnParent();
   Popup();
}

//____________________________________________________________________________
TProofProgressLog::~TProofProgressLog()
{
   // Destructor

   // Cleanup the log object
   SafeDelete(fProofLog);

   // Detach from owner dialog
   if (fDialog) {
      fDialog->fLogWindow = 0;
      fDialog->fProof->Disconnect("LogMessage(const char*,Bool_t)", this,
                                 "LogMessage(const char*,Bool_t)");
   }
}

//____________________________________________________________________________
void TProofProgressLog::Popup()
{
   // Show log window.

   MapWindow();
}

//____________________________________________________________________________
void TProofProgressLog::Clear(Option_t *)
{
   // Clear log window.

   if (fText)
      fText->Clear();
}

//____________________________________________________________________________
void TProofProgressLog::LoadBuffer(const char *buffer)
{
   // Load a text buffer in the window.

   if (fText)
      fText->LoadBuffer(buffer);
}

//____________________________________________________________________________
void TProofProgressLog::LoadFile(const char *file)
{
   // Load a file in the window.

   if (fText)
      fText->LoadFile(file);
}

//____________________________________________________________________________
void TProofProgressLog::AddBuffer(const  char *buffer)
{
   // Add text to the window.

   if (fText) {
      TGText txt;
      txt.LoadBuffer(buffer);
      fText->AddText(&txt);
   }
}

//____________________________________________________________________________
void TProofProgressLog::CloseWindow()
{
   // Handle close button or when closed via window manager action.

   DeleteWindow();
}

//______________________________________________________________________________
void TProofProgressLog::BuildLogList(Bool_t create)
{
   // Build the list of workers. For this, extract the logs and take the names
   // of TProofLogElements

   // Set title
   TString title;
   title.Form("PROOF - Processing logs for session 'undefined'");
   SetWindowName(title.Data());
   SetIconName(title.Data());

   // Create the list-box now
   if (create) {
      if (fLogList) delete fLogList;
      fLogList = new TGListBox(fVworkers);
   } else {
      // Reset
      Int_t nent = fLogList->GetNumberOfEntries();
      fLogList->RemoveEntries(0,nent);
      fLogList->Layout();
   }

   if (fSessionUrl.IsNull()) {
      if (gDebug > 0)
         Info("BuildLogList", "sesssion URL undefined - do nothing");
      return;
   }
   TProofMgr *mgr = TProof::Mgr(fSessionUrl.Data());
   if (!mgr || !mgr->IsValid()) {
      Warning("BuildLogList", "unable open a manager connection to %s",
                              fSessionUrl.Data());
      return;
   }
   if (!(fProofLog = mgr->GetSessionLogs(fSessionIdx,"NR"))) {
      Warning("BuildLogList", "unable to get logs from %s",
                              fSessionUrl.Data());
      return;
   }
   // Set title
   title.Form("PROOF - Processing logs for session '%s', started on %s at %s",
              fProofLog->GetName(), fProofLog->StartTime().AsString(),
              fProofLog->GetTitle());
   SetWindowName(title.Data());
   SetIconName(title.Data());

   TList *elem = fProofLog->GetListOfLogs();
   TIter next(elem);
   TProofLogElem *pe = 0;

   Int_t is = 0;
   TGLBEntry *ent = 0;
   TString buf;
   while ((pe=(TProofLogElem*)next())){
      TUrl url(pe->GetTitle());
      buf.Form("%s %s", pe->GetName(), url.GetHost());
      fLogList->AddEntry(buf.Data(), is);
      if ((ent = fLogList->FindEntry(buf.Data()))) {
         ent->ResetBit(kLogElemFilled);
         ent->ResetBit(kDefaultActive);
         if (!(pe->IsWorker())) ent->SetBit(kDefaultActive);
      }
      is++;
   }

   // Done
   return;
}

//______________________________________________________________________________
void TProofProgressLog::DoLog(Bool_t grep)
{
   // Display logs. 'grep' is set to kTRUE if it is invoked by pressing the
   // 'Filter' button.

   Clear();

   if (!fGrepText) {
      Warning("DoLog", "no text: do nothing!");
      return;
   }

   TString greptext = fGrepText->GetText();
   greptext.Remove(TString::kBoth, ' ');
   if (greptext.IsNull()) {
      grep = kFALSE;
   }
   else if (!fGrepCheckCmd->IsOn()) {
      // Not a command: sanitize string
      TPMERegexp san("(^|[^\\\\])([^a-zA-Z0-9_=\\\\/.-])");
      while ( san.Substitute(greptext, "$1\\$2") > 0 );
   }

   Int_t from, to;
   if (fAllLines->IsOn()){
      from = 0;
      to = -1;
   } else {
      from = fLinesFrom->GetIntNumber();
      to = fLinesTo->GetIntNumber();
   }

   // Create the TProofLog instance
   if (!fProofLog) {
      TProofMgr *mgr = 0;
      if ((mgr = TProof::Mgr(fSessionUrl.Data()))) {
         if (!(fProofLog = mgr->GetSessionLogs(fSessionIdx, "NR"))) {
            Warning("DoLog", "unable to instantiate TProofLog for %s",
                             fSessionUrl.Data());
         }
      } else {
         Warning("DoLog", "unable to instantiate a TProofMgr for %s",
                          fSessionUrl.Data());
      }
   }

   // Pipe command for filtering
   TString pipeCommand;

   // Filter out SvcMsg
   if (!fRawLines->IsOn()) {
      pipeCommand = "grep -v \"| SvcMsg\"";
   }

   // Default is not retrieving
   Bool_t retrieve = kFALSE;
   if (!grep) {
      // Not invoked via 'Filter' button
      if (!fFullText ||
          ((fTextType != kRaw && fRawLines->IsOn())   ||
           (fTextType != kStd && !fRawLines->IsOn())) ||
          (fDialog && fDialog->fStatus==TProofProgressDialog::kRunning)) {
         retrieve = kTRUE;
         if (fRawLines->IsOn()) {
            fTextType = kRaw;
         } else {
            fTextType = kStd;
         }
         if (fDialog && fDialog->fStatus != TProofProgressDialog::kRunning)
            fFullText = kTRUE;
      }
   } else {
      retrieve = kTRUE;
      fTextType = kGrep;

      if (!pipeCommand.IsNull())
         pipeCommand.Append('|');

      if (fGrepCheckCmd->IsOn()) {
         pipeCommand.Append(greptext);
      }
      else {
         pipeCommand.Append("grep ");
         if (fGrepCheckInv->IsOn())
            pipeCommand.Append("-v ");
         pipeCommand.Append("-- ");
         pipeCommand.Append(greptext);  // sanitized
      }

      if (fDialog && fDialog->fStatus != TProofProgressDialog::kRunning)
         fFullText = kTRUE;
   }

   // Display now
   if (fProofLog) {
      TList *selected = new TList;
      fLogList->GetSelectedEntries(selected);
      TIter next(selected);
      TGTextLBEntry *selentry;
      Bool_t logonly = fProofLog->LogToBox();
      fProofLog->SetLogToBox(kTRUE);

      fProofLog->Connect("Prt(const char*)", "TProofProgressLog",
                           this, "LogMessage(const char*, Bool_t)");
      while ((selentry=(TGTextLBEntry*)next())){
         TString ord = selentry->GetText()->GetString();
         Int_t is = ord.Index(" ");
         if (is != kNPOS) ord.Remove(is);
         if (retrieve || !selentry->TestBit(kLogElemFilled)) {
            pipeCommand.Prepend('|');
            if (fTextType == kRaw) {
               if (gDebug >= 2)
                  Info("DoLog", "Retrieving unfiltered log for %s", ord.Data());
               fProofLog->Retrieve(ord.Data(), TProofLog::kTrailing, 0, 0);
            }
            else {
               if (gDebug >= 2)
                  Info("DoLog", "Retrieving log for %s filtered with %s",
                     ord.Data(), pipeCommand.Data());
               fProofLog->Retrieve(ord.Data(), TProofLog::kGrep, 0, pipeCommand.Data());
            }
            selentry->SetBit(kLogElemFilled);
         }
         fProofLog->Display(ord.Data(), from, to);
      }
      fProofLog->SetLogToBox(logonly);
      fProofLog->Disconnect("Prt(const char*)", this, "LogMessage(const char*, Bool_t)");
      delete selected;
   }
}

//______________________________________________________________________________
void TProofProgressLog::LogMessage(const char *msg, Bool_t all)
{
   // Load/append a log msg in the log frame, if open

   if (all) {
      // load buffer
      LoadBuffer(msg);
   } else {
      // append
      AddBuffer(msg);
   }
}

//______________________________________________________________________________
void TProofProgressLog::SaveToFile()
{
   //Save the logs to a file
   //Only the name of the file is taken, no expansion

   if (!fProofLog) DoLog();

   // File name: the default is <session-tag>.log
   TString filename = fFileName->GetText();
   if (filename.IsNull() || filename == "<session-tag>.log") {
      filename = (fDialog && fDialog->fProof) ?
                  TString::Format("%s.log", fDialog->fProof->GetName()) :
                  TString("proof.log");
   }

   TList *selected = new TList;
   fLogList->GetSelectedEntries(selected);
   TIter next(selected);
   TGTextLBEntry *selentry;
   Bool_t writemode=kTRUE;
   const char *option;
   TString ord;
   while ((selentry=(TGTextLBEntry*)next())){
      ord = selentry->GetText()->GetString();
      Int_t isp = ord.Index(' ');
      if (isp != kNPOS) ord.Remove(isp);
      //open the file in "w" mode for the first time
      option = writemode ? "w" : "a";
      fProofLog->Save(ord.Data(), filename.Data(), option);
      writemode=kFALSE;
   }

   Info("SaveToFile", "logs saved to file %s", filename.Data());
   return;
}

//______________________________________________________________________________
void TProofProgressLog::SetGrepView()
{
   // Sets the view of grep filters according to the value of checkboxes

   if (fGrepCheckCmd->IsOn()) {
      fGrepLabel->SetText("Pipe log through command:");
      fGrepCheckInv->SetDisabledAndSelected(kFALSE);
   }
   else {
      fGrepLabel->SetText("Grep:");
      Bool_t u = fGrepCheckInv->IsOn();
      fGrepCheckInv->SetEnabled(kTRUE);
      if (u) {
         fGrepLabel->SetText("Show lines not matching:");
         fGrepCheckInv->SetState(kButtonDown);
      }
      else {
         fGrepLabel->SetText("Show lines matching:");
         fGrepCheckInv->SetState(kButtonUp);
      }
   }

   // Ugly but necessary const_cast
   TGFrame *frame = dynamic_cast<TGFrame *>( const_cast<TGWindow *>(fGrepLabel->GetParent()) );
   if (frame) frame->Layout();

}

//______________________________________________________________________________
void TProofProgressLog::NoLineEntry()
{
   //Enable/disable the line number entry

   if (fAllLines->IsOn()){
      //disable the line number entry
      fLinesFrom->SetState(kFALSE);
      fLinesTo->SetState(kFALSE);
   } else {
      fLinesFrom->SetState(kTRUE);
      fLinesTo->SetState(kTRUE);
   }
}

//______________________________________________________________________________
void TProofProgressLog::Select(Int_t id, Bool_t all)
{
   //actions of select all/clear all button

   Int_t nen = fLogList->GetNumberOfEntries();
   Bool_t sel = id ? 0 : 1;

   TGLBEntry *ent = 0;
   for (Int_t ie=0; ie<nen; ie++) {
      if (all) {
         fLogList->Select(ie, sel);
      } else {
         if ((ent = fLogList->GetEntry(ie))) {
            if (ent->TestBit(kDefaultActive)) fLogList->Select(ie, sel);
         }
      }
   }
}


//______________________________________________________________________________
void TProofProgressLog::Rebuild()
{
   // Rebuild the log info for a new entered session

   // Check if we need to remake the TProofLog object
   Bool_t sameurl = kFALSE;
   TUrl url(fUrlText->GetText());
   TUrl urlref(fSessionUrl.Data());
   if (!strcmp(url.GetHostFQDN(), urlref.GetHostFQDN())) {
      if (url.GetPort() == urlref.GetPort()) {
         if (!strcmp(url.GetUser(), urlref.GetUser())) {
            sameurl = kTRUE;
         }
      }
   }
   Int_t idx = 0;
   if (sameurl) {
      idx = fSessNum->GetIntNumber();
      if (idx == fSessionIdx) {
         Info("Rebuild", "same paremeters {%s, %s}, {%d, %d}: no need to rebuild TProofLog",
                         url.GetUrl(), urlref.GetUrl(), idx, fSessionIdx);
         return;
      }
   }
   // Cleanup current TProofLog
   if (fProofLog) delete fProofLog;

   // Set new parameters
   fSessionUrl = fUrlText->GetText();
   fSessionIdx = idx;

   // Rebuild the list now
   BuildLogList(kFALSE);

   // Select the defaut actives to start with
   Select(0, kFALSE);
   // Redraw
   fLogList->Layout();

   // Done
   return;
}
 TProofProgressLog.cxx:1
 TProofProgressLog.cxx:2
 TProofProgressLog.cxx:3
 TProofProgressLog.cxx:4
 TProofProgressLog.cxx:5
 TProofProgressLog.cxx:6
 TProofProgressLog.cxx:7
 TProofProgressLog.cxx:8
 TProofProgressLog.cxx:9
 TProofProgressLog.cxx:10
 TProofProgressLog.cxx:11
 TProofProgressLog.cxx:12
 TProofProgressLog.cxx:13
 TProofProgressLog.cxx:14
 TProofProgressLog.cxx:15
 TProofProgressLog.cxx:16
 TProofProgressLog.cxx:17
 TProofProgressLog.cxx:18
 TProofProgressLog.cxx:19
 TProofProgressLog.cxx:20
 TProofProgressLog.cxx:21
 TProofProgressLog.cxx:22
 TProofProgressLog.cxx:23
 TProofProgressLog.cxx:24
 TProofProgressLog.cxx:25
 TProofProgressLog.cxx:26
 TProofProgressLog.cxx:27
 TProofProgressLog.cxx:28
 TProofProgressLog.cxx:29
 TProofProgressLog.cxx:30
 TProofProgressLog.cxx:31
 TProofProgressLog.cxx:32
 TProofProgressLog.cxx:33
 TProofProgressLog.cxx:34
 TProofProgressLog.cxx:35
 TProofProgressLog.cxx:36
 TProofProgressLog.cxx:37
 TProofProgressLog.cxx:38
 TProofProgressLog.cxx:39
 TProofProgressLog.cxx:40
 TProofProgressLog.cxx:41
 TProofProgressLog.cxx:42
 TProofProgressLog.cxx:43
 TProofProgressLog.cxx:44
 TProofProgressLog.cxx:45
 TProofProgressLog.cxx:46
 TProofProgressLog.cxx:47
 TProofProgressLog.cxx:48
 TProofProgressLog.cxx:49
 TProofProgressLog.cxx:50
 TProofProgressLog.cxx:51
 TProofProgressLog.cxx:52
 TProofProgressLog.cxx:53
 TProofProgressLog.cxx:54
 TProofProgressLog.cxx:55
 TProofProgressLog.cxx:56
 TProofProgressLog.cxx:57
 TProofProgressLog.cxx:58
 TProofProgressLog.cxx:59
 TProofProgressLog.cxx:60
 TProofProgressLog.cxx:61
 TProofProgressLog.cxx:62
 TProofProgressLog.cxx:63
 TProofProgressLog.cxx:64
 TProofProgressLog.cxx:65
 TProofProgressLog.cxx:66
 TProofProgressLog.cxx:67
 TProofProgressLog.cxx:68
 TProofProgressLog.cxx:69
 TProofProgressLog.cxx:70
 TProofProgressLog.cxx:71
 TProofProgressLog.cxx:72
 TProofProgressLog.cxx:73
 TProofProgressLog.cxx:74
 TProofProgressLog.cxx:75
 TProofProgressLog.cxx:76
 TProofProgressLog.cxx:77
 TProofProgressLog.cxx:78
 TProofProgressLog.cxx:79
 TProofProgressLog.cxx:80
 TProofProgressLog.cxx:81
 TProofProgressLog.cxx:82
 TProofProgressLog.cxx:83
 TProofProgressLog.cxx:84
 TProofProgressLog.cxx:85
 TProofProgressLog.cxx:86
 TProofProgressLog.cxx:87
 TProofProgressLog.cxx:88
 TProofProgressLog.cxx:89
 TProofProgressLog.cxx:90
 TProofProgressLog.cxx:91
 TProofProgressLog.cxx:92
 TProofProgressLog.cxx:93
 TProofProgressLog.cxx:94
 TProofProgressLog.cxx:95
 TProofProgressLog.cxx:96
 TProofProgressLog.cxx:97
 TProofProgressLog.cxx:98
 TProofProgressLog.cxx:99
 TProofProgressLog.cxx:100
 TProofProgressLog.cxx:101
 TProofProgressLog.cxx:102
 TProofProgressLog.cxx:103
 TProofProgressLog.cxx:104
 TProofProgressLog.cxx:105
 TProofProgressLog.cxx:106
 TProofProgressLog.cxx:107
 TProofProgressLog.cxx:108
 TProofProgressLog.cxx:109
 TProofProgressLog.cxx:110
 TProofProgressLog.cxx:111
 TProofProgressLog.cxx:112
 TProofProgressLog.cxx:113
 TProofProgressLog.cxx:114
 TProofProgressLog.cxx:115
 TProofProgressLog.cxx:116
 TProofProgressLog.cxx:117
 TProofProgressLog.cxx:118
 TProofProgressLog.cxx:119
 TProofProgressLog.cxx:120
 TProofProgressLog.cxx:121
 TProofProgressLog.cxx:122
 TProofProgressLog.cxx:123
 TProofProgressLog.cxx:124
 TProofProgressLog.cxx:125
 TProofProgressLog.cxx:126
 TProofProgressLog.cxx:127
 TProofProgressLog.cxx:128
 TProofProgressLog.cxx:129
 TProofProgressLog.cxx:130
 TProofProgressLog.cxx:131
 TProofProgressLog.cxx:132
 TProofProgressLog.cxx:133
 TProofProgressLog.cxx:134
 TProofProgressLog.cxx:135
 TProofProgressLog.cxx:136
 TProofProgressLog.cxx:137
 TProofProgressLog.cxx:138
 TProofProgressLog.cxx:139
 TProofProgressLog.cxx:140
 TProofProgressLog.cxx:141
 TProofProgressLog.cxx:142
 TProofProgressLog.cxx:143
 TProofProgressLog.cxx:144
 TProofProgressLog.cxx:145
 TProofProgressLog.cxx:146
 TProofProgressLog.cxx:147
 TProofProgressLog.cxx:148
 TProofProgressLog.cxx:149
 TProofProgressLog.cxx:150
 TProofProgressLog.cxx:151
 TProofProgressLog.cxx:152
 TProofProgressLog.cxx:153
 TProofProgressLog.cxx:154
 TProofProgressLog.cxx:155
 TProofProgressLog.cxx:156
 TProofProgressLog.cxx:157
 TProofProgressLog.cxx:158
 TProofProgressLog.cxx:159
 TProofProgressLog.cxx:160
 TProofProgressLog.cxx:161
 TProofProgressLog.cxx:162
 TProofProgressLog.cxx:163
 TProofProgressLog.cxx:164
 TProofProgressLog.cxx:165
 TProofProgressLog.cxx:166
 TProofProgressLog.cxx:167
 TProofProgressLog.cxx:168
 TProofProgressLog.cxx:169
 TProofProgressLog.cxx:170
 TProofProgressLog.cxx:171
 TProofProgressLog.cxx:172
 TProofProgressLog.cxx:173
 TProofProgressLog.cxx:174
 TProofProgressLog.cxx:175
 TProofProgressLog.cxx:176
 TProofProgressLog.cxx:177
 TProofProgressLog.cxx:178
 TProofProgressLog.cxx:179
 TProofProgressLog.cxx:180
 TProofProgressLog.cxx:181
 TProofProgressLog.cxx:182
 TProofProgressLog.cxx:183
 TProofProgressLog.cxx:184
 TProofProgressLog.cxx:185
 TProofProgressLog.cxx:186
 TProofProgressLog.cxx:187
 TProofProgressLog.cxx:188
 TProofProgressLog.cxx:189
 TProofProgressLog.cxx:190
 TProofProgressLog.cxx:191
 TProofProgressLog.cxx:192
 TProofProgressLog.cxx:193
 TProofProgressLog.cxx:194
 TProofProgressLog.cxx:195
 TProofProgressLog.cxx:196
 TProofProgressLog.cxx:197
 TProofProgressLog.cxx:198
 TProofProgressLog.cxx:199
 TProofProgressLog.cxx:200
 TProofProgressLog.cxx:201
 TProofProgressLog.cxx:202
 TProofProgressLog.cxx:203
 TProofProgressLog.cxx:204
 TProofProgressLog.cxx:205
 TProofProgressLog.cxx:206
 TProofProgressLog.cxx:207
 TProofProgressLog.cxx:208
 TProofProgressLog.cxx:209
 TProofProgressLog.cxx:210
 TProofProgressLog.cxx:211
 TProofProgressLog.cxx:212
 TProofProgressLog.cxx:213
 TProofProgressLog.cxx:214
 TProofProgressLog.cxx:215
 TProofProgressLog.cxx:216
 TProofProgressLog.cxx:217
 TProofProgressLog.cxx:218
 TProofProgressLog.cxx:219
 TProofProgressLog.cxx:220
 TProofProgressLog.cxx:221
 TProofProgressLog.cxx:222
 TProofProgressLog.cxx:223
 TProofProgressLog.cxx:224
 TProofProgressLog.cxx:225
 TProofProgressLog.cxx:226
 TProofProgressLog.cxx:227
 TProofProgressLog.cxx:228
 TProofProgressLog.cxx:229
 TProofProgressLog.cxx:230
 TProofProgressLog.cxx:231
 TProofProgressLog.cxx:232
 TProofProgressLog.cxx:233
 TProofProgressLog.cxx:234
 TProofProgressLog.cxx:235
 TProofProgressLog.cxx:236
 TProofProgressLog.cxx:237
 TProofProgressLog.cxx:238
 TProofProgressLog.cxx:239
 TProofProgressLog.cxx:240
 TProofProgressLog.cxx:241
 TProofProgressLog.cxx:242
 TProofProgressLog.cxx:243
 TProofProgressLog.cxx:244
 TProofProgressLog.cxx:245
 TProofProgressLog.cxx:246
 TProofProgressLog.cxx:247
 TProofProgressLog.cxx:248
 TProofProgressLog.cxx:249
 TProofProgressLog.cxx:250
 TProofProgressLog.cxx:251
 TProofProgressLog.cxx:252
 TProofProgressLog.cxx:253
 TProofProgressLog.cxx:254
 TProofProgressLog.cxx:255
 TProofProgressLog.cxx:256
 TProofProgressLog.cxx:257
 TProofProgressLog.cxx:258
 TProofProgressLog.cxx:259
 TProofProgressLog.cxx:260
 TProofProgressLog.cxx:261
 TProofProgressLog.cxx:262
 TProofProgressLog.cxx:263
 TProofProgressLog.cxx:264
 TProofProgressLog.cxx:265
 TProofProgressLog.cxx:266
 TProofProgressLog.cxx:267
 TProofProgressLog.cxx:268
 TProofProgressLog.cxx:269
 TProofProgressLog.cxx:270
 TProofProgressLog.cxx:271
 TProofProgressLog.cxx:272
 TProofProgressLog.cxx:273
 TProofProgressLog.cxx:274
 TProofProgressLog.cxx:275
 TProofProgressLog.cxx:276
 TProofProgressLog.cxx:277
 TProofProgressLog.cxx:278
 TProofProgressLog.cxx:279
 TProofProgressLog.cxx:280
 TProofProgressLog.cxx:281
 TProofProgressLog.cxx:282
 TProofProgressLog.cxx:283
 TProofProgressLog.cxx:284
 TProofProgressLog.cxx:285
 TProofProgressLog.cxx:286
 TProofProgressLog.cxx:287
 TProofProgressLog.cxx:288
 TProofProgressLog.cxx:289
 TProofProgressLog.cxx:290
 TProofProgressLog.cxx:291
 TProofProgressLog.cxx:292
 TProofProgressLog.cxx:293
 TProofProgressLog.cxx:294
 TProofProgressLog.cxx:295
 TProofProgressLog.cxx:296
 TProofProgressLog.cxx:297
 TProofProgressLog.cxx:298
 TProofProgressLog.cxx:299
 TProofProgressLog.cxx:300
 TProofProgressLog.cxx:301
 TProofProgressLog.cxx:302
 TProofProgressLog.cxx:303
 TProofProgressLog.cxx:304
 TProofProgressLog.cxx:305
 TProofProgressLog.cxx:306
 TProofProgressLog.cxx:307
 TProofProgressLog.cxx:308
 TProofProgressLog.cxx:309
 TProofProgressLog.cxx:310
 TProofProgressLog.cxx:311
 TProofProgressLog.cxx:312
 TProofProgressLog.cxx:313
 TProofProgressLog.cxx:314
 TProofProgressLog.cxx:315
 TProofProgressLog.cxx:316
 TProofProgressLog.cxx:317
 TProofProgressLog.cxx:318
 TProofProgressLog.cxx:319
 TProofProgressLog.cxx:320
 TProofProgressLog.cxx:321
 TProofProgressLog.cxx:322
 TProofProgressLog.cxx:323
 TProofProgressLog.cxx:324
 TProofProgressLog.cxx:325
 TProofProgressLog.cxx:326
 TProofProgressLog.cxx:327
 TProofProgressLog.cxx:328
 TProofProgressLog.cxx:329
 TProofProgressLog.cxx:330
 TProofProgressLog.cxx:331
 TProofProgressLog.cxx:332
 TProofProgressLog.cxx:333
 TProofProgressLog.cxx:334
 TProofProgressLog.cxx:335
 TProofProgressLog.cxx:336
 TProofProgressLog.cxx:337
 TProofProgressLog.cxx:338
 TProofProgressLog.cxx:339
 TProofProgressLog.cxx:340
 TProofProgressLog.cxx:341
 TProofProgressLog.cxx:342
 TProofProgressLog.cxx:343
 TProofProgressLog.cxx:344
 TProofProgressLog.cxx:345
 TProofProgressLog.cxx:346
 TProofProgressLog.cxx:347
 TProofProgressLog.cxx:348
 TProofProgressLog.cxx:349
 TProofProgressLog.cxx:350
 TProofProgressLog.cxx:351
 TProofProgressLog.cxx:352
 TProofProgressLog.cxx:353
 TProofProgressLog.cxx:354
 TProofProgressLog.cxx:355
 TProofProgressLog.cxx:356
 TProofProgressLog.cxx:357
 TProofProgressLog.cxx:358
 TProofProgressLog.cxx:359
 TProofProgressLog.cxx:360
 TProofProgressLog.cxx:361
 TProofProgressLog.cxx:362
 TProofProgressLog.cxx:363
 TProofProgressLog.cxx:364
 TProofProgressLog.cxx:365
 TProofProgressLog.cxx:366
 TProofProgressLog.cxx:367
 TProofProgressLog.cxx:368
 TProofProgressLog.cxx:369
 TProofProgressLog.cxx:370
 TProofProgressLog.cxx:371
 TProofProgressLog.cxx:372
 TProofProgressLog.cxx:373
 TProofProgressLog.cxx:374
 TProofProgressLog.cxx:375
 TProofProgressLog.cxx:376
 TProofProgressLog.cxx:377
 TProofProgressLog.cxx:378
 TProofProgressLog.cxx:379
 TProofProgressLog.cxx:380
 TProofProgressLog.cxx:381
 TProofProgressLog.cxx:382
 TProofProgressLog.cxx:383
 TProofProgressLog.cxx:384
 TProofProgressLog.cxx:385
 TProofProgressLog.cxx:386
 TProofProgressLog.cxx:387
 TProofProgressLog.cxx:388
 TProofProgressLog.cxx:389
 TProofProgressLog.cxx:390
 TProofProgressLog.cxx:391
 TProofProgressLog.cxx:392
 TProofProgressLog.cxx:393
 TProofProgressLog.cxx:394
 TProofProgressLog.cxx:395
 TProofProgressLog.cxx:396
 TProofProgressLog.cxx:397
 TProofProgressLog.cxx:398
 TProofProgressLog.cxx:399
 TProofProgressLog.cxx:400
 TProofProgressLog.cxx:401
 TProofProgressLog.cxx:402
 TProofProgressLog.cxx:403
 TProofProgressLog.cxx:404
 TProofProgressLog.cxx:405
 TProofProgressLog.cxx:406
 TProofProgressLog.cxx:407
 TProofProgressLog.cxx:408
 TProofProgressLog.cxx:409
 TProofProgressLog.cxx:410
 TProofProgressLog.cxx:411
 TProofProgressLog.cxx:412
 TProofProgressLog.cxx:413
 TProofProgressLog.cxx:414
 TProofProgressLog.cxx:415
 TProofProgressLog.cxx:416
 TProofProgressLog.cxx:417
 TProofProgressLog.cxx:418
 TProofProgressLog.cxx:419
 TProofProgressLog.cxx:420
 TProofProgressLog.cxx:421
 TProofProgressLog.cxx:422
 TProofProgressLog.cxx:423
 TProofProgressLog.cxx:424
 TProofProgressLog.cxx:425
 TProofProgressLog.cxx:426
 TProofProgressLog.cxx:427
 TProofProgressLog.cxx:428
 TProofProgressLog.cxx:429
 TProofProgressLog.cxx:430
 TProofProgressLog.cxx:431
 TProofProgressLog.cxx:432
 TProofProgressLog.cxx:433
 TProofProgressLog.cxx:434
 TProofProgressLog.cxx:435
 TProofProgressLog.cxx:436
 TProofProgressLog.cxx:437
 TProofProgressLog.cxx:438
 TProofProgressLog.cxx:439
 TProofProgressLog.cxx:440
 TProofProgressLog.cxx:441
 TProofProgressLog.cxx:442
 TProofProgressLog.cxx:443
 TProofProgressLog.cxx:444
 TProofProgressLog.cxx:445
 TProofProgressLog.cxx:446
 TProofProgressLog.cxx:447
 TProofProgressLog.cxx:448
 TProofProgressLog.cxx:449
 TProofProgressLog.cxx:450
 TProofProgressLog.cxx:451
 TProofProgressLog.cxx:452
 TProofProgressLog.cxx:453
 TProofProgressLog.cxx:454
 TProofProgressLog.cxx:455
 TProofProgressLog.cxx:456
 TProofProgressLog.cxx:457
 TProofProgressLog.cxx:458
 TProofProgressLog.cxx:459
 TProofProgressLog.cxx:460
 TProofProgressLog.cxx:461
 TProofProgressLog.cxx:462
 TProofProgressLog.cxx:463
 TProofProgressLog.cxx:464
 TProofProgressLog.cxx:465
 TProofProgressLog.cxx:466
 TProofProgressLog.cxx:467
 TProofProgressLog.cxx:468
 TProofProgressLog.cxx:469
 TProofProgressLog.cxx:470
 TProofProgressLog.cxx:471
 TProofProgressLog.cxx:472
 TProofProgressLog.cxx:473
 TProofProgressLog.cxx:474
 TProofProgressLog.cxx:475
 TProofProgressLog.cxx:476
 TProofProgressLog.cxx:477
 TProofProgressLog.cxx:478
 TProofProgressLog.cxx:479
 TProofProgressLog.cxx:480
 TProofProgressLog.cxx:481
 TProofProgressLog.cxx:482
 TProofProgressLog.cxx:483
 TProofProgressLog.cxx:484
 TProofProgressLog.cxx:485
 TProofProgressLog.cxx:486
 TProofProgressLog.cxx:487
 TProofProgressLog.cxx:488
 TProofProgressLog.cxx:489
 TProofProgressLog.cxx:490
 TProofProgressLog.cxx:491
 TProofProgressLog.cxx:492
 TProofProgressLog.cxx:493
 TProofProgressLog.cxx:494
 TProofProgressLog.cxx:495
 TProofProgressLog.cxx:496
 TProofProgressLog.cxx:497
 TProofProgressLog.cxx:498
 TProofProgressLog.cxx:499
 TProofProgressLog.cxx:500
 TProofProgressLog.cxx:501
 TProofProgressLog.cxx:502
 TProofProgressLog.cxx:503
 TProofProgressLog.cxx:504
 TProofProgressLog.cxx:505
 TProofProgressLog.cxx:506
 TProofProgressLog.cxx:507
 TProofProgressLog.cxx:508
 TProofProgressLog.cxx:509
 TProofProgressLog.cxx:510
 TProofProgressLog.cxx:511
 TProofProgressLog.cxx:512
 TProofProgressLog.cxx:513
 TProofProgressLog.cxx:514
 TProofProgressLog.cxx:515
 TProofProgressLog.cxx:516
 TProofProgressLog.cxx:517
 TProofProgressLog.cxx:518
 TProofProgressLog.cxx:519
 TProofProgressLog.cxx:520
 TProofProgressLog.cxx:521
 TProofProgressLog.cxx:522
 TProofProgressLog.cxx:523
 TProofProgressLog.cxx:524
 TProofProgressLog.cxx:525
 TProofProgressLog.cxx:526
 TProofProgressLog.cxx:527
 TProofProgressLog.cxx:528
 TProofProgressLog.cxx:529
 TProofProgressLog.cxx:530
 TProofProgressLog.cxx:531
 TProofProgressLog.cxx:532
 TProofProgressLog.cxx:533
 TProofProgressLog.cxx:534
 TProofProgressLog.cxx:535
 TProofProgressLog.cxx:536
 TProofProgressLog.cxx:537
 TProofProgressLog.cxx:538
 TProofProgressLog.cxx:539
 TProofProgressLog.cxx:540
 TProofProgressLog.cxx:541
 TProofProgressLog.cxx:542
 TProofProgressLog.cxx:543
 TProofProgressLog.cxx:544
 TProofProgressLog.cxx:545
 TProofProgressLog.cxx:546
 TProofProgressLog.cxx:547
 TProofProgressLog.cxx:548
 TProofProgressLog.cxx:549
 TProofProgressLog.cxx:550
 TProofProgressLog.cxx:551
 TProofProgressLog.cxx:552
 TProofProgressLog.cxx:553
 TProofProgressLog.cxx:554
 TProofProgressLog.cxx:555
 TProofProgressLog.cxx:556
 TProofProgressLog.cxx:557
 TProofProgressLog.cxx:558
 TProofProgressLog.cxx:559
 TProofProgressLog.cxx:560
 TProofProgressLog.cxx:561
 TProofProgressLog.cxx:562
 TProofProgressLog.cxx:563
 TProofProgressLog.cxx:564
 TProofProgressLog.cxx:565
 TProofProgressLog.cxx:566
 TProofProgressLog.cxx:567
 TProofProgressLog.cxx:568
 TProofProgressLog.cxx:569
 TProofProgressLog.cxx:570
 TProofProgressLog.cxx:571
 TProofProgressLog.cxx:572
 TProofProgressLog.cxx:573
 TProofProgressLog.cxx:574
 TProofProgressLog.cxx:575
 TProofProgressLog.cxx:576
 TProofProgressLog.cxx:577
 TProofProgressLog.cxx:578
 TProofProgressLog.cxx:579
 TProofProgressLog.cxx:580
 TProofProgressLog.cxx:581
 TProofProgressLog.cxx:582
 TProofProgressLog.cxx:583
 TProofProgressLog.cxx:584
 TProofProgressLog.cxx:585
 TProofProgressLog.cxx:586
 TProofProgressLog.cxx:587
 TProofProgressLog.cxx:588
 TProofProgressLog.cxx:589
 TProofProgressLog.cxx:590
 TProofProgressLog.cxx:591
 TProofProgressLog.cxx:592
 TProofProgressLog.cxx:593
 TProofProgressLog.cxx:594
 TProofProgressLog.cxx:595
 TProofProgressLog.cxx:596
 TProofProgressLog.cxx:597
 TProofProgressLog.cxx:598
 TProofProgressLog.cxx:599
 TProofProgressLog.cxx:600
 TProofProgressLog.cxx:601
 TProofProgressLog.cxx:602
 TProofProgressLog.cxx:603
 TProofProgressLog.cxx:604
 TProofProgressLog.cxx:605
 TProofProgressLog.cxx:606
 TProofProgressLog.cxx:607
 TProofProgressLog.cxx:608
 TProofProgressLog.cxx:609
 TProofProgressLog.cxx:610
 TProofProgressLog.cxx:611
 TProofProgressLog.cxx:612
 TProofProgressLog.cxx:613
 TProofProgressLog.cxx:614
 TProofProgressLog.cxx:615
 TProofProgressLog.cxx:616
 TProofProgressLog.cxx:617
 TProofProgressLog.cxx:618
 TProofProgressLog.cxx:619
 TProofProgressLog.cxx:620
 TProofProgressLog.cxx:621
 TProofProgressLog.cxx:622
 TProofProgressLog.cxx:623
 TProofProgressLog.cxx:624
 TProofProgressLog.cxx:625
 TProofProgressLog.cxx:626
 TProofProgressLog.cxx:627
 TProofProgressLog.cxx:628
 TProofProgressLog.cxx:629
 TProofProgressLog.cxx:630
 TProofProgressLog.cxx:631
 TProofProgressLog.cxx:632
 TProofProgressLog.cxx:633
 TProofProgressLog.cxx:634
 TProofProgressLog.cxx:635
 TProofProgressLog.cxx:636
 TProofProgressLog.cxx:637
 TProofProgressLog.cxx:638
 TProofProgressLog.cxx:639
 TProofProgressLog.cxx:640
 TProofProgressLog.cxx:641
 TProofProgressLog.cxx:642
 TProofProgressLog.cxx:643
 TProofProgressLog.cxx:644
 TProofProgressLog.cxx:645
 TProofProgressLog.cxx:646
 TProofProgressLog.cxx:647
 TProofProgressLog.cxx:648
 TProofProgressLog.cxx:649
 TProofProgressLog.cxx:650
 TProofProgressLog.cxx:651
 TProofProgressLog.cxx:652
 TProofProgressLog.cxx:653
 TProofProgressLog.cxx:654
 TProofProgressLog.cxx:655
 TProofProgressLog.cxx:656
 TProofProgressLog.cxx:657
 TProofProgressLog.cxx:658
 TProofProgressLog.cxx:659
 TProofProgressLog.cxx:660
 TProofProgressLog.cxx:661
 TProofProgressLog.cxx:662
 TProofProgressLog.cxx:663
 TProofProgressLog.cxx:664
 TProofProgressLog.cxx:665
 TProofProgressLog.cxx:666
 TProofProgressLog.cxx:667
 TProofProgressLog.cxx:668
 TProofProgressLog.cxx:669
 TProofProgressLog.cxx:670
 TProofProgressLog.cxx:671
 TProofProgressLog.cxx:672
 TProofProgressLog.cxx:673
 TProofProgressLog.cxx:674
 TProofProgressLog.cxx:675