The following commit has been merged in the master branch:
commit 9fc26466abff9be8a04076c0fee5bea47651785b
Author: andrei zavada <[email protected]>
Date:   Thu Oct 18 02:47:23 2012 +0300

    complete migration of ED settings to SUIVarCollection

diff --git a/data/main.glade b/data/main.glade
index 2324b22..ccc085b 100644
--- a/data/main.glade
+++ b/data/main.glade
@@ -6224,7 +6224,7 @@ EEG microcontinuity algorithm. Read more &lt;a 
href="http://johnhommer.com/acade
                                 <property name="shadow_type">none</property>
                                 <property 
name="primary_icon_activatable">False</property>
                                 <property 
name="secondary_icon_activatable">False</property>
-                                <property name="digits">2</property>
+                                <property name="digits">3</property>
                                 <property name="numeric">True</property>
                               </object>
                               <packing>
@@ -6246,7 +6246,7 @@ EEG microcontinuity algorithm. Read more &lt;a 
href="http://johnhommer.com/acade
                                 <property name="shadow_type">none</property>
                                 <property 
name="primary_icon_activatable">False</property>
                                 <property 
name="secondary_icon_activatable">False</property>
-                                <property name="digits">2</property>
+                                <property name="digits">3</property>
                                 <property name="numeric">True</property>
                               </object>
                               <packing>
@@ -6329,7 +6329,7 @@ EEG microcontinuity algorithm. Read more &lt;a 
href="http://johnhommer.com/acade
                                 <property name="shadow_type">none</property>
                                 <property 
name="primary_icon_activatable">False</property>
                                 <property 
name="secondary_icon_activatable">False</property>
-                                <property name="digits">2</property>
+                                <property name="digits">3</property>
                                 <property name="numeric">True</property>
                               </object>
                               <packing>
@@ -6686,6 +6686,12 @@ EEG microcontinuity algorithm. Read more &lt;a 
href="http://johnhommer.com/acade
                             <child>
                               <placeholder/>
                             </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
                           </object>
                         </child>
                         <child>
diff --git a/src/common/libcommon.cc b/src/common/libcommon.cc
index 3a15b65..3f2ca43 100644
--- a/src/common/libcommon.cc
+++ b/src/common/libcommon.cc
@@ -80,12 +80,12 @@ tokens( const string& s_, const char* sep)
 
 void
 agh::str::
-decompose_double( double value, float *mantissa, int *exponent)
+decompose_double( double value, double *mantissa, int *exponent)
 {
        char buf[32];
        snprintf( buf, 31, "%e", value);
        *strchr( buf, 'e') = '|';
-       sscanf( buf, "%f|%d", mantissa, exponent);
+       sscanf( buf, "%lf|%d", mantissa, exponent);
 }
 
 
diff --git a/src/common/string.hh b/src/common/string.hh
index 6f16f9c..a5d58e1 100644
--- a/src/common/string.hh
+++ b/src/common/string.hh
@@ -47,7 +47,7 @@ join( const C& l, const char* sep)
 list<string> tokens( const string& s_, const char* sep);
 
 
-void decompose_double( double value, float *mantissa, int *exponent);
+void decompose_double( double value, double *mantissa, int *exponent);
 
 
 
diff --git a/src/ui/ed-settings_cb.cc b/src/ui/ed-settings_cb.cc
index bb68ac4..dfa1b25 100644
--- a/src/ui/ed-settings_cb.cc
+++ b/src/ui/ed-settings_cb.cc
@@ -23,10 +23,7 @@ using namespace aghui;
 
 extern "C"
 void
