409 TEveBrowser* browser = gEve->GetBrowser();
410 const int margin = 3;
412 browser->Connect(
"CloseWindow()",
"Belle2::DisplayUI",
this,
"closeAndExit()");
415 browser->Connect(
"ProcessedEvent(Event_t*)",
"Belle2::DisplayUI",
this,
"handleEvent(Event_t*)");
416 TEveViewerList* viewers = gEve->GetViewers();
417 TEveElement::List_ci end_it = viewers->EndChildren();
418 for (TEveElement::List_i it = viewers->BeginChildren(); it != end_it; ++it) {
419 TEveViewer* v =
static_cast<TEveViewer*
>(*it);
420 TGLViewer* glv = v->GetGLViewer();
421 glv->GetGLWidget()->Connect(
"ProcessedEvent(Event_t*)",
"Belle2::DisplayUI",
this,
"handleEvent(Event_t*)");
425 browser->StartEmbedding(TRootBrowser::kLeft);
427 TGMainFrame* frmMain =
new TGMainFrame(gClient->GetRoot(), 240, 600);
428 frmMain->SetWindowName(
"Event control main frame");
429 frmMain->SetCleanup(kDeepCleanup);
431 const TString icondir(Form(
"%s/icons/", gSystem->Getenv(
"ROOTSYS")));
433 TGGroupFrame* event_frame =
new TGGroupFrame(frmMain);
434 event_frame->SetTitle(
"Event");
436 TGHorizontalFrame* hf =
new TGHorizontalFrame(event_frame);
438 m_prevButton =
new TGPictureButton(hf, gClient->GetPicture(icondir +
"GoBack.gif"));
439 m_prevButton->SetToolTipText(
"Go to previous event (Page Up)");
440 hf->AddFrame(
m_prevButton,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, margin, margin, margin, margin));
441 m_prevButton->Connect(
"Clicked()",
"Belle2::DisplayUI",
this,
"prev()");
445 TGNumberFormat::kNEANonNegative,
446 TGNumberFormat::kNELLimitMinMax,
449 hf->AddFrame(
m_eventNumberWidget,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, margin, margin, margin, margin));
451 m_eventNumberWidget->Connect(
"ValueSet(Long_t)",
"Belle2::DisplayUI",
this,
"goToEventWidget()");
452 m_eventNumberWidget->GetNumberEntry()->Connect(
"ReturnPressed()",
"Belle2::DisplayUI",
this,
"goToEventWidget()");
455 if (numEntries > 0) {
456 TGLabel* maxEvents =
new TGLabel(hf, TString::Format(
"/%ld", numEntries - 1));
457 hf->AddFrame(maxEvents,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, margin, margin, margin, margin));
460 m_nextButton =
new TGPictureButton(hf, gClient->GetPicture(icondir +
"GoForward.gif"));
461 m_nextButton->SetToolTipText(
"Go to next event (Page Down)");
462 hf->AddFrame(
m_nextButton,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, margin, margin, margin, margin));
463 m_nextButton->Connect(
"Clicked()",
"Belle2::DisplayUI",
this,
"next()");
465 event_frame->AddFrame(hf,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 0, 0, 0, 0));
467 hf =
new TGHorizontalFrame(event_frame);
472 TGLabel* delayLabel =
new TGLabel(hf,
"Delay (s):");
473 hf->AddFrame(delayLabel,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, margin, margin, margin, margin));
475 const double valueSeconds = async ? 0.5 : 3.5;
476 m_autoAdvanceDelay =
new TGNumberEntry(hf, valueSeconds, 3, 999, TGNumberFormat::kNESRealOne,
477 TGNumberFormat::kNEAPositive,
478 TGNumberFormat::kNELLimitMin,
481 hf->AddFrame(
m_autoAdvanceDelay,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, margin, margin, margin, margin));
483 m_autoAdvanceDelay->Connect(
"ValueSet(Long_t)",
"Belle2::DisplayUI",
this,
"autoAdvanceDelayChanged()");
484 m_autoAdvanceDelay->GetNumberEntry()->Connect(
"ReturnPressed()",
"Belle2::DisplayUI",
this,
"autoAdvanceDelayChanged()");
486 m_playPauseButton =
new TGPictureButton(hf, gClient->GetPicture(icondir +
"ed_execute.png"));
488 m_playPauseButton->SetToolTipText(
"Advance automatically to next event after the given delay.");
489 hf->AddFrame(
m_playPauseButton,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, margin, margin, margin, margin));
490 m_playPauseButton->Connect(
"Clicked()",
"Belle2::DisplayUI",
this,
"togglePlayPause()");
492 event_frame->AddFrame(hf,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 0, 0, 0, 0));
494 TGButton* jumpToEventButton =
new TGTextButton(event_frame,
"Jump to event/run/exp...");
496 jumpToEventButton->SetToolTipText(
"Find a given entry identified by an event / run / experiment triplet in the current file");
497 event_frame->AddFrame(jumpToEventButton,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, margin, margin, margin, margin));
498 jumpToEventButton->Connect(
"Clicked()",
"Belle2::DisplayUI",
this,
"showJumpToEventDialog()");
501 event_frame->AddFrame(
m_eventLabel,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, margin, margin, margin, margin));
506 m_flagEvent =
new TGCheckButton(event_frame, descr);
507 m_flagEvent->SetToolTipText(
"Set return value to true for this event");
509 event_frame->AddFrame(
m_flagEvent,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, margin, margin, margin, margin));
512 frmMain->AddFrame(event_frame,
new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
514 TGGroupFrame* param_frame =
new TGGroupFrame(frmMain);
515 param_frame->SetTitle(
"Options");
518 for (
int i = 0; i < nParams; i++) {
519 TGCheckButton* b =
new TGCheckButton(param_frame,
m_paramList[i].m_label.c_str(), i);
520 b->SetToolTipText(
m_paramList[i].m_param->getDescription().c_str());
521 b->SetState(
m_paramList[i].m_param->getValue() ? kButtonDown : kButtonUp);
522 b->Connect(
"Clicked()",
"Belle2::DisplayUI",
this, TString::Format(
"handleParameterChange(=%d)", i));
524 param_frame->AddFrame(b,
new TGLayoutHints(kLHintsExpandX | kLHintsCenterY, indentation, margin, margin, margin));
528 frmMain->AddFrame(param_frame,
new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
530 TGGroupFrame* viewer_frame =
new TGGroupFrame(frmMain);
531 viewer_frame->SetTitle(
"Current Viewer");
533 TGHorizontalFrame* hf =
new TGHorizontalFrame(viewer_frame);
536 b =
new TGTextButton(hf,
"Save As...");
537 b->SetToolTipText(
"Save a bitmap graphic for the current viewer");
538 hf->AddFrame(b,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, margin + 1, margin, margin, margin));
539 b->Connect(
"Clicked()",
"Belle2::DisplayUI",
this,
"savePicture()");
541 b =
new TGTextButton(hf,
"Save As (High-Res)... ");
542 b->SetToolTipText(
"Save a bitmap graphic for the current viewer with user-specified size");
543 hf->AddFrame(b,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, margin, margin, margin, margin));
544 b->Connect(
"Clicked()",
"Belle2::DisplayUI",
this,
"saveHiResPicture()");
547 viewer_frame->AddFrame(hf,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 0, 0, 0, 0));
549 hf =
new TGHorizontalFrame(viewer_frame);
551 b =
new TGTextButton(hf,
"Dock/Undock Viewer");
552 b->SetToolTipText(
"Move current viewer into it's own window, or back to its original position");
553 hf->AddFrame(b,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, margin, margin, margin, margin));
554 b->Connect(
"Clicked()",
"Belle2::DisplayUI",
this,
"toggleUndock()");
556 viewer_frame->AddFrame(hf,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 0, 0, 0, 0));
558 frmMain->AddFrame(viewer_frame,
new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
561 TGGroupFrame* visOptionsFrame =
new TGGroupFrame(frmMain);
562 visOptionsFrame->SetTitle(
"Visualisation Options");
564 TGHorizontalFrame* hf =
new TGHorizontalFrame(visOptionsFrame);
566 TGButton* b =
new TGTextButton(hf,
"Dark/light colors");
567 b->SetToolTipText(
"Toggle background color");
568 hf->AddFrame(b,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, margin, margin, margin, margin));
569 b->Connect(
"Clicked()",
"Belle2::DisplayUI",
this,
"toggleColorScheme()");
571 visOptionsFrame->AddFrame(hf,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 0, 0, 0, 0));
574 TGCheckButton* c =
new TGCheckButton(visOptionsFrame,
"Cumulative mode (experimental)");
575 c->SetToolTipText(
"Do not erase previous event, i.e. show data from multiple events. This is quite unstable and will crash sooner or later.");
577 c->Connect(
"Clicked()",
"Belle2::DisplayUI",
this,
"toggleCumulative()");
578 visOptionsFrame->AddFrame(c,
new TGLayoutHints(kLHintsExpandX | kLHintsCenterY, 0, margin, margin, margin));
581 frmMain->AddFrame(visOptionsFrame,
new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
583 TGGroupFrame* automatisation_frame =
new TGGroupFrame(frmMain);
584 automatisation_frame->SetTitle(
"Automatic Saving (experimental)");
586 TGHorizontalFrame* hf =
new TGHorizontalFrame(automatisation_frame);
588 TGLabel* prefixLabel =
new TGLabel(hf,
"Prefix:");
589 hf->AddFrame(prefixLabel,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, margin, margin, margin, margin));
592 hf->AddFrame(
m_autoFileNamePrefix,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, margin, margin, margin, margin));
594 automatisation_frame->AddFrame(hf,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 0, 0, 0, 0));
596 hf =
new TGHorizontalFrame(automatisation_frame);
598 TGLabel* widthLabel =
new TGLabel(hf,
"Width (px):");
599 hf->AddFrame(widthLabel,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, margin, margin, margin, margin));
602 TGNumberFormat::kNEANonNegative,
603 TGNumberFormat::kNELLimitMinMax,
605 hf->AddFrame(
m_autoPictureWidth,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, margin, margin, margin, margin));
607 TGButton* b =
new TGTextButton(hf,
"Save PNGs");
608 b->SetToolTipText(
"Save bitmap graphics for all further events. Cannot be aborted. (EXPERIMENTAL)");
609 hf->AddFrame(b,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, margin, margin, margin, margin));
610 b->Connect(
"Clicked()",
"Belle2::DisplayUI",
this,
"startAutomaticRun()");
612 automatisation_frame->AddFrame(hf,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 0, 0, 0, 0));
615 frmMain->AddFrame(automatisation_frame,
new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
618 TGGroupFrame* exit_frame =
new TGGroupFrame(frmMain);
619 exit_frame->SetTitle(
"Closing");
621 TGHorizontalFrame* hf =
new TGHorizontalFrame(exit_frame);
623 TGButton* b =
new TGTextButton(hf,
" Exit ");
624 b->SetToolTipText(
"Close the display and stop basf2 after this event.");
625 hf->AddFrame(b,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, margin, margin, margin, margin));
626 b->Connect(
"Clicked()",
"Belle2::DisplayUI",
this,
"closeAndExit()");
629 exit_frame->AddFrame(hf,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 0, 0, 0, 0));
632 frmMain->AddFrame(exit_frame,
new TGLayoutHints(kLHintsExpandX | kLHintsBottom, 0, 0, 0, 0));
635 frmMain->MapSubwindows();
637 frmMain->MapWindow();
638 browser->StopEmbedding(
"Event Control");