The following commit has been merged in the master branch:
commit 08931fb928d1a3242e4d5c5c3ab8f85a24188744
Author: Andrei Zavada <[email protected]>
Date:   Sun Jul 21 01:22:32 2013 +0300

    fix SF:AD dialog wrt using_channel

diff --git a/src/aghermann/ui/sf/channel.cc b/src/aghermann/ui/sf/channel.cc
index 0abb326..e7bfb35 100644
--- a/src/aghermann/ui/sf/channel.cc
+++ b/src/aghermann/ui/sf/channel.cc
@@ -539,7 +539,7 @@ update_channel_menu_items( const double x)
        gtk_widget_set_visible( (GtkWidget*)_p.iSFPageDrawPSDSpectrum, is_eeg);
        gtk_widget_set_visible( (GtkWidget*)_p.iSFPageDrawSWUProfile,  is_eeg);
 
-       gtk_widget_set_visible( (GtkWidget*)_p.iSFPageArtifactsDetect, is_eeg);
+       gtk_widget_set_visible( (GtkWidget*)_p.iSFPageArtifactsDetect, is_eeg 
and not _p.artifacts_dialog_shown);
        gtk_widget_set_visible( (GtkWidget*)_p.iSFPageDrawMCProfile,   is_eeg);
        gtk_widget_set_visible( (GtkWidget*)_p.iSFPageDrawEMGProfile,  is_emg);
 
diff --git a/src/aghermann/ui/sf/d/artifacts.cc 
b/src/aghermann/ui/sf/d/artifacts.cc
index 2d232ad..db9677e 100644
--- a/src/aghermann/ui/sf/d/artifacts.cc
+++ b/src/aghermann/ui/sf/d/artifacts.cc
@@ -25,7 +25,8 @@ artifacts_d()
 
 aghui::SScoringFacility::SArtifactsDialog::
 SArtifactsDialog (aghui::SScoringFacility& p_)
