00001 #include "DisplayOptions.h"
00002 #include "TG3DLine.h"
00003 #include "TGTextEntry.h"
00004 #include "TGButton.h"
00005 #include "TGNumberEntry.h"
00006 #include "TGLabel.h"
00007 #include <Conventions/Munits.h>
00008 #include <TCanvas.h>
00009 #include <TH1F.h>
00010 #include <Midad/Gui/GuiTab.h>
00011 #include <stdlib.h>
00012 #include <sigc++/sigc++.h>
00013 #include "EVD.h"
00014
00015 ClassImp(DisplayOptions)
00016
00017 DisplayOptions::DisplayOptions(PageDisplay& pd, EVD& evd)
00018 : fChargeMax(50.)
00019 ,fChargeMin(0.)
00020 ,fAutoScaleCharge(true)
00021 ,fAutoScaleExtents(true)
00022 ,fDrawVS(false)
00023 {
00024 fChargeType=CalDigitType::kPE;
00025 fUserHistType=UserHistType::kTimeHist;
00026 fPageDisplay=&pd;
00027 fEVD=&evd;
00028 }
00029
00030 DisplayOptions::~DisplayOptions()
00031 {
00032 }
00033
00034 void DisplayOptions::OpenDialog(GuiMenu* , GuiMenu::GuiMenuList::iterator ){
00035
00036
00037 StoreValues();
00038
00039
00040
00041 FontStruct_t myfont = gClient->GetFontByName("-adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-iso8859-1");
00042 TGGC *myGC = new TGGC(TGLabel::GetDefaultGC());
00043 myGC->SetFont(gVirtualX->GetFontHandle(myfont));
00044
00045 TGLayoutHints * L1 = new TGLayoutHints(kLHintsTop |
00046 kLHintsLeft |
00047 kLHintsExpandX, 2, 2, 2, 2);
00048 TGLayoutHints * L2 = new TGLayoutHints(kLHintsBottom |
00049 kLHintsRight, 2, 2, 5, 1);
00050 TGLayoutHints * L3 = new TGLayoutHints(kLHintsTop |
00051 kLHintsLeft, 5, 5, 5, 5);
00052 TGLayoutHints * L4 = new TGLayoutHints(kLHintsCenterY |
00053 kLHintsLeft, 2, 2, 2, 2);
00054 TGLayoutHints *L5 = new TGLayoutHints(kLHintsBottom |
00055 kLHintsExpandX |
00056 kLHintsExpandY, 2, 2, 5, 1);
00057
00058
00059
00060 GuiMainWindow* mw = fPageDisplay->GetTab()->GetMainWindow();
00061 fMain = new TGTransientFrame(gClient->GetRoot() ,mw, 500, 300);
00062
00063 TGHorizontalFrame * Frame1 = new TGHorizontalFrame(fMain, 60, 20, kFixedWidth);
00064 TGTextButton * OkButton = new TGTextButton(Frame1, "&Ok", 1);
00065
00066 OkButton->Connect("Clicked()", "DisplayOptions", this, "OK()");
00067 TGTextButton * CancelButton = new TGTextButton(Frame1, "&Cancel", 2);
00068 CancelButton->Connect("Clicked()", "DisplayOptions", this, "Cancel()");
00069
00070 Frame1->AddFrame(OkButton, L1);
00071 Frame1->AddFrame(CancelButton, L1);
00072 Frame1->Resize(150, OkButton->GetDefaultHeight());
00073 fMain->AddFrame(Frame1, L2);
00074
00075 TGTab * Tab = new TGTab(fMain, 300, 300);
00076
00077
00078
00079 TGCompositeFrame * tf = Tab->AddTab("Charge Range");
00080
00081 TGCompositeFrame * F1 = new TGCompositeFrame(tf, 60,20, kVerticalFrame);
00082 TGCheckButton * Chk1 = new TGCheckButton(F1, "&AutoScale", 1);
00083 Chk1->SetDown(fAutoScaleCharge);
00084 Chk1->Connect("Clicked()", "DisplayOptions", this, "SetAutoScale()");
00085
00086 F1->AddFrame(Chk1, L3);
00087
00088 TGHorizontalFrame * F2 = new TGHorizontalFrame(F1, 200, 30);
00089 F1->AddFrame(F2, L4);
00090 fChargeMaxEntry = new TGNumberEntry(F2, fChargeMax, 12, 1,(TGNumberFormat::EStyle) 0);
00091 F2->AddFrame(fChargeMaxEntry, L4);
00092 TGLabel * ChargeMaxLabel = new TGLabel(F2,"Full Scale Charge", myGC->GetGC(), myfont);
00093
00094 F2->AddFrame(ChargeMaxLabel, L4);
00095
00096 TGHorizontalFrame * F3 = new TGHorizontalFrame(F1, 200, 30);
00097 F1->AddFrame(F3, L4);
00098 fChargeMinEntry = new TGNumberEntry(F3, fChargeMin, 12, 2,(TGNumberFormat::EStyle) 0);
00099 F3->AddFrame(fChargeMinEntry, L4);
00100 TGLabel * ChargeMinLabel = new TGLabel(F3,"Min. Charge", myGC->GetGC(), myfont);
00101 F3->AddFrame(ChargeMinLabel, L4);
00102 fChargeMaxEntry->SetState(!fAutoScaleCharge);
00103 fChargeMinEntry->SetState(!fAutoScaleCharge);
00104 tf->AddFrame(F1,L3);
00105
00106
00107 tf = Tab->AddTab("Charge Type");
00108
00109 TGCompositeFrame * F4 = new TGCompositeFrame(tf, 60,20, kVerticalFrame);
00110 fRad1 = new TGRadioButton(F4, "Raw", 10);
00111 fRad1->SetDown(fChargeType==CalDigitType::kNone);
00112
00113 fRad2 = new TGRadioButton(F4, "SigLin", 11);
00114 fRad2->SetDown(fChargeType==CalDigitType::kSigLin);
00115
00116 fRad3 = new TGRadioButton(F4, "SigCor", 12);
00117 fRad3->SetDown(fChargeType==CalDigitType::kSigCorr);
00118
00119 fRad4 = new TGRadioButton(F4, "PE", 13);
00120 fRad4->SetDown(fChargeType==CalDigitType::kPE);
00121
00122 F4->AddFrame(fRad1, L3);
00123 F4->AddFrame(fRad2, L3);
00124 F4->AddFrame(fRad3, L3);
00125 F4->AddFrame(fRad4, L3);
00126
00127 fRad1->Connect("Pressed()", "DisplayOptions", this, "ChangeChargeType()");
00128 fRad2->Connect("Pressed()", "DisplayOptions", this, "ChangeChargeType()");
00129 fRad3->Connect("Pressed()", "DisplayOptions", this, "ChangeChargeType()");
00130 fRad4->Connect("Pressed()", "DisplayOptions", this, "ChangeChargeType()");
00131
00132 tf->AddFrame(F4,L3);
00133
00134
00135
00136 tf = Tab->AddTab("Veto Shld");
00137 TGCompositeFrame * F5 = new TGCompositeFrame(tf, 60,20, kVerticalFrame);
00138 TGCheckButton * Chk2 = new TGCheckButton(F5, "&Draw Veto Shield Strips", 1);
00139 Chk2->SetDown(fDrawVS);
00140 Chk2->Connect("Clicked()", "DisplayOptions", this, "SetDrawVS()");
00141 F5->AddFrame(Chk2, L3);
00142 tf->AddFrame(F5,L3);
00143
00144
00145
00146 tf = Tab->AddTab("Z Extent");
00147 TGCompositeFrame * F6 = new TGCompositeFrame(tf, 60,20, kVerticalFrame);
00148 TGCheckButton * Chk3 = new TGCheckButton(F6, "&Auto Range", 1);
00149 Chk3->SetDown(fAutoScaleExtents);
00150 Chk3->Connect("Clicked()", "DisplayOptions", this, "SetAutoScaleExtents()");
00151
00152 F6->AddFrame(Chk3, L3);
00153 TGHorizontalFrame * F7 = new TGHorizontalFrame(F6, 200, 30);
00154 F6->AddFrame(F7, L4);
00155 fZMaxEntry = new TGNumberEntry(F7, fZMax, 12, 1,(TGNumberFormat::EStyle) 2);
00156 F7->AddFrame(fZMaxEntry, L4);
00157 TGLabel * ZMaxLabel = new TGLabel(F7,"Z Max (m)", myGC->GetGC(), myfont);
00158 fZMaxEntry->SetState(!fAutoScaleExtents);
00159 F7->AddFrame(ZMaxLabel, L4);
00160
00161 TGHorizontalFrame * F8 = new TGHorizontalFrame(F6, 200, 30);
00162 F6->AddFrame(F8, L4);
00163 fZMinEntry = new TGNumberEntry(F8, fZMin, 12, 2,(TGNumberFormat::EStyle) 2);
00164 F8->AddFrame(fZMinEntry, L4);
00165 TGLabel * ZMinLabel = new TGLabel(F8,"Z Min (m)", myGC->GetGC(), myfont);
00166 fZMinEntry->SetState(!fAutoScaleExtents);
00167 F8->AddFrame(ZMinLabel, L4);
00168 tf->AddFrame(F6,L3);
00169
00170
00171
00172 tf = Tab->AddTab("User Histogram");
00173
00174 TGCompositeFrame * F9 = new TGCompositeFrame(tf, 60,20, kVerticalFrame);
00175 fUserHistRad1 = new TGRadioButton(F9, "TimeHist", 20);
00176 fUserHistRad1->SetDown(fUserHistType==UserHistType::kTimeHist);
00177
00178 fUserHistRad2 = new TGRadioButton(F9, "Time vs Y", 21);
00179 fUserHistRad2->SetDown(fUserHistType==UserHistType::kTimevsY);
00180
00181 fUserHistRad3 = new TGRadioButton(F9, "Time vs Z", 22);
00182 fUserHistRad3->SetDown(fUserHistType==UserHistType::kTimevsZ);
00183
00184 fUserHistRad4 = new TGRadioButton(F9, "Alt Time Hist", 23);
00185 fUserHistRad4->SetDown(fUserHistType==UserHistType::kAltTimeHist);
00186
00187 F9->AddFrame(fUserHistRad1, L3);
00188 F9->AddFrame(fUserHistRad2, L3);
00189 F9->AddFrame(fUserHistRad3, L3);
00190 F9->AddFrame(fUserHistRad4, L3);
00191
00192 fUserHistRad1->Connect("Pressed()", "DisplayOptions", this, "ChangeUserHist()");
00193 fUserHistRad2->Connect("Pressed()", "DisplayOptions", this, "ChangeUserHist()");
00194 fUserHistRad3->Connect("Pressed()", "DisplayOptions", this, "ChangeUserHist()");
00195 fUserHistRad4->Connect("Pressed()", "DisplayOptions", this, "ChangeUserHist()");
00196
00197 tf->AddFrame(F9,L3);
00198
00199
00200
00201
00202 fMain->SetWindowName("Graphics Display Settings");
00203 fMain->AddFrame(Tab,L5);
00204 fMain->MapSubwindows();
00205 fMain->Resize(fMain->GetDefaultSize());
00206
00207
00208 Window_t wdum;
00209 int ax, ay;
00210 gVirtualX->TranslateCoordinates(gClient->GetRoot()->GetId(), fMain->GetParent()->GetId(),
00211 (Int_t)(((TGFrame *) gClient->GetRoot())->GetWidth() - fMain->GetWidth()) >> 1,
00212 (Int_t)(((TGFrame *) gClient->GetRoot())->GetHeight() - fMain->GetHeight()) >> 1,
00213 ax, ay, wdum);
00214 fMain->Move(ax, ay);
00215 fMain->MapWindow();
00216 }
00217
00218 void DisplayOptions::OK(){
00219 fChargeMax = fChargeMaxEntry->GetNumber();
00220 fChargeMin = fChargeMinEntry->GetNumber();
00221 fZMax = fZMaxEntry->GetNumber();
00222 fZMin = fZMinEntry->GetNumber();
00223 if (fZMax!=fOldZMax || fZMin!=fOldZMin || fOldAutoScaleExtents != fAutoScaleExtents)fEVD->FullZoom();
00224 fEVD->Update();
00225 fMain->SendCloseMessage();
00226 }
00227
00228 void DisplayOptions::Cancel(){
00229 RestoreValues();
00230 fMain->SendCloseMessage();
00231 }
00232
00233 void DisplayOptions::ChangeUserHist(Int_t id){
00234 if(id==-1){
00235 TGButton *btn = (TGButton *) gTQSender;
00236 id = btn->WidgetId();
00237 }
00238
00239 switch (id){
00240 case 20:
00241 if(fUserHistType!=UserHistType::kTimeHist){
00242 fUserHistRad2->SetState(kButtonUp);
00243 fUserHistRad3->SetState(kButtonUp);
00244 fUserHistRad4->SetState(kButtonUp);
00245 fUserHistType=UserHistType::kTimeHist;
00246 }
00247 break;
00248 case 21:
00249 if(fUserHistType!=UserHistType::kTimevsY){
00250 fUserHistRad1->SetState(kButtonUp);
00251 fUserHistRad3->SetState(kButtonUp);
00252 fUserHistRad4->SetState(kButtonUp);
00253 fUserHistType=UserHistType::kTimevsY;
00254 }
00255 break;
00256 case 22:
00257 if(fUserHistType!=UserHistType::kTimevsZ){
00258 fUserHistRad1->SetState(kButtonUp);
00259 fUserHistRad2->SetState(kButtonUp);
00260 fUserHistRad4->SetState(kButtonUp);
00261 fUserHistType=UserHistType::kTimevsZ;
00262 }
00263 break;
00264 case 23:
00265 if(fUserHistType!=UserHistType::kAltTimeHist){
00266 fUserHistRad1->SetState(kButtonUp);
00267 fUserHistRad2->SetState(kButtonUp);
00268 fUserHistRad3->SetState(kButtonUp);
00269 fUserHistType=UserHistType::kAltTimeHist;
00270 }
00271 break;
00272
00273 }
00274
00275 }
00276
00277 void DisplayOptions::ChangeChargeType(Int_t id){
00278 if(id==-1) {
00279 TGButton *btn = (TGButton *) gTQSender;
00280 id = btn->WidgetId();
00281 }
00282
00283 switch (id){
00284 case 10:
00285 if(fChargeType!=CalDigitType::kNone){
00286 fRad2->SetState(kButtonUp);
00287 fRad3->SetState(kButtonUp);
00288 fRad4->SetState(kButtonUp);
00289 fChargeType=CalDigitType::kNone;
00290 }
00291 break;
00292 case 11:
00293 if(fChargeType!=CalDigitType::kSigLin){
00294 fRad1->SetState(kButtonUp);
00295 fRad3->SetState(kButtonUp);
00296 fRad4->SetState(kButtonUp);
00297 fChargeType=CalDigitType::kSigLin;
00298 }
00299 break;
00300 case 12:
00301 if(!fChargeType!=CalDigitType::kSigCorr){
00302 fRad1->SetState(kButtonUp);
00303 fRad2->SetState(kButtonUp);
00304 fRad4->SetState(kButtonUp);
00305 fChargeType=CalDigitType::kSigCorr;
00306 }
00307 break;
00308 case 13:
00309 if(!fChargeType!=CalDigitType::kPE){
00310 fRad1->SetState(kButtonUp);
00311 fRad2->SetState(kButtonUp);
00312 fRad3->SetState(kButtonUp);
00313 fChargeType=CalDigitType::kPE;
00314 }
00315 break;
00316 }
00317 }
00318
00319
00320 void DisplayOptions::SetAutoScale(){
00321 fAutoScaleCharge= !fAutoScaleCharge;
00322 fChargeMaxEntry->SetState(!fAutoScaleCharge);
00323 fChargeMinEntry->SetState(!fAutoScaleCharge);
00324 }
00325
00326
00327 void DisplayOptions::SetAutoScaleExtents(){
00328 fAutoScaleExtents= !fAutoScaleExtents;
00329 fZMaxEntry->SetState(!fAutoScaleExtents);
00330 fZMinEntry->SetState(!fAutoScaleExtents);
00331 }
00332
00333 void DisplayOptions::SetDrawVS(){
00334 fDrawVS= !fDrawVS;
00335 }
00336
00337
00338 void DisplayOptions::StoreValues(){
00339 fOldChargeMax=fChargeMax;
00340 fOldChargeMin=fChargeMin;
00341 fOldZMax=fZMax;
00342 fOldZMin=fZMin;
00343 fOldAutoScaleCharge=fAutoScaleCharge;
00344 fOldChargeType=fChargeType;
00345 fOldDrawVS=fDrawVS;
00346 fOldAutoScaleExtents=fAutoScaleExtents;
00347 fOldUserHistType=fUserHistType;
00348 }
00349
00350 void DisplayOptions::RestoreValues(){
00351 fChargeMax=fOldChargeMax;
00352 fChargeMin=fOldChargeMin;
00353 fZMax=fOldZMax;
00354 fZMin=fOldZMin;
00355 fAutoScaleCharge=fOldAutoScaleCharge;
00356 fChargeType=fOldChargeType;
00357 fDrawVS=fOldDrawVS;
00358 fAutoScaleExtents=fOldAutoScaleExtents;
00359 fOldUserHistType=fUserHistType;
00360 }
00361
00362
00363 void DisplayOptions::CloseWindow()
00364 {
00365 delete fMain;
00366 }