// dialog to allow user to change detector
// parameters
// 29-12-2001 M. Pallavicini created
//
#include "DetectorConfigDlg.hh"
#include "EusoApplication.hh"
#include "TGButton.h"
#include "Config.hh"
#include "TGLabel.h"
ClassImp(DetectorConfigDlg)
//______________________________________________________________________________
DetectorConfigDlg::DetectorConfigDlg(EusoApplication *app, const TGWindow* p,
const TGWindow *main) : TGTransientFrame( p, main, 580,350) {
theApp = app;
fFrame = new TGHorizontalFrame(this,60,20,kFixedWidth);
fOK = new TGTextButton(fFrame,"&OK",1);
fOK->Associate( this );
fCancel = new TGTextButton(fFrame,"&Cancel",2);
fCancel->Associate( this );
fL1 = new TGLayoutHints(kLHintsTop|kLHintsLeft|kLHintsExpandX,2,2,2,2);
fL2 = new TGLayoutHints(kLHintsBottom|kLHintsRight,2,2,5,1);
fFrame->AddFrame( fOK, fL1 );
fFrame->AddFrame( fCancel, fL1 );
fFrame->Resize(150,fOK->GetDefaultHeight());
AddFrame( fFrame, fL2 );
fTab = new TGTab( this, 480, 350 );
fL3 = new TGLayoutHints(kLHintsTop|kLHintsLeft,5,5,5,5);
// TAB Standard
TGCompositeFrame *f = fTab->AddTab("Standard");
fL3 = new TGLayoutHints(kLHintsTop|kLHintsLeft,2,2,2,2);
fStandard = new TGCompositeFrame(f,60,20,kVerticalFrame);
fStandardListBox = new TGComboBox(fStandard,88);
fStandard->AddFrame( new TGLabel(f,"Standard Configurations"));
fStandard->AddFrame(fStandardListBox,fL2);
int i=1;
map< string, ConfigFileParser* >::const_iterator it;
const map< string, ConfigFileParser* > &m = Config::Get()->GetStandardConfigMap();
for ( it = m.begin(); it != m.end(); it++ ) {
const string &n = it->first;
fStandardListBox->AddEntry( n.c_str(), i++);
}
fStandardListBox->SetWidth( 70 );
f->AddFrame(fStandard,fL3);
// TAB Environment
f = fTab->AddTab("Environment");
fEnvironment = new TGCompositeFrame(f,450,200,kVerticalFrame);
fL6 = new TGLayoutHints(kLHintsTop|kLHintsLeft,4,4,4,4);
fNightGlow = new TGGroupFrame(f,"Night Glow",kVerticalFrame);
fChkNG = new TGCheckButton(fNightGlow,"Add Night Glow",3);
fChkNG->Associate( this );
fNightGlow->AddFrame(fChkNG,fL6);
fNightGlow->AddFrame( new TGLabel(fNightGlow,new TGHotString("Rate (GHz/pixel)")),fL6);
double ngr = Config::Get()->GetCF("Electronics","Photomultiplier")->GetNum("NightGlowRate");
fRateNG = new TGNumberEntry(fNightGlow,ngr,6);
fNightGlow->AddFrame(fRateNG,fL6);
fNightGlow->Resize( fNightGlow->GetDefaultSize() );
fEnvironment->AddFrame(fNightGlow,fL6);
fEnvironment->AddFrame(fChkSIG = new TGCheckButton(fEnvironment,"EAS Photons",4),fL6);
if ( Config::Get()->GetCF("Electronics","Photomultiplier")->GetNum("DoNightGlow")) {
fChkNG->SetState(kButtonDown);
fRateNG->SetState(kTRUE);
} else {
fChkNG->SetState(kButtonUp);
fRateNG->SetState(kFALSE);
}
f->AddFrame(fEnvironment,fL3);
// TAB Optics
f = fTab->AddTab("Optics");
fOptics = new TGCompositeFrame(f,60,20,kVerticalFrame);
f->AddFrame(fOptics,fL3);
// TAB optical adaptors
f = fTab->AddTab("Adaptors");
fAdaptors = new TGCompositeFrame(f,60,20,kVerticalFrame);
f->AddFrame(fAdaptors,fL3);
// TAB photo-detectors
f = fTab->AddTab("Pmts");
fPmts = new TGCompositeFrame(f,60,20,kVerticalFrame);
f->AddFrame(fPmts,fL3);
// TAB electronics
f = fTab->AddTab("Electronics");
fEle = new TGCompositeFrame(f,60,20,kVerticalFrame);
f->AddFrame(fEle,fL3);
// TAB trigger
f = fTab->AddTab("Trigger");
fTrigg = new TGCompositeFrame(f,60,20,kVerticalFrame);
f->AddFrame(fTrigg,fL3);
fL5 = new TGLayoutHints(kLHintsBottom|kLHintsExpandX|kLHintsExpandY,2,2,5,1);
AddFrame( fTab, fL5 );
MapSubwindows();
Resize( 400,300 );
Window_t wd;
int ax,ay;
gVirtualX->TranslateCoordinates( main->GetId(), GetParent()->GetId(),
(((TGFrame*)main)->GetWidth()-500)>>1,
(((TGFrame*)main)->GetWidth()-350)>>1, ax, ay, wd );
Move(ax,ay);
SetWindowName("Euso Detector Parameters");
MapWindow();
}
DetectorConfigDlg::~DetectorConfigDlg() {
theApp->SetLock( false );
delete fL1;
delete fL2;
delete fL3;
//delete fL4;
delete fL5;
delete fL6;
delete fOK;
delete fCancel;
delete fChkNG;
delete fRateNG;
delete fNightGlow;
delete fTab;
delete fFrame;
delete fStandard;
delete fEnvironment;
delete fOptics;
delete fAdaptors;
delete fPmts;
delete fEle;
delete fTrigg;
}
void
DetectorConfigDlg::CloseWindow() {
delete this;
}
Bool_t
DetectorConfigDlg::ProcessMessage( Long_t msg, Long_t p1, Long_t p2 ) {
switch (GET_MSG(msg ) ) {
case kC_COMMAND:
switch (GET_SUBMSG(msg)) {
case kCM_BUTTON:
switch(p1) {
case 1: // OK button pressed
RetrieveData();
delete this;
break;
case 2: // cancel button pressed
delete this;
break;
default:
break;
}
break;
case kCM_CHECKBUTTON: // check buttons in all tabs
switch(p1) {
case 3: // check night glow pressed
if ( fChkNG->GetState() == kButtonDown )
fRateNG->SetState(kTRUE);
else
fRateNG->SetState(kFALSE);
break;
}
default:
break;
}
break;
default:
break;
}
return kTRUE;
}
void
DetectorConfigDlg::RetrieveData() {
// TAB General:
ConfigFileParser *cf = Config::Get()->GetCF("Electronics","MacroCell");
if ( fChkNG->GetState() == kButtonDown ) {
cf->ReplaceNum("DoNightGlow",1);
cf->ReplaceNum("NightGlowRate",fRateNG->GetNumber());
} else {
cf->ReplaceNum("DoNightGlow",0);
}
}