179 class TGCursorWindow : public
TGFrame {
186 virtual ~TGCursorWindow();
196 TGCursorWindow::TGCursorWindow() :
204 gVirtualX->ShapeCombineMask(fId, 0, 0, fMask);
205 SetBackgroundPixmap(fPic);
211 gVirtualX->ChangeWindowAttributes(fId, &wattr);
217 TGCursorWindow::~TGCursorWindow()
240 if ((opt ==
"NEW") || (opt ==
"RECREATE"))
241 Start(filename, option);
335 if (delPreviousState)
372 fEventReplayed =
kTRUE;
374 fExtraTreeCounter = 0;
375 fFilterStatusBar =
kFALSE;
381 fShowMouseCursor =
kTRUE;
382 fWaitingForWindow =
kFALSE;
390 fWindowList =
new TList();
403 fTimer->Disconnect(fTimer,
"Timeout()",
this,
"ReplayRealtime()");
408 "RegisterWindow(Window_t)");
439 fExtraTreeCounter = 0;
443 fFilterStatusBar =
kFALSE;
445 fWaitingForWindow =
kFALSE;
450 fShowMouseCursor = showMouseCursor;
452 if (!fFile || fFile->IsZombie() || !fFile->IsOpen())
460 if (!fCmdTree || !fWinTree || ! fGuiTree || ! fExtraTree) {
461 Error(
"TRecorderReplaying::Initialize",
462 "The ROOT file is not valid event logfile.");
467 fCmdTree->SetBranchAddress(
kBranchName, &fCmdEvent);
469 fGuiTree->SetBranchAddress(
kBranchName, &fGuiEvent);
470 fExtraTree->SetBranchAddress(
kBranchName, &fExtraEvent);
473 Error(
"TRecorderReplaying::Initialize",
474 "The ROOT file is not valid event logfile");
479 if (!PrepareNextEvent()) {
480 Info(
"TRecorderReplaying::Initialize",
481 "Log file empty. No event to replay.");
486 fWinTreeEntries = fWinTree->GetEntries();
490 gClient->Connect(
"RegisteredWindow(Window_t)",
"TRecorderReplaying",
491 this,
"RegisterWindow(Window_t)");
493 Info(
"TRecorderReplaying::Initialize",
"Replaying of file %s started",
497 if (f && !f->IsZombie()) {
498 TIter nextkey(f->GetListOfKeys());
501 while ((key = (
TKey*)nextkey())) {
502 fFilterStatusBar =
kTRUE;
503 obj = key->ReadObj();
511 while ((canvas = (
TCanvas*)nextc())) {
515 fFilterStatusBar =
kFALSE;
521 fTimer->Connect(
"Timeout()",
"TRecorderReplaying",
this,
"ReplayRealtime()");
540 if (fFilterStatusBar) {
544 fFilterStatusBar =
kFALSE;
551 if (fWinTreeEntries > fRegWinCounter) {
552 fWinTree->GetEntry(fRegWinCounter);
557 Error(
"TRecorderReplaying::RegisterWindow",
558 "More windows registered than expected");
563 if ((
gDebug > 0) && (fWaitingForWindow)) {
564 std::ios::fmtflags
f = std::cout.flags();
565 std::cout <<
" Window registered: new ID: " <<
std::hex << w <<
566 " previous ID: " << fWin << std::dec << std::endl;
567 std::cout.flags( f );
579 fWindowList->Add(ids);
583 if (fWaitingForWindow && fGuiEvent->fWindow == fWin) {
586 std::ios::fmtflags
f = std::cout.flags();
587 std::cout <<
" Window " <<
std::hex << fGuiEvent->fWindow <<
588 " registered." << std::dec << std::endl;
589 std::cout.flags( f );
592 fNextEvent = fGuiEvent;
594 fWaitingForWindow =
kFALSE;
619 if (!found && fGuiEvent->fWindow == 0) {
620 fGuiEvent->fWindow =
gVirtualX->GetDefaultRootWindow();
623 else if (!found && ids->
fKey == fGuiEvent->fWindow) {
624 fGuiEvent->fWindow = ids->
fValue;
627 for (
Int_t i = 0; i < 5; ++i) {
628 if ((
Long_t) ids->
fKey == fGuiEvent->fUser[i])
629 fGuiEvent->fUser[i] = ids->
fValue;
631 if (fGuiEvent->fMasked && ids->
fKey == fGuiEvent->fMasked) {
632 fGuiEvent->fMasked = ids->
fValue;
636 if (!found && fGuiEvent->fWindow == 0) {
637 fGuiEvent->fWindow =
gVirtualX->GetDefaultRootWindow();
648 std::ios_base::fmtflags org_flags = std::cout.flags();
649 std::cout <<
"fGuiTreeCounter = " << std::dec << fGuiTreeCounter <<
650 " No mapping found for ID " <<
std::hex << fGuiEvent->fWindow << std::endl;
653 std::cout.flags(org_flags);
658 fWaitingForWindow =
kTRUE;
729 if (fCmdTree->GetEntries() > fCmdTreeCounter)
730 fCmdTree->GetEntry(fCmdTreeCounter);
733 if (fExtraTree->GetEntries() > fExtraTreeCounter)
734 fExtraTree->GetEntry(fExtraTreeCounter);
738 while (fGuiTree->GetEntries() > fGuiTreeCounter) {
739 fGuiTree->GetEntry(fGuiTreeCounter);
740 if (!fGuiEvent || !FilterEvent(fGuiEvent))
746 if (fCmdEvent && fGuiEvent && fExtraEvent) {
749 if ((fCmdEvent->GetTime() <= fGuiEvent->GetTime()) &&
750 (fCmdEvent->GetTime() <= fExtraEvent->GetTime()))
751 fNextEvent = fCmdEvent;
753 if (fGuiEvent->GetTime() <= fExtraEvent->GetTime())
754 fNextEvent = fGuiEvent;
756 fNextEvent = fExtraEvent;
759 else if (fCmdEvent && fGuiEvent) {
762 if (fCmdEvent->GetTime() <= fGuiEvent->GetTime())
763 fNextEvent = fCmdEvent;
765 fNextEvent = fGuiEvent;
767 else if (fCmdEvent && fExtraEvent ) {
770 if (fCmdEvent->GetTime() <= fExtraEvent->GetTime())
771 fNextEvent = fCmdEvent;
773 fNextEvent = fExtraEvent;
775 else if (fGuiEvent && fExtraEvent) {
778 if (fExtraEvent->GetTime() <= fGuiEvent->GetTime())
779 fNextEvent = fExtraEvent;
781 fNextEvent = fGuiEvent;
785 else if (!fCmdEvent && !fGuiEvent && !fExtraEvent)
789 fNextEvent = fGuiEvent;
792 fNextEvent = fCmdEvent;
794 fNextEvent = fExtraEvent;
801 if (fNextEvent == fCmdEvent)
805 if (fNextEvent == fExtraEvent)
809 if (fNextEvent == fGuiEvent) {
811 if (RemapWindowReferences())
829 Error(
"TRecorderReplaying::CanOverlap()",
"fGuiEvent = 0");
839 std::cout <<
"Event overlapping " <<
877 gROOT->SetEditorMode();
889 if (!fEventReplayed && !CanOverlap())
899 fPreviousEventTime = fNextEvent->GetTime();
906 gVirtualX->LookupString(e, str,
sizeof(str), keysym);
908 if ((keysym & ~0x20) ==
kKey_S) {
918 fNextEvent->ReplayEvent(fShowMouseCursor);
925 if (!PrepareNextEvent()) {
929 Info(
"TRecorderReplaying::ReplayRealtime",
"Replaying finished");
940 fTimer->Start(
Long_t(fNextEvent->GetTime() - fPreviousEventTime));
951 Info(
"TRecorderReplaying::Pause",
"Replaying paused.");
959 Info(
"TRecorderReplaying::ReplayStop",
"Replaying cancelled");
969 fTimer->Start(
Long_t(fNextEvent->GetTime() - fPreviousEventTime));
1013 if (replay->
Initialize(r, showMouseCursor, mode)) {
1044 Error(
"TRecorderInactive::List",
1045 "The ROOT file is not valid event logfile.");
1054 for (
Int_t i = 0; i < entries; ++i) {
1056 std::cout <<
"[" << i <<
"] " <<
"fTime=" <<
1058 fCmdEvent->
GetText() << std::endl;
1060 std::cout << std::endl;
1087 Error(
"TRecorderInactive::ListGui",
1088 "The ROOT file is not valid event logfile.");
1098 for (
Int_t i = 0; i < entries ; ++i) {
1100 DumpRootEvent(guiEvent, i);
1113 std::ios::fmtflags
f = std::cout.flags();
1114 std::cout <<
"[" << n <<
"] " << std::dec << std::setw(10)
1117 <<
" t:" << std::dec << e->
fTime 1118 <<
" x:" << DisplayValid(e->
fX)
1119 <<
" y:" << DisplayValid(e->
fY)
1120 <<
" fXR:" << DisplayValid(e->
fXRoot)
1121 <<
" fYR:" << DisplayValid(e->
fYRoot)
1122 <<
" c:" << DisplayValid(e->
fCode)
1123 <<
" s:" << DisplayValid(e->
fState)
1124 <<
" w:" << DisplayValid(e->
fWidth)
1125 <<
" h:" << DisplayValid(e->
fHeight)
1126 <<
" cnt:" << DisplayValid(e->
fCount)
1129 <<
" fF:" << DisplayValid(e->
fFormat)
1132 for (
Int_t i=0; i<5; ++i)
1133 if (DisplayValid(e->
fUser[i]) != -1)
1134 std::cout <<
"[" << i <<
"]=" << DisplayValid(e->
fUser[i]);
1139 std::cout << std::endl;
1140 std::cout.flags( f );
1148 fCollect =
gROOT->GetListOfCanvases();
1167 fReplayingState = state;
1175 fReplayingState->Continue();
1176 Info(
"TRecorderPaused::Resume",
"Replaying resumed");
1187 delete fReplayingState;
1189 Info(
"TRecorderReplaying::ReplayStop",
"Reaplying cancelled");
1212 fFilteredIdsCount = winCount;
1213 fFilteredIds =
new Window_t[fFilteredIdsCount];
1214 for(
Int_t i=0; i < fFilteredIdsCount; ++i)
1215 fFilteredIds[i] = w[i];
1218 fCmdEventPending =
kFALSE;
1221 fFilterEventPave =
kFALSE;
1230 fMouseTimer->Connect(
"Timeout()",
"TRecorderRecording",
this,
1231 "RecordMousePosition()");
1253 delete[] fFilteredIds;
1270 if (!fFile || fFile->IsZombie() || !fFile->IsOpen())
1276 this,
"RecordCmdEvent(const char*)");
1280 gClient->Connect(
"RegisteredWindow(Window_t)",
"TRecorderRecording",
this,
1281 "RegisterWindow(Window_t)");
1286 gClient->Connect(
"ProcessedEvent(Event_t*, Window_t)",
"TRecorderRecording",
1287 this,
"RecordGuiEvent(Event_t*, Window_t)");
1292 "TRecorderRecording",
this,
"RecordGuiCNEvent(Event_t*)");
1297 this,
"RecordPave(const TObject*)");
1301 "TRecorderRecording",
this,
"RecordText(const TObject*)");
1306 "FilterEventPave()");
1315 "TRecorderRecording",
this,
"RecordGuiBldEvent(Event_t*)");
1320 fCmdTree->Branch(
kBranchName,
" TRecCmdEvent", &fCmdEvent);
1321 fGuiTree->Branch(
kBranchName,
"TRecGuiEvent", &fGuiEvent);
1322 fExtraTree->Branch(
kBranchName,
"TRecExtraEvent", &fExtraEvent);
1324 Int_t numCanvases =
gROOT->GetListOfCanvases()->LastIndex();
1326 if (numCanvases >= 0){
1332 while ((twin = (
TGWindow*) nextwindow())) {
1334 if (IsFiltered(twin2)) {
1336 std::cout <<
"WindowID "<< twin2 <<
" filtered" << std::endl;
1339 else if (twin !=
gClient->GetRoot()) {
1340 RegisterWindow(twin2);
1351 fMouseTimer->Start(50);
1353 Info(
"TRecorderRecording::StartRecording",
"Recording started. Log file: %s",
1365 "RecordGuiBldEvent(Event_t*)");
1367 "RecordGuiCNEvent(Event_t*)");
1369 "RecordPave(const TObject*)");
1371 "RecordText(const TObject*)");
1374 gClient->Disconnect(
gClient,
"ProcessedEvent(Event_t*, Window_t)",
this,
1375 "RecordGuiEvent(Event_t*, Window_t)");
1377 "RegisterWindow(Window_t)");
1379 "RecordCmdEvent(const char*)");
1383 if (fCmdEventPending && guiCommand)
1386 fRecorder->Write(
"recorder");
1391 fMouseTimer->TurnOff();
1393 Info(
"TRecorderRecording::Stop",
"Recording finished.");
1418 if (fCmdEventPending)
1423 fCmdEvent->SetTime(fTimer->GetAbsTime());
1424 fCmdEvent->SetText((
char*)line);
1428 fCmdEventPending =
kTRUE;
1447 if (fFilteredIdsCount && IsFiltered(e->
fWindow))
1451 if (fFilterEventPave && (e->
fCode == 1)) {
1452 fFilterEventPave =
kFALSE;
1455 fFilterEventPave =
kFALSE;
1467 fGuiEvent->SetTime(fTimer->GetAbsTime());
1486 fGuiEvent->SetTime(fTimer->GetAbsTime());
1517 RecordGuiEvent(&ev, 0);
1518 fMouseTimer->Reset();
1529 if (fFilteredIdsCount && IsFiltered(e->
fWindow))
1534 SetTypeOfConfigureNotify(e);
1540 fGuiEvent->SetTime(fTimer->GetAbsTime());
1558 cad =
"TPaveLabel *p = new TPaveLabel(";
1559 cad += pavel->
GetX1();
1561 cad += pavel->
GetY1();
1563 cad += pavel->
GetX2();
1565 cad += pavel->
GetY2();
1566 cad +=
",\"\"); p->Draw(); gPad->Modified(); gPad->Update();";
1568 interval /= (len + 2);
1569 RecordExtraEvent(cad, extratime);
1570 for (i=0; i < len; ++i) {
1571 cad =
"p->SetLabel(\"";
1572 cad += (aux += label[i]);
1575 cad +=
" p->SetTextFont(83); p->SetTextSizePixels(14); ";
1577 cad +=
" gPad->Modified(); gPad->Update();";
1578 extratime += interval;
1579 RecordExtraEvent(cad, extratime);
1581 cad =
"p->SetTextFont(";
1583 cad +=
"); p->SetTextSize(";
1585 cad +=
"); gPad->Modified(); gPad->Update();";
1586 extratime += interval;
1587 RecordExtraEvent(cad, extratime);
1602 cad =
"TLatex *l = new TLatex(";
1603 cad += texto->
GetX();
1605 cad += texto->
GetY();
1606 cad +=
",\"\"); l->Draw(); gPad->Modified(); gPad->Update();";
1608 interval /= (len + 2);
1609 RecordExtraEvent(cad, extratime);
1610 for (i=0; i < len; ++i) {
1611 cad =
"l->SetTitle(\"";
1612 cad += (aux += label[i]);
1615 cad +=
" l->SetTextFont(83); l->SetTextSizePixels(14); ";
1617 cad +=
" gPad->Modified(); gPad->Update();";
1618 extratime += interval;
1619 RecordExtraEvent(cad, extratime);
1621 cad =
"l->SetTextFont(";
1623 cad +=
"); l->SetTextSize(";
1625 cad +=
"); gPad->Modified(); gPad->Update();";
1626 cad +=
" TVirtualPad *spad = gPad->GetCanvas()->GetSelectedPad();";
1627 cad +=
" gPad->GetCanvas()->Selected(spad, l, kButton1Down);";
1628 extratime += interval;
1629 RecordExtraEvent(cad, extratime);
1637 fFilterEventPave =
kTRUE;
1645 fBeginPave = fTimer->GetAbsTime();
1654 fExtraEvent->SetTime(extTime);
1655 fExtraEvent->SetText(line);
1664 fGuiEvent->fType = e->
fType;
1665 fGuiEvent->fWindow = e->
fWindow;
1666 fGuiEvent->fTime = e->
fTime;
1668 fGuiEvent->fX = e->
fX;
1669 fGuiEvent->fY = e->
fY;
1670 fGuiEvent->fXRoot = e->
fXRoot;
1671 fGuiEvent->fYRoot = e->
fYRoot;
1673 fGuiEvent->fCode = e->
fCode;
1674 fGuiEvent->fState = e->
fState;
1676 fGuiEvent->fWidth = e->
fWidth;
1677 fGuiEvent->fHeight = e->
fHeight;
1679 fGuiEvent->fCount = e->
fCount;
1681 fGuiEvent->fHandle = e->
fHandle;
1682 fGuiEvent->fFormat = e->
fFormat;
1687 for(
Int_t i=0; i<5; ++i)
1688 fGuiEvent->fUser[i] = e->
fUser[i];
1696 gVirtualX->LookupString(e, tmp,
sizeof(tmp), keysym);
1697 fGuiEvent->fCode = keysym;
1700 fGuiEvent->fMasked = wid;
1708 for(
Int_t i=0; i < fFilteredIdsCount; ++i)
1709 if (
id == fFilteredIds[i])
1729 if ((e->
fX == 0 && e->
fY == 0)) {
1783 fFilteredIds[0] = GetId();
1788 fFilteredIds[1] = hframe->
GetId();
1794 fFilteredIds[2] = vframe->
GetId();
1801 fFilteredIds[3] = fStatusLabel->
GetId();
1808 fFilteredIds[4] = fTimeLabel->
GetId();
1814 fFilteredIds[5] = vframe->
GetId();
1816 fStatus =
new TGLabel(vframe,
"Inactive");
1817 fStatus->SetTextColor(0x7cffff);
1818 fStatus->SetBackgroundColor((
Pixel_t)0x000000);
1821 fFilteredIds[6] = fStatus->GetId();
1823 fTimeDisplay =
new TGLabel(vframe,
"00:00:00");
1824 fTimeDisplay->SetTextColor(0x7cffff);
1825 fTimeDisplay->SetTextFont(
"Helvetica -34",
kFALSE);
1826 fTimeDisplay->SetBackgroundColor((
Pixel_t)0x000000);
1829 fFilteredIds[7] = fTimeDisplay->GetId();
1837 fFilteredIds[8] = hframe->
GetId();
1842 fStartStop->Connect(
"Clicked()",
"TGRecorder",
this,
"StartStop()");
1845 fStartStop->Resize(40,40);
1846 fFilteredIds[9] = fStartStop->GetId();
1851 fReplay->Connect(
"Clicked()",
"TGRecorder",
this,
"Replay()");
1854 fReplay->Resize(40,40);
1855 fFilteredIds[10] = fReplay->GetId();
1858 fCursorCheckBox =
new TGCheckButton(
this,
"Show mouse cursor");
1860 fFilteredIds[11] = fCursorCheckBox->GetId();
1864 fTimer->Connect(
"Timeout()",
"TGRecorder",
this,
"Update()");
1868 SetEditDisabled(kEditDisable | kEditDisableGrab);
1869 SetWindowName(
"ROOT Event Recorder");
1882 fTimeDisplay->SetText(
"00:00:00");
1884 fReplay->SetPicture(
gClient->GetPicture(
"replay.png"));
1885 fReplay->SetEnabled(
kTRUE);
1887 fCursorCheckBox->SetEnabled(
kTRUE);
1888 fCursorCheckBox->SetOn(
kTRUE);
1890 fStartStop->SetPicture(
gClient->GetPicture(
"record.png"));
1891 fStartStop->SetEnabled(
kTRUE);
1904 time_t elapsed_time = (time_t)difftime( fElapsed, fStart );
1905 running = gmtime( &elapsed_time );
1907 switch(fRecorder->GetState()) {
1917 fStatus->SetText(
"Replaying");
1919 fStatus->SetText(
"Recording");
1920 stime.
Form(
"%02d:%02d:%02d", running->tm_hour,
1921 running->tm_min, running->tm_sec);
1922 fTimeDisplay->SetText(stime.
Data());
1926 fStatus->SetText(
"Waiting...");
1927 fStatus->SetTextColor((
Pixel_t)0xff0000);
1930 fStatus->SetTextColor((
Pixel_t)0x7cffff);
1933 fTimeDisplay->Resize();
1944 fStatus->SetText(
"Inactive");
1945 fStatus->SetTextColor((
Pixel_t)0x7cffff);
1963 "All files",
"*",
"Text files",
"*.txt",
"ROOT files",
"*.root", 0, 0
1967 switch(fRecorder->GetState()) {
1981 if (!
gROOT->GetListOfCanvases()->IsEmpty()) {
1982 fRecorder->PrevCanvases(fi.
fFilename,
"RECREATE");
1983 fRecorder->Start(fi.
fFilename,
"UPDATE", fFilteredIds,
1987 fRecorder->Start(fi.
fFilename,
"RECREATE", fFilteredIds,
1990 fCursorCheckBox->SetDisabledAndSelected(
kTRUE);
1991 fStartStop->SetPicture(
gClient->GetPicture(
"stop.png"));
1992 fReplay->SetEnabled(
kFALSE);
2000 fRecorder->Stop(
kTRUE);
2006 fStartStop->SetPicture(
gClient->GetPicture(
"replay.png"));
2011 fRecorder->Resume();
2012 fStartStop->SetPicture(
gClient->GetPicture(
"pause.png"));
2028 switch(fRecorder->GetState()) {
2038 if (fRecorder->Replay(fi.
fFilename, fCursorCheckBox->IsOn())) {
2043 fReplay->SetPicture(
gClient->GetPicture(
"stop.png"));
2044 fStartStop->SetPicture(
gClient->GetPicture(
"pause.png"));
2046 if (fCursorCheckBox->IsOn())
2047 fStartStop->SetEnabled(
kFALSE);
2049 fCursorCheckBox->SetEnabled(
kFALSE);
2057 fRecorder->ReplayStop();
2087 Int_t px, py, dx, dy;
2089 Event_t *e = CreateEvent(
this);
2115 if ((e->
fX - attr.
fX > 0) && (e->
fY - attr.
fY > 0))
2130 Error(
"TRecGuiEvent::ReplayEvent",
2131 "kConfigureNotify: Unknown value: fUser[4] = %ld ",
2140 Error(
"TRecGuiEvent::ReplayEvent",
2141 "kConfigureNotify: Window does not exist anymore ");
2150 e->
fX, e->
fY, px, py, wtarget);
2187 gClient->HandleMaskEvent(e, fMasked);
2225 for(
Int_t i=0; i<5; ++i)
void RegisterWindow(Window_t w)
This method is called when RegisteredWindow(Window_t) is emitted from TGClient.
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
void RecordCmdEvent(const char *line)
Records commandline event (text and time) ans saves the previous commandline event This 1 event delay...
const char * kRecEventNames[]
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
void CopyEvent(Event_t *e, Window_t wid)
Copies all items of given event to fGuiEvent.
void RecordText(const TObject *obj)
Records TLatex object created in TCreatePrimitives::Text()
void FilterEventPave()
Change the state of the flag to kTRUE when you are recording a pavelabel.
void ListGui(const char *filename)
Prints out recorded GUI events.
virtual void SetTextColor(Pixel_t color, Bool_t global=kFALSE)
Changes text color.
void RecordExtraEvent(TString line, TTime extTime)
Records TLatex or TPaveLabel object created in TCreatePrimitives, ExtTime is needed for the correct r...
virtual void ListCmd(const char *)
const char * kCmdEventTree
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
virtual TObject * Get(const char *namecycle)
Return pointer to object identified by namecycle.
static const char * filename()
virtual void Pause(TRecorder *)
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all branches of entry and return total number of bytes read.
R__EXTERN Atom_t gWM_DELETE_WINDOW
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
virtual Bool_t Replay(TRecorder *, const char *, Bool_t, TRecorder::EReplayModes)
R__EXTERN TApplication * gApplication
Bool_t FilterEvent(TRecGuiEvent *e)
Basic time type with millisecond precision.
TObject * Next()
Return next object in the list. Returns 0 when no more objects in list.
void Start(const char *filename, Option_t *option="RECREATE", Window_t *w=0, Int_t winCount=0)
Starts recording events.
void RecordPave(const TObject *obj)
Records TPaveLabel object created in TCreatePrimitives::Pave()
virtual void ReplayStop(TRecorder *)
R__EXTERN TVirtualDragManager * gDragManager
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=1, Int_t netopt=0)
Create / open a file.
virtual void ReplayStop(TRecorder *r)
Replaying is cancelled.
virtual void Start(TRecorder *, const char *, Option_t *, Window_t *, Int_t)
void Update()
Called when fTimer timeouts (every 0.025 second) Updates GUI of recorder.
virtual Int_t SetBranchAddress(const char *bname, void *add, TBranch **ptr=0)
Change branch address, dealing with clone trees properly.
virtual Float_t GetTextSize() const
TRecorder()
Creates initial INACTIVE state for the recorder.
UInt_t GetWindowHeight() const
To draw Mathematical Formula.
virtual void Stop(TRecorder *, Bool_t)
void RecordGuiCNEvent(Event_t *e)
Records GUI Event_t *e of type kConfigureNotify.
void RecordMousePosition()
Try to record all mouse moves...
virtual void SetBackgroundColor(Pixel_t back)
Set background color (override from TGWindow base class).
virtual void ListGui(const char *filename)
Prints out GUI events recorded in given file.
void Replay()
Handles push of fReplay button according to the current recorder state.
Book space in a file, create I/O buffers, to fill them, (un)compress them.
Bool_t Initialize(TRecorder *r, Bool_t showMouseCursor, TRecorder::EReplayModes mode)
Initialization of data structures for replaying.
void ListCmd(const char *filename)
Prints out recorded commandline events.
virtual ~TGRecorder()
Destructor. Cleanup the GUI.
A Pave (see TPave) with a text centered in the Pave.
Pixmap_t GetPicture() const
const char * GetLabel() const
Using a TBrowser one can browse all ROOT objects.
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Non-static method is used to connect from the signal of this object to the receiver slot...
friend class TRecorderReplaying
virtual void Resize(UInt_t w, UInt_t h)
Resize the window.
virtual Bool_t Replay(TRecorder *r, const char *filename, Bool_t showMouseCursor, TRecorder::EReplayModes mode)
Switches from INACTIVE state of recorder to REPLAYING Return kTRUE if replaying has started or kFALSE...
virtual void Stop(TRecorder *r, Bool_t guiCommand)
Disconnects all slots and stopps recording.
R__EXTERN TSystem * gSystem
const Mask_t kWASaveUnder
void Resume()
Resumes replaying.
void ChangeState(TRecorderState *newstate, Bool_t deletePreviousState=kTRUE)
Changes state from the current to the passed one (newstate) Deletes the old state if delPreviousState...
static const char * gFiletypes[]
virtual Font_t GetTextFont() const
void RegisterWindow(Window_t w)
Creates mapping for the newly registered window w and adds this mapping to fWindowList.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
void SetTypeOfConfigureNotify(Event_t *e)
Sets type of kConfigureNotify event to one of EConfigureNotify.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Continue()
Continues previously paused replaying.
static void DumpRootEvent(TRecGuiEvent *e, Int_t n)
Prints out attributes of one GUI event TRecGuiEvent *e Int_n n is number of event if called in cycle...
void ReplayRealtime()
Replays the next event.
Handles synchronous and a-synchronous timer events.
const char * AsString() const
Return the time as a string.
static Int_t gDecorHeight
const char * kGuiEventTree
Bool_t PrepareNextEvent()
Finds the next event in log file to replay and sets it to fNextEvent.
virtual void Move(Int_t x, Int_t y)
Move the window.
const char * kExtraEventTree
void PrevCanvases(const char *filename, Option_t *option)
Save previous canvases in a .root file.
void RecordGuiEvent(Event_t *e, Window_t wid)
Records GUI Event_t *e different from kConfigureNotify (they are recorded in TRecorderRecording::Reco...
virtual Bool_t IsOpen() const
Returns kTRUE in case file is open and kFALSE if file is not open.
TRecorderState * fRecorderState
virtual void ReplayEvent(Bool_t showMouseCursor=kTRUE)
Replays stored GUI event.
virtual void ListCmd(const char *filename)
Prints out commandline events recorded in given file.
UInt_t GetWindowWidth() const
void StartStop()
Handles push of the fStartStop button according to the current recorder state.
unsigned long long ULong64_t
const Mask_t kWAOverrideRedirect
void RecordGuiBldEvent(Event_t *e)
Special case for the gui builder, having a timer handling some of the events.
Bool_t Disconnect(const char *signal=0, void *receiver=0, const char *slot=0)
Disconnects signal of this object from slot of receiver.
void ReplayStop()
Cancells replaying.
void SetWindowSize(UInt_t ww, UInt_t wh)
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=0)
Add frame to the composite frame using the specified layout hints.
void SetDefault()
Sets GUI to the default inactive state.
const TGWindow * GetParent() const
void StartEditing()
Memorize the starting time of editinga TLatex or a TPaveLabel.
virtual Long64_t GetEntries() const
virtual TRecorder::ERecorderState GetState() const
Get current state of recorder.
Mother of all ROOT objects.
virtual void MoveResize(Int_t x, Int_t y, UInt_t w, UInt_t h)
Move and resize the window.
Bool_t StartRecording()
Connects appropriate signals and slots in order to gain all registered windows and processed events i...
typedef void((*Func_t)())
virtual void PrevCanvases(const char *, Option_t *)
void Stop(Bool_t guiCommand=kFALSE)
Stopps recording events.
RooCmdArg Layout(Double_t xmin, Double_t xmax=0.99, Double_t ymin=0.95)
friend class TRecorderRecording
virtual void ReplayStop(TRecorder *r)
Cancels replaying.
virtual void Resume(TRecorder *)
Bool_t IsFiltered(Window_t id)
Returns kTRUE if passed id belongs to window IDs of recorder GUI itself.
virtual void Resume(TRecorder *r)
Continues replaying.
static TGCursorWindow * gCursorWin
virtual Bool_t HandleTimerEvent(Event_t *, TTimer *)
static Event_t * CreateEvent(TRecGuiEvent *ge)
Converts TRecGuiEvent type to Event_t type.
virtual ~TRecorderReplaying()
Closes all signal-slot connections Frees all memory allocated in contructor.
void Pause()
Pauses replaying.
const char * GetText() const
friend class TRecorderPaused
virtual ~TRecorder()
Destructor.
A TTree object has a header with a name and a title.
virtual void ListGui(const char *)
virtual TRecorder::ERecorderState GetState() const =0
virtual void Pause(TRecorder *r)
Pauses replaying.
const Mask_t kKeyControlMask
virtual ~TRecorderRecording()
Freeing of allocated memory.
virtual TTime GetTime() const
void PrevCanvases(const char *filename, Option_t *option)
Save previous canvases in a .root file.
void Browse(TBrowser *)
Browse the recorder from a ROOT file.
friend class TRecorderInactive
const char * kWindowsTree
R__EXTERN Atom_t gROOT_MESSAGE
if(line.BeginsWith("/*"))
virtual const char * GetTitle() const
Returns title of object.
Bool_t RemapWindowReferences()
All references to the old windows (IDs) in fNextEvent are replaced by new ones according to the mappi...
virtual void Close(Option_t *option="")
Close a file.
Bool_t CanOverlap()
ButtonPress and ButtonRelease must be sometimes replayed more times Example: pressing of a button ope...
const char * Data() const