-tDesign_switch_page_cb( GtkNotebook     *notebook,
-                       gpointer         unused,
-                       guint            page_num,
-                       gpointer         userdata)
+tDesign_switch_page_cb( GtkNotebook*, gpointer, guint page_num, gpointer 
userdata)
 {
        using namespace sigfile;
        auto& ED = *(SExpDesignUI*)userdata;
@@ -35,7 +32,7 @@ tDesign_switch_page_cb( GtkNotebook     *notebook,
        if ( page_num == 0 ) {  // switching back from settings tab
 
              // collect values from widgets
-               ED.W_V.down();
+               ED.W_V1.down();
 
                // Profile tab
 
@@ -84,7 +81,7 @@ tDesign_switch_page_cb( GtkNotebook     *notebook,
                ED.pagesize_item = ED.figure_pagesize_item();
                ED.binsize_item = ED.figure_binsize_item();
 
-               ED.W_V.up();
+               ED.W_V1.up();
 
                // colours are served specially elsewhere
        }
@@ -101,30 +98,12 @@ tDesign_switch_page_cb( GtkNotebook     *notebook,
 
 
 inline namespace {
-void
-__widgets_to_tunables( SExpDesignUI& ED)
-{
-       using namespace agh::ach;
-       // don't mess with classed enums!
-       for ( size_t t = 0; t < (size_t)TTunable::_basic_tunables; ++t ) {
-               ED.ED->tunables0 [t] = gtk_spin_button_get_value( 
ED.eTunable[t][0]) / stock[t].display_scale_factor;
-               ED.ED->tlo       [t] = gtk_spin_button_get_value( 
ED.eTunable[t][1]) / stock[t].display_scale_factor;
-               ED.ED->thi       [t] = gtk_spin_button_get_value( 
ED.eTunable[t][2]) / stock[t].display_scale_factor;
-               ED.ED->tstep     [t] = gtk_spin_button_get_value( 
ED.eTunable[t][3]) / stock[t].display_scale_factor;
-       }
-}
-
 
 void
-__tunables_to_widgets( SExpDesignUI& ED)
+__adjust_adjustments( SExpDesignUI& ED)
 {
        using namespace agh::ach;
        for ( size_t t = 0; t < (size_t)TTunable::_basic_tunables; ++t ) {
-               // gtk_spin_button_set_value( ED.eTunable[t][(size_t)TTIdx::val 
],      STunableSet::stock[t].display_scale_factor * ED.ED->tunables0.value[t]);
-               // gtk_spin_button_set_value( ED.eTunable[t][(size_t)TTIdx::min 
],      STunableSet::stock[t].display_scale_factor * ED.ED->tunables0.lo   [t]);
-               // gtk_spin_button_set_value( ED.eTunable[t][(size_t)TTIdx::max 
],      STunableSet::stock[t].display_scale_factor * ED.ED->tunables0.hi   [t]);
-               // gtk_spin_button_set_value( 
ED.eTunable[t][(size_t)TTIdx::step],      
STunableSet::stock[t].display_scale_factor * ED.ED->tunables0.step [t]);
-
                gtk_adjustment_configure( ED.jTunable[t][0],
                                          stock[t].display_scale_factor * 
ED.ED->tunables0[t],
                                          stock[t].display_scale_factor * 
ED.ED->tlo[t],
@@ -152,77 +131,62 @@ __tunables_to_widgets( SExpDesignUI& ED)
        }
 }
 
+void
+__adjust_tunables_up( SExpDesignUI& ED)
+{
+       using namespace agh::ach;
+       for ( size_t t = 0; t < TTunable::_basic_tunables; ++t ) {
+               ED.ED->tunables0 [t] *= stock[t].display_scale_factor;
+               ED.ED->tlo       [t] *= stock[t].display_scale_factor;
+               ED.ED->thi       [t] *= stock[t].display_scale_factor;
+               ED.ED->tstep     [t] *= stock[t].display_scale_factor;
+       }
+}
+
+void
+__adjust_tunables_down( SExpDesignUI& ED)
+{
+       using namespace agh::ach;
+       for ( size_t t = 0; t < TTunable::_basic_tunables; ++t ) {
+               ED.ED->tunables0 [t] /= stock[t].display_scale_factor;
+               ED.ED->tlo       [t] /= stock[t].display_scale_factor;
+               ED.ED->thi       [t] /= stock[t].display_scale_factor;
+               ED.ED->tstep     [t] /= stock[t].display_scale_factor;
+       }
+}
+
 } // inline namespace
 
 extern "C"
 void
