Int_t THaScalerGui::InitPlots() { // Initialize plots (xscaler style) if (!scaler) { cout << "THaScalerGui::ERROR: no scaler defined... cannot init."<<endl; return -1; } InitPages(); yboxsize = new Int_t[SCAL_NUMBANK]; occupied = new Int_t[SCAL_NUMBANK]; memset(occupied, 0, SCAL_NUMBANK*sizeof(Int_t)); fDataBuff = new TGTextBuffer[SCAL_NUMBANK*SCAL_NUMCHAN]; pair<Int_t, TGTextEntry *> txtpair; pair<Int_t, TNtuple *> ntupair; char string_ntup[]="UpdateNum:Count:Rate:RateI"; iloop = 0; lastsize = YBOXSMALL; showselect = SHOWRATE; TGTab *fTab = new TGTab(this, 600, 800); TGLayoutHints *fLayout = new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 10, 10, 10, 10); TGLayoutHints *fLayout2 = new TGLayoutHints(kLHintsNormal ,10, 10, 10, 10); if (!scaler->GetDataBase()) { cout << "THaScalerGui::WARNING: no database. Will use defaults..."<<endl; } Int_t crate = scaler->GetCrate(); std::string sdirect; for (Int_t ipage = 0; ipage < npages; ipage++) { Int_t slot = slotmap[ipage]; char cpage[100]; sprintf(cpage,"%d",ipage); std::string spage = cpage; sdirect = "none"; if (scaler->GetDataBase()) sdirect = scaler->GetDataBase()->GetStringDirectives(crate, "xscaler-tabs", spage.c_str()); if (sdirect != "none") spage = sdirect; TGCompositeFrame *tgcf = fTab->AddTab(spage.c_str()); std::string slayout = "none"; if (scaler->GetDataBase()) slayout = scaler->GetDataBase()->GetStringDirectives(crate, "xscaler-layout", (std::string)cpage); UInt_t pos = slayout.find("x"); int nrow = 8; int ncol = 4; // defaults if (pos != std::string::npos) { nrow = atoi(slayout.substr(0,pos).c_str()); ncol = atoi(slayout.substr(pos+1,slayout.length()).c_str()); } yboxsize[ipage] = YBOXSMALL; if (nrow * ncol > 16) yboxsize[ipage] = YBOXBIG; GCValues_t gval; gval.fMask = kGCForeground; gClient->GetColorByName("black", gval.fForeground); GContext_t labelgc = gVirtualX->CreateGC(gClient->GetRoot()->GetId(), &gval); TGLabel *fLpage; std::string pagename = "none"; if (scaler->GetDataBase()) pagename = scaler->GetDataBase()->GetStringDirectives(crate, "xscaler-pagename", (std::string)cpage); if (pagename == "none") pagename = spage; fLpage = new TGLabel(tgcf, new TGString(pagename.c_str()),labelgc); tgcf->AddFrame(fLpage,fLayout); occupied[ipage] = nrow; Int_t chan = 0; for (int row = 0; row < nrow; row++) { // rows TGCompositeFrame *fr; fr = new TGCompositeFrame(tgcf, 50, 0, kHorizontalFrame); TGHorizontalLayout *fLhorz; fLhorz = new TGHorizontalLayout(fr); fr->SetLayoutManager(fLhorz); for (int col = 0; col < ncol; col++) { // columns int index = ipage*SCAL_NUMCHAN + ncol*row+col; ntupair.first = index; char nname[10]; sprintf(nname,"%d",index); ntupair.second = new TNtuple(nname,"scaler",string_ntup); fDataHistory.insert(ntupair); TGTextButton *fButton1; char cbutton[100]; std::string buttonname = "none"; if (scaler->GetDataBase()) { std::vector<std::string> strb = scaler->GetDataBase()->GetShortNames(crate,slot,chan); buttonname = strb[0]; } if (buttonname == "none") { sprintf(cbutton,"%d ==>",ncol*row+col+1); } else { sprintf(cbutton,buttonname.c_str()); } fButton1 = new TGTextButton(fr,new TGHotString(cbutton), SCAL_NUMBANK*SCAL_NUMCHAN + OFFSET_HIST + index); fr->AddFrame(fButton1, fLayout); fButton1->Associate(this); txtpair.first = index; txtpair.second = new TGTextEntry(fr,&fDataBuff[index]); fDataEntry.insert(txtpair); fr->AddFrame(fDataEntry[index],fLayout); chan++; } tgcf->AddFrame(fr,fLayout); } } AddFrame(fTab,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,0,0,0,0)); TGGroupFrame *fGb = new TGGroupFrame(this, new TGString("Click channel button for history plot. Click ``Show Rates'' or ``Show Counts, etc''")); TGCompositeFrame *fGCb = new TGCompositeFrame(fGb, 10, 0, kHorizontalFrame); TGHorizontalLayout *fLhorzb = new TGHorizontalLayout(fGCb); fGCb->SetLayoutManager(fLhorzb); TGHotString *fLabel = new TGHotString("HELP"); TGTextButton *fHelp = new TGTextButton(fGCb,fLabel,SCAL_NUMBANK*SCAL_NUMCHAN+OFFSET_HELP); fGCb->AddFrame(fHelp, fLayout2); fHelp->Associate(this); fLabel = new TGHotString("QUIT"); TGTextButton *fQuit = new TGTextButton(fGCb,fLabel,SCAL_NUMBANK*SCAL_NUMCHAN+OFFSET_QUIT); fGCb->AddFrame(fQuit, fLayout2); fQuit->Associate(this); TGLabel *fGlabel2 = new TGLabel(fGCb, new TGString(" ")); fGCb->AddFrame(fGlabel2, fLayout); TGHotString *fHString1 = new TGHotString("Show Rates"); fRateSelect = new TGCheckButton(fGCb,fHString1,SCAL_NUMBANK*SCAL_NUMCHAN+OFFSET_RATE); fGCb->AddFrame(fRateSelect, fLayout); fRateSelect->Associate(this); fRateSelect->SetState(kButtonDown); TGHotString *fHString2 = new TGHotString("Show Counts"); fCountSelect = new TGCheckButton(fGCb, fHString2,SCAL_NUMBANK*SCAL_NUMCHAN+OFFSET_COUNT); fGCb->AddFrame(fCountSelect, fLayout); fCountSelect->Associate(this); fCountSelect->SetState(kButtonUp); TGHotString *fHString3 = new TGHotString("Norm-by-Current"); fNormISelect = new TGCheckButton(fGCb,fHString3,SCAL_NUMBANK*SCAL_NUMCHAN+OFFSET_NORMI); fGCb->AddFrame(fNormISelect, fLayout); fNormISelect->Associate(this); fNormISelect->SetState(kButtonUp); fGb->AddFrame(fGCb,fLayout2); TGLayoutHints *fL1 = new TGLayoutHints(kLHintsNormal | kLHintsExpandX , 10, 10, 10, 10); AddFrame(fGb, fL1); MapSubwindows(); Layout(); SetWindowName("HALL A SCALER DATA"); SetIconName("Scalers"); MapWindow(); Resize(900,yboxsize[0]); lastsize = yboxsize[0]; return 0; };
//______________________________________________________________________________ Bool_t ArgusWindow::CreateTabs() { ArgusTab *tab; Int_t iTab; const Int_t nTabs = fTabObjects->GetEntriesFast(); TGCompositeFrame *tabFrame; Int_t newID; TGTab *parentTab; TGTab *newTab; TGListTreeItem *item; ROMEString command = ""; Int_t iParent; // Bool_t isSwitch; for (iTab = 0; iTab < nTabs; iTab++) { tab = GetTabObjectAt(iTab); // isSwitch = tab->IsSwitch(); // switch off the tab if its ancestor is off iParent = fParentIndex[iTab]; while (iParent != -1) { if (! GetTabObjectAt(iParent)->IsSwitch()) { tab->SetSwitch(kFALSE); break; } iParent = fParentIndex[iParent]; } // cout << "CreateTabs : " << iTab << " " << tab->IsSwitch() << " " << isSwitch << " " << tab->GetName() << endl; if (!tab->IsSwitch()) { continue; } if (!fListTreeView) { parentTab = (fParentIndex[iTab]==-1) ? fTab : static_cast<TGTab*>(fTGTab->At(fParentIndex[iTab])); if (fNumberOfChildren[iTab]<=0) { if (fTabWindow) { if (parentTab) { newID = parentTab->GetNumberOfTabs() + ( (fParentIndex[iTab]==-1) ? 0 : 1000*fParentIndex[iTab] ); tabFrame = parentTab->AddTab(tab->GetTitle()); tab->ReparentWindow(tabFrame, 60, 20); tab->ArgusInit(); tab->SetID(newID); tabFrame->AddFrame(tab, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX | kLHintsExpandY , 0, 0, 0, 0)); } } } else { newID = parentTab->GetNumberOfTabs() + ( (fParentIndex[iTab]==-1) ? 0 : 1000*fParentIndex[iTab] ); tabFrame = parentTab->AddTab(tab->GetTitle()); tab->ReparentWindow(tabFrame, 60, 20); tab->ArgusInit(); tab->SetID(newID); newTab = new TGTab(tabFrame); command.SetFormatted("gAnalyzer->GetWindow()->ProcessMessage($MSG, $PARM1 + %d, $PARM2)", iTab*1000); newTab->SetCommand(command.Data()); tabFrame->AddFrame(newTab, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 0, 0, 1, 1)); fTGTab->AddAt(newTab, iTab); } } else { if (fTabWindow) { // we don't have listtrees for sub-windows item = (fParentIndex[iTab]==-1) ? 0 : fListTreeItem[fParentIndex[iTab]]; fListTreeItem[iTab] = fListTree->AddItem(item, tab->GetTitle()); fListTree->OpenItem(fListTreeItem[iTab]); } if (fNumberOfChildren[iTab]<=0) { tab->ReparentWindow(fMainFrame, 60, 20); tab->ArgusInit(); fMainFrame->AddFrame(tab, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX | kLHintsExpandY , 0, 0, 0, 0)); if (!fTabWindow) { return kTRUE; } } else { tab->ArgusInit(); } } } return kTRUE; }