The following commit has been merged in the master branch:
commit f4f213ae3685acd6606e34138be5c9f940cb0a53
Author: andrei zavada <[email protected]>
Date:   Sat Apr 13 16:39:19 2013 +0000

    WIP

diff --git a/src/common/subject_id.hh b/src/common/subject_id.hh
index 4827df5..5bfa7b9 100644
--- a/src/common/subject_id.hh
+++ b/src/common/subject_id.hh
@@ -44,8 +44,16 @@ struct SSubjectId {
                dob (dob_),
                gender (gender_)
                {}
+       SSubjectId (const SSubjectId& rv)
+               {
+                       id = rv.id;
+                       name = rv.name;
+                       dob = rv.dob;
+                       gender = rv.gender;
+               }
+
        SSubjectId (SSubjectId&& rv)
-               {
+               {
                        id.swap( rv.id);
                        name.swap( rv.name);
                        dob = rv.dob;
diff --git a/src/expdesign/primaries.cc b/src/expdesign/primaries.cc
index ba19774..cff10e8 100644
--- a/src/expdesign/primaries.cc
+++ b/src/expdesign/primaries.cc
@@ -292,7 +292,7 @@ enumerate_subjects() const
        list<string> recp;
        for ( auto &G : groups )
                for ( auto &J : G.second )
-                       recp.push_back( J.short_name);
+                       recp.push_back( J.id);
        return recp;
 }
 
diff --git a/src/expdesign/primaries.hh b/src/expdesign/primaries.hh
index d29387f..1c46a39 100644
--- a/src/expdesign/primaries.hh
+++ b/src/expdesign/primaries.hh
@@ -53,7 +53,13 @@ class CSubject : public SSubjectId {
 
        const string&     dir() const   { return _dir; }
 
-       CSubject (const CSubject&) = default;
+       CSubject (const CSubject& rv)
+             : agh::SSubjectId (rv),
+               _status (rv._status),
+               _id (rv._id),
+               _dir (rv._dir)
+               {}
+
        CSubject (const string& dir, sid_type id)
              : agh::SSubjectId (dir.substr( dir.rfind('/')+1)),
                _status (0),
diff --git a/src/expdesign/recording.cc b/src/expdesign/recording.cc
index aa8ac62..1fe7d29 100644
--- a/src/expdesign/recording.cc
+++ b/src/expdesign/recording.cc
@@ -104,7 +104,7 @@ CProfile (CSubject& J, const string& d, const 
sigfile::SChannel& h,
        _sim_start ((size_t)-1), _sim_end ((size_t)-1)
 {
        if ( not J.have_session(d) or J.measurements.at(d).size() == 0 )
-               throw invalid_argument (J.short_name + " has no recordings in 
session " + d);
+               throw invalid_argument (J.id + " has no recordings in session " 
+ d);
 
        auto& EE = J.measurements.at(d).episodes;
        for ( auto &E : EE )
@@ -130,7 +130,7 @@ CProfile (CSubject& J, const string& d, const 
sigfile::SChannel& h,
              // anchor zero page, get pagesize from edf^W CBinnedPower^W 
either goes
                time_t dima = F.start_time();
                printf( "CProfile::CProfile(): adding %s of [%s, %s, %s] %zu 
pages (%zu full, %zu in hypnogram) recorded %s",
-                       metrics::name(params.metric), F.id.c_str(), 
F.session(), F.episode(),
+                       metrics::name(params.metric), F.subject().id.c_str(), 
F.session(), F.episode(),
                        M.total_pages(), M.full_pages(), M.hypnogram().pages(), 
ctime( &dima));
 
                if ( pz - pa != (int)M.full_pages() ) {
@@ -185,7 +185,7 @@ CProfile (CRecording& M,
                pz = (size_t)difftime( M.F().end_time(), _0at) / _pagesize;
        time_t  dima = M.F().start_time();
        printf( "CProfile::CProfile(): adding single recording %s of [%s, %s, 
%s] %zu pages (%zu full, %zu in hypnogram) recorded %s",
-               metrics::name(params.metric), M.F().id.c_str(), 
M.F().session(), M.F().episode(),
+               metrics::name(params.metric), M.F().subject().id.c_str(), 
M.F().session(), M.F().episode(),
                M.total_pages(), M.full_pages(), M.hypnogram().pages(), ctime( 
&dima));
 
        if ( pz - pa != (int)M.full_pages() ) {
diff --git a/src/ui/mw/admit-one.cc b/src/ui/mw/admit-one.cc
index 9f597b5..cebab56 100644
--- a/src/ui/mw/admit-one.cc
+++ b/src/ui/mw/admit-one.cc
@@ -36,7 +36,7 @@ dnd_maybe_admit_one( const char* fname)
 
                snprintf_buf( "File: <i>%s</i>", fname);
                gtk_label_set_markup( lEdfImportCaption, __buf__);
-               snprintf_buf( "<b>%s</b> (%s)", (*Fp)().id.c_str(), 
(*Fp)().name.c_str());
+               snprintf_buf( "<b>%s</b> (%s)", (*Fp)().subject().id.c_str(), 
(*Fp)().subject().name.c_str());
                gtk_label_set_markup( lEdfImportSubject, __buf__);
 
        } catch ( exception& ex) {
@@ -55,7 +55,7 @@ dnd_maybe_admit_one( const char* fname)
        try {
                gtk_entry_set_text(
                        eEdfImportGroupEntry,
-                       ED->group_of( (*Fp)().id.c_str()));
+                       ED->group_of( (*Fp)().subject().id.c_str()));
                gtk_widget_set_sensitive( (GtkWidget*)eEdfImportGroup, FALSE);
        } catch (invalid_argument ex) {
                for ( auto &i : AghGG ) {
@@ -109,7 +109,7 @@ dnd_maybe_admit_one( const char* fname)
                dest_path = g_strdup_printf( "%s/%s/%s/%s",
                                             ED->session_dir().c_str(),
                                             selected_group,
-                                            (*Fp)().id.c_str(),
+                                            (*Fp)().subject().id.c_str(),
                                             selected_session);
                dest = g_strdup_printf( "%s/%s.edf",
                                        dest_path,
diff --git a/src/ui/mw/construct.cc b/src/ui/mw/construct.cc
index ef0f36b..4d9e0a6 100644
--- a/src/ui/mw/construct.cc
+++ b/src/ui/mw/construct.cc
@@ -581,16 +581,6 @@ SExpDesignUIWidgets ()
                          "changed", (GCallback)check_gtk_entry_nonempty_cb,
                          this);
 
-      // ------- wEdfImport
-       if ( !AGH_GBGETOBJ (GtkDialog,          wSubjectDetails) ||
-            !AGH_GBGETOBJ (GtkEntry,           eSubjectDetailsShortName) ||
-            !AGH_GBGETOBJ (GtkEntry,           eSubjectDetailsFullName) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSubjectDetailsAge) ||
-            !AGH_GBGETOBJ (GtkRadioButton,     eSubjectDetailsGenderMale) ||
-            !AGH_GBGETOBJ (GtkRadioButton,     eSubjectDetailsGenderFemale) ||
-            !AGH_GBGETOBJ (GtkEntry,           eSubjectDetailsComment) )
-               throw runtime_error ("Failed to construct widgets");
-
       // ------------- wBatchSetup
        if ( !AGH_GBGETOBJ (GtkDialog,          wBatchSetup) ||
             !AGH_GBGETOBJ (GtkEntry,           eBatchSetupSubjects) ||
@@ -690,7 +680,6 @@ aghui::SExpDesignUIWidgets::
        gtk_widget_destroy( (GtkWidget*)wEdfImport);
        gtk_widget_destroy( (GtkWidget*)wGlobalAnnotations);
        gtk_widget_destroy( (GtkWidget*)wGlobalFilters);
-       gtk_widget_destroy( (GtkWidget*)wSubjectDetails);
        gtk_widget_destroy( (GtkWidget*)wBatchSetup);
       // and models, etc
        g_object_unref( (GObject*)mEEGChannels);
diff --git a/src/ui/mw/mainmenu_cb.cc b/src/ui/mw/mainmenu_cb.cc
index 8c71a54..43a7860 100644
--- a/src/ui/mw/mainmenu_cb.cc
+++ b/src/ui/mw/mainmenu_cb.cc
@@ -176,7 +176,7 @@ iExpBasicSADetectUltradianCycles_activate_cb( GtkMenuItem*, 
gpointer userdata)
        {
                snprintf_buf(
                        "Detect ultradian cycle %s/%s/%s",
-                       ED.ED->group_of(J), J.short_name.c_str(), E.name());
+                       ED.ED->group_of(J), J.id.c_str(), E.name());
                ED.sb_main_progress_indicator( __buf__, n, i, 
TGtkRefreshMode::gtk);
                gtk_widget_queue_draw( (GtkWidget*)ED.cMeasurements);
        };
@@ -233,7 +233,7 @@ iExpGloballyDetectArtifacts_activate_cb( GtkMenuItem*, 
gpointer userdata)
                {
                        snprintf_buf(
                                "Detect artifacts in %s/%s/%s/%s:%s",
-                               ED.ED->group_of(J), J.short_name.c_str(), 
D.c_str(), E.name(), R.F().channel_by_id(R.h()));
+                               ED.ED->group_of(J), J.id.c_str(), D.c_str(), 
E.name(), R.F().channel_by_id(R.h()));
                        ED.sb_main_progress_indicator( __buf__, total, i, 
TGtkRefreshMode::gtk);
                };
        switch ( response ) {
diff --git a/src/ui/mw/measurements.cc b/src/ui/mw/measurements.cc
index dc0a2d5..24a26af 100644
--- a/src/ui/mw/measurements.cc
+++ b/src/ui/mw/measurements.cc
@@ -272,22 +272,22 @@ draw_timeline( cairo_t *cr) const
        cairo_select_font_face( cr, "serif", CAIRO_FONT_SLANT_ITALIC, 
CAIRO_FONT_WEIGHT_BOLD);
        cairo_set_font_size( cr, 12);
        cairo_set_source_rgb( cr, 0., 0., 0.);
-       cairo_show_text( cr, csubject.short_name.c_str());
+       cairo_show_text( cr, csubject.id.c_str());
        cairo_stroke( cr);
 
        cairo_move_to( cr, 2, 25);
        cairo_select_font_face( cr, "serif", CAIRO_FONT_SLANT_ITALIC, 
CAIRO_FONT_WEIGHT_NORMAL);
        cairo_set_font_size( cr, 9);
        cairo_set_source_rgba( cr, .1, .1, .1, .5);
-       cairo_show_text( cr, csubject.full_name.c_str());
+       cairo_show_text( cr, csubject.name.c_str());
        cairo_stroke( cr);
 
        cairo_move_to( cr, 2, 35);
        cairo_select_font_face( cr, "sans", CAIRO_FONT_SLANT_ITALIC, 
CAIRO_FONT_WEIGHT_NORMAL);
        cairo_set_font_size( cr, 9);
-       snprintf_buf( "%s %u y.o.",
-                     agh::CSubject::gender_sign( csubject.gender),
-                     csubject.age);
+       snprintf_buf( "%c %d y.o.",
+                     csubject.gender_sign(),
+                     (int)csubject.age());
        cairo_set_source_rgb( cr, .1, .1, .1);
        cairo_show_text( cr, __buf__);
 }
diff --git a/src/ui/mw/measurements_cb.cc b/src/ui/mw/measurements_cb.cc
index e12aa99..3af215d 100644
--- a/src/ui/mw/measurements_cb.cc
+++ b/src/ui/mw/measurements_cb.cc
@@ -152,15 +152,6 @@ iSubjectTimelineDetectUltradianCycle_activate_cb( 
GtkMenuItem*, gpointer userdat
 }
 
 
-void
-iSubjectTimelineSubjectInfo_activate_cb( GtkMenuItem*, gpointer userdata)
-{
-       auto& ED = *(SExpDesignUI*)userdata;
-       ED.update_subject_details_interactively( ED.using_subject->csubject);
-       ED.populate_1(); // trigger sort
-       //gtk_widget_queue_draw( (GtkWidget*)ED.using_subject->da);
-}
-
 
 void
 iSubjectTimelineEDFInfo_activate_cb( GtkMenuItem*, gpointer userdata)
@@ -184,7 +175,7 @@ iSubjectTimelineSaveAsSVG_activate_cb( GtkMenuItem 
*checkmenuitem, gpointer user
        auto J = ED.using_subject;
 
        snprintf_buf( "%s/%s/%s/%s/%s.svg",
-                     ED.ED->session_dir().c_str(), ED.ED->group_of( 
J->csubject), J->csubject.short_name.c_str(),
+                     ED.ED->session_dir().c_str(), ED.ED->group_of( 
J->csubject.id), J->csubject.id.c_str(),
                      ED.AghD(), ED.AghT());
        string tmp (__buf__);
        J->is_focused = true;
@@ -202,7 +193,8 @@ iSubjectTimelineBrowse_activate_cb( GtkMenuItem 
*checkmenuitem, gpointer userdat
        auto J = ED.using_subject;
 
        snprintf_buf( "%s '%s/%s/%s/%s' &",
-                     ED.browse_command.c_str(), ED.ED->session_dir().c_str(), 
ED.ED->group_of( J->csubject), J->csubject.short_name.c_str(), ED.AghD());
+                     ED.browse_command.c_str(),
+                     ED.ED->session_dir().c_str(), ED.ED->group_of( 
J->csubject.id), J->csubject.id.c_str(), ED.AghD());
        if ( system( __buf__) ) {}
 }
 
@@ -214,10 +206,10 @@ iSubjectTimelineResetMontage_activate_cb( GtkMenuItem 
*checkmenuitem, gpointer u
 
        if ( not J->is_episode_focused() )
                snprintf_buf( "find '%s/%s/%s/%s' -name '.*.montage' -delete",
-                             ED.ED->session_dir().c_str(), ED.ED->group_of( 
J->csubject), J->csubject.short_name.c_str(), ED.AghD());
+                             ED.ED->session_dir().c_str(), ED.ED->group_of( 
J->csubject.id), J->csubject.id.c_str(), ED.AghD());
        else
                snprintf_buf( "rm -f '%s/%s/%s/%s/.%s.montage'",
-                             ED.ED->session_dir().c_str(), ED.ED->group_of( 
J->csubject), J->csubject.short_name.c_str(), ED.AghD(), ED.AghE());
+                             ED.ED->session_dir().c_str(), ED.ED->group_of( 
J->csubject.id), J->csubject.id.c_str(), ED.AghD(), ED.AghE());
 
        if ( system( __buf__) )
                pop_ok_message( ED.wMainWindow, "Wow", "Command '%s' returned a 
non-zero status. This is weird.", __buf__);
diff --git a/src/ui/mw/mw.cc b/src/ui/mw/mw.cc
index 7135f10..0545e44 100644
--- a/src/ui/mw/mw.cc
+++ b/src/ui/mw/mw.cc
@@ -84,7 +84,7 @@ create_cprofile()
        } catch (...) {  // can be invalid_argument (no recording in such 
session/channel) or some TSimPrepError
                cprofile = nullptr;
                fprintf( stderr, "SSubjectPresentation::SSubjectPresentation(): 
subject \"%s\" has no recordings in session \"%s\" channel \"%s\"\n",
-                        csubject.short_name.c_str(), _p._p.AghD(), 
_p._p.AghT());
+                        csubject.id.c_str(), _p._p.AghD(), _p._p.AghT());
        }
 }
 
@@ -124,6 +124,7 @@ const array<double, 3>
        aghui::SExpDesignUI::FFTBinSizeValues = {{.1, .25, .5}};
 
 
+using confval::SValidator;
 
 aghui::SExpDesignUI::
 SExpDesignUI (aghui::SSessionChooser *parent,
@@ -170,33 +171,33 @@ SExpDesignUI (aghui::SSessionChooser *parent,
        sort_segregate (false),
        browse_command ("thunar"),
        config_keys_s ({
-               confval::SValidator<string>("WindowGeometry.Main",              
&_geometry_placeholder),
-               confval::SValidator<string>("Common.CurrentSession",            
&_aghdd_placeholder),
-               confval::SValidator<string>("Common.CurrentChannel",            
&_aghtt_placeholder),
-               confval::SValidator<string>("Measurements.BrowseCommand",       
&browse_command),
+               SValidator<string>("WindowGeometry.Main",               
&_geometry_placeholder),
+               SValidator<string>("Common.CurrentSession",             
&_aghdd_placeholder),
+               SValidator<string>("Common.CurrentChannel",             
&_aghtt_placeholder),
+               SValidator<string>("Measurements.BrowseCommand",        
&browse_command),
        }),
        config_keys_d ({
-               confval::SValidator<int>("Common.OnlyPlainAnnotations",         
(int*)&only_plain_global_annotations,           
confval::SValidator<int>::SVFRangeIn ( 0,   1)),
-               confval::SValidator<int>("Common.Sort.By",                      
(int*)&sort_by,                                 
confval::SValidator<int>::SVFRangeIn ( 0,   3)),
-               confval::SValidator<int>("Common.Sort.Ascending",               
(int*)&sort_ascending,                          
confval::SValidator<int>::SVFRangeIn ( 0,   1)),
-               confval::SValidator<int>("Common.Sort.Segregate",               
(int*)&sort_segregate,                          
confval::SValidator<int>::SVFRangeIn ( 0,   1)),
-               confval::SValidator<int>("Measurements.DisplayProfileType",     
(int*)&display_profile_type,                    
confval::SValidator<int>::SVFRangeIn ( 0,   3)),
-               confval::SValidator<int>("Measurements.SmoothSide",             
(int*)&smooth_profile,                          
confval::SValidator<int>::SVFRangeIn ( 1,  20)),
-               confval::SValidator<int>("Measurements.TimelineHeight",         
(int*)&timeline_height,                         
confval::SValidator<int>::SVFRangeIn (10, 600)),
-               confval::SValidator<int>("Measurements.TimelinePPH",            
(int*)&timeline_pph,                            
confval::SValidator<int>::SVFRangeIn (10, 600)),
-               confval::SValidator<int>("ScoringFacility.IntersignalSpace",    
(int*)&SScoringFacility::IntersignalSpace,      
confval::SValidator<int>::SVFRangeIn (10, 800)),
-               confval::SValidator<int>("ScoringFacility.HypnogramHeight",     
(int*)&SScoringFacility::HypnogramHeight,       
confval::SValidator<int>::SVFRangeIn (10, 300)),
-               confval::SValidator<int>("ModelRun.SWASmoothOver",              
(int*)&SModelrunFacility::swa_smoothover,       
confval::SValidator<int>::SVFRangeIn ( 1,   5)),
+               SValidator<int>("Common.OnlyPlainAnnotations",          
(int*)&only_plain_global_annotations,           SValidator<int>::SVFRangeIn ( 
0,   1)),
+               SValidator<int>("Common.Sort.By",                       
(int*)&sort_by,                                 SValidator<int>::SVFRangeIn ( 
0,   3)),
+               SValidator<int>("Common.Sort.Ascending",                
(int*)&sort_ascending,                          SValidator<int>::SVFRangeIn ( 
0,   1)),
+               SValidator<int>("Common.Sort.Segregate",                
(int*)&sort_segregate,                          SValidator<int>::SVFRangeIn ( 
0,   1)),
+               SValidator<int>("Measurements.DisplayProfileType",      
(int*)&display_profile_type,                    SValidator<int>::SVFRangeIn ( 
0,   3)),
+               SValidator<int>("Measurements.SmoothSide",              
(int*)&smooth_profile,                          SValidator<int>::SVFRangeIn ( 
1,  20)),
+               SValidator<int>("Measurements.TimelineHeight",          
(int*)&timeline_height,                         SValidator<int>::SVFRangeIn 
(10, 600)),
+               SValidator<int>("Measurements.TimelinePPH",             
(int*)&timeline_pph,                            SValidator<int>::SVFRangeIn 
(10, 600)),
+               SValidator<int>("ScoringFacility.IntersignalSpace",     
(int*)&SScoringFacility::IntersignalSpace,      SValidator<int>::SVFRangeIn 
(10, 800)),
+               SValidator<int>("ScoringFacility.HypnogramHeight",      
(int*)&SScoringFacility::HypnogramHeight,       SValidator<int>::SVFRangeIn 
(10, 300)),
+               SValidator<int>("ModelRun.SWASmoothOver",               
(int*)&SModelrunFacility::swa_smoothover,       SValidator<int>::SVFRangeIn ( 
1,   5)),
        }),
        config_keys_g ({
-               confval::SValidator<double>("UltradianCycleDetectionAccuracy",  
&uc_accuracy_factor,                            
confval::SValidator<double>::SVFRangeIn (0.5, 20.)),
-               confval::SValidator<double>("Measurements.ProfileScalePSD",     
&profile_scale_psd,                             
confval::SValidator<double>::SVFRangeIn (0., 1e10)), // can be 0, will trigger 
autoscale
-               confval::SValidator<double>("Measurements.ProfileScaleSWU",     
&profile_scale_swu,                             
confval::SValidator<double>::SVFRangeIn (0., 1e10)),
-               confval::SValidator<double>("Measurements.ProfileScaleMC",      
&profile_scale_mc,                              
confval::SValidator<double>::SVFRangeIn (0., 1e10)),
-               confval::SValidator<double>("Profiles.PSD.FreqFrom",            
&active_profile_psd_freq_from,                  
confval::SValidator<double>::SVFRangeIn (0., 20.)),
-               confval::SValidator<double>("Profiles.PSD.FreqUpto",            
&active_profile_psd_freq_upto,                  
confval::SValidator<double>::SVFRangeIn (0., 20.)),
-               confval::SValidator<double>("Profiles.SWU.F0",                  
&active_profile_swu_f0,                         
confval::SValidator<double>::SVFRangeIn (0., 20.)),
-               confval::SValidator<double>("Profiles.MC.F0",                   
&active_profile_mc_f0,                          
confval::SValidator<double>::SVFRangeIn (0., 20.)),
+               SValidator<double>("UltradianCycleDetectionAccuracy",   
&uc_accuracy_factor,                            SValidator<double>::SVFRangeIn 
(0.5, 20.)),
+               SValidator<double>("Measurements.ProfileScalePSD",      
&profile_scale_psd,                             SValidator<double>::SVFRangeIn 
(0., 1e10)), // can be 0, will trigger autoscale
+               SValidator<double>("Measurements.ProfileScaleSWU",      
&profile_scale_swu,                             SValidator<double>::SVFRangeIn 
(0., 1e10)),
+               SValidator<double>("Measurements.ProfileScaleMC",       
&profile_scale_mc,                              SValidator<double>::SVFRangeIn 
(0., 1e10)),
+               SValidator<double>("Profiles.PSD.FreqFrom",             
&active_profile_psd_freq_from,                  SValidator<double>::SVFRangeIn 
(0., 20.)),
+               SValidator<double>("Profiles.PSD.FreqUpto",             
&active_profile_psd_freq_upto,                  SValidator<double>::SVFRangeIn 
(0., 20.)),
+               SValidator<double>("Profiles.SWU.F0",                   
&active_profile_swu_f0,                         SValidator<double>::SVFRangeIn 
(0., 20.)),
+               SValidator<double>("Profiles.MC.F0",                    
&active_profile_mc_f0,                          SValidator<double>::SVFRangeIn 
(0., 20.)),
        })
 {
        nodestroy_by_cb = true;
@@ -586,33 +587,6 @@ sb_main_progress_indicator( const char* current, size_t n, 
size_t i, aghui::TGtk
 
 
 
-
-void
-aghui::SExpDesignUI::
-update_subject_details_interactively( agh::CSubject& J)
-{
-       gtk_entry_set_text( eSubjectDetailsShortName, J.short_name.c_str());
-       gtk_entry_set_text( eSubjectDetailsFullName, J.full_name.c_str());
-       gtk_spin_button_set_value( eSubjectDetailsAge, J.age);
-       gtk_toggle_button_set_active( (J.gender == agh::CSubject::TGender::male)
-                                     ? 
(GtkToggleButton*)eSubjectDetailsGenderMale
-                                     : 
(GtkToggleButton*)eSubjectDetailsGenderFemale,
-                                     TRUE);
-       gtk_entry_set_text( eSubjectDetailsComment, J.comment.c_str());
-
-       if ( gtk_dialog_run( (GtkDialog*)wSubjectDetails) == -5 ) {
-               J.short_name.assign( gtk_entry_get_text( 
eSubjectDetailsShortName));
-               J.full_name.assign( gtk_entry_get_text( 
eSubjectDetailsFullName));
-               J.age = gtk_spin_button_get_value( eSubjectDetailsAge);
-               J.gender =
-                       gtk_toggle_button_get_active( 
(GtkToggleButton*)eSubjectDetailsGenderMale)
-                       ? agh::CSubject::TGender::male
-                       : agh::CSubject::TGender::female;
-               J.comment.assign( gtk_entry_get_text( eSubjectDetailsComment));
-       }
-}
-
-
 // Local Variables:
 // Mode: c++
 // indent-tabs-mode: 8
diff --git a/src/ui/mw/mw.hh b/src/ui/mw/mw.hh
index 3191769..3af454e 100644
--- a/src/ui/mw/mw.hh
+++ b/src/ui/mw/mw.hh
@@ -164,7 +164,6 @@ class SExpDesignUI
        void do_purge_computed();
        void do_detect_ultradian_cycle( agh::CRecording&);
 
-       void update_subject_details_interactively( agh::CSubject&);
        void show_empty_experiment_blurb();
        int try_download();
        GPid dl_pid;
diff --git a/src/ui/mw/populate.cc b/src/ui/mw/populate.cc
index 033e0c4..ddeefc5 100644
--- a/src/ui/mw/populate.cc
+++ b/src/ui/mw/populate.cc
@@ -292,10 +292,10 @@ populate_mGlobalAnnotations()
                                                                            -1);
                                                        last_j = last_d = 
last_e = NULL;
                                                }
-                                               if ( last_j != 
J.short_name.c_str() ) {  // comparing pointers here
+                                               if ( last_j != J.id.c_str() ) { 
 // comparing pointers here
                                                        gtk_tree_store_append( 
mGlobalAnnotations, &iter_j, &iter_g);
                                                        gtk_tree_store_set( 
mGlobalAnnotations, &iter_j,
-                                                                           0, 
last_j = J.short_name.c_str(),
+                                                                           0, 
last_j = J.id.c_str(),
                                                                            
mannotations_visibility_switch_col, TRUE,
                                                                            -1);
                                                        last_d = last_e = NULL;
@@ -409,7 +409,7 @@ populate_1()
                                        j.admission_date = 
ee.front().start_time();
                                } else
                                        fprintf( stderr, 
"SExpDesignUI::populate_1(): session \"%s\", channel \"%s\" for subject \"%s\" 
is empty\n",
-                                                AghD(), AghT(), 
J.short_name.c_str());
+                                                AghD(), AghT(), J.id.c_str());
                        }
                }
        }
@@ -487,7 +487,7 @@ populate_1()
                                cairo_text_extents_t extents;
                                cairo_select_font_face( cr, "serif", 
CAIRO_FONT_SLANT_ITALIC, CAIRO_FONT_WEIGHT_BOLD);
                                cairo_set_font_size( cr, 11);
-                               cairo_text_extents( cr, 
J.csubject.short_name.c_str(), &extents);
+                               cairo_text_extents( cr, J.csubject.id.c_str(), 
&extents);
                                if ( tl_left_margin < extents.width )
                                        tl_left_margin = extents.width;
                                cairo_destroy( cr);
@@ -581,12 +581,12 @@ operator<( const SSubjectPresentation& rv) const
                unsure = true; // avoid swapping if result == false
        switch ( _p._p.sort_by ) {
        case TSubjectSortBy::name:
-               result = csubject.short_name <  rv.csubject.short_name;
-               unsure = csubject.short_name == rv.csubject.short_name;
+               result = csubject.id <  rv.csubject.id;
+               unsure = csubject.id == rv.csubject.id;
                break;
        case TSubjectSortBy::age:
-               result = csubject.age <  rv.csubject.age;
-               unsure = csubject.age == rv.csubject.age;
+               result = csubject.age() <  rv.csubject.age();
+               unsure = csubject.age() == rv.csubject.age();
                break;
        case TSubjectSortBy::admission_date:
                result = tl_start <  rv.tl_start;
diff --git a/src/ui/mw/simulations.cc b/src/ui/mw/simulations.cc
index b6af5d2..0dae1aa 100644
--- a/src/ui/mw/simulations.cc
+++ b/src/ui/mw/simulations.cc
@@ -42,7 +42,7 @@ populate_2()
 
                        gtk_tree_store_append( mSimulations, &iter_j, &iter_g);
                        gtk_tree_store_set( mSimulations, &iter_j,
-                                           0, J.short_name.c_str(),
+                                           0, J.id.c_str(),
                                            msimulations_visibility_switch_col, 
TRUE,
                                            -1);
 
@@ -100,7 +100,7 @@ populate_2()
 
                                agh::ach::CModelRun *virgin;
                                int retval =
-                                       ED->setup_modrun( J.short_name.c_str(), 
AghD(), AghT(),
+                                       ED->setup_modrun( J.id.c_str(), AghD(), 
AghT(),
                                                          P_new,
                                                          &virgin);
                                if ( retval ) {
diff --git a/src/ui/mw/simulations_cb.cc b/src/ui/mw/simulations_cb.cc
index 1877b93..0e62f1c 100644
--- a/src/ui/mw/simulations_cb.cc
+++ b/src/ui/mw/simulations_cb.cc
@@ -141,7 +141,7 @@ iSimulationsRunBatch_activate_cb( GtkMenuItem*, gpointer 
userdata)
                        {
                                snprintf_buf( "(%zu of %zu) Running simulation 
in channel %s (%s) for %s (session %s) ...",
                                              i, n, H.c_str(), 
T.display_name().c_str(),
-                                             J.short_name.c_str(), D.c_str());
+                                             J.id.c_str(), D.c_str());
                                ED.sb_message( __buf__);
                                gtk_flush();
                        };
diff --git a/src/ui/mw/widgets.hh b/src/ui/mw/widgets.hh
index c02e655..280ba7c 100644
--- a/src/ui/mw/widgets.hh
+++ b/src/ui/mw/widgets.hh
@@ -291,19 +291,6 @@ struct SExpDesignUIWidgets {
        GtkCheckButton
                *eGlobalAnnotationsShowPhasicEvents;
 
-       // subject details
-       GtkDialog
-               *wSubjectDetails;
-       GtkEntry
-               *eSubjectDetailsShortName,
-               *eSubjectDetailsFullName,
-               *eSubjectDetailsComment;
-       GtkSpinButton
-               *eSubjectDetailsAge;
-       GtkRadioButton
-               *eSubjectDetailsGenderMale,
-               *eSubjectDetailsGenderFemale;
-
        // batch setup
        GtkDialog
                *wBatchSetup;
diff --git a/src/ui/sf/sf.cc b/src/ui/sf/sf.cc
index 27478fc..7290db5 100644
--- a/src/ui/sf/sf.cc
+++ b/src/ui/sf/sf.cc
@@ -134,7 +134,7 @@ SScoringFacility (agh::CSubject& J,
                }
        }
        if ( channels.empty() )
-               throw invalid_argument( string ("No channels found for 
combination (") + J.short_name + ", " + D + ", " + E + ")");
+               throw invalid_argument( string ("No channels found for 
combination (") + J.id + ", " + D + ", " + E + ")");
 
       // count n_eeg_channels
        n_eeg_channels =
@@ -190,7 +190,7 @@ SScoringFacility (agh::CSubject& J,
       // set up other controls
        // set window title
        snprintf_buf( "Scoring: %s’s %s in %s",
-                     J.full_name.c_str(), E.c_str(), D.c_str());
+                     J.name.c_str(), E.c_str(), D.c_str());
        gtk_window_set_title( (GtkWindow*)wSF,
                              __buf__);
 

-- 
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