-tSimulations_switch_page_cb( GtkNotebook     *notebook,
-                            gpointer         page,
-                            guint            page_num,
-                            gpointer         userdata)
+tSimulations_switch_page_cb( GtkNotebook*, gpointer, guint page_num, gpointer 
userdata)
 {
        auto& ED = *(SExpDesignUI*)userdata;
 
        if ( page_num == 1 ) {  // switching to display parameters tab
-             // Controlling parameters frame
-               gtk_spin_button_set_value( ED.eCtlParamAnnlNTries,      
ED.ED->ctl_params0.siman_params.n_tries);
-               gtk_spin_button_set_value( ED.eCtlParamAnnlItersFixedT, 
ED.ED->ctl_params0.siman_params.iters_fixed_T);
-               gtk_spin_button_set_value( ED.eCtlParamAnnlStepSize,    
ED.ED->ctl_params0.siman_params.step_size);
-               gtk_spin_button_set_value( ED.eCtlParamAnnlBoltzmannk,  
ED.ED->ctl_params0.siman_params.k);
-               gtk_spin_button_set_value( ED.eCtlParamAnnlDampingMu,   
ED.ED->ctl_params0.siman_params.mu_t);
-               float mantissa;
-               int exponent;
-               agh::str::decompose_double( 
ED.ED->ctl_params0.siman_params.t_min, &mantissa, &exponent);
-               gtk_spin_button_set_value( ED.eCtlParamAnnlTMinMantissa,        
mantissa);
-               gtk_spin_button_set_value( ED.eCtlParamAnnlTMinExponent,        
exponent);
-               agh::str::decompose_double( 
ED.ED->ctl_params0.siman_params.t_initial, &mantissa, &exponent);
-               gtk_spin_button_set_value( ED.eCtlParamAnnlTInitialMantissa,    
mantissa);
-               gtk_spin_button_set_value( ED.eCtlParamAnnlTInitialExponent,    
exponent);
-
-             // Achermann parameters
-               gtk_toggle_button_set_active( 
(GtkToggleButton*)ED.eCtlParamDBAmendment1, !ED.ED->ctl_params0.DBAmendment1); 
// force emission of the toggle signal
-               gtk_toggle_button_set_active( 
(GtkToggleButton*)ED.eCtlParamDBAmendment2, !ED.ED->ctl_params0.DBAmendment2);
-               gtk_toggle_button_set_active( 
(GtkToggleButton*)ED.eCtlParamAZAmendment1, !ED.ED->ctl_params0.AZAmendment1);
-               gtk_toggle_button_set_active( 
(GtkToggleButton*)ED.eCtlParamAZAmendment2, !ED.ED->ctl_params0.AZAmendment2);
-
-               gtk_toggle_button_set_active( 
(GtkToggleButton*)ED.eCtlParamDBAmendment1, ED.ED->ctl_params0.DBAmendment1);
-               gtk_toggle_button_set_active( 
(GtkToggleButton*)ED.eCtlParamDBAmendment2, ED.ED->ctl_params0.DBAmendment2);
-               gtk_toggle_button_set_active( 
(GtkToggleButton*)ED.eCtlParamAZAmendment1, ED.ED->ctl_params0.AZAmendment1);
-               gtk_toggle_button_set_active( 
(GtkToggleButton*)ED.eCtlParamAZAmendment2, ED.ED->ctl_params0.AZAmendment2);
-               gtk_spin_button_set_value( ED.eCtlParamNSWAPpBeforeSimStart, 
ED.ED->ctl_params0.swa_laden_pages_before_SWA_0);
-               gtk_spin_button_set_value( ED.eCtlParamReqScoredPercent, 
ED.ED->ctl_params0.req_percent_scored);
-
-             // Unconventional scores frame
-               gtk_toggle_button_set_active( 
(GtkToggleButton*)ED.eCtlParamScoreUnscoredAsWake,
-                                             
ED.ED->ctl_params0.ScoreUnscoredAsWake);
-
-             // Tunables tab
-               __tunables_to_widgets( ED);
+               agh::str::decompose_double(
+                       ED.ED->ctl_params0.siman_params.t_min,
+                       &ED.ctl_params0_siman_params_t_min_mantissa,
+                       &ED.ctl_params0_siman_params_t_min_exponent);
+               agh::str::decompose_double(
+                       ED.ED->ctl_params0.siman_params.t_initial,
+                       &ED.ctl_params0_siman_params_t_initial_mantissa,
+                       &ED.ctl_params0_siman_params_t_initial_exponent);
+               __adjust_adjustments( ED);
+               __adjust_tunables_up( ED);
+               ED.W_Vtunables.up();
+               ED.W_V2.up();
 
        } else {
-             // Controlling parameters frame
-               ED.ED->ctl_params0.siman_params.n_tries       = 
gtk_spin_button_get_value( ED.eCtlParamAnnlNTries);
-               ED.ED->ctl_params0.siman_params.iters_fixed_T = 
gtk_spin_button_get_value( ED.eCtlParamAnnlItersFixedT);
-               ED.ED->ctl_params0.siman_params.step_size     = 
gtk_spin_button_get_value( ED.eCtlParamAnnlStepSize);
-               ED.ED->ctl_params0.siman_params.k             = 
gtk_spin_button_get_value( ED.eCtlParamAnnlBoltzmannk);
-               ED.ED->ctl_params0.siman_params.mu_t          = 
gtk_spin_button_get_value( ED.eCtlParamAnnlDampingMu);
-               ED.ED->ctl_params0.siman_params.t_initial     = 
gtk_spin_button_get_value( ED.eCtlParamAnnlTInitialMantissa)
-                       * pow(10, gtk_spin_button_get_value( 
ED.eCtlParamAnnlTInitialExponent));
-               ED.ED->ctl_params0.siman_params.t_min        = 
gtk_spin_button_get_value( ED.eCtlParamAnnlTMinMantissa)
-                       * pow(10, gtk_spin_button_get_value( 
ED.eCtlParamAnnlTMinExponent));
-             // Achermann parameters
-               ED.ED->ctl_params0.DBAmendment1 = gtk_toggle_button_get_active( 
(GtkToggleButton*)ED.eCtlParamDBAmendment1);
-               ED.ED->ctl_params0.DBAmendment2 = gtk_toggle_button_get_active( 
(GtkToggleButton*)ED.eCtlParamDBAmendment2);
-               ED.ED->ctl_params0.AZAmendment1 = gtk_toggle_button_get_active( 
(GtkToggleButton*)ED.eCtlParamAZAmendment1);
-               ED.ED->ctl_params0.AZAmendment2 = gtk_toggle_button_get_active( 
(GtkToggleButton*)ED.eCtlParamAZAmendment2);
-               ED.ED->ctl_params0.swa_laden_pages_before_SWA_0 = 
gtk_spin_button_get_value( ED.eCtlParamNSWAPpBeforeSimStart);
-               ED.ED->ctl_params0.req_percent_scored           = 
gtk_spin_button_get_value( ED.eCtlParamReqScoredPercent);
-
-             // Unconventional scores frame
-               ED.ED->ctl_params0.ScoreUnscoredAsWake = 
gtk_toggle_button_get_active( 
(GtkToggleButton*)ED.eCtlParamScoreUnscoredAsWake);
-
-             // Tunables tab
-               __widgets_to_tunables( ED);
+               ED.W_V2.down();
+               ED.W_Vtunables.down();
+               __adjust_tunables_down( ED);
+               ED.ED->ctl_params0.siman_params.t_min =
+                       ED.ctl_params0_siman_params_t_min_mantissa
+                       * pow(10, ED.ctl_params0_siman_params_t_min_exponent);
+               ED.ED->ctl_params0.siman_params.t_initial =
+                       ED.ctl_params0_siman_params_t_initial_mantissa
+                       * pow(10, 
ED.ctl_params0_siman_params_t_initial_exponent);
 
              // for ctlparam changes to take effect on virgin modruns
                ED.populate_2();
@@ -232,29 +196,19 @@ tSimulations_switch_page_cb( GtkNotebook     *notebook,
 
 
 
-
-
-       // // possibly for some live validation; unused for now
-       // void eCtlParamAnnlNTries_value_changed_cb( GtkSpinButton *e, 
gpointer u)     { }
-       // void eCtlParamAnnlItersFixedT_value_changed_cb( GtkSpinButton *e, 
gpointer u)        { }
-       // void eCtlParamAnnlStepSize_value_changed_cb( GtkSpinButton *e, 
gpointer u)   { }
-       // void eCtlParamAnnlBoltzmannk_value_changed_cb( GtkSpinButton *e, 
gpointer u) { }
-       // void eCtlParamAnnlTInitial_value_changed_cb( GtkSpinButton *e, 
gpointer u)   { }
-       // void eCtlParamAnnlDampingMu_value_changed_cb( GtkSpinButton *e, 
gpointer u)  { }
-       // void eCtlParamAnnlTMinMantissa_value_changed_cb( GtkSpinButton *e, 
gpointer u)       { }
-       // void eCtlParamAnnlTMinExponent_value_changed_cb( GtkSpinButton *e, 
gpointer u)       { }
-       // void eCtlParamScoreMVTAs_toggled_cb( GtkToggleButton *e, gpointer u) 
        { }
