// @(#)root/sessionviewer:$Id$
// Author: Marek Biskup, Jakub Madejczyk, Bertrand Bellenot 10/08/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.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TSessionViewer                                                       //
//                                                                      //
// Widget used to manage PROOF or local sessions, PROOF connections,    //
// queries construction and results handling.                           //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TSessionViewer
#define ROOT_TSessionViewer

#ifndef ROOT_TGFrame
#include "TGFrame.h"
#endif

#ifndef ROOT_TString
#include "TString.h"
#endif

#ifndef ROOT_TGTextEntry
#include "TGTextEntry.h"
#endif

#ifndef ROOT_TGNumberEntry
#include "TGNumberEntry.h"
#endif

#ifndef ROOT_TGTab
#include "TGTab.h"
#endif

#ifndef ROOT_TGListView
#include "TGListView.h"
#endif

#ifndef ROOT_TTime
#include "TTime.h"
#endif

#include <stdio.h>
#include <time.h>

class TList;
class TChain;
class TDSet;
class TGNumberEntry;
class TGTextEntry;
class TGTextButton;
class TGCheckButton;
class TGTextBuffer;
class TGTableLayout;
class TGIcon;
class TGLabel;
class TGHProgressBar;
class TGPopupMenu;
class TGLVContainer;
class TGListView;
class TGLVEntry;
class TGCanvas;
class TGListTree;
class TGListTreeItem;
class TGStatusBar;
class TGPicture;
class TGMenuBar;
class TGPopupMenu;
class TGToolBar;
class TGTextView;
class TGTab;
class TRootEmbeddedCanvas;
class TGListBox;
class TCanvas;
class TEnv;
struct UserGroup_t;

class TProofMgr;
class TProof;
class TSessionViewer;
class TSessionLogView;
class TQueryResult;
class TContextMenu;

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TSessionViewer - A GUI for ROOT / PROOF Sessions                     //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
// TQueryDescription class : Description of queries
//////////////////////////////////////////////////////////////////////////

class TQueryDescription : public TObject {

public:
   enum ESessionQueryStatus {
      kSessionQueryAborted = 0,
      kSessionQuerySubmitted,
      kSessionQueryRunning,
      kSessionQueryStopped,
      kSessionQueryCompleted,
      kSessionQueryFinalized,
      kSessionQueryCreated,
      kSessionQueryFromProof
   };

   ESessionQueryStatus fStatus;     // query status
   TString        fReference;       // query reference string (unique identifier)
   TString        fQueryName;       // query name
   TString        fSelectorString;  // selector name
   TString        fTDSetString;     // dataset name
   TString        fOptions;         // query processing options
   TString        fEventList;       // event list
   Int_t          fNbFiles;         // number of files to process
   Long64_t       fNoEntries;       // number of events/entries to process
   Long64_t       fFirstEntry;      // first event/entry to process
   TTime          fStartTime;       // start time of the query
   TTime          fEndTime;         // end time of the query
   TObject       *fChain;           // dataset on which to process selector
   TQueryResult  *fResult;          // query result received back

   const char    *GetName() const { return fQueryName; }

   ClassDef(TQueryDescription, 1)  // Query description
};


enum EMenuIdentification {
   kMenuAddToFeedback,
   kMenuShow,
   kMenuRemoveFromFeedback
};

//////////////////////////////////////////////////////////////////////////
// TSessionDescription class : Description of Session
//////////////////////////////////////////////////////////////////////////

class TSessionDescription : public TObject {

public:
   TString            fTag;         // session unique identifier
   TString            fName;        // session name
   TString            fAddress;     // server address
   Int_t              fPort;        // communication port
   TString            fConfigFile;  // configuration file name
   Int_t              fLogLevel;    // log (debug) level
   TString            fUserName;    // user name (on server)
   Bool_t             fConnected;   // kTRUE if connected
   Bool_t             fAttached;    // kTRUE if attached
   Bool_t             fLocal;       // kTRUE if session is local
   Bool_t             fSync;        // kTRUE if in sync mode
   Bool_t             fAutoEnable;  // enable packages at session startup time
   TList             *fQueries;     // list of queries in this session
   TList             *fPackages;    // list of packages
   TQueryDescription *fActQuery;    // current (actual) query
   TProof            *fProof;       // pointer on TProof used by this session
   TProofMgr         *fProofMgr;    // Proof sessions manager
   Int_t              fNbHistos;    // number of feedback histos

