swh:1:snp:af87cd67498ef4fe47c76ed3e7caffe5b61facaf
Raw File
Tip revision: f71c167e58696410e0948e82bc2fed353003e721 authored by Axel Naumann on 14 September 2015, 07:45:05 UTC
Update ROOT version files to v6.05/02.
Tip revision: f71c167
exec_macro.C
#include "TSystem.h"
#include "TString.h"
#include "TGClient.h"
#include "TGWindow.h"
#include "TClass.h"
#include "THashList.h"
#include "TROOT.h"
#include "TInterpreter.h"
#include "TEnv.h"
#include "TVirtualX.h"
#include "TImage.h"

//______________________________________________________________________________
Int_t exec_macro(const char *macro, Bool_t comp = kFALSE, Bool_t save = kTRUE)
{
   // Execute the macro and save a capture in a png file.
   // This macro is used by stressGUI to execute and compare
   // the output of the GUI tutorials.

   enum EErrorCodes {
      kSuccess,
      kScriptDirNotFound,
      kCannotRunScript,
      kNumErrorCodes
   };

   if (gROOT->IsBatch() || !(gClient))
      return kCannotRunScript;
   TString pwd(gSystem->pwd());
   if (!gSystem->cd(gSystem->DirName(macro)))
      return kScriptDirNotFound;
   Int_t err = 0;
   TString cmd(".x ");
   cmd += gSystem->BaseName(macro);
   if (comp) cmd += "+";
   gVirtualX->Sync(1);
   gROOT->ProcessLine(cmd, &err);
   if (err != TInterpreter::kNoError)
      return kCannotRunScript;
   gSystem->cd(pwd);

   UInt_t nMainFrames = 0;
   TClass* clGMainFrame = TClass::GetClass("TGMainFrame");
   TGWindow* win = 0;
   TIter iWin(gClient->GetListOfWindows());
   while ((win = (TGWindow*)iWin())) {
      const TObject* winGetParent = win->GetParent();
      Bool_t winIsMapped = kFALSE;
      if (winGetParent == gClient->GetDefaultRoot())
         winIsMapped = kTRUE;//win->IsMapped();
      if (winIsMapped && win->InheritsFrom(clGMainFrame)) {
         win->MapRaised();
         if (save) {
            TString outfile = gSystem->BaseName(macro);
            outfile.ReplaceAll(".C", TString::Format("_%d.png",
                               ++nMainFrames));
            TImage *img = TImage::Create();
            win->RaiseWindow();
            img->FromWindow(win->GetId());
            img->WriteImage(outfile.Data());
            delete img;
         }
      }
   }
   if (!gEnv->GetValue("X11.Sync", 0))
      gVirtualX->Sync(0);
   return kSuccess;
}
back to top