Universita' di GenovaINFN Sezione di Genova  
AIRWATCH / EUSO Genova

DetectorConfigDlg - source file

// dialog to allow user to change detector
// parameters
// 29-12-2001 M. Pallavicini created
//

#include "DetectorConfigDlg.hh"
#include "SimuApplication.hh"
#include "TGButton.h"
#include "Config.hh"
#include "TGLabel.h"

ClassImp(DetectorConfigDlg)

//______________________________________________________________________________
 DetectorConfigDlg::DetectorConfigDlg(SimuApplication *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);
    }
}



About Us | EUSO Official Website | Web pages created by Roberto Pesce and Alessandro Thea - Last Update Wed Nov 16 16:57:39 2005 Wed Nov 16 16:29:22 2005