class TRecorder: public TObject


TRecorder class provides interface for recording and replaying
events in ROOT.
Recorded events are:
- Commands typed by user in commandline ('new TCanvas')
- GUI events (mouse movement, button clicks, ...)

All the recorded events from one session are stored in one TFile
and can be replayed again anytime.


1] To start recording

TRecorder r(const char *filename, "NEW")
TRecorder r(const char *filename, "RECREATE")


TRecorder *recorder = new TRecorder;
recorder->Start(const char *filename, ...)

-filename      Name of ROOT file in which to save
recorded events.

2] To stop recording


State capturing is part of recording. It means that if you want to
record events for some object (window), creation of this object
must be also recorded.


t = new TRecorder();          // Create a new recorder
t->Start("logfile.root");     // ! Start recording first

c = new TCanvas();            // ! Then, create an object
c->Dump();                    // Work with that object

t->Stop();                    // Stop recording

It is strongly recommended to start recording with empty ROOT
environment, at least with no previously created ROOT GUI.
This ensures that only events for well known windows are stored.
Events for windows, which were not created during recording,
cannot be replayed.


1] To start replaying

TRecorder r(const char *filename)
TRecorder r(const char *filename, "READ")


TRecorder *recorder = new TRecorder;
recorder->Replay(const char *filename,
Bool_t showMouseCursor = kTRUE);

-filename         A name of file with recorded events
previously created with TRecorder::Start

-showMouseCursor  If kTRUE, mouse cursor is replayed as well.
In that case it is not recommended to use mouse
during replaying.

In general, it is not recommended to use mouse to change positions
and states of ROOT windows during replaying.

The state of ROOT environment before replaying of some events
must be exactly the same as before recording them.
Therefore it is strongly recommended to start both recording
and replaying with empty ROOT environment.

2] To pause replaying


Replaying is stopped until recorder->Resume() is called.

3] To resume paused replaying


Resumes previously stopped replaying.

4] To stop replaying before its end


Function Members (Methods)

voidTObject::AbstractMethod(const char* method) const
virtual voidTObject::AppendPad(Option_t* option = "")
virtual voidBrowse(TBrowser*)
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidTObject::Clear(Option_t* = "")
virtual TObject*TObject::Clone(const char* newname = "") const
virtual Int_tTObject::Compare(const TObject* obj) const
virtual voidTObject::Copy(TObject& object) const
virtual voidTObject::Delete(Option_t* option = "")MENU
virtual Int_tTObject::DistancetoPrimitive(Int_t px, Int_t py)
virtual voidTObject::Draw(Option_t* option = "")
virtual voidTObject::DrawClass() constMENU
virtual TObject*TObject::DrawClone(Option_t* option = "") constMENU
virtual voidTObject::Dump() constMENU
virtual voidTObject::Error(const char* method, const char* msgfmt) const
virtual voidTObject::Execute(const char* method, const char* params, Int_t* error = 0)
virtual voidTObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0)
virtual voidTObject::ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual voidTObject::Fatal(const char* method, const char* msgfmt) const
virtual TObject*TObject::FindObject(const char* name) const
virtual TObject*TObject::FindObject(const TObject* obj) const
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
virtual const char*TObject::GetIconName() const
virtual const char*TObject::GetName() const
virtual char*TObject::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*TObject::GetOption() const
virtual TRecorder::ERecorderStateGetState() const
virtual const char*TObject::GetTitle() const
virtual UInt_tTObject::GetUniqueID() const
virtual Bool_tTObject::HandleTimer(TTimer* timer)
virtual ULong_tTObject::Hash() const
virtual voidTObject::Info(const char* method, const char* msgfmt) const
virtual Bool_tTObject::InheritsFrom(const char* classname) const
virtual Bool_tTObject::InheritsFrom(const TClass* cl) const
virtual voidTObject::Inspect() constMENU
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTObject::IsFolder() const
Bool_tTObject::IsOnHeap() const
virtual Bool_tTObject::IsSortable() const
Bool_tTObject::IsZombie() const
voidListCmd(const char* filename)
voidListGui(const char* filename)
virtual voidTObject::ls(Option_t* option = "") const
voidTObject::MayNotUse(const char* method) const
virtual Bool_tTObject::Notify()
voidTObject::Obsolete(const char* method, const char* asOfVers, const char* removedFromVers) const
voidTObject::operator delete(void* ptr)
voidTObject::operator delete(void* ptr, void* vp)
voidTObject::operator delete[](void* ptr)
voidTObject::operator delete[](void* ptr, void* vp)
void*TObject::operator new(size_t sz)
void*TObject::operator new(size_t sz, void* vp)
void*TObject::operator new[](size_t sz)
void*TObject::operator new[](size_t sz, void* vp)
virtual voidTObject::Paint(Option_t* option = "")
virtual voidTObject::Pop()
voidPrevCanvases(const char* filename, Option_t* option)
virtual voidTObject::Print(Option_t* option = "") const
virtual Int_tTObject::Read(const char* name)
virtual voidTObject::RecursiveRemove(TObject* obj)
Bool_tReplay(const char* filename, Bool_t showMouseCursor = kTRUE, TRecorder::EReplayModes mode = kRealtime)
voidTObject::ResetBit(UInt_t f)
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU
virtual voidTObject::SavePrimitive(ostream& out, Option_t* option = "")
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
virtual voidTObject::SetDrawOption(Option_t* option = "")MENU
static voidTObject::SetDtorOnly(void* obj)
static voidTObject::SetObjectStat(Bool_t stat)
virtual voidTObject::SetUniqueID(UInt_t uid)
virtual voidShowMembers(TMemberInspector& insp) const
voidStart(const char* filename, Option_t* option = "RECREATE", Window_t* w = 0, Int_t winCount = 0)
voidStop(Bool_t guiCommand = kFALSE)
virtual voidStreamer(TBuffer&)
voidStreamerNVirtual(TBuffer& ClassDef_StreamerNVirtual_b)
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
TRecorder(const char* filename, Option_t* option = "READ")
virtual voidTObject::UseCurrentStyle()
virtual voidTObject::Warning(const char* method, const char* msgfmt) const
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0)
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const
voidChangeState(TRecorderState* newstate, Bool_t deletePreviousState = kTRUE)
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
TRecorder&operator=(const TRecorder&)
TRecorder(const TRecorder&)