   const char        *GetName() const { return fName; }

   ClassDef(TSessionDescription, 1) // Session description
};

//////////////////////////////////////////////////////////////////////////
// TPackageDescription class : Description of Package
//////////////////////////////////////////////////////////////////////////

class TPackageDescription : public TObject {

public:
   TString        fName;         // package name
   TString        fPathName;     // full path name of package
   Int_t          fId;           // package id
   Bool_t         fUploaded;     // package has been uploaded
   Bool_t         fEnabled;      // package has been enabled

   const char    *GetName() const { return fName; }

   ClassDef(TPackageDescription, 1) // Package description
};

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TSessionServerFrame                                                  //
// A composite Frame used in the right part of the Session Viewer GUI   //
// for any information relative to server side : address, port, user... //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

class TSessionServerFrame : public TGCompositeFrame {

private:
   TGCompositeFrame  *fFrmNewServer;   // main group frame
   TGTextEntry       *fTxtName;        // connection name text entry
   TGTextEntry       *fTxtAddress;     // server address text entry
   TGNumberEntry     *fNumPort;        // port number selector
   TGNumberEntry     *fLogLevel;       // log (debug) level selector
   TGTextEntry       *fTxtConfig;      // configuration file text entry
   TGTextEntry       *fTxtUsrName;     // user name text entry
   TGCheckButton     *fSync;           // sync / async flag selector
   TSessionViewer    *fViewer;         // pointer on the main viewer
   TGTextButton      *fBtnAdd;         // "Add" button
   TGTextButton      *fBtnConnect;     // "Connect" button

public:
   TSessionServerFrame(TGWindow *parent, Int_t w, Int_t h);
   virtual ~TSessionServerFrame();

   void        Build(TSessionViewer *gui);

   const char *GetName() const { return fTxtName->GetText(); }
   const char *GetAddress() const { return fTxtAddress->GetText(); }
   Int_t       GetPortNumber() const { return fNumPort->GetIntNumber(); }
   Int_t       GetLogLevel() const { return fLogLevel->GetIntNumber(); }
   const char *GetConfigText() const { return fTxtConfig->GetText(); }
   const char *GetUserName() const { return fTxtUsrName->GetText(); }
   Bool_t      IsSync() const { return (Bool_t)(fSync->GetState() == kButtonDown); }

   void        SetAddEnabled(Bool_t on = kTRUE) {
               on == kTRUE ? ShowFrame(fBtnAdd) : HideFrame(fBtnAdd); }
   void        SetConnectEnabled(Bool_t on = kTRUE) {
               on == kTRUE ? ShowFrame(fBtnConnect) : HideFrame(fBtnConnect); }
   void        SetName(const char *str) { fTxtName->SetText(str); }
   void        SetAddress(const char *str) { fTxtAddress->SetText(str); }
   void        SetPortNumber(Int_t port) { fNumPort->SetIntNumber(port); }
   void        SetLogLevel(Int_t log) { fLogLevel->SetIntNumber(log); }
   void        SetConfigText(const char *str) { fTxtConfig->SetText(str); }
   void        SetUserName(const char *str) { fTxtUsrName->SetText(str); }
   void        SetSync(Bool_t sync) {
               fSync->SetState(sync ? kButtonDown : kButtonUp); }

   void        SettingsChanged();

   void        OnBtnConnectClicked();
   void        OnBtnNewServerClicked();
   void        OnBtnDeleteClicked();
   void        OnBtnAddClicked();
   void        OnConfigFileClicked();
   void        Update(TSessionDescription* desc);
   virtual Bool_t HandleExpose(Event_t *event);
   virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);

   ClassDef(TSessionServerFrame, 0) // Server frame
};


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TSessionFrame                                                        //
// A composite Frame used in the right part of the Session Viewer GUI   //
// for any information, settings or controls relative to the current    //
// session.                                                             //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

class TSessionFrame : public TGCompositeFrame {

private:

