// @(#)root/gui:$Id$
// Author: G. Ganis   10/10/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.             *
 *************************************************************************/

#ifndef ROOT_TGRedirectOutputGuard
#define ROOT_TGRedirectOutputGuard

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGRedirectOutputGuard                                                //
//                                                                      //
// This class provides output redirection to a TGTextView in guaranteed //
// exception safe way. Use like this:                                   //
// {                                                                    //
//    TGRedirectOutputGuard guard(textview);                            //
//    ... // do something                                               //
//    guard.Update();                                                   //
//    ... // do something else                                          //
// }                                                                    //
// when guard goes out of scope, Update() is called to flush what left  //
// on the screed and the output is automatically redirected again to    //
// the standard units.                                                  //
// The exception mechanism takes care of calling the dtors              //
// of local objects so it is exception safe.                            //
// Optionally the output can also be saved into a file:                 //
// {                                                                    //
//    TGRedirectOutputGuard guard(textview, file, mode);                //
//    ... // do something                                               //
// }                                                                    //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

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

class TGTextView;

class TGRedirectOutputGuard {

private:
   TString      fLogFile;
   Bool_t       fTmpFile;
   TGTextView  *fTextView;
   FILE        *fLogFileRead;

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

public:
   TGRedirectOutputGuard(TGTextView *tv,
                         const char *flog = 0, const char *mode = "a");
   virtual ~TGRedirectOutputGuard();

   void Update(); // Update window with file content

   ClassDef(TGRedirectOutputGuard,0)  // Exception safe output redirection
};

#endif
 TGRedirectOutputGuard.h:1
 TGRedirectOutputGuard.h:2
 TGRedirectOutputGuard.h:3
 TGRedirectOutputGuard.h:4
 TGRedirectOutputGuard.h:5
 TGRedirectOutputGuard.h:6
 TGRedirectOutputGuard.h:7
 TGRedirectOutputGuard.h:8
 TGRedirectOutputGuard.h:9
 TGRedirectOutputGuard.h:10
 TGRedirectOutputGuard.h:11
 TGRedirectOutputGuard.h:12
 TGRedirectOutputGuard.h:13
 TGRedirectOutputGuard.h:14
 TGRedirectOutputGuard.h:15
 TGRedirectOutputGuard.h:16
 TGRedirectOutputGuard.h:17
 TGRedirectOutputGuard.h:18
 TGRedirectOutputGuard.h:19
 TGRedirectOutputGuard.h:20
 TGRedirectOutputGuard.h:21
 TGRedirectOutputGuard.h:22
 TGRedirectOutputGuard.h:23
 TGRedirectOutputGuard.h:24
 TGRedirectOutputGuard.h:25
 TGRedirectOutputGuard.h:26
 TGRedirectOutputGuard.h:27
 TGRedirectOutputGuard.h:28
 TGRedirectOutputGuard.h:29
 TGRedirectOutputGuard.h:30
 TGRedirectOutputGuard.h:31
 TGRedirectOutputGuard.h:32
 TGRedirectOutputGuard.h:33
 TGRedirectOutputGuard.h:34
 TGRedirectOutputGuard.h:35
 TGRedirectOutputGuard.h:36
 TGRedirectOutputGuard.h:37
 TGRedirectOutputGuard.h:38
 TGRedirectOutputGuard.h:39
 TGRedirectOutputGuard.h:40
 TGRedirectOutputGuard.h:41
 TGRedirectOutputGuard.h:42
 TGRedirectOutputGuard.h:43
 TGRedirectOutputGuard.h:44
 TGRedirectOutputGuard.h:45
 TGRedirectOutputGuard.h:46
 TGRedirectOutputGuard.h:47
 TGRedirectOutputGuard.h:48
 TGRedirectOutputGuard.h:49
 TGRedirectOutputGuard.h:50
 TGRedirectOutputGuard.h:51
 TGRedirectOutputGuard.h:52
 TGRedirectOutputGuard.h:53
 TGRedirectOutputGuard.h:54
 TGRedirectOutputGuard.h:55
 TGRedirectOutputGuard.h:56
 TGRedirectOutputGuard.h:57
 TGRedirectOutputGuard.h:58
 TGRedirectOutputGuard.h:59
 TGRedirectOutputGuard.h:60
 TGRedirectOutputGuard.h:61
 TGRedirectOutputGuard.h:62
 TGRedirectOutputGuard.h:63
 TGRedirectOutputGuard.h:64
 TGRedirectOutputGuard.h:65
 TGRedirectOutputGuard.h:66
 TGRedirectOutputGuard.h:67
 TGRedirectOutputGuard.h:68