00001
00002
00003
00004 #include "TApplication.h"
00005
00006 #include "TFndGeb2hdtGUI.h"
00007
00008 ClassImp(TFndGeb2hdtGUI)
00009
00010
00011 TFndGeb2hdtGUI::TFndGeb2hdtGUI():
00012 TGMainFrame(gClient->GetRoot(),100,100),
00013 fCurMan()
00014 {
00015
00016
00017
00018 }
00019
00020
00021 TFndGeb2hdtGUI::TFndGeb2hdtGUI(TFndGeb2hdtMan *Geb2hMan):
00022 TGMainFrame(gClient->GetRoot(),100,100),
00023 fCurMan()
00024 {
00025 fCurMan = Geb2hMan;
00026 }
00027
00028
00029 TFndGeb2hdtGUI::~TFndGeb2hdtGUI(){
00030
00031 Cleanup();
00032 }
00033
00034
00035 void TFndGeb2hdtGUI::CloseWindow(){
00036
00037 Info("TFndGeb2hdtGUI::CloseWindow"," ...closing GUI...");
00038 delete this;
00039 }
00040
00041
00042 void TFndGeb2hdtGUI::BuildGUI(){
00043
00044
00045 Info("BuildGUI","Building GUI");
00046 Bool_t is_online = kFALSE;
00047
00048 if(!fCurMan){
00049 Error("BuildGUI","This GUI is not useful without a manager (TFndGeb2hdtMan)");
00050 return;
00051 }
00052 is_online = fCurMan->GetOnlFlag();
00053
00054
00055 fButFrame = new TGVerticalFrame(this);
00056 fStopBut = new TGTextButton(this, "&STOP", 1);
00057 fPauseBut = new TGTextButton(this, "&PAUSE", 2);
00058
00059 if(is_online){
00060 fResetGtsBut = new TGTextButton(this, "&Reset GTS", 3);
00061 fResetTofBut = new TGTextButton(this, "&Reset TOF", 4);
00062 fResetSilBut = new TGTextButton(this, "&Reset SIL", 5);
00063 fResetLmdBut = new TGTextButton(this, "&Reset LMD", 6);
00064 fResetStbBut = new TGTextButton(this, "&Reset STB", 7);
00065 }
00066
00067
00068 fTextGroup = new TGGroupFrame(this, "Producer real-time messages", kVerticalFrame);
00069 fTextGroup->SetTitlePos(TGGroupFrame::kCenter);
00070
00071 fTextMessages = new TGTextEntry(fTextGroup,"...initializing monitor producer...");
00072 fTextMessages->SetAlignment(kTextCenterX);
00073
00074 fTextGroup->AddFrame(fTextMessages, new TGLayoutHints(kLHintsExpandX, 0, 0, 20, 5));
00075
00076 fButFrame->AddFrame(fStopBut, new TGLayoutHints(kLHintsExpandX, 0, 0, 5, 20));
00077 fButFrame->AddFrame(fPauseBut, new TGLayoutHints(kLHintsExpandX, 0, 0, 5, 20));
00078 if(is_online){
00079 fButFrame->AddFrame(fResetGtsBut, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 5));
00080 fButFrame->AddFrame(fResetTofBut, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 5));
00081 fButFrame->AddFrame(fResetSilBut, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 5));
00082 fButFrame->AddFrame(fResetLmdBut, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 5));
00083 fButFrame->AddFrame(fResetStbBut, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 5));
00084 }
00085
00086 fButFrame->AddFrame(fTextGroup, new TGLayoutHints(kLHintsExpandX, 0, 0, 20, 5));
00087 fButFrame->Resize(fButFrame->GetDefaultSize());
00088
00089 AddFrame(fButFrame, new TGLayoutHints(kLHintsExpandX, 0, 0, 5, 20));
00090 SetWindowName("Producer Control");
00091
00092 DontCallClose();
00093
00094 Resize(GetDefaultSize());
00095
00096
00097
00098
00099
00100 MakeConnections();
00101
00102 Info("BuildGUI","GUI built");
00103
00104 RemapMainWindow();
00105 is_online ? MoveResizeSafe(5,130,250,550,this) : MoveResizeSafe(5,130,250,350,this);
00106
00107 RemapMainWindow();
00108 usleep(300000);
00109
00110 if(is_online) WriteTextMessage("...checking socket connection...");
00111 else WriteTextMessage("...initializing producer for file...");
00112
00113 Info("BuildGUI","GUI re-mapped");
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130 return;
00131 }
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142 void TFndGeb2hdtGUI::MakeConnections(){
00143
00144 Bool_t is_online = kFALSE;
00145
00146 if(!fCurMan){
00147 Error("MakeConnections","If you are reading this message you just have found a BUG!");
00148 gApplication->Terminate();
00149 }
00150 is_online = fCurMan->GetOnlFlag();
00151
00152 fCurMan->Connect("SendRealTimeInfo(Int_t)","TFndGeb2hdtGUI",this,"ReceiveRealTimeInfo(Int_t)");
00153
00154
00155 fStopBut->Connect("Clicked()", "TFndGeb2hdtMan", fCurMan, "StopProducer()");
00156 fPauseBut->Connect("Clicked()", "TFndGeb2hdtMan", fCurMan, "PauseProducer()");
00157
00158 if(is_online){
00159 fResetGtsBut->Connect("Clicked()", "TFndGeb2hdtMan", fCurMan, "ResetGts()");
00160 fResetTofBut->Connect("Clicked()", "TFndGeb2hdtMan", fCurMan, "ResetTof()");
00161 fResetSilBut->Connect("Clicked()", "TFndGeb2hdtMan", fCurMan, "ResetSil()");
00162 fResetLmdBut->Connect("Clicked()", "TFndGeb2hdtMan", fCurMan, "ResetLmd()");
00163 fResetStbBut->Connect("Clicked()", "TFndGeb2hdtMan", fCurMan, "ResetStb()");
00164 }
00165
00166 }
00167
00168
00169 void TFndGeb2hdtGUI::RemapMainWindow(){
00170
00171 Layout();
00172 MapSubwindows();
00173 MapWindow();
00174
00175
00176 }
00177
00178
00179 void TFndGeb2hdtGUI::WriteTextMessage(TString msg){
00180
00181 fTextMessages->SetText(msg);
00182 gClient->NeedRedraw(fTextMessages);
00183 gClient->ProcessEventsFor(fTextMessages);
00184 }
00185
00186
00187 void TFndGeb2hdtGUI::FlashTextMessage(TString msg,TString next_msg,Int_t time_ms){
00188
00189
00190
00191
00192 TString prev_msg = fTextMessages->GetText();
00193
00194
00195 if(next_msg.IsNull()) next_msg = prev_msg;
00196
00197
00198 WriteTextMessage(msg);
00199 gSystem->Sleep(time_ms);
00200
00201
00202 WriteTextMessage(next_msg);
00203
00204 }
00205
00206
00207 void TFndGeb2hdtGUI::ReceiveRealTimeInfo(Int_t Info_id){
00208
00209
00210
00211
00212
00213
00214
00215 if(gClient) gClient->SetEditDisabled(kTRUE);
00216 Info("ReceiveRealTimeInfo","Real-Time Information received (id: %d)",Info_id);
00217 TString info_msg;
00218
00219 switch(Info_id){
00220 case G2H_INFO_NO_ANSWER:
00221 WriteTextMessage("No answer received from DAQ: retrying...");
00222 break;
00223 case G2H_INFO_SEND_REQ_TO_DAQ:
00224 WriteTextMessage("Sending new event request to DAQ...");
00225 break;
00226 case G2H_INFO_CONNECTING_DB:
00227
00228 break;
00229 case G2H_INFO_DB_CONN_CLOSED:
00230
00231 break;
00232 case G2H_INFO_CAN_START_CONS:
00233 WriteTextMessage("Consumers can start");
00234 break;
00235 case G2H_INFO_EV_LOOP_START:
00236 WriteTextMessage("Starting event loop...");
00237 break;
00238 case G2H_INFO_SEND_FIRST_REQ:
00239 WriteTextMessage("Sending request for first event");
00240 break;
00241 case G2H_INFO_STARTING_MONITORS:
00242 WriteTextMessage("Monitors (histogram filling) Started");
00243 break;
00244 case G2H_INFO_FILLING_MONITORS:
00245 WriteTextMessage("Filling monitor histograms");
00246 break;
00247 case G2H_INFO_UPDATING_PROD_SHR:
00248 info_msg.Form("Run %d - ev. %d (%u ev. tot)",
00249 fndrun->GetCurOnlineRunNmber(),
00250 fndrun->GetEvNum_Raw(),
00251 fCurMan->GetCurrentEvent());
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263 FlashTextMessage("Updating producer shared memories",info_msg.Data());
00264
00265 break;
00266 case G2H_INFO_PAUSED:
00267 WriteTextMessage("PAUSED");
00268 break;
00269 case G2H_INFO_RESTARTED:
00270 WriteTextMessage("Producer restarted");
00271 break;
00272 case G2H_INFO_TIMED_OUT:
00273 WriteTextMessage("Current geb2hdt process has timed out");
00274 break;
00275 case G2H_INFO_FINISH_RUN:
00276 WriteTextMessage("Current run completed: exiting...");
00277 break;
00278 case G2H_INFO_STOPPING:
00279 WriteTextMessage("Stopping producer: please wait...");
00280 break;
00281 case G2H_INFO_EXITING:
00282 WriteTextMessage("Cleaning memory...please wait.");
00283 break;
00284 case G2H_INFO_PRINT:
00285 if(fndrun->GetEvNum_Raw() == 0) break;
00286 info_msg.Form("Run %d - ev. %d (%u ev. tot)",
00287 fndrun->GetCurOnlineRunNmber(),
00288 fndrun->GetEvNum_Raw(),
00289 fCurMan->GetCurrentEvent());
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301 FlashTextMessage("Writing info (GUI)",info_msg.Data());
00302
00303 break;
00304 case G2H_INFO_RESET_GTS:
00305 FlashTextMessage("...resetting GTS histograms...");
00306 break;
00307 case G2H_INFO_RESET_TOF:
00308 FlashTextMessage("...resetting TOF histograms...");
00309 break;
00310 case G2H_INFO_RESET_SIL:
00311 FlashTextMessage("...resetting SIL histograms...");
00312 break;
00313 case G2H_INFO_RESET_LMD:
00314 FlashTextMessage("...resetting TOF histograms...");
00315 break;
00316 case G2H_INFO_RESET_STB:
00317 FlashTextMessage("...resetting STB histograms...");
00318 break;
00319 default:
00320 WriteTextMessage("ERROR (maybe a bug!)");
00321 Error("ReceiveRealTimeInfo","Received information not accepted.");
00322 return;
00323 }
00324
00325
00326
00327
00328 if(gClient) gClient->SetEditDisabled(kFALSE);
00329 return;
00330 }