   TGTab             *fTab;                  // main tab frame
   TGCompositeFrame  *fFA, *fFB, *fFC;
   TGCompositeFrame  *fFD, *fFE;             // five tabs element
   TGTextEntry       *fCommandTxt;           // Command line text entry
   TGTextBuffer      *fCommandBuf;           // Command line text buffer
   TGTextView        *fInfoTextView;         // summary on current query
   TGCheckButton     *fClearCheck;           // clear text view after each command
   TGTextButton      *fBtnShowLog;           // show log button
   TGTextButton      *fBtnNewQuery;          // new query button
   TGTextButton      *fBtnGetQueries;        // get entries button
   // Packages tab related items
   TGListBox         *fLBPackages;           // packages listbox
   TGTextButton      *fBtnAdd;               // add package button
   TGTextButton      *fBtnRemove;            // remove package button
   TGTextButton      *fBtnUp;                // move package up button
   TGTextButton      *fBtnDown;              // move package down button
   TGTextButton      *fBtnShow;              // show packages button
   TGTextButton      *fBtnShowEnabled;       // show enabled packages button
   TGCheckButton     *fChkMulti;             // multiple selection check
   TGCheckButton     *fChkEnable;            // enable at session startup check
   TGTextButton      *fBtnUpload;            // upload packages button
   TGTextButton      *fBtnEnable;            // enable packages button
   TGTextButton      *fBtnClear;             // clear all packages button
   TGTextButton      *fBtnDisable;           // disable packages button
   // Datasets tab related items
   TGCanvas          *fDSetView;             // dataset tree view
   TGListTree        *fDataSetTree;          // dataset list tree
   TGTextButton      *fBtnUploadDSet;        // upload dataset button
   TGTextButton      *fBtnRemoveDSet;        // remove dataset button
   TGTextButton      *fBtnVerifyDSet;        // verify dataset button
   TGTextButton      *fBtnRefresh;           // refresh list button
   // Options tab related items
   TGTextEntry       *fTxtParallel;          // parallel nodes text entry
   TGNumberEntry     *fLogLevel;             // log level number entry
   TGTextButton      *fApplyLogLevel;        // apply log level button
   TGTextButton      *fApplyParallel;        // apply parallel nodes button

   TSessionViewer    *fViewer;               // pointer on main viewer
   TGLabel           *fInfoLine[19];         // infos on session

public:
   TSessionFrame(TGWindow* parent, Int_t w, Int_t h);
   virtual ~TSessionFrame();

   void     Build(TSessionViewer *gui);
   void     CheckAutoEnPack(Bool_t checked = kTRUE) {
            fChkEnable->SetState(checked ? kButtonDown : kButtonUp); }
   Int_t    GetLogLevel() const { return fLogLevel->GetIntNumber(); }
   void     SetLogLevel(Int_t log) { fLogLevel->SetIntNumber(log); }
   TGTab   *GetTab() const { return fTab; }

   //Function that handle input from user:
   void     OnApplyLogLevel();
   void     OnApplyParallel();
   void     OnBtnAddClicked();
   void     OnBtnRemoveClicked();
   void     OnBtnUpClicked();
   void     OnBtnDownClicked();
   void     OnBtnShowLogClicked();
   void     OnBtnNewQueryClicked();
   void     OnBtnGetQueriesClicked();
   void     OnBtnDisconnectClicked();
   void     OnCommandLine();
   void     OnUploadPackages();
   void     OnEnablePackages();
   void     OnDisablePackages();
   void     OnClearPackages();
   void     OnMultipleSelection(Bool_t on);
   void     OnStartupEnable(Bool_t on);
   void     ProofInfos();
   void     SetLocal(Bool_t local = kTRUE);
   void     ShutdownSession();
   void     UpdatePackages();
   void     OnBtnUploadDSet();
   void     OnBtnRemoveDSet();
   void     OnBtnVerifyDSet();
   void     UpdateListOfDataSets();

   ClassDef(TSessionFrame, 0) // Session frame
};

//////////////////////////////////////////////////////////////////////////
// New Query Dialog
//////////////////////////////////////////////////////////////////////////

class TEditQueryFrame : public TGCompositeFrame {

private:
   TGCompositeFrame  *fFrmMore;        // options frame
   TGTextButton      *fBtnMore;        // "more >>" / "less <<" button

