00001
00002
00003
00005
00006
00007
00008
00009
00010
00011
00012
00013
00015
00016 #include "TThread.h"
00017 #include "TApplication.h"
00018
00019 #include "TFndMonFrame.h"
00020
00021 #include "TFndMonitorGUI.h"
00022
00023 ClassImp(TFndMonitorGUI)
00024
00025
00026
00027 TFndMonitorGUI::TFndMonitorGUI():
00028 TGMainFrame(gClient->GetRoot(),1,1,kMainFrame | kVerticalFrame),
00029 fCurConsDet(-1),fEventDisplay()
00030 {
00031
00032 }
00033
00034
00035 TFndMonitorGUI::~TFndMonitorGUI(){
00036
00037 KillEventDisplay();
00038 CloseProdGUI();
00039 CloseConsGUI();
00040
00041 Cleanup();
00042 }
00043
00044
00045 void TFndMonitorGUI::TestDetSelButtons(Int_t period_ms,Int_t ntimes){
00046
00047 for(Int_t nt=1;nt<=ntimes;nt++){
00048 Info("TestDetSelButtons","Adding buttons (nt = )",ntimes);
00049 for(Int_t i=0;i<K_N_FND_MON_DETECTORS;i++){
00050 AddDetectorSelBut(i,kTRUE);
00051 gSystem->Sleep(period_ms);
00052 }
00053 Info("TestDetSelButtons","Removing buttons (nt = )",nt);
00054 for(Int_t i=0;i<K_N_FND_MON_DETECTORS;i++){
00055 DelDetectorSelBut(i);
00056 gSystem->Sleep(period_ms);
00057 }
00058 }
00059 }
00060
00061
00062 void TFndMonitorGUI::CloseWindow(){
00063
00064 Info("TFndMonitorGUI::CloseWindow","Main frame manually closed...");
00065 TFndMonFrame::CheckProducerMessages();
00066 Info("TFndMonitorGUI::CloseWindow"," ...closing GUI...");
00067 delete this;
00068 }
00069
00070
00071 void TFndMonitorGUI::BuildMainGUI(){
00072
00073
00074
00075 SetLayoutBroken(kTRUE);
00076 SetBackgroundColor(MainBgCol());
00077 SetForegroundColor(MainFgCol());
00078
00079 BuildPopUpMenus();
00080 MakeConnections(FRM_MAIN);
00081 BuildSelButContainer();
00082
00083 SetWindowName("FINUDA online monitor: Main control GUI");
00084 Resize(GetDefaultSize());
00085 RemapMainWindow();
00086 MoveResizeSafe(2,2,1015,85,this);
00087 }
00088
00089
00090 void TFndMonitorGUI::RemapMainWindow(){
00091
00092 Layout();
00093 MapSubwindows();
00094 MapWindow();
00095 gClient->NeedRedraw(this);
00096 gClient->ProcessEventsFor(this);
00097 }
00098
00100
00101 void TFndMonitorGUI::BuildPopUpMenus(){
00102
00103 fMenuContainer = new TGGroupFrame(this,"Application controls", kHorizontalFrame);
00104 fMenuContainer->SetTitlePos(TGGroupFrame::kCenter);
00105 fMenuContainer->SetBackgroundColor(MenuContBgCol());
00106 fMenuContainer->SetForegroundColor(MenuContFgCol());
00107 fMenuContainer->SetLayoutBroken(kTRUE);
00108 fMenuContainer->SetLayoutManager(new TGVerticalLayout(fMenuContainer));
00109 MoveResizeSafe(5,5,300,80,fMenuContainer);
00110 AddFrame(fMenuContainer, new TGLayoutHints( kLHintsTop | kLHintsLeft | kLHintsExpandX, 3, 3, 3, 3 ));
00111
00112 fMenuBar = new TGMenuBar( fMenuContainer, 1, 1, kHorizontalFrame );
00113 fMenuBar->SetBackgroundColor(MenuBarBgCol());
00114 fMenuBar->SetForegroundColor(MenuBarFgCol());
00115
00116
00117 fPopProd = new TGPopupMenu(gClient->GetRoot());
00118 fPopProd->AddEntry( "Start online" , M_PRODUCER_SETUP_ONLM ); fPopProd->AddSeparator();
00119 fPopProd->AddEntry( "Start from file", M_PRODUCER_SETUP_FILE ); fPopProd->AddSeparator();
00120 fPopProd->AddEntry( "CLEAN (KILL)" , M_PRODUCER_CLEAN ); fPopProd->AddSeparator();
00121 fPopProd->AddEntry( "KILL and Quit" , M_KILL_EXIT ); fPopProd->AddSeparator();
00122 fPopProd->AddEntry( "Quit froot" , M_FROOT_QUIT );
00123
00124 TString check_s = "yes";
00125 if(check_s.CompareTo(gSystem->Getenv("CAN_RUN_PRODUCER"))){
00126 EnableFndMonEntry(Gui::M_PRODUCER_SETUP_ONLM,kFALSE);
00127 EnableFndMonEntry(Gui::M_PRODUCER_CLEAN,kFALSE);
00128 EnableFndMonEntry(Gui::M_KILL_EXIT,kFALSE);
00129 }
00130
00131
00132 fPopDetMons = new TGPopupMenu(gClient->GetRoot());
00133
00134 fSubPop[D_GTS] = new TGPopupMenu(gClient->GetRoot());
00135 fSubPop[D_GTS]->AddEntry("Open online" , M_OPENONLM_GTS);
00136 fSubPop[D_GTS]->AddEntry("Open (file)", M_OPENFILE_GTS);
00137 fSubPop[D_GTS]->AddEntry("Close" , M_CLOSE_GTS);
00138
00139 fSubPop[D_TOF] = new TGPopupMenu(gClient->GetRoot());
00140 fSubPop[D_TOF]->AddEntry("Open online" , M_OPENONLM_TOF);
00141 fSubPop[D_TOF]->AddEntry("Open (file)", M_OPENFILE_TOF);
00142 fSubPop[D_TOF]->AddEntry("Close" , M_CLOSE_TOF);
00143
00144 fSubPop[D_SIL] = new TGPopupMenu(gClient->GetRoot());
00145 fSubPop[D_SIL]->AddEntry("Open online" , M_OPENONLM_SIL);
00146 fSubPop[D_SIL]->AddEntry("Open (file)", M_OPENFILE_SIL);
00147 fSubPop[D_SIL]->AddEntry("Close" , M_CLOSE_SIL);
00148
00149 fSubPop[D_LMD] = new TGPopupMenu(gClient->GetRoot());
00150 fSubPop[D_LMD]->AddEntry("Open online" , M_OPENONLM_LMD);
00151 fSubPop[D_LMD]->AddEntry("Open (file)", M_OPENFILE_LMD);
00152 fSubPop[D_LMD]->AddEntry("Close" , M_CLOSE_LMD);
00153
00154 fSubPop[D_STB] = new TGPopupMenu(gClient->GetRoot());
00155 fSubPop[D_STB]->AddEntry("Open online" , M_OPENONLM_STB);
00156 fSubPop[D_STB]->AddEntry("Open (file)", M_OPENFILE_STB);
00157 fSubPop[D_STB]->AddEntry("Close" , M_CLOSE_STB);
00158
00159 fSubPopAll = new TGPopupMenu(gClient->GetRoot());
00160 fSubPopAll->AddEntry("Open online" , M_OPENONLM_ALL);
00161 fSubPopAll->AddEntry("Open (file)", M_OPENFILE_ALL);
00162 fSubPopAll->AddEntry("Close" , M_CLOSE_ALL);
00163
00164
00165 for(Int_t i=0;i<K_N_FND_MON_DETECTORS;i++){
00166 fPopDetMons->AddPopup(MonDetName(i), fSubPop[i]);
00167 fPopDetMons->AddSeparator();
00168 }
00169 fPopDetMons->AddPopup("ALL", fSubPopAll);
00170
00171
00172
00173 fPopEvd = new TGPopupMenu(gClient->GetRoot());
00174 fPopEvd->AddEntry("Open" , M_OPEN_EVD);
00175 fPopEvd->AddSeparator();
00176 fPopEvd->AddEntry("Close" , M_CLOSE_EVD);
00177
00179 fMenuBar->AddPopup( " &Producer ", fPopProd, new TGLayoutHints( kLHintsTop | kLHintsLeft, 1, 1, 1, 1 ) );
00180 fPopProd->SetBackgroundColor(ProdBgCol());
00181 fPopProd->SetForegroundColor(ProdFgCol());
00182
00183 fMenuBar->AddPopup( " &Monitors ", fPopDetMons, new TGLayoutHints( kLHintsTop | kLHintsLeft, 1, 1, 1, 1 ) );
00184 fPopDetMons->SetBackgroundColor(ConsBgCol());
00185 fPopDetMons->SetForegroundColor(ConsFgCol());
00186
00187 fMenuBar->AddPopup( " &EVD ", fPopEvd, new TGLayoutHints( kLHintsTop | kLHintsLeft, 1, 1, 1, 1 ) );
00188 fPopEvd->SetBackgroundColor(EvdBgCol());
00189 fPopEvd->SetForegroundColor(EvdFgCol());
00190
00191 MoveResizeSafe(5,20,290,20,fMenuBar);
00192 fMenuContainer->AddFrame(fMenuBar, new TGLayoutHints( kLHintsTop | kLHintsCenterX | kLHintsExpandX, 5, 5, 5, 5 ));
00193
00194 }
00195
00196
00197 void TFndMonitorGUI::BuildSelButContainer(){
00198
00199 fConsButContainer = new TGGroupFrame(this,"Monitor selection", kHorizontalFrame);
00200 fConsButContainer->SetTitlePos(TGGroupFrame::kCenter);
00201 fConsButContainer->SetBackgroundColor(MenuContConsBgCol());
00202 fConsButContainer->SetForegroundColor(MenuContConsFgCol());
00203
00204 fConsButContainer->SetLayoutManager(new TGHorizontalLayout(fConsButContainer));
00205 MoveResizeSafe(306,5,704,75,fConsButContainer);
00206 AddFrame(fConsButContainer, new TGLayoutHints( kLHintsTop | kLHintsLeft | kLHintsExpandX, 5, 5, 5, 5 ));
00207 }
00208
00209
00210 void TFndMonitorGUI::AddDetectorSelBut(Int_t det,Bool_t is_online){
00211
00212 #ifdef FndMonitorGUI_CXX_DEBUG
00213 Printf("TFndMonitorGUI::AddDetectorSelBut called for det = %d",det);
00214 #endif
00215 DelDetectorSelBut(det);
00216 #ifdef FndMonitorGUI_CXX_DEBUG
00217 Printf("TFndMonitorGUI::AddDetectorSelBut creating for det %d (first call)",det);
00218 #endif
00219 fConsCntGrp[det] = new TGGroupFrame(fConsButContainer, MonDetName(det), kVerticalFrame);
00220 fConsCntGrp[det] ->SetTitlePos(TGGroupFrame::kCenter);
00221 fConsCntPopBut[det] = new TGTextButton(fConsCntGrp[det], "SHOW",det);
00222 fConsCntUpdateBut[det] = new TGCheckButton(fConsCntGrp[det], "AutoUPDATE",det);
00223 fConsCntGrp[det]->AddFrame(fConsCntPopBut[det], new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00224 fConsCntGrp[det]->AddFrame(fConsCntUpdateBut[det], new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00225
00226 fConsCntUpdateBut[det]->SetOn(is_online);
00227
00228 fConsButContainer->AddFrame(fConsCntGrp[det]);
00229
00230 switch (det){
00231 case D_GTS:
00232 if(!fndrun->GtsMonFrame()) {
00233 Warning("AddDetectorSelBut","Monitor for the selected detector is not active: button disconnected (%s)",MonDetName(det).Data());
00234 break;
00235 }
00236 fConsCntPopBut[det] ->Connect("Clicked()", "TFndGtsMonFrame", fndrun->GtsMonFrame(), "PopMainCanvas()");
00237 fConsCntUpdateBut[det]->Connect("Clicked()", "TFndGtsMonFrame", fndrun->GtsMonFrame(), "SwitchUpdateMethod()");
00238 break;
00239 case D_TOF:
00240 if(!fndrun->TofMonFrame()) {
00241 Warning("AddDetectorSelBut","Monitor for the selected detector is not active: button disconnected (%s)",MonDetName(det).Data());
00242 break;
00243 }
00244 fConsCntPopBut[det] ->Connect("Clicked()", "TFndTofMonFrame", fndrun->TofMonFrame(), "PopMainCanvas()");
00245 fConsCntUpdateBut[det]->Connect("Clicked()", "TFndTofMonFrame", fndrun->TofMonFrame(), "SwitchUpdateMethod()");
00246 break;
00247 case D_SIL:
00248 if(!fndrun->SilMonFrame()) {
00249 Warning("AddDetectorSelBut","Monitor for the selected detector is not active: button disconnected (%s)",MonDetName(det).Data());
00250 break;
00251 }
00252 fConsCntPopBut[det] ->Connect("Clicked()", "TFndSilMonFrame", fndrun->SilMonFrame(), "PopMainCanvas()");
00253 fConsCntUpdateBut[det]->Connect("Clicked()", "TFndSilMonFrame", fndrun->SilMonFrame(), "SwitchUpdateMethod()");
00254 break;
00255 case D_LMD:
00256 if(!fndrun->LmdMonFrame()) {
00257 Warning("AddDetectorSelBut","Monitor for the selected detector is not active: button disconnected (%s)",MonDetName(det).Data());
00258 break;
00259 }
00260 fConsCntPopBut[det] ->Connect("Clicked()", "TFndLmdMonFrame", fndrun->LmdMonFrame(), "PopMainCanvas()");
00261 fConsCntUpdateBut[det]->Connect("Clicked()", "TFndLmdMonFrame", fndrun->LmdMonFrame(), "SwitchUpdateMethod()");
00262 break;
00263 case D_STB:
00264 if(!fndrun->StbMonFrame()) {
00265 Warning("AddDetectorSelBut","Monitor for the selected detector is not active: button disconnected (%s)",MonDetName(det).Data());
00266 break;
00267 }
00268 fConsCntPopBut[det] ->Connect("Clicked()", "TFndStbMonFrame", fndrun->StbMonFrame(), "PopMainCanvas()");
00269 fConsCntUpdateBut[det]->Connect("Clicked()", "TFndStbMonFrame", fndrun->StbMonFrame(), "SwitchUpdateMethod()");
00270 break;
00271 default: Error("AddDetectorButtons","detector out of range"); return;
00272 }
00273
00274 UpdateButContainer();
00275 }
00276
00277
00278 void TFndMonitorGUI::DelDetectorSelBut(Int_t det){
00279
00280 #ifdef FndMonitorGUI_CXX_DEBUG
00281 Printf("TFndMonitorGUI::DelDetectorSelBut called for det = %d",det);
00282 #endif
00283 if(!fConsCntGrp[det]) return;
00284
00285
00286 if(!fConsCntGrp[det]->IsMapped()) return;
00287
00288
00289 #ifdef FndMonitorGUI_CXX_DEBUG
00290 Printf("TFndMonitorGUI::DelDetectorSelBut ---> deleting for det = %d",det);
00291 #endif
00292
00293 fConsButContainer->UnmapWindow();
00294 fConsButContainer->RemoveFrame(fConsCntGrp[det]);
00295
00296
00297 fConsCntPopBut[det]->DestroyWindow();
00298 delete fConsCntPopBut[det];
00299 fConsCntUpdateBut[det]->DestroyWindow();
00300 delete fConsCntUpdateBut[det];
00301 fConsCntGrp[det]->DestroyWindow();
00302 delete fConsCntGrp[det];fConsCntGrp[det] = 0;
00303
00304
00305 UpdateButContainer();
00306 }
00307
00308
00309 void TFndMonitorGUI::EnableFndMonEntry(Int_t entry,Bool_t enable){
00310
00311
00312 TGPopupMenu *CurPopUp;
00313 if(entry >= M_PRODUCER_SETUP_ONLM && entry <= M_FROOT_QUIT) CurPopUp = fPopProd;
00314 else if (entry >= M_OPENONLM_GTS && entry <= M_CLOSE_GTS) CurPopUp = fSubPop[D_GTS];
00315 else if (entry >= M_OPENONLM_TOF && entry <= M_CLOSE_TOF) CurPopUp = fSubPop[D_TOF];
00316 else if (entry >= M_OPENONLM_SIL && entry <= M_CLOSE_SIL) CurPopUp = fSubPop[D_SIL];
00317 else if (entry >= M_OPENONLM_LMD && entry <= M_CLOSE_LMD) CurPopUp = fSubPop[D_LMD];
00318 else if (entry >= M_OPENONLM_STB && entry <= M_CLOSE_STB) CurPopUp = fSubPop[D_STB];
00319 else if (entry >= M_OPENONLM_ALL && entry <= M_CLOSE_ALL) CurPopUp = fSubPopAll;
00320 else if (entry >= M_OPEN_EVD && entry <= M_CLOSE_EVD) CurPopUp = fPopEvd;
00321 if(!CurPopUp){
00322 Error("EnableFndMonEntry","entry %d not available",entry);
00323 return;
00324 }
00325 enable ? CurPopUp->EnableEntry(entry) : CurPopUp->DisableEntry(entry);
00326 }
00327
00328
00329 void TFndMonitorGUI::UpdateButContainer(){
00330
00331 fConsButContainer->MapSubwindows();
00332 fConsButContainer->MapWindow();
00333 fConsButContainer->Layout();
00334
00335
00336 for(Int_t det=0;det<K_N_FND_MON_DETECTORS;det++){
00337 if(!fConsCntGrp[det] || !fConsCntPopBut[det] || !fConsCntUpdateBut[det]) continue;
00338 gClient->NeedRedraw(fConsCntPopBut[det]);
00339 gClient->NeedRedraw(fConsCntUpdateBut[det]);
00340 gClient->NeedRedraw(fConsCntGrp[det]);
00341 gClient->ProcessEventsFor(fConsCntPopBut[det]);
00342 gClient->ProcessEventsFor(fConsCntUpdateBut[det]);
00343 gClient->ProcessEventsFor(fConsCntGrp[det]);
00344 }
00345
00346
00347 gClient->NeedRedraw(fConsButContainer);
00348 gClient->ProcessEventsFor(fConsButContainer);
00349 }
00350
00351
00352 void TFndMonitorGUI::CheckGevent(Event_t* event){
00353
00354
00355
00356 #ifdef FndMonitorGUI_CXX_DEBUG
00357 Printf("TFndMonitorGUI::CheckGevent ---> Event %d",event->fType);
00358 #endif
00359 }
00360
00361
00362 void TFndMonitorGUI::MakeConnections(Int_t whichframe,Bool_t connect){
00363
00364
00365 switch(whichframe){
00366 case FRM_MAIN:
00367 if(connect){
00368 fPopProd ->Connect( "Activated(Int_t)", "TFndMonitorGUI", this, "HandleMenu(Int_t)" );
00369 fPopDetMons->Connect( "Activated(Int_t)", "TFndMonitorGUI", this, "HandleMenu(Int_t)" );
00370 fPopEvd ->Connect( "Activated(Int_t)", "TFndMonitorGUI", this, "HandleMenu(Int_t)" );
00371 Connect( "ProcessedEvent(Event_t*)", "TFndMonitorGUI", this, "CheckGevent(Event_t*)" );
00372 }
00373 else{
00374 fPopProd->Disconnect();
00375 fPopDetMons->Disconnect();
00376 fPopEvd ->Disconnect();
00377 Disconnect();
00378 }
00379 break;
00380 case FRM_PROD:
00381 if(connect){
00382 fSubProd_ExitBut[0] ->Connect( "Clicked()", "TFndMonitorGUI", this, "StartProducer()" );
00383 fSubProd_ExitBut[1] ->Connect( "Clicked()", "TFndMonitorGUI", this, "CloseProdGUI_from_but()" );
00384 }
00385 else{
00386 fSubProd_ExitBut[0] ->Disconnect();
00387 fSubProd_ExitBut[1] ->Disconnect();
00388 }
00389 break;
00390 case FRM_CONS:
00391 if(connect){
00392 fSubCons_ExitBut[0] ->Connect( "Clicked()", "TFndMonitorGUI", this, "StartConsumer()" );
00393 fSubCons_ExitBut[1] ->Connect( "Clicked()", "TFndMonitorGUI", this, "CloseConsGUI_from_but()" );
00394 }
00395 else{
00396 fSubCons_ExitBut[0] ->Disconnect();
00397 fSubCons_ExitBut[1] ->Disconnect();
00398 }
00399 break;
00400 case FRM_EVD:
00401 break;
00402 default:
00403 Warning("MakeConnections","The selected frame does not exist (probably you have foud a BUG...)");
00404 break;
00405 }
00406 }
00407
00408
00409 void TFndMonitorGUI::HandleMenu(Int_t id){
00410
00411
00412 #ifdef FndMonitorGUI_CXX_DEBUG
00413 Printf("TFndMonitorGUI::HandleMenu ---> entry: %d",id);
00414 #endif
00415
00416 TString r_nam = 0;
00417
00418 switch (id){
00419 case M_PRODUCER_SETUP_ONLM: BuildProdGUI(kTRUE); break;
00420 case M_PRODUCER_SETUP_FILE: BuildProdGUI(kFALSE); break;
00421 case M_PRODUCER_CLEAN:
00422 StopCheckRunningThread();
00423 KillCurrentProducer();
00424 RemoveMapFiles();
00425 break;
00426 case M_KILL_EXIT:
00427 StopCheckRunningThread();
00428 KillCurrentProducer();
00429 KillOtherProducers();
00430 RemoveMapFiles();
00431 KillYourself();
00432 break;
00433 case M_FROOT_QUIT:
00434 StopCheckRunningThread();
00435 TFndMonFrame::CheckProducerMessages();
00436 KillYourself();
00437 CloseWindow();
00438 break;
00440 case M_OPENONLM_GTS: BuildConsGUI(D_GTS,kTRUE); break;
00441 case M_OPENFILE_GTS: BuildConsGUI(D_GTS,kFALSE); break;
00442 case M_CLOSE_GTS: DelDetectorSelBut(D_GTS); CloseConsGUI(); fndrun->DeleteMonFrame((Int_t)(D_GTS)); break;
00443
00444 case M_OPENONLM_TOF: BuildConsGUI(D_TOF,kTRUE); break;
00445 case M_OPENFILE_TOF: BuildConsGUI(D_TOF,kFALSE); break;
00446 case M_CLOSE_TOF: DelDetectorSelBut(D_TOF); CloseConsGUI(); fndrun->DeleteMonFrame((Int_t)(D_TOF)); break;
00447
00448 case M_OPENONLM_SIL: BuildConsGUI(D_SIL,kTRUE); break;
00449 case M_OPENFILE_SIL: BuildConsGUI(D_SIL,kFALSE); break;
00450 case M_CLOSE_SIL: DelDetectorSelBut(D_SIL); CloseConsGUI(); fndrun->DeleteMonFrame((Int_t)(D_SIL)); break;
00451
00452 case M_OPENONLM_LMD: BuildConsGUI(D_LMD,kTRUE); break;
00453 case M_OPENFILE_LMD: BuildConsGUI(D_LMD,kFALSE); break;
00454 case M_CLOSE_LMD: DelDetectorSelBut(D_LMD); CloseConsGUI(); fndrun->DeleteMonFrame((Int_t)(D_LMD)); break;
00455
00456 case M_OPENONLM_STB: BuildConsGUI(D_STB,kTRUE); break;
00457 case M_OPENFILE_STB: BuildConsGUI(D_STB,kFALSE); break;
00458 case M_CLOSE_STB: DelDetectorSelBut(D_STB); CloseConsGUI(); fndrun->DeleteMonFrame((Int_t)(D_STB)); break;
00459
00460 case M_OPENONLM_ALL: break;
00461 case M_OPENFILE_ALL: break;
00462 case M_CLOSE_ALL: break;
00464 case M_OPEN_EVD:
00465 RunEventDisplay();
00466 break;
00467 case M_CLOSE_EVD:
00468 KillEventDisplay();
00469 break;
00471 default: Error("HandleMenu","The selected Action is not defined: you have just found a BUG!");
00472 gApplication->Terminate();
00473 }
00474
00475 }
00476
00477
00478 void TFndMonitorGUI::StartProducer(){
00479
00480
00481
00482
00483
00484
00485 TString appl = "geb2hdt";
00486 TString db_host = fSubProdDB_Combo->GetTextEntry()->GetDisplayText();
00487 TString data_path = "$PWD";
00488 if(fSubProdRDT_Txt) data_path = fSubProdRDT_Txt->GetDisplayText();
00489 TString run_type = "ONLM";
00490 if(fSubProdRunType_Combo) run_type = fSubProdRunType_Combo->GetTextEntry()->GetDisplayText();
00491 Int_t run_num = (fSubProdRunNum_val) ? (Int_t) fSubProdRunNum_val->GetNumber() : 0;
00492 Int_t n_events = (Int_t) fSubProdEvents_val->GetNumber();
00493
00494 SendProducerCommand(appl,db_host,data_path,run_type,run_num,n_events);
00495 CloseProdGUI_from_but();
00496 }
00497
00498
00499 void TFndMonitorGUI::StartConsumer(){
00500
00501
00502
00503
00504
00505 if(fConsIsOnline > (Int_t)(D_STB)){
00506 Error("StartConsumer","You have just found a BUG!");
00507 gApplication->Terminate();
00508 }
00509
00510 TString arg_str = 0;
00511 TString arg_str1 = 0;
00512 TString rnum_str = "";
00513 TString sufx_str = MonDetName(fCurConsDet);
00514 sufx_str.ToLower();
00515 if(fSubConsRunNum_val) rnum_str+=(Int_t)(fSubConsRunNum_val->GetNumber());
00516 if(rnum_str.Sizeof()<1 || rnum_str.Sizeof()>6){
00517 Warning("StartConsumer","The selected run-number is not accepted.");
00518 return;
00519 }
00520 CompleteString(rnum_str,5,"0",kFALSE);
00521
00522 Bool_t Successful = kFALSE;
00523 if(!fConsIsOnline){
00524 fndrun->SetRunType(fSubConsRunType_Combo->GetTextEntry()->GetDisplayText());
00525 fndrun->SetRunNumber((Int_t)(fSubConsRunNum_val->GetNumber()));
00526
00527 TString cons_pth_ok = ExpandPathName(fSubConsFpath_Txt->GetDisplayText().Data());
00528 if( cons_pth_ok.IsNull() || gSystem->AccessPathName(cons_pth_ok) ) cons_pth_ok = "$PWD";
00529
00530 if(fCurConsDet != (Int_t)(D_SIL)){
00531 arg_str.Form("%s/%s%s_%s.root",
00532 cons_pth_ok.Data(),
00533 fSubConsRunType_Combo->GetTextEntry()->GetDisplayText().Data(),
00534 rnum_str.Data(),
00535 sufx_str.Data());
00536 }
00537 else{
00538 arg_str.Form("%s/%s%s_ism.root",
00539 cons_pth_ok.Data(),
00540 fSubConsRunType_Combo->GetTextEntry()->GetDisplayText().Data(),
00541 rnum_str.Data());
00542 arg_str1.Form("%s/%s%s_osm.root",
00543 cons_pth_ok.Data(),
00544 fSubConsRunType_Combo->GetTextEntry()->GetDisplayText().Data(),
00545 rnum_str.Data());
00546 }
00547 }
00548 fndrun->StartMonFrame(fCurConsDet,arg_str,arg_str1);
00549 Successful = !(fndrun->GetMonFrame(fCurConsDet)->IsClosed());
00550 if(!Successful) fndrun->DeleteMonFrame(fCurConsDet);
00551
00552 CloseConsGUI_from_but();
00553 if(Successful) AddDetectorSelBut(fCurConsDet,fConsIsOnline);
00554 }
00555
00557
00559
00560
00561 void TFndMonitorGUI::BuildProdGUI(Bool_t is_online){
00562
00563
00564 if(fProdMainFrame){
00565 Warning("BuildProdGUI","Rebuilding!!!!!!!!!!!!!!!!!!!!!");
00566 CloseProdGUI();
00567 }
00568 fProdMainFrame = new TGTransientFrame(gClient->GetRoot());
00569 fProdMainFrame->SetLayoutBroken(kTRUE);
00570 fProdMainFrame->SetCleanup(kDeepCleanup);
00573 fSubProdDB_Grp = new TGGroupFrame(fProdMainFrame, "Database host", kVerticalFrame);
00574 fSubProdDB_Grp->SetTitlePos(TGGroupFrame::kCenter);
00575 fSubProdDB_Combo = new TGComboBox(fSubProdDB_Grp,"d");
00576 MoveResizeSafe(2,3,150,20,fSubProdDB_Combo);
00577 fSubProdDB_Grp ->AddFrame(fSubProdDB_Combo, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00578 if(! is_online){
00580 fSubProdRDT_Grp = new TGGroupFrame(fProdMainFrame, "RAW-Data path", kVerticalFrame);
00581 fSubProdRDT_Grp->SetTitlePos(TGGroupFrame::kCenter);
00582 fSubProdRDT_Txt = new TGTextEntry(fSubProdRDT_Grp,"$RDT");
00583 MoveResizeSafe(2,3,150,20,fSubProdRDT_Txt);
00584 fSubProdRDT_Grp->AddFrame(fSubProdRDT_Txt, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00586 fSubProdRunType_Grp = new TGGroupFrame(fProdMainFrame, "Run type", kVerticalFrame);
00587 fSubProdRunType_Grp->SetTitlePos(TGGroupFrame::kCenter);
00588 fSubProdRunType_Combo = new TGComboBox(fSubProdRunType_Grp,"s");
00589 MoveResizeSafe(2,3,150,20,fSubProdRunType_Combo);
00590 fSubProdRunType_Grp ->AddFrame(fSubProdRunType_Combo, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00592 fSubProdRunNum_Grp = new TGGroupFrame(fProdMainFrame, "Run Number", kVerticalFrame);
00593 fSubProdRunNum_Grp->SetTitlePos(TGGroupFrame::kCenter);
00594 fSubProdRunNum_val = new TGNumberEntry(fSubProdRunNum_Grp, (Double_t) 0,6,-1,(TGNumberFormat::EStyle) 0,(TGNumberFormat::EAttribute) 1,(TGNumberFormat::ELimit) 1,0,100000);
00595 fSubProdRunNum_val->SetNumber(1000);
00596 MoveResizeSafe(220,3,150,20,fSubProdRunNum_val);
00597 fSubProdRunNum_Grp ->AddFrame(fSubProdRunNum_val, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00599 }
00600 else{
00601 fSubProdRDT_Txt = 0;
00602 fSubProdRunType_Combo = 0;
00603 fSubProdRunNum_val = 0;
00604 }
00605 fSubProdEvents_Grp = new TGGroupFrame(fProdMainFrame, "Number of events", kVerticalFrame);
00606 fSubProdEvents_Grp->SetTitlePos(TGGroupFrame::kCenter);
00607 fSubProdEvents_val = new TGNumberEntry(fSubProdEvents_Grp, (Double_t) 0,6,-1,(TGNumberFormat::EStyle) 0,(TGNumberFormat::EAttribute) 1,(TGNumberFormat::ELimit) 1,0,10000000);
00608 fSubProdEvents_val->SetNumber(10000000);
00609 MoveResizeSafe(220,3,150,20,fSubProdEvents_val);
00610 fSubProdEvents_Grp ->AddFrame(fSubProdEvents_val, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00612 fSubProdExitBut_Grp = new TGGroupFrame(fProdMainFrame, "", kVerticalFrame);
00613 fSubProdExitBut_Grp->SetTitlePos(TGGroupFrame::kCenter);
00614 fSubProdExitBut_Grp->SetLayoutBroken(kTRUE);
00615 fSubProd_ExitBut[0] = new TGTextButton(fSubProdExitBut_Grp, "&Ok");
00616 fSubProd_ExitBut[1] = new TGTextButton(fSubProdExitBut_Grp, "&Cancel");
00617 MoveResizeSafe(10,10,55,25,fSubProd_ExitBut[0]);
00618 MoveResizeSafe(90,10,55,25,fSubProd_ExitBut[1]);
00619 fSubProdExitBut_Grp->AddFrame(fSubProd_ExitBut[0]);
00620 fSubProdExitBut_Grp->AddFrame(fSubProd_ExitBut[1]);
00621
00622 if(is_online){
00623 TString fontstring = "-adobe-helvetica-medium-r-*-*-";
00624 fontstring+=(Int_t)(GetTGadj(1) * 10.);
00625 fontstring+="-*-*-*-*-*-iso8859-1";
00626 TGFont *u_title_font = gClient->GetFont(fontstring.Data());
00627 TGGC *u_title_GC;
00628 GCValues_t g_context_title;
00629 g_context_title.fMask = kGCForeground | kGCBackground | kGCFillStyle | kGCFont | kGCGraphicsExposures;
00630 gClient->GetColorByName("#000000",g_context_title.fForeground);
00631 gClient->GetColorByName("#c6c2c6",g_context_title.fBackground);
00632 g_context_title.fFillStyle = kFillSolid;
00633 g_context_title.fFont = u_title_font->GetFontHandle();
00634 g_context_title.fGraphicsExposures = kFALSE;
00635 u_title_GC = gClient->GetGC(&g_context_title, kTRUE);
00636
00637 fSubProdInfo_Grp = new TGGroupFrame(fProdMainFrame, "Info", kVerticalFrame);
00638 fSubProdInfo_Grp->SetTitlePos(TGGroupFrame::kCenter);
00639 fSubProdInfo_Grp->SetLayoutBroken(kTRUE);
00640 TString InfoGebIp = "GEB IP: ";
00641 InfoGebIp += gSystem->Getenv("FND_GEBIP");
00642 fSubProd_LblGebIP = new TGLabel(fSubProdInfo_Grp, InfoGebIp,
00643 u_title_GC->GetGC(),u_title_font->GetFontStruct(),kSunkenFrame | kDoubleBorder | kOwnBackground);
00644 fSubProd_LblGebIP->SetTextJustify(36);
00645 MoveResizeSafe(5,15,145,20,fSubProd_LblGebIP);
00646 fSubProdInfo_Grp ->AddFrame(fSubProd_LblGebIP, new TGLayoutHints(kLHintsLeft | kLHintsTop,5,5,5,5));
00647 }
00648
00650 Int_t VertStart = 1;
00651 Int_t VertGap = 50;
00652
00653 MoveResizeSafe(5, VertStart , 155,45,fSubProdDB_Grp); VertStart+=VertGap;
00654 if(! is_online){
00655 MoveResizeSafe(5, VertStart , 155,45,fSubProdRDT_Grp); VertStart+=VertGap;
00656 MoveResizeSafe(5, VertStart , 155,45,fSubProdRunType_Grp); VertStart+=VertGap;
00657 MoveResizeSafe(5, VertStart , 155,45,fSubProdRunNum_Grp); VertStart+=VertGap;
00658 }
00659 MoveResizeSafe(5, VertStart , 155,45,fSubProdEvents_Grp); VertStart+=VertGap;
00660 MoveResizeSafe(5, VertStart , 155,45,fSubProdExitBut_Grp); VertStart+=VertGap;
00661 if(is_online){
00662 MoveResizeSafe(5, VertStart , 155,45,fSubProdInfo_Grp);
00663 }
00664
00665 fProdMainFrame->AddFrame(fSubProdDB_Grp, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00666 if(! is_online){
00667 fProdMainFrame->AddFrame(fSubProdRDT_Grp, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00668 fProdMainFrame->AddFrame(fSubProdRunType_Grp, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00669 fProdMainFrame->AddFrame(fSubProdRunNum_Grp, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00670 }
00671 fProdMainFrame->AddFrame(fSubProdEvents_Grp, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00672
00673 fProdMainFrame->AddFrame(fSubProdExitBut_Grp, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00674 if(is_online) fProdMainFrame->AddFrame(fSubProdInfo_Grp, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00675
00677 FillProdComboBoxes(is_online);
00678 MakeConnections(FRM_PROD);
00679 fProdMainFrame->SetWindowName("Monitor producer (geb2hdt) setup GUI");
00681 fProdMainFrame->SetCleanup(kDeepCleanup);
00682
00683 fProdMainFrame->DontCallClose();
00684 fProdMainFrame->Layout();
00685 fProdMainFrame->MapSubwindows();
00686 fProdMainFrame->MapWindow();
00687 MoveResizeSafe(10,100,170,320,fProdMainFrame);
00688
00689
00690 gClient->NeedRedraw(fProdMainFrame);
00691 gClient->ProcessEventsFor(fProdMainFrame);
00692 #ifdef FndMonitorGUI_CXX_DEBUG
00693 Printf("fProdMainFrame now mapped");
00694 #endif
00695 }
00696
00697
00698 void TFndMonitorGUI::FillProdComboBoxes(Bool_t is_online){
00699
00700
00701 if(!fSubProdDB_Combo && !fSubProdRunType_Combo){
00702 Error("FillProdComboBoxes","Maybe you have found a bug!");
00703 gApplication->Terminate(0);
00704 }
00705
00706 if(fSubProdDB_Combo){
00707 if(fSubProdDB_Combo->GetNumberOfEntries() != 0) fSubProdDB_Combo->RemoveAll();
00708 for (Int_t i=0; i<K_N_DB_HOSTS; i++) {
00709 fSubProdDB_Combo->AddEntry(DB_Host_Name(i),i);
00710 }
00711 fSubProdDB_Combo->GetTextEntry()->SetText(DB_Host_Name(0));
00712 }
00713 if(fSubProdRunType_Combo && !is_online){
00714 if(fSubProdRunType_Combo->GetNumberOfEntries() != 0) fSubProdRunType_Combo->RemoveAll();
00715 for(Int_t i=(Int_t)(RT_FINU);i<=(Int_t)(RT_ONLM);i++) {
00716
00717 fSubProdRunType_Combo->AddEntry(RunType_Name(i),i);
00718 }
00719 fSubProdRunType_Combo->GetTextEntry()->SetText(RunType_Name(RT_FINU));
00720 }
00721 }
00722
00723
00724 void TFndMonitorGUI::FillConsComboBoxes(Bool_t is_online){
00725
00726
00727 if(!is_online && !fSubConsRunType_Combo){
00728 Error("FillConsComboBoxes","Maybe you have found a bug!");
00729 gApplication->Terminate(0);
00730 }
00731
00732 if(fSubConsRunType_Combo && !is_online){
00733 if(fSubConsRunType_Combo->GetNumberOfEntries() != 0) fSubConsRunType_Combo->RemoveAll();
00734 for(Int_t i=(Int_t)(RT_FINU);i<=(Int_t)(RT_ONLM);i++) {
00735
00736 fSubConsRunType_Combo->AddEntry(RunType_Name(i),i);
00737 }
00738 if(is_online) fSubConsRunType_Combo->GetTextEntry()->SetText(RunType_Name(RT_ONLM));
00739 else fSubConsRunType_Combo->GetTextEntry()->SetText(RunType_Name(RT_FINU));
00740 }
00741 }
00742
00743
00744 void TFndMonitorGUI::BuildConsGUI(Int_t det,Bool_t is_online){
00745
00746
00747 fCurConsDet = det;
00748 fConsIsOnline = is_online;
00749 if(fConsMainFrame) CloseConsGUI();
00750 fConsMainFrame = new TGTransientFrame(gClient->GetRoot());
00751 fConsMainFrame->SetLayoutBroken(kTRUE);
00752 fConsMainFrame->SetCleanup(kDeepCleanup);
00754 if(! is_online){
00756 fSubConsFpath_Grp = new TGGroupFrame(fConsMainFrame, "root-file path", kVerticalFrame);
00757 fSubConsFpath_Grp->SetTitlePos(TGGroupFrame::kCenter);
00758 fSubConsFpath_Txt = new TGTextEntry(fSubConsFpath_Grp,"$FND_MON_HISTOS");
00759 MoveResizeSafe(2,3,150,20,fSubConsFpath_Txt);
00760 fSubConsFpath_Grp->AddFrame(fSubConsFpath_Txt, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00762 fSubConsRunType_Grp = new TGGroupFrame(fConsMainFrame, "Run type", kVerticalFrame);
00763 fSubConsRunType_Grp->SetTitlePos(TGGroupFrame::kCenter);
00764 fSubConsRunType_Combo = new TGComboBox(fSubConsRunType_Grp,"s");
00765 MoveResizeSafe(2,3,150,20,fSubConsRunType_Combo);
00766 fSubConsRunType_Grp ->AddFrame(fSubConsRunType_Combo, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00768 fSubConsRunNum_Grp = new TGGroupFrame(fConsMainFrame, "Run Number", kVerticalFrame);
00769 fSubConsRunNum_Grp->SetTitlePos(TGGroupFrame::kCenter);
00770 fSubConsRunNum_val = new TGNumberEntry(fSubConsRunNum_Grp, (Double_t) 0,6,-1,(TGNumberFormat::EStyle) 0,(TGNumberFormat::EAttribute) 1,(TGNumberFormat::ELimit) 1,0,100000);
00771 fSubConsRunNum_val->SetNumber(1000);
00772 MoveResizeSafe(220,3,150,20,fSubConsRunNum_val);
00773 fSubConsRunNum_Grp ->AddFrame(fSubConsRunNum_val, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00774 }
00775 else{
00776 fSubConsFpath_Txt = 0;
00777 fSubConsRunType_Combo = 0;
00778 fSubConsRunNum_val = 0;
00779 }
00781 fSubConsExitBut_Grp = new TGGroupFrame(fConsMainFrame, "", kVerticalFrame);
00782 fSubConsExitBut_Grp->SetTitlePos(TGGroupFrame::kCenter);
00783 fSubConsExitBut_Grp->SetLayoutBroken(kTRUE);
00784 fSubCons_ExitBut[0] = new TGTextButton(fSubConsExitBut_Grp, "&Ok");
00785 fSubCons_ExitBut[1] = new TGTextButton(fSubConsExitBut_Grp, "&Cancel");
00786 MoveResizeSafe(10,10,55,25,fSubCons_ExitBut[0]);
00787 MoveResizeSafe(90,10,55,25,fSubCons_ExitBut[1]);
00788 fSubConsExitBut_Grp->AddFrame(fSubCons_ExitBut[0]);
00789 fSubConsExitBut_Grp->AddFrame(fSubCons_ExitBut[1]);
00790
00792 Int_t VertStart = 1;
00793 Int_t VertGap = 50;
00794
00795 if(! is_online){
00796 MoveResizeSafe(5, VertStart , 155,45,fSubConsFpath_Grp); VertStart+=VertGap;
00797 MoveResizeSafe(5, VertStart , 155,45,fSubConsRunType_Grp); VertStart+=VertGap;
00798 MoveResizeSafe(5, VertStart , 155,45,fSubConsRunNum_Grp); VertStart+=VertGap;
00799 }
00800 MoveResizeSafe(5, VertStart , 155,45,fSubConsExitBut_Grp); VertStart+=VertGap;
00801
00802 if(! is_online){
00803 fConsMainFrame->AddFrame(fSubConsFpath_Grp, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00804 fConsMainFrame->AddFrame(fSubConsRunType_Grp, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00805 fConsMainFrame->AddFrame(fSubConsRunNum_Grp, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00806 }
00807
00808 fConsMainFrame->AddFrame(fSubConsExitBut_Grp, new TGLayoutHints(kLHintsExpandX, 1, 1, 2, 2));
00809
00811 FillConsComboBoxes(is_online);
00812 MakeConnections(FRM_CONS);
00814
00815 TString cur_tit;
00816 cur_tit.Form("%s Monitor (consumer) setup",MonDetName(det).Data());
00817 fConsMainFrame->SetWindowName(cur_tit);
00818 fConsMainFrame->DontCallClose();
00819 fConsMainFrame->Layout();
00820 fConsMainFrame->MapSubwindows();
00821 fConsMainFrame->MapWindow();
00822 MoveResizeSafe(399,150,350,300,fConsMainFrame);
00823
00824 gClient->NeedRedraw(fConsMainFrame);
00825 gClient->ProcessEventsFor(fConsMainFrame);
00826 #ifdef FndMonitorGUI_CXX_DEBUG
00827 Printf("fConsMainFrame now mapped");
00828 #endif
00829 }
00830
00831
00832
00833
00834
00835
00836
00837
00838
00839
00840
00841
00842
00843
00844
00845
00846
00847
00848
00849
00850
00851
00852
00853
00854
00855
00856
00857 void TFndMonitorGUI::RunEventDisplay(){
00858 Info("RunEventDisplay","Loading event display");
00859
00860 if(fEventDisplay){
00861 Info("RunEventDisplay","Event display already running.");
00862 return;
00863 }
00864
00865 fEventDisplay = new TFndEvd();
00866 gFndGeom->SetVerboseLevel(0);
00867
00868 fEventDisplay->Open(2);
00869 fEventDisplay->SetFndGlViewer();
00870 fEventDisplay->MakeConnections();
00871
00872
00873 }
00874
00875
00876 void TFndMonitorGUI::KillEventDisplay(){
00877 if(fEventDisplay){
00878 Info("KillEventDisplay","Killing running event display");
00879 delete fEventDisplay;
00880 fEventDisplay = 0;
00881 }
00882 else Info("KillEventDisplay","No running event display found.");
00883
00884
00885
00886 }