-      : _p (p_)
+      : using_channel (nullptr),
+       _p (p_)
 {
        W_V.reg( eSFADScope,            &P.scope);
        W_V.reg( eSFADUpperThr,         &P.upper_thr);
diff --git a/src/aghermann/ui/sf/d/artifacts.hh 
b/src/aghermann/ui/sf/d/artifacts.hh
index b14df5f..4591160 100644
--- a/src/aghermann/ui/sf/d/artifacts.hh
+++ b/src/aghermann/ui/sf/d/artifacts.hh
@@ -90,6 +90,8 @@ struct SScoringFacility::SArtifactsDialog
 
        SArtifactsDialog (SScoringFacility&);
 
+       SScoringFacility::SChannel
+               *using_channel;
        metrics::mc::SArtifactDetectionPP
                P;
        sigfile::SArtifacts
diff --git a/src/aghermann/ui/sf/d/artifacts_cb.cc 
b/src/aghermann/ui/sf/d/artifacts_cb.cc
index 4d6181f..5b0c6b4 100644
--- a/src/aghermann/ui/sf/d/artifacts_cb.cc
+++ b/src/aghermann/ui/sf/d/artifacts_cb.cc
@@ -146,12 +146,13 @@ bSFADCancel_clicked_cb(
 {
        auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
        auto& SF = AD._p;
+       SF.artifacts_dialog_shown = false;
 
        gtk_widget_hide( (GtkWidget*)AD.wSFAD);
 
        if ( gtk_toggle_button_get_active(AD.bSFADPreview) ) {
-               SF.using_channel -> artifacts = AD.artifacts_backup;
-               SF.using_channel -> get_signal_filtered();
+               AD.using_channel->artifacts = AD.artifacts_backup;
+               AD.using_channel->get_signal_filtered();
 
                gtk_widget_queue_draw( (GtkWidget*)SF.daSFMontage);
                gtk_widget_queue_draw( (GtkWidget*)SF.daSFHypnogram);
@@ -177,11 +178,11 @@ bSFADPreview_toggled_cb(
        if ( gtk_toggle_button_get_active(b) ) {
                SBusyBlock bb (AD.wSFAD);
 
-               AD.orig_signal_visible_backup = 
SF.using_channel->draw_original_signal;
-               AD.artifacts_backup = SF.using_channel->artifacts;
+               AD.orig_signal_visible_backup = 
AD.using_channel->draw_original_signal;
+               AD.artifacts_backup = AD.using_channel->artifacts;
 
-               SF.using_channel -> detect_artifacts( (AD.W_V.down(), AD.P));
-               SF.using_channel -> draw_original_signal = true;
+               AD.using_channel->detect_artifacts( (AD.W_V.down(), AD.P));
+               AD.using_channel->draw_original_signal = true;
                gtk_widget_set_sensitive( (GtkWidget*)AD.bSFADApply, TRUE);
 
                AD.channels_visible_backup.clear();
@@ -189,15 +190,15 @@ bSFADPreview_toggled_cb(
                        for ( auto& H : SF.channels ) {
                                AD.channels_visible_backup.emplace_back(
                                        &H, H.hidden);
-                               if ( &H != SF.using_channel )
+                               if ( &H != AD.using_channel )
                                        H.hidden = true;
                        }
 
        } else {
-               SF.using_channel->artifacts = AD.artifacts_backup;
+               AD.using_channel->artifacts = AD.artifacts_backup;
                for ( auto& H : AD.channels_visible_backup )
                        H.first->hidden = H.second;
-               SF.using_channel->draw_original_signal = 
AD.orig_signal_visible_backup;
+               AD.using_channel->draw_original_signal = 
AD.orig_signal_visible_backup;
                gtk_widget_set_sensitive( (GtkWidget*)AD.bSFADApply, FALSE);
        }
 
@@ -205,7 +206,7 @@ bSFADPreview_toggled_cb(
 
        gtk_label_set_markup(
                AD.lSFADDirtyPercent,
-               snprintf_buf( "%4.2f%% marked", 
SF.using_channel->calculate_dirty_percent() * 100));
+               snprintf_buf( "%4.2f%% marked", 
AD.using_channel->calculate_dirty_percent() * 100));
 
        gtk_widget_queue_draw( (GtkWidget*)SF.daSFMontage);
        gtk_widget_queue_draw( (GtkWidget*)SF.daSFHypnogram);
@@ -220,6 +221,9 @@ wSFAD_show_cb(
 {
        auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
        auto& SF = AD._p;
+       SF.artifacts_dialog_shown = true;
+
+       AD.using_channel = AD._p.using_channel;  // because the latter is 
mutable, and AD isn't modal
 
        AD.W_V.up();
        AD.populate_mSFADProfiles();
@@ -237,10 +241,10 @@ wSFAD_show_cb(
 
        gtk_label_set_text(
                AD.lSFADInfo,
-               snprintf_buf( "Artifact detection in channel %s", 
SF.using_channel->name()));
+               snprintf_buf( "Artifact detection in channel %s", 
AD.using_channel->name()));
        gtk_label_set_text(
                AD.lSFADDirtyPercent,
-               snprintf_buf( "%4.2f%% marked", 
SF.using_channel->calculate_dirty_percent() * 100));
+               snprintf_buf( "%4.2f%% marked", 
AD.using_channel->calculate_dirty_percent() * 100));
 }
 
 
diff --git a/src/aghermann/ui/sf/sf.cc b/src/aghermann/ui/sf/sf.cc
index 2848a37..df281df 100644
--- a/src/aghermann/ui/sf/sf.cc
+++ b/src/aghermann/ui/sf/sf.cc
@@ -61,6 +61,7 @@ SScoringFacility (agh::CSubject& J,
        _session (D),
        _sepisode (J.measurements.at(D)[E]),
        hypnogram_button_down (false),
+       artifacts_dialog_shown (false),
        mode (TMode::scoring),
        crosshair_at (10),
        show_cur_pos_time_relative (false),
diff --git a/src/aghermann/ui/sf/sf.hh b/src/aghermann/ui/sf/sf.hh
index 519a9bf..9ec1606 100644
--- a/src/aghermann/ui/sf/sf.hh
+++ b/src/aghermann/ui/sf/sf.hh
@@ -347,7 +347,8 @@ class SScoringFacility
       // state and flags
        // volatile
        bool    suppress_redraw:1,
-               hypnogram_button_down:1;
+               hypnogram_button_down:1,
+               artifacts_dialog_shown:1;
        enum TMode {
                scoring,
                marking,

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