   TGTextEntry       *fTxtQueryName;   // query name text entry
   TGTextEntry       *fTxtChain;       // chain name text entry
   TGTextEntry       *fTxtSelector;    // selector name text entry
   TGTextEntry       *fTxtOptions;     // options text entry
   TGNumberEntry     *fNumEntries;     // number of entries selector
   TGNumberEntry     *fNumFirstEntry;  // first entry selector
   TGTextEntry       *fTxtParFile;     // parameter file name text entry
   TGTextEntry       *fTxtEventList;   // event list text entry
   TSessionViewer    *fViewer;         // pointer on main viewer
   TQueryDescription *fQuery;          // query description class
   TObject           *fChain;          // actual TChain

public:
   TEditQueryFrame(TGWindow* p, Int_t w, Int_t h);
   virtual ~TEditQueryFrame();
   void     Build(TSessionViewer *gui);
   void     OnNewQueryMore();
   void     OnBrowseChain();
   void     OnBrowseSelector();
   void     OnBrowseEventList();
   void     OnBtnSave();
   void     OnElementSelected(TObject *obj);
   void     SettingsChanged();
   void     UpdateFields(TQueryDescription *desc);

   ClassDef(TEditQueryFrame, 0) // Edit query frame
};

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TSessionQueryFrame                                                   //
// A composite Frame used in the right part of the Session Viewer GUI   //
// for any information, settings or controls relative to queries.       //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

class TSessionQueryFrame : public TGCompositeFrame {

private:

   enum EQueryStatus { kRunning = 0, kDone, kStopped, kAborted };

   TGTextButton         *fBtnSubmit;         // submit query button
   TGTextButton         *fBtnFinalize;       // finalize query button
   TGTextButton         *fBtnStop;           // stop process button
   TGTextButton         *fBtnAbort;          // abort process button
   TGTextButton         *fBtnShowLog;        // show log button
   TGTextButton         *fBtnRetrieve;       // retrieve query button
   TGTextButton         *fBtnSave;           // save query button
   TGTextView           *fInfoTextView;      // summary on current query

   Bool_t                fModified;          // kTRUE if settings have changed
   Int_t                 fFiles;             // number of files processed
   Long64_t              fFirst;             // first event/entry to process
   Long64_t              fEntries;           // number of events/entries to process
   Long64_t              fPrevTotal;         // used for progress bar
   Long64_t              fPrevProcessed;     // used for progress bar
   TGLabel              *fLabInfos;          // infos on current process
   TGLabel              *fLabStatus;         // actual process status
   TGLabel              *fTotal;             // total progress info
   TGLabel              *fRate;              // rate of process in events/sec
   EQueryStatus          fStatus;            // status of actual query
   TGTab                *fTab;               // main tab frame
   TGCompositeFrame     *fFA, *fFB, *fFC;    // three tabs element
   TEditQueryFrame      *fFD;                // fourth tab element (edit query frame)
   TGHProgressBar       *frmProg;            // current process progress bar
   TRootEmbeddedCanvas  *fECanvas;           // node statistics embeded canvas
   TCanvas              *fStatsCanvas;       // node statistics canvas
   TSessionViewer       *fViewer;            // pointer on main viewer
   TQueryDescription    *fDesc;              // query description

public:
   TSessionQueryFrame(TGWindow* parent, Int_t w, Int_t h);
   virtual ~TSessionQueryFrame();

   void     Build(TSessionViewer *gui);

   TCanvas *GetStatsCanvas() const { return fStatsCanvas; }
   TEditQueryFrame *GetQueryEditFrame() const { return fFD; }
   TGTab   *GetTab() const { return fTab; }

   void     Feedback(TList *objs);
   void     Modified(Bool_t mod = kTRUE);
   void     Progress(Long64_t total, Long64_t processed);
   void     Progress(Long64_t total, Long64_t processed, Long64_t bytesread,
                     Float_t initTime, Float_t procTime,
                     Float_t evtrti, Float_t mbrti, Int_t actw, Int_t tses, Float_t eses);
   void     Progress(Long64_t total, Long64_t processed, Long64_t bytesread,
                     Float_t initTime, Float_t procTime,
                     Float_t evtrti, Float_t mbrti) {
                     Progress(total, processed, bytesread, initTime, procTime,
                              evtrti, mbrti, -1, -1, -1.); }
   void     ProgressLocal(Long64_t total, Long64_t processed);
   void     IndicateStop(Bool_t aborted);
   void     ResetProgressDialog(const char *selec, Int_t files, Long64_t first, Long64_t entries);

   //Function that handle input from user:
   void     OnBtnSubmit();
   void     OnBtnFinalize();
   void     OnBtnStop();
   void     OnBtnAbort();
   void     OnBtnShowLog();
   void     OnBtnRetrieve();
   void     UpdateInfos();
   void     UpdateButtons(TQueryDescription *desc);
   void     UpdateHistos(TList *objs);