-       // void eCtlParamScoreUnscoredAs_toggled_cb( GtkToggleButton *e, 
gpointer u)    { }
-
-
-
 extern "C"
 void
-bSimParamRevertTunables_clicked_cb( GtkButton *button, gpointer userdata)
+bSimParamRevertTunables_clicked_cb( GtkButton*, gpointer userdata)
 {
        auto& ED = *(SExpDesignUI*)userdata;
+
        ED.ED->tunables0.set_defaults();
-       __tunables_to_widgets( ED);
+       ED.ED->tlo.set_defaults();
+       ED.ED->thi.set_defaults();
+       ED.ED->tstep.set_defaults();
+
+       __adjust_tunables_up( ED);
+       ED.W_Vtunables.up();
 }
 
 
diff --git a/src/ui/ed.cc b/src/ui/ed.cc
index 2fbe498..e56e3be 100644
--- a/src/ui/ed.cc
+++ b/src/ui/ed.cc
@@ -190,38 +190,63 @@ SExpDesignUI (aghui::SSessionChooser *parent,
        nodestroy_by_cb = false;
 
        // bind fields to widgets
-       W_V.reg( eUltradianCycleDetectionAccuracy, &uc_accuracy_factor);
-       W_V.reg( eArtifDampenWindowType, (int*)&ED->af_dampen_window_type);
-       W_V.reg( eArtifDampenFactor, &ED->af_dampen_factor);
-       W_V.reg( eFFTParamsPageSize, &pagesize_item);
-       W_V.reg( eFFTParamsBinSize, &binsize_item);
-       W_V.reg( eFFTParamsWindowType, (int*)&ED->fft_params.welch_window_type);
+       // tab 1
+       W_V1.reg( eUltradianCycleDetectionAccuracy, &uc_accuracy_factor);
+       W_V1.reg( eArtifDampenWindowType, (int*)&ED->af_dampen_window_type);
+       W_V1.reg( eArtifDampenFactor, &ED->af_dampen_factor);
+       W_V1.reg( eFFTParamsPageSize, &pagesize_item);
+       W_V1.reg( eFFTParamsBinSize, &binsize_item);
+       W_V1.reg( eFFTParamsWindowType, 
(int*)&ED->fft_params.welch_window_type);
        for ( size_t i = 0; i < sigfile::SPage::TScore::_total; ++i )
-               W_V.reg( eScoreCode[i], &ext_score_codes[i]);
-       W_V.reg( eMCParamIIRBackpolate, &ED->mc_params.iir_backpolate);
-       W_V.reg( eMCParamMCGain, &ED->mc_params.mc_gain);
-       W_V.reg( eMCParamBandWidth, &ED->mc_params.bandwidth);
+               W_V1.reg( eScoreCode[i], &ext_score_codes[i]);
+       W_V1.reg( eMCParamIIRBackpolate, &ED->mc_params.iir_backpolate);
+       W_V1.reg( eMCParamMCGain, &ED->mc_params.mc_gain);
+       W_V1.reg( eMCParamBandWidth, &ED->mc_params.bandwidth);
        for ( size_t i = 0; i < sigfile::TBand::_total; ++i ) {
-               W_V.reg( eBand[i][0], &freq_bands[i][0]);
-               W_V.reg( eBand[i][1], &freq_bands[i][1]);
+               W_V1.reg( eBand[i][0], &freq_bands[i][0]);
+               W_V1.reg( eBand[i][1], &freq_bands[i][1]);
        }
-       W_V.reg( eDAMsmtPPH, (int*)&timeline_pph);
-       W_V.reg( eDAMsmtTLHeight, (int*)&timeline_height);
-       W_V.reg( eDAPageHeight, (int*)&SScoringFacility::IntersignalSpace);
-       W_V.reg( eDAHypnogramHeight, (int*)&SScoringFacility::HypnogramHeight);
-       W_V.reg( eDAEMGHeight, (int*)&SScoringFacility::EMGProfileHeight);
-       W_V.reg( eBrowseCommand, &browse_command);
+       W_V1.reg( eDAMsmtPPH, (int*)&timeline_pph);
+       W_V1.reg( eDAMsmtTLHeight, (int*)&timeline_height);
+       W_V1.reg( eDAPageHeight, (int*)&SScoringFacility::IntersignalSpace);
+       W_V1.reg( eDAHypnogramHeight, (int*)&SScoringFacility::HypnogramHeight);
+       W_V1.reg( eDAEMGHeight, (int*)&SScoringFacility::EMGProfileHeight);
+       W_V1.reg( eBrowseCommand, &browse_command);
 
        // set _saved, too
        fft_params_welch_window_type_saved      = 
ED->fft_params.welch_window_type;
        af_dampen_window_type_saved             = ED->af_dampen_window_type;
        af_dampen_factor_saved                  = ED->af_dampen_factor;
        mc_params_saved                         = ED->mc_params;
-
-       pagesize_item_saved = pagesize_item =
-               figure_pagesize_item();
-       binsize_item_saved = binsize_item =
-               figure_binsize_item();
+       pagesize_item_saved = pagesize_item     = figure_pagesize_item();
+       binsize_item_saved = binsize_item       = figure_binsize_item();
+
+       // tab 2
+       W_V2.reg( eCtlParamAnnlNTries,          
&ED->ctl_params0.siman_params.n_tries);
+       W_V2.reg( eCtlParamAnnlItersFixedT,     
&ED->ctl_params0.siman_params.iters_fixed_T);
+       W_V2.reg( eCtlParamAnnlStepSize,        
&ED->ctl_params0.siman_params.step_size);
+       W_V2.reg( eCtlParamAnnlBoltzmannk,      
&ED->ctl_params0.siman_params.k);
+       W_V2.reg( eCtlParamAnnlDampingMu,       
&ED->ctl_params0.siman_params.mu_t);
+       W_V2.reg( eCtlParamAnnlTMinMantissa,    
&ctl_params0_siman_params_t_min_mantissa);
+       W_V2.reg( eCtlParamAnnlTMinExponent,    
&ctl_params0_siman_params_t_min_exponent);
+       W_V2.reg( 
eCtlParamAnnlTInitialMantissa,&ctl_params0_siman_params_t_initial_mantissa);
+       W_V2.reg( 
eCtlParamAnnlTInitialExponent,&ctl_params0_siman_params_t_initial_exponent);
+
+       W_V2.reg( eCtlParamDBAmendment1, &ED->ctl_params0.DBAmendment1);
+       W_V2.reg( eCtlParamDBAmendment2, &ED->ctl_params0.DBAmendment2);
+       W_V2.reg( eCtlParamAZAmendment1, &ED->ctl_params0.AZAmendment1);
+       W_V2.reg( eCtlParamAZAmendment2, &ED->ctl_params0.AZAmendment2);
+       W_V2.reg( eCtlParamNSWAPpBeforeSimStart, 
(int*)&ED->ctl_params0.swa_laden_pages_before_SWA_0);
+       W_V2.reg( eCtlParamReqScoredPercent, 
&ED->ctl_params0.req_percent_scored);
+       W_V2.reg( eCtlParamScoreUnscoredAsWake, 
&ED->ctl_params0.ScoreUnscoredAsWake);
+
+       // tunables are isolated so they can be reset separately
+       for ( size_t t = 0; t < agh::ach::TTunable::_basic_tunables; ++t ) {
+               W_Vtunables.reg( eTunable[t][0], &ED->tunables0 [t]);
+               W_Vtunables.reg( eTunable[t][1], &ED->tlo       [t]);
+               W_Vtunables.reg( eTunable[t][2], &ED->thi       [t]);
+               W_Vtunables.reg( eTunable[t][3], &ED->tstep     [t]);
+       }
 
        populate( true);
 
diff --git a/src/ui/ed.hh b/src/ui/ed.hh
index b9e6e48..6d9130d 100644
--- a/src/ui/ed.hh
+++ b/src/ui/ed.hh
@@ -309,7 +309,12 @@ class SExpDesignUI
        sigfile::SMCParamSet
                mc_params_saved;
        SUIVarCollection
-               W_V;
+               W_V1,
+               W_V2, W_Vtunables;
+       double  ctl_params0_siman_params_t_min_mantissa;
+       double  ctl_params0_siman_params_t_initial_mantissa;
+       int     ctl_params0_siman_params_t_min_exponent;
+       int     ctl_params0_siman_params_t_initial_exponent;
 
       // status bar bits
        void sb_main_progress_indicator( const char*, size_t n, size_t i);
diff --git a/src/ui/ed_cb.cc b/src/ui/ed_cb.cc
index d820e98..201f7ed 100644
--- a/src/ui/ed_cb.cc
+++ b/src/ui/ed_cb.cc
@@ -42,6 +42,11 @@ wMainWindow_delete_event_cb( GtkWidget*, GdkEvent*, gpointer 
userdata)
        if ( ED.nodestroy_by_cb )
                return TRUE;
 
+       // if the user closes the main window while in a settings tab,
+       // ensure we switch away from it and trigger any saving callbacks
+       gtk_notebook_set_current_page( ED.tDesign, 0);
+       gtk_notebook_set_current_page( ED.tSimulations, 0);
+
        iExpClose_activate_cb( NULL, userdata);
 
        return TRUE; // whatever

-- 
Sleep experiment manager

_______________________________________________
debian-med-commit mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit

Reply via email to