16 #include <TCollection.h>
17 #include <TApplication.h>
18 #include <TEveWindow.h>
26 #include <TGStatusBar.h>
27 #include <KeySymbols.h>
66 FWPack(
const TGWindow*
w) : TGPack(w, 100, 100) {}
84 const unsigned int backgroundColor=0x2f2f2f;
85 const unsigned int textColor= 0xb3b3b3;
149 previousEvent->
setToolTip(
"Goto previous event");
152 playEventsBack->
setToolTip(
"Play events backwards");
154 TGCompositeFrame *menuTopFrame =
new TGCompositeFrame(
this, 1, 1, kHorizontalFrame, backgroundColor);
156 TGMenuBar *menuBar =
new TGMenuBar(menuTopFrame, this->GetWidth(), 28, kHorizontalFrame);
158 TGPopupMenu *fileMenu =
new TGPopupMenu(gClient->GetRoot());
159 menuBar->AddPopup(
"File", fileMenu,
new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 2, 0));
166 fileMenu->AddSeparator();
172 TGPopupMenu* partialSaveMenu =
new TGPopupMenu(gClient->GetRoot());
173 fileMenu->AddPopup(
"Advanced Configuration", partialSaveMenu);
178 fileMenu->AddSeparator();
182 fileMenu->AddSeparator();
195 TGPopupMenu *editMenu =
new TGPopupMenu(gClient->GetRoot());
196 menuBar->AddPopup(
"Edit", editMenu,
new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 2, 0));
202 editMenu->AddSeparator();
208 editMenu->AddSeparator();
217 TGPopupMenu *viewMenu =
new TGPopupMenu(gClient->GetRoot());
218 menuBar->AddPopup(
"View", viewMenu,
new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 2, 0));
223 viewMenu->AddSeparator();
234 playEventsBack->
createShortcut(kKey_Space,
"CTRL+SHIFT", GetId());
237 TGPopupMenu* windowMenu =
new TGPopupMenu(gClient->GetRoot());
238 menuBar->AddPopup(
"Window", windowMenu,
new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 2, 0));
248 TGPopupMenu *helpMenu =
new TGPopupMenu(gClient->GetRoot());
249 menuBar->AddPopup(
"Help", helpMenu,
new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 2, 0));
252 helpMenu->AddSeparator();
256 menuBar->SetBackgroundColor(backgroundColor);
257 TIter
next(menuBar->GetTitles());
259 while ((title = (TGMenuTitle *)
next()))
260 title->SetTextColor(textColor);
262 menuTopFrame->AddFrame(menuBar,
new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
263 AddFrame(menuTopFrame,
new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
267 AddFrame(
new TGFrame(
this, 1, 1, kChildFrame, 0x503020),
268 new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
270 m_statBar =
new TGStatusBar(
this, this->GetWidth(), 12);
271 AddFrame(
m_statBar,
new TGLayoutHints(kLHintsBottom | kLHintsExpandX));
273 TGHorizontalFrame *fullbar =
new TGHorizontalFrame(
this, this->GetWidth(), 30,0, backgroundColor);
278 TGCompositeFrame* controlFrame =
new TGVerticalFrame(fullbar, 10, 20, 0, backgroundColor);
280 TGCompositeFrame* buttonFrame =
new TGHorizontalFrame(controlFrame, 10, 10, 0, backgroundColor);
282 buttonFrame->SetBackgroundPixmap(imgBtn->GetPixmap());
289 new TGLayoutHints(kLHintsCenterY| kLHintsLeft, 4, 3, 10, 0));
297 new TGLayoutHints(kLHintsCenterY| kLHintsLeft, 2, 3, 10, 0));
303 new TGLayoutHints(kLHintsCenterY| kLHintsLeft, 2, 3, 10, 0));
309 new TGLayoutHints(kLHintsCenterY| kLHintsLeft, 2, 3, 10, 0));
318 new TGLayoutHints(kLHintsCenterY| kLHintsLeft, 2, 3, 10, 0));
324 new TGLayoutHints(kLHintsCenterY| kLHintsLeft, 2, 3, 10, 0));
326 controlFrame->AddFrame(buttonFrame,
new TGLayoutHints(kLHintsTop, 10, 0, 0, 0));
330 TGHorizontalFrame* sliderFrame =
new TGHorizontalFrame(controlFrame, 10, 10, 0, backgroundColor);
332 sliderFrame->SetBackgroundPixmap(imgSld->GetPixmap());
335 m_delaySlider =
new TGHSlider(sliderFrame, 109, kSlider1 | kScaleNo);
336 sliderFrame->AddFrame(
m_delaySlider,
new TGLayoutHints(kLHintsTop | kLHintsLeft, 39, 8, 1, 3));
342 controlFrame->AddFrame(sliderFrame,
new TGLayoutHints(kLHintsTop, 10, 0, 0, 0));
344 fullbar->AddFrame(controlFrame,
new TGLayoutHints(kLHintsLeft, 2, 2, 5, 8));
353 TGVerticalFrame* delayFrame =
new TGVerticalFrame(fullbar, 60, 10, 0, backgroundColor);
355 TGLabel *
label =
new TGLabel(delayFrame,
"Delay");
356 label->SetTextJustify(kTextCenterX);
357 label->SetTextColor(0xb3b3b3);
358 label->SetBackgroundColor(backgroundColor);
359 delayFrame->AddFrame(label,
new TGLayoutHints(kLHintsTop | kLHintsCenterX, 0, 0, 22, 0));
361 TGHorizontalFrame *labFixed =
new TGHorizontalFrame(delayFrame, 70, 20, kFixedSize, backgroundColor);
366 labFixed->AddFrame(
m_delayLabel,
new TGLayoutHints(kLHintsTop | kLHintsCenterX | kLHintsExpandX, 0, 0, 0, 0));
367 delayFrame->AddFrame(labFixed,
new TGLayoutHints(kLHintsLeft, 0, 4, 0, 0));
369 fullbar->AddFrame(delayFrame,
new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
376 Int_t entryHeight = 22;
377 TGVerticalFrame *texts =
new TGVerticalFrame(fullbar, 400, 10, 0, backgroundColor);
381 TGPack *runInfo =
new TGPack(texts, 400, entryHeight, kFixedHeight);
382 runInfo->SetVertical(kFALSE);
383 runInfo->SetUseSplitters(kFALSE);
384 runInfo->SetBackgroundColor(backgroundColor);
386 TGHorizontalFrame *rLeft =
new TGHorizontalFrame(runInfo, 1, entryHeight);
389 rLeft->AddFrame(
m_runEntry,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 0,8,0,0));
390 runInfo->AddFrameWithWeight(rLeft, 0, 0.28);
392 TGHorizontalFrame *rMid =
new TGHorizontalFrame(runInfo, 1, entryHeight);
395 rMid->AddFrame(
m_lumiEntry,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 0,8,0,0));
396 runInfo->AddFrameWithWeight(rMid, 0, 0.32);
398 TGHorizontalFrame *rRight =
new TGHorizontalFrame(runInfo, 1, entryHeight);
401 rRight->AddFrame(
m_eventEntry,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 0,0,0,0));
402 runInfo->AddFrameWithWeight(rRight, 0, 0.4);
404 texts->AddFrame(runInfo,
new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,0,4));
409 TGHorizontalFrame *filterFrame =
new TGHorizontalFrame(texts, 400, entryHeight, 0, backgroundColor);
414 m_filterIcons[2] = fClient->GetPicture(
"unchecked_dis_t.xpm");
429 filterFrame->AddFrame(
m_filterEnableBtn,
new TGLayoutHints(kLHintsLeft, 4,0,3,0));
436 filterFrame->AddFrame(
m_filterShowGUIBtn,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 6,7,0,0));
438 texts->AddFrame(filterFrame,
new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,4,0));
441 fullbar->AddFrame(texts,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 5, 5, 12, 0));
445 TGVerticalFrame *texts2 =
new TGVerticalFrame(fullbar, 200, 44, kFixedSize, backgroundColor);
451 m_timeText->SetBackgroundColor(backgroundColor);
452 texts2->AddFrame(
m_timeText,
new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,0,1));
454 fullbar->AddFrame(texts2,
new TGLayoutHints(kLHintsLeft, 5, 5, 16, 5));
460 TGVerticalFrame* parentLogoFrame =
new TGVerticalFrame(fullbar, 70, 53, kFixedSize);
461 parentLogoFrame->SetBackgroundColor(backgroundColor);
462 fullbar->AddFrame(parentLogoFrame,
new TGLayoutHints(kLHintsRight | kLHintsCenterY));
464 TGVerticalFrame* logoFrame =
new TGVerticalFrame(parentLogoFrame, 53, 53, kFixedSize);
466 logoFrame->SetBackgroundPixmap(logoImg->GetPixmap());
467 parentLogoFrame->AddFrame(logoFrame,
new TGLayoutHints(kLHintsRight | kLHintsCenterY, 0, 14, 0, 0));
470 TGCompositeFrame *logoFrame =
new TGCompositeFrame(
this, 61, 23, kFixedSize | kHorizontalFrame, backgroundColor);
476 logoFrame->AddFrame(infoBut);
477 infoBut->Connect(
"Clicked()",
"CmsShowMainFrame",
this,
"showFWorksInfo()");
480 menuTopFrame->AddFrame(logoFrame,
new TGLayoutHints(kLHintsRight | kLHintsBottom, 0, 13, 3, 1));
485 AddFrame(fullbar,
new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
508 csArea->SetVertical(kFALSE);
511 csArea->AddFrameWithWeight(cf, 0, 20);
513 TEveCompositeFrameInPack *slot =
new TEveCompositeFrameInPack(csArea, 0, csArea);
514 csArea->AddFrameWithWeight(slot, 0, 80);
515 TEveWindowSlot *ew_slot = TEveWindow::CreateDefaultWindowSlot();
516 ew_slot->PopulateEmptyFrame(slot);
519 AddFrame(csArea,
new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 2));
520 csArea->MapSubwindows();
522 SetWindowName(
"cmsShow");
675 gApplication->Terminate(0);
686 if (event->fType == kGKeyPress) {
688 std::vector<CSGAction*>::const_iterator it_act;
691 for (it_act = alist.begin(); it_act != alist.end(); ++it_act) {
692 keycode = (*it_act)->getKeycode();
693 modcode = (*it_act)->getModcode();
694 if ((event->fCode == (UInt_t)keycode) &&
695 ((event->fState == (UInt_t)modcode) ||
696 (event->fState == (UInt_t)(modcode | kKeyMod2Mask)) ||
697 (event->fState == (UInt_t)(modcode | kKeyLockMask)) ||
698 (event->fState == (UInt_t)(modcode | kKeyMod2Mask | kKeyLockMask)))) {
699 (*it_act)->activated.emit();
706 static UInt_t spacecode = gVirtualX->KeysymToKeycode((
int)kKey_Space);
707 if (event->fCode == spacecode && event->fState == 0 ) {
727 UInt_t bgCol, UInt_t txtCol,
728 Int_t
width, Int_t height)
733 p->SetBackgroundColor(bgCol);
734 TGCompositeFrame *lframe =
new TGHorizontalFrame(p, width, height, kFixedSize, bgCol);
735 TGLabel*
label =
new TGLabel(lframe, txt);
736 label->SetBackgroundColor(bgCol);
737 label->SetTextColor(txtCol);
738 lframe->AddFrame(label,
new TGLayoutHints(kLHintsRight | kLHintsTop, 0, 4));
739 p->AddFrame(lframe,
new TGLayoutHints(kLHintsLeft, 0, 0, 3, 0));
744 InfoFrame(
const TGWindow*
p, UInt_t
w, UInt_t
h, UInt_t
opts) : TGMainFrame(p, w, h, opts) {}
758 UInt_t ww = 280, hh = 190;
759 int number_of_lines = 0;
762 if (gSystem->Getenv(
"CMSSW_VERSION"))
764 infoText =
"Version ";
765 infoText += gSystem->Getenv(
"CMSSW_VERSION");
767 number_of_lines += 1;
771 TString infoFileName(
"/data/version.txt");
774 std::ifstream infoFile(infoFileName);
775 while (std::getline(infoFile, line))
778 infoText += line.c_str();
783 infoText +=
"\nIt works or we fix it for free!\nhn-cms-visualization@cern.ch\n";
785 hh = 130 + 2* fontSize*(number_of_lines + 1);
788 m_fworksAbout->SetWMSizeHints(ww, hh, ww, hh, 0, 0);
789 m_fworksAbout->SetBackgroundColor(0x2f2f2f);
791 TGFrame* logoFrame =
new TGFrame(m_fworksAbout, 140, 48, kFixedSize);
793 logoFrame->SetBackgroundPixmap(logoImg->GetPixmap());
794 m_fworksAbout->AddFrame(logoFrame,
new TGLayoutHints(kLHintsTop | kLHintsCenterX, 0, 0, 16, 0));
796 TGLabel*
label =
new TGLabel(m_fworksAbout, infoText);
797 label->SetBackgroundColor(0x2f2f2f);
798 label->SetForegroundColor(0xffffff);
800 FontStruct_t defaultFontStruct = label->GetDefaultFontStruct();
803 TGFontPool *
pool = gClient->GetFontPool();
804 TGFont* defaultFont = pool->GetFont(defaultFontStruct);
805 FontAttributes_t
attributes = defaultFont->GetFontAttributes();
806 label->SetTextFont(pool->GetFont(attributes.fFamily, fontSize,
807 attributes.fWeight, attributes.fSlant));
813 m_fworksAbout->AddFrame(label,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 0, 0, 12, 0));
815 TGTextButton* btn =
new TGTextButton(m_fworksAbout,
" OK ");
816 btn->SetBackgroundColor(0x2f2f2f);
817 btn->SetForegroundColor(0xffffff);
818 m_fworksAbout->AddFrame(btn,
new TGLayoutHints(kLHintsBottom | kLHintsCenterX, 0, 0, 0, 12));
819 btn->Connect(
"Clicked()",
"TGMainFrame", m_fworksAbout,
"CloseWindow()");
821 m_fworksAbout->MapSubwindows();
822 m_fworksAbout->Layout();
834 if ((*i)-> getKeycode())
835 f->BindKey(
this, (*i)->getKeycode(), (*i)->getModcode());
843 TGFrameElement* fe = (TGFrameElement*) GetList()->Last();
846 TGFrameElementPack* fep;
847 fep = (TGFrameElementPack*)pack->GetList()->At(1);
850 fep = (TGFrameElementPack*)pack->GetList()->At(3);
851 fep->fWeight = 100 -
x;
853 pack->ResizeExistingFrames();
860 TGFrameElement* fe = (TGFrameElement*)GetList()->Last();
861 TGPack*
pack = (TGPack*)(fe->fFrame);
863 TGFrameElementPack* fep = (TGFrameElementPack*)pack->GetList()->At(1);
const std::string sKeyboardShort
TGVerticalFrame * createList(TGCompositeFrame *p)
static const TString & coreIcondir()
const std::string sSavePartialConfig
FWNumberEntryField * m_lumiEntry
EventNumber_t event() const
void bindCSGActionKeys(const TGMainFrame *f) const
const std::string sShowCommonInsp
virtual void SetUIntNumber(UInt_t n)
FWPack(const TGWindow *w)
InfoFrame(const TGWindow *p, UInt_t w, UInt_t h, UInt_t opts)
const std::string sSavePartialConfigAs
void loadEvent(const edm::EventBase &event)
CSGContinuousAction * playEventsBackwardsAction() const
void createViews(TEveWindowSlot *slot)
virtual void enableActions(bool enable=true)
const std::string sBackgroundColor
const std::string sPlayEvents
sigc::signal< void > activated
FWCustomIconsButton * m_filterEnableBtn
void enableNext(bool enable=true)
const std::string sOpenData
virtual void CloseWindow() override
FWIntValueListener * m_delaySliderListener
void enableNavigatorControls()
LuminosityBlockNumber_t luminosityBlock() const
const std::string sSaveConfigAs
CSGContinuousAction * m_playEventsBack
const std::string sNextEvent
T x() const
Cartesian x coordinate.
const std::string sSaveConfig
const TGPicture * m_filterIcons[9]
void createCustomIconsButton(TGCompositeFrame *p, const TGPicture *upPic, const TGPicture *downPic, const TGPicture *disabledPic, const TGPicture *upRunningPic, const TGPicture *downRunningPic, TGLayoutHints *l=0, Int_t id=-1, GContext_t norm=TGButton::GetDefaultGC()(), UInt_t option=0)
std::vector< CSGAction * > m_actionList
virtual void SetULong64Number(ULong64_t n)
const std::string sAppendData
void setToolTip(const std::string &tip)
virtual Bool_t isEnabled() const
CSGContinuousAction * m_loopAction
TGMainFrame * m_fworksAbout
CSGAction * createNewViewerAction(const std::string &iActionName, bool seaprator)
FWNumberEntryField * m_eventEntry
virtual ~CmsShowMainFrame()
void updateStatusBar(const char *status)
const std::string sShowAddCollection
const std::string sGotoLastEvent
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
TGPopupMenu * m_newViewerMenu
const std::string sExportImage
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
const std::string sAutoRewind
void createMenuEntry(TGPopupMenu *menu)
Bool_t HandleKey(Event_t *event)
const std::string sShowMainViewCtl
FWNumberEntryField * m_runEntry
const std::string sPlayEventsBack
CSGAction * getAction(const std::string &name)
virtual void enableActions(bool enable=true)
const std::string sShowObjInsp
FWCustomIconsButton * createCustomIconsButton(TGCompositeFrame *p, const TGPicture *upPic, const TGPicture *downPic, const TGPicture *disabledPic, TGLayoutHints *l=0, Int_t id=-1, GContext_t norm=TGButton::GetDefaultGC()(), UInt_t option=0)
CSGAction * m_previousEvent
const std::string sGotoFirstEvent
virtual void CloseWindow()
const std::string sShowInvMassDialog
void setSummaryViewWeight(float)
const std::string sShowEventDisplayInsp
void enablePrevious(bool enable=true)
const std::string sPreviousEvent
CSGContinuousAction * m_playEvents
std::string getLocalTime(const edm::EventBase &event)
float getSummaryViewWeight() const
const std::vector< CSGAction * > & getListOfActions() const
const std::string sLoadConfig
virtual void HandleMenu(Int_t id)
void makeFixedSizeLabel(TGHorizontalFrame *p, const char *txt, UInt_t bgCol, UInt_t txtCol, Int_t width, Int_t height)
void createShortcut(UInt_t key, const char *mod, int windowID)
const std::string sExportAllImages
void enableComplexNavigation(bool enable=true)
TGTextButton * m_filterShowGUIBtn
CmsShowMainFrame(const TGWindow *p=0, UInt_t w=1, UInt_t h=1, FWGUIManager *m=0)
const std::string sHelpGL
void setPlayDelayGUI(Float_t val, Bool_t sliderChanged)
const std::string sLoadPartialConfig
CSGContinuousAction * playEventsAction() const
const std::string sSearchFiles