   ClassDef(TSessionQueryFrame, 0) // Query frame
};

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TSessionOutputFrame                                                  //
// A composite Frame used in the right part of the Session Viewer GUI   //
// displaying output list objects coming from query result.             //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

class TSessionOutputFrame : public TGCompositeFrame {

private:
   TGLVEntry              *fEntryTmp;      // used to transfer to feedback
   TGLVContainer          *fLVContainer;   // output list view
   TSessionViewer         *fViewer;        // pointer on the main viewer

public:
   TSessionOutputFrame(TGWindow* parent, Int_t w, Int_t h);
   virtual ~TSessionOutputFrame();

   void           AddObject(TObject *obj);
   void           Build(TSessionViewer *gui);
   TGLVContainer  *GetLVContainer() { return fLVContainer; }
   void           OnElementClicked(TGLVEntry* entry, Int_t btn, Int_t x, Int_t y);
   void           OnElementDblClicked(TGLVEntry *entry ,Int_t btn, Int_t x, Int_t y);
   void           RemoveAll() { fLVContainer->RemoveAll(); }

   ClassDef(TSessionOutputFrame, 0) // Output frame
};

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TSessionInputFrame                                                   //
// A composite Frame used in the right part of the Session Viewer GUI   //
// displaying input list objects coming from query result.              //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

class TSessionInputFrame : public TGCompositeFrame {

private:
   TSessionViewer   *fViewer;       // pointer on the main viewer
   TGLVContainer    *fLVContainer;  // container for the input list view

public:
   TSessionInputFrame(TGWindow* parent, Int_t w, Int_t h);
   virtual ~TSessionInputFrame();

   void           AddObject(TObject *obj);
   void           Build(TSessionViewer *gui);
   void           RemoveAll() { fLVContainer->RemoveAll(); }
   TGLVContainer  *GetLVContainer() { return fLVContainer; }

   ClassDef(TSessionInputFrame, 0) // Input frame
};


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TSessionViewer                                                       //
// This is the main widget, mother of all the previous classes          //
// Used to manage sessions, servers, queries...                         //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

class TSessionViewer : public TGMainFrame {

private:
   time_t                  fStart, fElapsed;    // time of connection
   Bool_t                  fChangePic;          // KTRUE if animation active
   Bool_t                  fBusy;               // KTRUE if busy i.e : connecting
   TGHorizontalFrame      *fHf;                 //
   TGVerticalFrame        *fV1;                 //
   TGVerticalFrame        *fV2;                 //
   TSessionServerFrame    *fServerFrame;        // right side server frame
   TSessionFrame          *fSessionFrame;       // right side session frame
   TSessionQueryFrame     *fQueryFrame;         // right side query frame
   TSessionOutputFrame    *fOutputFrame;        // output frame
   TSessionInputFrame     *fInputFrame;         // input frame
   TSessionLogView        *fLogWindow;          // external log window
   TSessionDescription    *fActDesc;            // actual session description
   TList                  *fSessions;           // list of sessions
   const TGPicture        *fLocal;              // local session icon picture
   const TGPicture        *fProofCon;           // connected server icon picture
   const TGPicture        *fProofDiscon;        // disconnected server icon picture
   const TGPicture        *fQueryCon;           // connected(?) query icon picture
   const TGPicture        *fQueryDiscon;        // disconnected(?) query icon picture
   const TGPicture        *fBaseIcon;           // base list tree icon picture

   TGFrame                *fActFrame;           // actual (displayed) frame
   TGToolBar              *fToolBar;            // application tool bar
   TGMenuBar              *fMenuBar;            // application main menu bar
   TGPopupMenu            *fFileMenu;           // file menu entry
   TGPopupMenu            *fSessionMenu;        // session menu entry
   TGPopupMenu            *fQueryMenu;          // query menu entry
   TGPopupMenu            *fOptionsMenu;        // options menu entry
   TGPopupMenu            *fCascadeMenu;        // options menu entry
   TGPopupMenu            *fHelpMenu;           // help menu entry

   TGPopupMenu            *fPopupSrv;           // server related popup menu
   TGPopupMenu            *fPopupQry;           // query related popup menu
   TContextMenu           *fContextMenu;        // input/output objects context menu

