GUI/TFndMonitorGUI.cxx

00001 // @(#)fROOT/GUI:$Name:  $:$Id: TFndMonitorGUI.cxx,v 1.28 2007/09/24 07:32:41 Diego_Faso Exp $
00002 // Author: Diego Faso <mailto:faso@to.infn.it>, 2006/05/16
00003 
00005 //                                                                      //
00006 //                           TFndMonitorGUI                             //
00007 //                                                                      //
00008 // Build the GUI for controlling the online monitor Producer(geb2hdt)   //
00009 // and consumer (detector monitors)                                     //
00010 // Both online and offline modes are available                          //
00011 //                                                                      //
00012 // Here everithing is thread safe                                       //
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   //#define FndMonitorGUI_CXX_DEBUG
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   //  CloseEvdGUI();  
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(); // wait until shared memories are available
00066   Info("TFndMonitorGUI::CloseWindow","   ...closing GUI..."); 
00067   delete this;
00068 }
00069 
00070 //_______________________________
00071 void TFndMonitorGUI::BuildMainGUI(){
00072 
00073   // Set main frame name, map sub windows (buttons), initialize layout
00074   // algorithm via Resize() and map main frame
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   // --- producer main control
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   //  fPopProd->Resize(GetDefaultSize());
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   // --- consumers main controls (and relative sub-menus)
00132   fPopDetMons = new TGPopupMenu(gClient->GetRoot());
00133   //  enum EFndMonDetectors { D_TOF = 0, D_LMD, D_STB, D_SIL, D_GTS }; // see FROOT.h
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   // --- event display main control
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); // remove it first (if it exists)
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){ // buttons connections
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   //#ifdef _FND_ONL_USE_MAP_FILES_
00286   if(!fConsCntGrp[det]->IsMapped()) return;
00287   //#endif
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   //#ifdef _FND_ONL_USE_MAP_FILES_
00297   fConsCntPopBut[det]->DestroyWindow();
00298   delete fConsCntPopBut[det];
00299   fConsCntUpdateBut[det]->DestroyWindow();
00300   delete fConsCntUpdateBut[det];
00301   fConsCntGrp[det]->DestroyWindow();   // <-- this line is very important
00302   delete fConsCntGrp[det];fConsCntGrp[det] = 0;
00303   //#endif
00304     
00305   UpdateButContainer();
00306 }
00307 
00308 //______________________________________________________________________________
00309 void TFndMonitorGUI::EnableFndMonEntry(Int_t entry,Bool_t enable){
00310   // see Gui::EFndCommandIdentifiers
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   //#ifdef _FND_ONL_USE_MAP_FILES_
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   //#endif
00346   
00347   gClient->NeedRedraw(fConsButContainer);
00348   gClient->ProcessEventsFor(fConsButContainer);
00349 }
00350 
00351 //______________________________________________________________________________
00352 void TFndMonitorGUI::CheckGevent(Event_t* event){
00353   // this method is still empty:
00354   // you can use it to check GUI events on 'this'
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   // enum EFndGUIFrames { FRM_MAIN = 0, FRM_PROD, FRM_CONS, FRM_EVD };  (see the "Gui" namespace) 
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   // GUI actions management (selections and buttons)
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(); // wait until shared memories are available
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   // build and send the command for the new geb2hdt process
00480   //      (geb2hdt will run within a separate thread)
00481   // fndrun data-members are also set here (from GUI entries)
00482   //
00483   // this method is called by pressing the OK button in the Producer sub-frame
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   // build and send the command for the new consumer process
00501   // fndrun data-members are also set here (from GUI entries)
00502   //
00503   // this method is called by pressing the OK button in the Consumer sub-frame
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); // fill up to 5 digits
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{ // SIL monitor uses two root-files
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 // --- SUB-FRAMES management --- //
00559 
00560 //_______________________________
00561 void TFndMonitorGUI::BuildProdGUI(Bool_t is_online){
00562   // Build the Start-Producer GUI (both online and offline modes supported)
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   // INFO (online mode)
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);// VertStart+=VertGap;
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   // (see the FROOT.h file)
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       //    for (Int_t i=0; i<K_N_RUN_TYPES; i++) {
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   // (see the FROOT.h file)
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       //    for (Int_t i=0; i<K_N_RUN_TYPES; i++) {
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   // Build the Start-Consumer(s) GUI (both online and offline modes supported)
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 // void TFndMonitorGUI::BuildEvdGUI(Bool_t is_online){
00833 //   // Build the Start-Event Display GUI (both online and offline modes supported)
00834 
00835 //   if(fEvdMainFrame) CloseEvdGUI();
00836 //   fEvdMainFrame = new TGTransientFrame(gClient->GetRoot());
00837 //   fEvdMainFrame->SetLayoutBroken(kTRUE);
00838 //   fEvdMainFrame->SetCleanup(kDeepCleanup);
00839 //   ////////////////////////// Build frame content /////////////////////////
00840   
00841 //   ////////////////////////////////////////////////////////////////////////
00842 //   fEvdMainFrame->SetWindowName("Event display setup GUI");
00843 //   fEvdMainFrame->DontCallClose();
00844 //   fEvdMainFrame->Layout();
00845 //   fEvdMainFrame->MapSubwindows();
00846 //   fEvdMainFrame->MapWindow();
00847 //   MoveResizeSafe(499,350,350,300,fEvdMainFrame);
00848 
00849 //   gClient->NeedRedraw(fEvdMainFrame);
00850 //   gClient->ProcessEventsFor(fEvdMainFrame);
00851 // #ifdef FndMonitorGUI_CXX_DEBUG
00852 //   Printf("fEvdMainFrame now mapped");
00853 // #endif
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   //  gSystem->Exec("FinudaEventDisplay&");
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   //  gSystem->Exec("pkill FinudaEventDisplay");
00885 
00886 }

Generated on Tue Oct 16 15:40:46 2007 by  doxygen 1.5.2