#include <iostream>
#include <sstream>
#include <config/ConfigParser.h>
#include <config/IOConfig.h>
#include <config/GeneralConfig.h>
#include "Preferences.h"
#include "gtkutils.h"
#include <DAQ++/DAQmanager.h>
#include <daq/GenModule.h>
#include <data/Analysis.h>
Preferences::Preferences()
{
}
void
Preferences::user_init() {
//---------------------------------------------------------------------
// Set default values
//---------------------------------------------------------------------
ConfigParser *cfg = ConfigParser::theConfig();
SectionParser *sp = cfg->get_handler("IO");
if ( sp ) {
IOConfig *io = dynamic_cast<IOConfig *>(sp);
gtk_entry_set_text(GTK_ENTRY(get_widget("entryDataDirectory")),
io->get_output_path().c_str());
gtk_entry_set_text(GTK_ENTRY(get_widget("entryPrefix")),
io->get_prefix().c_str());
int2entry("entryRunNumber",io->get_run_number());
int2entry("entryFileSize",io->get_max_size());
gtk_toggle_button_set_active(
GTK_TOGGLE_BUTTON(get_widget("BtnCompress")),
io->get_compression()
? 1
: 0);
}
// Pedestals
GeneralConfig *gnrl = dynamic_cast<GeneralConfig *>(cfg->get_handler("general"));
gtk_spin_button_set_value( GTK_SPIN_BUTTON(get_widget("spinNped")),gnrl->get_ped_nevts() );
gtk_spin_button_set_value( GTK_SPIN_BUTTON(get_widget("spinMinSample")),gnrl->get_ped_min_sample() );
gtk_spin_button_set_value( GTK_SPIN_BUTTON(get_widget("spinPedPeriod")),gnrl->get_ped_period() );
if ( gnrl->get_ped_method()==GeneralConfig::fast ) {
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(get_widget("btnFastPedestals")),TRUE);
}
else {
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(get_widget("btnProperPedestals")),TRUE);
}
gtk_toggle_button_set_active(
GTK_TOGGLE_BUTTON(get_widget("btnUpdatePedestals")),
gnrl->get_ped_update()
);
// Corba
gtk_spin_button_set_value( GTK_SPIN_BUTTON(get_widget("spinCorbaPort")),gnrl->get_corba_port() );
if ( gnrl->get_corba_use_ip() ) {
gtk_toggle_button_set_active(
GTK_TOGGLE_BUTTON(get_widget("btnCorbaIP")),
TRUE
);
}
else {
gtk_toggle_button_set_active(
GTK_TOGGLE_BUTTON(get_widget("btnCorbaLinux")),
TRUE
);
}
// MOnitor
gtk_spin_button_set_value( GTK_SPIN_BUTTON(get_widget("spinMonitorBuffer")),gnrl->get_monitor_buffer() );
}
Preferences::~Preferences() {}
void
Preferences::auto_connect()
{
SET_CONNECT( on_OK );
SET_CONNECT( on_Apply );
SET_CONNECT( on_Cancel );
SET_CONNECT( on_Help );
}
void Preferences::on_Help(GtkWidget *w, Preferences *pr) {
int page = gtk_notebook_get_current_page( GTK_NOTEBOOK(pr->get_widget("notebookPreferences")) );
switch (page) {
case 0:
gtk_help_display("acquire-data");
break;
case 1:
gtk_help_display("general-config");
break;
}
}
void Preferences::on_Apply(GtkWidget *w, Preferences *pr) {
ConfigParser *cfg = ConfigParser::theConfig();
SectionParser *sp = cfg->get_handler("IO");
if ( sp ) {
IOConfig *io = dynamic_cast<IOConfig *>(sp);
io->set_output_path(
gtk_entry_get_text(GTK_ENTRY(
pr->get_widget("entryDataDirectory"))
)
);
io->set_prefix(
gtk_entry_get_text(GTK_ENTRY(
pr->get_widget("entryPrefix"))
)
);
io->set_run_number( pr->entry2int("entryRunNumber") );
io->set_max_size( pr->entry2int("entryFileSize"));
io->set_compression(
gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(
pr->get_widget("BtnCompress")
)
)
);
}
// Pedestals
GeneralConfig *gnrl = dynamic_cast<GeneralConfig *>(cfg->get_handler("general"));
gnrl->set_ped_nevts( (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(pr->get_widget("spinNped"))));
gnrl->set_ped_min_sample( (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(pr->get_widget("spinMinSample"))));
gnrl->set_ped_method(
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pr->get_widget("btnFastPedestals")))
? GeneralConfig::fast
: GeneralConfig::normal
);
gnrl->set_ped_update(
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pr->get_widget("btnUpdatePedestals")))
);
gnrl->set_ped_period( (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(pr->get_widget("spinPedPeriod"))));
DAQpp::RunManager *rm =
DAQpp::DAQmanager::theDAQmanager()->find_runmanager("main");
std::set<Observer *>::iterator ip;
for (ip=(*rm)()->Observers().begin();ip!=(*rm)()->Observers().end();++ip) {
GenModule *md = dynamic_cast<GenModule *>(*ip);
if (md) {
md->get_analysis()->DoPedestalUpdate(gnrl->get_ped_update());
}
}
// Corba
gnrl->set_corba_port( (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(pr->get_widget("spinCorbaPort"))) );
gnrl->set_corba_use_ip(
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pr->get_widget("btnCorbaIP")))
);
// Monitor
gnrl->set_monitor_buffer( (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(pr->get_widget("spinMonitorBuffer"))) );
}
void Preferences::on_OK(GtkWidget *w, Preferences *pr) {
on_Apply(w,pr);
on_Cancel(w,pr);
}
void Preferences::on_Cancel(GtkWidget *w, Preferences *pr) {
delete pr;
}