   TGHProgressBar         *fConnectProg;        // connection progress bar
   TGCanvas               *fTreeView;           // main right sessions/queries tree view
   TGListTree             *fSessionHierarchy;   // main sessions/queries hierarchy list tree
   TGListTreeItem         *fSessionItem;        // base (main) session list tree item
   TGStatusBar            *fStatusBar;          // bottom status bar
   TGPicture              *fRightIconPicture;   // lower bottom left icon used to show connection status
   TGIcon                 *fRightIcon;          // associated picture
   TTimer                 *fTimer;              // timer used to change icon picture
   UserGroup_t            *fUserGroup;          // user connected to session
   Bool_t                  fAutoSave;           // kTRUE if config is to be saved on exit
   TString                 fConfigFile;         // configuration file name
   TEnv                   *fViewerEnv;          // viewer's configuration

public:

   TSessionViewer(const char *title = "ROOT Session Viewer", UInt_t w = 550, UInt_t h = 320);
   TSessionViewer(const char *title, Int_t x, Int_t y, UInt_t w, UInt_t h);
   virtual ~TSessionViewer();
   virtual void Build();
   virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t);

   TSessionServerFrame    *GetServerFrame() const { return fServerFrame; }
   TSessionFrame          *GetSessionFrame() const { return fSessionFrame; }
   TSessionQueryFrame     *GetQueryFrame() const { return fQueryFrame; }
   TSessionOutputFrame    *GetOutputFrame() const { return fOutputFrame; }
   TSessionInputFrame     *GetInputFrame() const { return fInputFrame; }
   TSessionDescription    *GetActDesc() const { return fActDesc; }
   TList                  *GetSessions() const { return fSessions; }
   TGListTree             *GetSessionHierarchy() const { return fSessionHierarchy; }
   TGListTreeItem         *GetSessionItem() const { return fSessionItem; }
   const TGPicture        *GetLocalPict() const { return fLocal; }
   const TGPicture        *GetProofConPict() const { return fProofCon; }
   const TGPicture        *GetProofDisconPict() const { return fProofDiscon; }
   const TGPicture        *GetQueryConPict() const { return fQueryCon; }
   const TGPicture        *GetQueryDisconPict() const { return fQueryDiscon; }
   const TGPicture        *GetBasePict() const { return fBaseIcon; }
   TGPopupMenu            *GetPopupSrv() const { return fPopupSrv; }
   TGPopupMenu            *GetPopupQry() const { return fPopupQry; }
   TContextMenu           *GetContextMenu() const { return fContextMenu; }
   TGStatusBar            *GetStatusBar() const { return fStatusBar; }
   TGHProgressBar         *GetConnectProg() const { return fConnectProg; }
   TGPopupMenu            *GetCascadeMenu() const { return fCascadeMenu; }
   TGPopupMenu            *GetOptionsMenu() const { return fOptionsMenu; }

   void     ChangeRightLogo(const char *name);
   void     CleanupSession();
   void     CloseWindow();
   void     DisableTimer();
   void     EditQuery();
   void     EnableTimer();
   Bool_t   HandleTimer(TTimer *);
   Bool_t   IsBusy() const { return fBusy; }
   Bool_t   IsAutoSave() const { return fAutoSave; }
   void     LogMessage(const char *msg, Bool_t all);
   void     MyHandleMenu(Int_t);
   void     OnCascadeMenu();
   void     OnListTreeClicked(TGListTreeItem *entry, Int_t btn, Int_t x, Int_t y);
   void     OnListTreeDoubleClicked(TGListTreeItem *entry, Int_t btn);
   void     QueryResultReady(char *query);
   void     DeleteQuery();
   void     ReadConfiguration(const char *filename = 0);
   void     ResetSession();
   void     UpdateListOfProofs();
   void     UpdateListOfSessions();
   void     UpdateListOfPackages();
   void     WriteConfiguration(const char *filename = 0);
   void     SetBusy(Bool_t busy = kTRUE) { fBusy = busy; }
   void     SetChangePic(Bool_t change) { fChangePic = change;}
   void     SetLogWindow(TSessionLogView *log) { fLogWindow = log; }
   void     ShowEnabledPackages();
   void     ShowPackages();
   void     ShowInfo(const char *txt);
   void     ShowLog(const char *queryref);
   void     ShowStatus();
   void     StartupMessage(char *msg, Bool_t stat, Int_t curr, Int_t total);
   void     StartViewer();
   void     Terminate();

   ClassDef(TSessionViewer, 0) // Session Viewer
};

R__EXTERN TSessionViewer *gSessionViewer;

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