Data Members

static TObject::(anonymous)TObject::kBitMask
static TObject::EStatusBitsTObject::kCanDelete
static TObject::EStatusBitsTObject::kCannotPick
static TObject::EStatusBitsTObject::kHasUUID
static TRecorder::ERecorderStatekInactive
static TObject::EStatusBitsTObject::kInvalidObject
static TObject::(anonymous)TObject::kIsOnHeap
static TObject::EStatusBitsTObject::kIsReferenced
static TObject::EStatusBitsTObject::kMustCleanup
static TObject::EStatusBitsTObject::kNoContextMenu
static TObject::(anonymous)TObject::kNotDeleted
static TObject::EStatusBitsTObject::kObjInCanvas
static TObject::(anonymous)TObject::kOverwrite
static TRecorder::ERecorderStatekPaused
static TRecorder::EReplayModeskRealtime
static TRecorder::ERecorderStatekRecording
static TRecorder::ERecorderStatekReplaying
static TObject::(anonymous)TObject::kSingleKey
static TObject::(anonymous)TObject::kWriteDelete
static TObject::(anonymous)TObject::kZombie
TStringfFilenameEvents file name
TRecorderState*fRecorderState! Current state of recorder

Class Charts

Inheritance Chart:

Function documentation

 Creates initial INACTIVE state for the recorder
TRecorder(const char* filename, Option_t* option = "READ")
 Creates a recorder with filename to replay or to record,
 depending on option (NEW or RECREATE will start recording,
 READ will start replaying)
void Browse(TBrowser* )
 Browse the recorder from a ROOT file. This allows to replay a
 session from the browser.
void Start(const char* filename, Option_t* option = "RECREATE", Window_t* w = 0, Int_t winCount = 0)
 Starts recording events
void Stop(Bool_t guiCommand = kFALSE)
 Stopps recording events
Bool_t Replay(const char* filename, Bool_t showMouseCursor = kTRUE, TRecorder::EReplayModes mode = kRealtime)
 Replays events from 'filename'
void Pause()
 Pauses replaying
void Resume()
 Resumes replaying
void ReplayStop()
 Cancells replaying
void ListCmd(const char* filename)
 Prints out recorded commandline events
void ListGui(const char* filename)
 Prints out recorded GUI events
void ChangeState(TRecorderState* newstate, Bool_t deletePreviousState = kTRUE)
 Changes state from the current to the passed one (newstate)
 Deletes the old state if delPreviousState = KTRUE
void PrevCanvases(const char* filename, Option_t* option)
 Save previous canvases in a .root file
TRecorder(const TRecorder& )
TRecorder & operator=(const TRecorder& )
Bool_t Replay(const char* filename, Bool_t showMouseCursor = kTRUE, TRecorder::EReplayModes mode = kRealtime)
 Replays recorded events from given file
TRecorder::ERecorderState GetState() const
 Gets current state of recorder