Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

DisplayOptions.cxx

Go to the documentation of this file.
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* /*menu*/, GuiMenu::GuiMenuList::iterator /*mit*/){
00035 
00036 
00037   StoreValues();
00038 
00039   // set up font and various layout hints
00040 
00041   FontStruct_t myfont = gClient->GetFontByName("-adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-iso8859-1");
00042   TGGC *myGC = new TGGC(TGLabel::GetDefaultGC());  // should be deleted to prevent leak
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    //fMain is the main dialog window, which is filled with tabs
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    //the first tab allows the user to select the charge range.
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    //tab 2:  charge type to display.
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    //tab 3:  draw veto shield strips
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   //tab 4:  Range Options
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    // tab 5: Set User Histogram 
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    // final massaging, positioning, and display
00201 
00202    fMain->SetWindowName("Graphics Display Settings");
00203    fMain->AddFrame(Tab,L5);
00204    fMain->MapSubwindows();
00205    fMain->Resize(fMain->GetDefaultSize());
00206 
00207    // position relative to the parent's window
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 }

Generated on Mon Feb 15 11:06:37 2010 for loon by  doxygen 1.3.9.1