The following commit has been merged in the master branch:
commit ac46cfd9a233bd2e34707141e89a0adeb750239d
Author: Andrei Zavada <[email protected]>
Date:   Fri Jan 25 02:27:30 2013 +0200

    WIP in progress

diff --git a/src/ui/sf/Makefile.am b/src/ui/sf/Makefile.am
index ad2d6a4..40b8a7b 100644
--- a/src/ui/sf/Makefile.am
+++ b/src/ui/sf/Makefile.am
@@ -1,4 +1,5 @@
-SUBDIRS := dialogs
+SUBDIRS := \
+       d
 
 AM_CXXFLAGS := \
        -std=c++11 -fno-rtti -Wdeprecated-declarations -Wall \
@@ -29,7 +30,7 @@ liba_a_SOURCES := \
 if DO_PCH
 BUILT_SOURCES = \
        sf.hh.gch \
-       sf-widgets.hh.gch \
+       widgets.hh.gch \
        sf_cb.hh.gch
 %.hh.gch: %.hh
        $(CXXCOMPILE) -c $<
diff --git a/src/ui/sf/construct.cc b/src/ui/sf/construct.cc
index efb307f..3dc2fc8 100644
--- a/src/ui/sf/construct.cc
+++ b/src/ui/sf/construct.cc
@@ -1,6 +1,6 @@
 // ;-*-C++-*-
 /*
- *       File name:  ui/sf/sf-construct.cc
+ *       File name:  ui/sf/construct.cc
  *         Project:  Aghermann
  *          Author:  Andrei Zavada <[email protected]>
  * Initial version:  2012-06-13
@@ -24,13 +24,9 @@ aghui::SScoringFacilityWidgets::
 SScoringFacilityWidgets (SExpDesignUI& _p)
 {
        builder = gtk_builder_new();
-       if ( !gtk_builder_add_from_resource( builder, 
"/org/gtk/aghermann/sf.glade", NULL) ||
-            !gtk_builder_add_from_resource( builder, 
"/org/gtk/aghermann/sf-artifacts.glade", NULL) ||
-            !gtk_builder_add_from_resource( builder, 
"/org/gtk/aghermann/sf-patterns.glade", NULL) ||
-            !gtk_builder_add_from_resource( builder, 
"/org/gtk/aghermann/sf-phasediff.glade", NULL)) {
-               g_object_unref( (GObject*)builder);
+       if ( !gtk_builder_add_from_resource( builder, 
"/org/gtk/aghermann/sf.glade", NULL) )
                throw runtime_error( "Failed to load SF glade resource");
-       }
+
        gtk_builder_connect_signals( builder, NULL);
        //  we do it all mostly ourself, except for some delete-event binding 
to gtk_true()
 
@@ -342,4 +338,6 @@ aghui::SScoringFacilityWidgets::
        g_object_unref( (GObject*)builder);
 }
 
-// eof
+// Local Variables:
+// indent-tabs-mode: 8
+// End:
diff --git a/src/ui/sf/dialogs/Makefile.am b/src/ui/sf/d/Makefile.am
similarity index 90%
rename from src/ui/sf/dialogs/Makefile.am
rename to src/ui/sf/d/Makefile.am
index fd01072..628b1bf 100644
--- a/src/ui/sf/dialogs/Makefile.am
+++ b/src/ui/sf/d/Makefile.am
@@ -1,6 +1,6 @@
 AM_CXXFLAGS := \
        -std=c++11 -fno-rtti -Wdeprecated-declarations -Wall \
-       $(GTK_CFLAGS)  $(UNIQUE_CFLAGS)  $(CAIRO_CFLAGS) $(LIBCONFIGXX_CFLAGS) \
+       $(GTK_CFLAGS)  $(CAIRO_CFLAGS) \
        -DPACKAGE_DATADIR=\"$(datadir)\" \
        $(OPENMP_CXXFLAGS) \
        -I$(top_srcdir)/src
@@ -22,6 +22,7 @@ liba_a_SOURCES := \
        patterns-draw.cc \
        patterns-enumerate.cc \
        patterns_cb.cc \
+       phasediff.hh \
        phasediff.cc \
        phasediff-construct.cc \
        phasediff_cb.cc
diff --git a/src/ui/sf/dialogs/artifacts-construct.cc 
b/src/ui/sf/d/artifacts-construct.cc
similarity index 95%
rename from src/ui/sf/dialogs/artifacts-construct.cc
rename to src/ui/sf/d/artifacts-construct.cc
index e8d60e4..cfa28ef 100644
--- a/src/ui/sf/dialogs/artifacts-construct.cc
+++ b/src/ui/sf/d/artifacts-construct.cc
@@ -1,5 +1,5 @@
 /*
- *       File name:  ui/sf/dialogs/artifacts-construct.cc
+ *       File name:  ui/sf/d/artifacts-construct.cc
  *         Project:  Aghermann
  *          Author:  Andrei Zavada <[email protected]>
  * Initial version:  2013-10-24
@@ -21,13 +21,10 @@ aghui::SScoringFacility::SArtifactsDialogWidgets::
 SArtifactsDialogWidgets (SScoringFacility& _p)
 {
        builder = gtk_builder_new();
-       if ( !gtk_builder_add_from_resource( builder, 
"/org/gtk/aghermann/sf-artifacts.glade", NULL) ) {
-               g_object_unref( (GObject*)builder);
+       if ( !gtk_builder_add_from_resource( builder, 
"/org/gtk/aghermann/sf-artifacts.glade", NULL) )
                throw runtime_error( "Failed to load SF::artifacts glade 
resource");
-       }
        gtk_builder_connect_signals( builder, NULL);
 
-       // artifact detection
        if ( !(AGH_GBGETOBJ (GtkDialog,                 wSFAD)) ||
             !(AGH_GBGETOBJ (GtkComboBox,               eSFADProfiles)) ||
             !(AGH_GBGETOBJ (GtkButton,                 bSFADProfileSave)) ||
@@ -77,3 +74,7 @@ SArtifactsDialogWidgets (SScoringFacility& _p)
        G_CONNECT_1 (bSFADApply, clicked);
        G_CONNECT_1 (bSFADCancel, clicked);
 }
+
+// Local Variables:
+// indent-tabs-mode: 8
+// End:
diff --git a/src/ui/sf/dialogs/artifacts.cc b/src/ui/sf/d/artifacts.cc
similarity index 54%
rename from src/ui/sf/dialogs/artifacts.cc
rename to src/ui/sf/d/artifacts.cc
index 34d0464..60112bd 100644
--- a/src/ui/sf/dialogs/artifacts.cc
+++ b/src/ui/sf/d/artifacts.cc
@@ -1,5 +1,5 @@
 /*
- *       File name:  ui/sf/dialogs/artifacts.cc
+ *       File name:  ui/sf/d/artifacts.cc
  *         Project:  Aghermann
  *          Author:  Andrei Zavada <[email protected]>
  * Initial version:  2012-10-05
@@ -9,32 +9,30 @@
  *         License:  GPL
  */
 
-#include "sf.hh"
-#include "sf-widgets.hh"
+#include "artifacts.hh"
 
 using namespace std;
 
 
-aghui::SScoringFacility::SArtifactDetectionDialog::
-SArtifactDetectionDialog (aghui::SScoringFacility& p_)
-      : P (),
-       _p (p_)
+aghui::SScoringFacility::SArtifactsDialog::
+SArtifactsDialog (aghui::SScoringFacility& p_)
+      : _p (p_)
 {
-       W_V.reg( _p.eSFADScope,         &P.scope);
-       W_V.reg( _p.eSFADUpperThr,      &P.upper_thr);
-       W_V.reg( _p.eSFADLowerThr,      &P.lower_thr);
-       W_V.reg( _p.eSFADF0,            &P.f0);
-       W_V.reg( _p.eSFADFc,            &P.fc);
-       W_V.reg( _p.eSFADBandwidth,     &P.bandwidth);
-       W_V.reg( _p.eSFADMCGain,        &P.mc_gain);
-       W_V.reg( _p.eSFADBackpolate,    &P.iir_backpolate);
-       W_V.reg( _p.eSFADEstimateE,     &P.estimate_E);
-       W_V.reg( _p.eSFADEValue,        &P.E);
-       W_V.reg( _p.eSFADHistRangeMin,  &P.dmin);
-       W_V.reg( _p.eSFADHistRangeMax,  &P.dmax);
-       W_V.reg( _p.eSFADHistBins,      (int*)&P.sssu_hist_size);
-       W_V.reg( _p.eSFADSmoothSide,    (int*)&P.smooth_side);
-       W_V.reg( _p.eSFADUseThisRange,  &P.use_range);
+       W_V.reg( eSFADScope,            &P.scope);
+       W_V.reg( eSFADUpperThr,         &P.upper_thr);
+       W_V.reg( eSFADLowerThr,         &P.lower_thr);
+       W_V.reg( eSFADF0,               &P.f0);
+       W_V.reg( eSFADFc,               &P.fc);
+       W_V.reg( eSFADBandwidth,        &P.bandwidth);
+       W_V.reg( eSFADMCGain,           &P.mc_gain);
+       W_V.reg( eSFADBackpolate,       &P.iir_backpolate);
+       W_V.reg( eSFADEstimateE,        &P.estimate_E);
+       W_V.reg( eSFADEValue,           &P.E);
+       W_V.reg( eSFADHistRangeMin,     &P.dmin);
+       W_V.reg( eSFADHistRangeMax,     &P.dmax);
+       W_V.reg( eSFADHistBins,         (int*)&P.sssu_hist_size);
+       W_V.reg( eSFADSmoothSide,       (int*)&P.smooth_side);
+       W_V.reg( eSFADUseThisRange,     &P.use_range);
 }
 
 
@@ -42,6 +40,7 @@ aghui::SScoringFacility::SArtifactDetectionDialog::
 ~SArtifactDetectionDialog ()
 {
        gtk_widget_destroy( (GtkWidget*)_p.wSFAD);
+       g_object_unref( (GObject*)builder);
 }
 
 
diff --git a/src/ui/sf/dialogs/artifacts.hh b/src/ui/sf/d/artifacts.hh
similarity index 59%
rename from src/ui/sf/dialogs/artifacts.hh
rename to src/ui/sf/d/artifacts.hh
index 67a4ab3..b236b5f 100644
--- a/src/ui/sf/dialogs/artifacts.hh
+++ b/src/ui/sf/d/artifacts.hh
@@ -1,10 +1,10 @@
 /*
- *       File name:  ui/sf/dialogs/artifacts.hh
+ *       File name:  ui/sf/d/artifacts.hh
  *         Project:  Aghermann
  *          Author:  Andrei Zavada <[email protected]>
  * Initial version:  2013-01-24
  *
- *         Purpose:  scoring facility Artifacts
+ *         Purpose:  scoring facility Artifacts dialog
  *
  *         License:  GPL
  */
@@ -12,16 +12,28 @@
 #ifndef _AGH_UI_SF_ARTIFACTS_H
 #define _AGH_UI_SF_ARTIFACTS_H
 
+#include <list>
+
 #include <gtk/gtk.h>
-#include "patterns/patterns.hh"
-#include "ui/forward-decls.hh"
+
+#include "metrics/mc-artifacts.hh"
+#include "libsigfile/source-base.hh"
+#include "ui/ui++.hh"
 #include "ui/sf/sf.hh"
 
+#if HAVE_CONFIG_H && !defined(VERSION)
+#  include "config.h"
+#endif
+
+using namespace std;
+
 namespace aghui {
 
 struct SArtifactsDialogWidgets;
-struct SArtifactsDialog
+
+struct SScoringFacility::SArtifactsDialog
     : public SArtifactsDialog {
+
        DELETE_DEFAULT_METHODS (SArtifactDetectionDialog);
 
        SArtifactsDialog (SScoringFacility&);
@@ -32,7 +44,7 @@ struct SArtifactsDialog
        sigfile::SArtifacts
                artifacts_backup;
        bool    orig_signal_visible_backup;
-       list<pair<SChannel*, bool>>
+       list<pair<SScoringFacility::SChannel*, bool>>
                channels_visible_backup;
        bool    suppress_preview_handler;
        SUIVarCollection
@@ -43,11 +55,12 @@ struct SArtifactsDialog
 };
 
 struct SArtifactsDialogWidgets {
-       DELETE_DEFAULT_METHODS (SArtifactsDialogWidgets);
 
-       SArtifactsDialogWidgets (SScoringFacility&);
+       SArtifactsDialogWidgets ();
        ~SArtifactsDialogWidgets ();
 
+       GtkBuilder *builder;
+
        GtkDialog
                *wSFAD;
        GtkListStore
@@ -97,3 +110,20 @@ struct SArtifactsDialogWidgets {
 
 } // namespace aghui
 
+
+extern "C" {
+gboolean wSFAD_delete_event_cb(GtkWidget*, GdkEvent*, gpointer);
+void wSFAD_close_cb(GtkWidget*, gpointer);
+void eSFADProfiles_changed_cb( GtkComboBox*, gpointer);
+void bSFADProfileSave_clicked_cb( GtkButton*, gpointer);
+void bSFADProfileDelete_clicked_cb( GtkButton*, gpointer);
+void eSFADEstimateE_toggled_cb( GtkToggleButton*, gpointer);
+void eSFADUseThisRange_toggled_cb( GtkToggleButton*, gpointer);
+void bSFADPreview_toggled_cb( GtkToggleButton*, gpointer);
+void bSFADApply_clicked_cb( GtkButton*, gpointer);
+void bSFADCancel_clicked_cb( GtkButton*, gpointer);
+}
+
+// Local Variables:
+// indent-tabs-mode: 8
+// End:
diff --git a/src/ui/sf/d/artifacts_cb.cc b/src/ui/sf/d/artifacts_cb.cc
new file mode 100644
index 0000000..caba558
--- /dev/null
+++ b/src/ui/sf/d/artifacts_cb.cc
@@ -0,0 +1,205 @@
+/*
+ *       File name:  ui/sf/d/artifacts_cb.cc
+ *         Project:  Aghermann
+ *          Author:  Andrei Zavada <[email protected]>
+ * Initial version:  2012-10-05
+ *
+ *         Purpose:  scoring facility: artifact detection dialog callbacks
+ *
+ *         License:  GPL
+ */
+
+#include "ui/misc.hh"
+#include "sf.hh"
+#include "sf_cb.hh"
+
+using namespace std;
+using namespace aghui;
+
+
+
+void
+eSFADProfiles_changed_cb( GtkComboBox* w, gpointer userdata)
+{
+       auto& SD = *(SScoringFacility::SArtifactsDialog*)userdata;
+
+       if ( gtk_combo_box_get_active( w) != -1 ) {
+               AD.P = AD._p._p.global_artifact_detection_profiles[
+                       gtk_combo_box_get_active_id(w)];
+               AD.W_V.up();
+               gtk_widget_set_sensitive( (GtkWidget*)AD.bSFADProfileDelete, 
TRUE);
+       } else
+               gtk_widget_set_sensitive( (GtkWidget*)AD.bSFADProfileDelete, 
FALSE);
+}
+
+void
+bSFADProfileSave_clicked_cb( GtkButton*, gpointer userdata)
+{
+       auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+
+       if ( GTK_RESPONSE_OK ==
+            gtk_dialog_run( AD.wSFADSaveProfileName) ) {
+               AD.W_V.down();
+               AD._p._p.global_artifact_detection_profiles[
+                       gtk_entry_get_text( SF.eSFADSaveProfileNameName)] = 
AD.P;
+
+               AD._p._p.populate_mGlobalADProfiles();
+               AD.populate_mSFADProfiles(); // stupid
+
+               int now_active = 
AD._p._p.global_artifact_detection_profiles.size()-1;
+               gtk_combo_box_set_active( AD.eSFADProfiles, now_active);
+               gtk_combo_box_set_active( AD._p._p.eGlobalADProfiles, 
now_active);
+       }
+}
+
+void
+bSFADProfileDelete_clicked_cb( GtkButton*, gpointer userdata)
+{
+       auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+
+       const gchar *deleting_id = gtk_combo_box_get_active_id( 
AD.eSFADProfiles);
+       int deleting = gtk_combo_box_get_active( AD.eSFADProfiles);
+       AD._p._p.global_artifact_detection_profiles.erase( deleting_id);
+
+       AD._p._p.populate_mGlobalADProfiles();
+       AD._p.populate_mSFADProfiles(); // stupid
+
+       if ( AD._p._p.global_artifact_detection_profiles.size() > 0 &&
+            deleting > 
(int)AD._p._p.global_artifact_detection_profiles.size()-1 )
+               gtk_combo_box_set_active( AD.eSFADProfiles, deleting-1);
+
+       g_signal_emit_by_name( AD.eSFADProfiles, "changed");
+}
+
+
+void
+eSFADEstimateE_toggled_cb( GtkToggleButton *b, gpointer userdata)
+{
+       auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+       auto state = gtk_toggle_button_get_active( b);
+       gtk_widget_set_visible(
+               (GtkWidget*)AD.cSFADWhenEstimateEOn,
+               state);
+       gtk_widget_set_visible(
+               (GtkWidget*)AD.cSFADWhenEstimateEOff,
+               !state);
+}
+
+void
+eSFADUseThisRange_toggled_cb( GtkToggleButton *b, gpointer userdata)
+{
+       auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+       auto state = gtk_toggle_button_get_active( b);
+       gtk_widget_set_sensitive(
+               (GtkWidget*)AD.eSFADHistRangeMin,
+               state);
+       gtk_widget_set_sensitive(
+               (GtkWidget*)AD.eSFADHistRangeMax,
+               state);
+
+       // if ( state ) {
+       //      snprintf_buf( "Estimated <i>E</i> = %4.2f",
+       //                    SF.using_channel -> estimate_E( P));
+       // }
+}
+
+
+
+void
+bSFADApply_clicked_cb( GtkButton*, gpointer userdata)
+{
+       auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+
+       gtk_widget_hide( (GtkWidget*)AD.wSFAD);
+
+       for ( auto& H : AD.channels_visible_backup )
+               H.first->hidden = H.second;
+       AD.channels_visible_backup.clear();
+       AD.artifacts_backup.clear_all();
+
+       gtk_widget_queue_draw( (GtkWidget*)AD.daSFMontage);
+       gtk_widget_queue_draw( (GtkWidget*)AD.daSFHypnogram);
+}
+
+void
+bSFADCancel_clicked_cb( GtkButton*, gpointer userdata)
+{
+       auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+
+       gtk_widget_hide( (GtkWidget*)AD.wSFAD);
+
+       if ( gtk_toggle_button_get_active(AD.bSFADPreview) ) {
+               AD._p.using_channel -> artifacts = AD.artifacts_backup;
+               AD._p.using_channel -> get_signal_filtered();
+
+               gtk_widget_queue_draw( (GtkWidget*)AD.daSFMontage);
+               gtk_widget_queue_draw( (GtkWidget*)AD.daSFHypnogram);
+       }
+
+       for ( auto& H : AD.channels_visible_backup )
+               H.first->hidden = H.second;
+       AD.channels_visible_backup.clear();
+       AD.artifacts_backup.clear_all();
+}
+
+void
+bSFADPreview_toggled_cb( GtkToggleButton *b, gpointer userdata)
+{
+       auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+
+       if ( AD.suppress_preview_handler )
+               return;
+
+       if ( gtk_toggle_button_get_active(b) ) {
+               aghui::SBusyBlock bb (AD.wSFAD);
+
+               AD.orig_signal_visible_backup = 
AD._p.using_channel->draw_original_signal;
+               AD.artifacts_backup = AD._p.using_channel->artifacts;
+
+               AD._p.using_channel -> detect_artifacts( (AD.W_V.down(), AD.P));
+               AD._p.using_channel -> draw_original_signal = true;
+               gtk_widget_set_sensitive( (GtkWidget*)AD.bSFADApply, TRUE);
+
+               AD.channels_visible_backup.clear();
+               if ( gtk_toggle_button_get_active( 
(GtkToggleButton*)AD.eSFADSingleChannelPreview) )
+                       for ( auto& H : AD._p.channels ) {
+                               AD.channels_visible_backup.emplace_back(
+                                       &H, H.hidden);
+                               if ( &H != SF.using_channel )
+                                       H.hidden = true;
+                       }
+
+       } else {
+               AD._p.using_channel->artifacts = AD.artifacts_backup;
+               for ( auto& H : AD.channels_visible_backup )
+                       H.first->hidden = H.second;
+               AD._p.using_channel->draw_original_signal = 
AD.orig_signal_visible_backup;
+               gtk_widget_set_sensitive( (GtkWidget*)AD.bSFADApply, FALSE);
+       }
+
+       AD._p.using_channel -> get_signal_filtered();
+
+       snprintf_buf( "%4.2f%% marked", 
AD._p.using_channel->calculate_dirty_percent() * 100);
+       gtk_label_set_markup( AD.lSFADDirtyPercent, __buf__);
+
+       gtk_widget_queue_draw( (GtkWidget*)AD.daSFMontage);
+       gtk_widget_queue_draw( (GtkWidget*)AD.daSFHypnogram);
+}
+
+
+gboolean
+wSFAD_delete_event_cb( GtkWidget*, GdkEvent*, gpointer userdata)
+{
+       bSFADCancel_clicked_cb( NULL, userdata);
+       return TRUE;
+}
+
+void
+wSFAD_close_cb( GtkWidget*, gpointer userdata)
+{
+       bSFADCancel_clicked_cb( NULL, userdata);
+}
+
+// Local Variables:
+// indent-tabs-mode: 8
+// End:
diff --git a/src/ui/sf/d/filters-construct.cc b/src/ui/sf/d/filters-construct.cc
new file mode 100644
index 0000000..e5b3eda
--- /dev/null
+++ b/src/ui/sf/d/filters-construct.cc
@@ -0,0 +1,49 @@
+/*
+ *       File name:  ui/sf/d/filters-construct.cc
+ *         Project:  Aghermann
+ *          Author:  Andrei Zavada <[email protected]>
+ * Initial version:  2013-10-24
+ *
+ *         Purpose:  scoring facility Filters construct
+ *
+ *         License:  GPL
+ */
+
+#include <stdexcept>
+
+#include "ui/ui.hh"
+#include "filters.hh"
+
+using namespace std;
+
+
+aghui::SScoringFacility::SFiltersDialogWidgets::
+SFiltersDialogWidgets (SScoringFacility& _p)
+{
+       builder = gtk_builder_new();
+       if ( !gtk_builder_add_from_resource( builder, 
"/org/gtk/aghermann/sf-filters.glade", NULL) )
+               throw runtime_error( "Failed to load SF::artifacts glade 
resource");
+       gtk_builder_connect_signals( builder, NULL);
+
+       if ( !AGH_GBGETOBJ (GtkDialog,          wSFFilters) ||
+            !AGH_GBGETOBJ (GtkLabel,           lSFFilterCaption) ||
+            !AGH_GBGETOBJ (GtkSpinButton,      eSFFilterLowPassCutoff) ||
+            !AGH_GBGETOBJ (GtkSpinButton,      eSFFilterLowPassOrder) ||
+            !AGH_GBGETOBJ (GtkSpinButton,      eSFFilterHighPassCutoff) ||
+            !AGH_GBGETOBJ (GtkSpinButton,      eSFFilterHighPassOrder) ||
+            !AGH_GBGETOBJ (GtkComboBox,        eSFFilterNotchFilter) ||
+            !AGH_GBGETOBJ (GtkListStore,       mSFFilterNotchFilter) ||
+            !AGH_GBGETOBJ (GtkButton,          bSFFilterOK) )
+               throw runtime_error ("Failed to construct SF widgets (10)");
+
+       gtk_combo_box_set_model_properly(
+               eSFFilterNotchFilter, mSFFilterNotchFilter); // can't reuse 
_p.mNotchFilter
+
+       G_CONNECT_2 (eSFFilterHighPassCutoff, value, changed);
+       G_CONNECT_2 (eSFFilterLowPassCutoff, value, changed);
+}
+
+// Local Variables:
+// indent-tabs-mode: 8
+// End:
+
diff --git a/src/ui/sf/d/filters.cc b/src/ui/sf/d/filters.cc
new file mode 100644
index 0000000..69e3fdf
--- /dev/null
+++ b/src/ui/sf/d/filters.cc
@@ -0,0 +1,39 @@
+/*
+ *       File name:  ui/sf/d/filters.cc
+ *         Project:  Aghermann
+ *          Author:  Andrei Zavada <[email protected]>
+ * Initial version:  2011-01-30
+ *
+ *         Purpose:  scoring facility Butterworth filter dialog
+ *
+ *         License:  GPL
+ */
+
+
+#include "filters.hh"
+
+using namespace std;
+
+aghui::SScoringFacility::SFiltersDialog::
+SFiltersDialog(SScoringFacility& p_)
+      : _p (p_)
+{
+       auto& H = *_p.using_channel;
+       W_V.reg( eSFFilterLowPassCutoff,  &H.filters.low_pass_cutoff);
+       W_V.reg( eSFFilterLowPassOrder,  (int*)&H.filters.low_pass_order);
+       W_V.reg( eSFFilterHighPassCutoff, &H.filters.high_pass_cutoff);
+       W_V.reg( eSFFilterHighPassOrder, (int*)&H.filters.high_pass_order);
+       W_V.reg( eSFFilterNotchFilter,   (int*)&H.filters.notch_filter);
+}
+
+aghui::SScoringFacility::SFiltersDialogWidgets::
+~SScoringFacilityWidgets ()
+{
+       // destroy toplevels
+       gtk_widget_destroy( (GtkWidget*)wSFFilters);
+       g_object_unref( (GObject*)builder);
+}
+
+// Local Variables:
+// indent-tabs-mode: 8
+// End:
diff --git a/src/ui/sf/d/filters.hh b/src/ui/sf/d/filters.hh
new file mode 100644
index 0000000..97b7c4a
--- /dev/null
+++ b/src/ui/sf/d/filters.hh
@@ -0,0 +1,77 @@
+/*
+ *       File name:  ui/sf/d/filters.hh
+ *         Project:  Aghermann
+ *          Author:  Andrei Zavada <[email protected]>
+ * Initial version:  2013-01-24
+ *
+ *         Purpose:  scoring facility Filters dialog
+ *
+ *         License:  GPL
+ */
+
+#ifndef _AGH_UI_SF_FILTERS_H
+#define _AGH_UI_SF_FILTERS_H
+
+#include <gtk/gtk.h>
+
+#include "ui/ui++.hh"
+#include "ui/sf/sf.hh"
+
+#if HAVE_CONFIG_H && !defined(VERSION)
+#  include "config.h"
+#endif
+
+using namespace std;
+
+namespace aghui {
+
+struct SFiltersDialogWidgets;
+
+struct SScoringFacility::SFiltersDialog
+  : public SFiltersDialogWidgets {
+
+       DELETE_DEFAULT_METHODS (SFiltersDialog);
+
+       SFiltersDialog (SScoringFacility& parent)
+               : _p (parent)
+               {}
+       ~SFiltersDialog ();
+
+       SUIVarCollection
+               W_V;
+
+       SScoringFacility&
+               _p;
+};
+
+
+struct SFiltersDialogWidgets {
+
+       SFiltersDialogWidgets ();
+       ~SFiltersDialogWidgets ();
+
+       GtkBuilder *builder;
+
+       GtkDialog
+               *wSFFilters;
+       GtkLabel
+               *lSFFilterCaption;
+       GtkSpinButton
+               *eSFFilterLowPassCutoff, *eSFFilterHighPassCutoff,
+               *eSFFilterLowPassOrder, *eSFFilterHighPassOrder;
+       GtkComboBox
+               *eSFFilterNotchFilter;
+       GtkListStore
+               *mSFFilterNotchFilter;
+       GtkButton
+               *bSFFilterOK;
+};
+
+extern "C" {
+void eSFFilterHighPassCutoff_value_changed_cb( GtkSpinButton*, gpointer);
+void eSFFilterLowPassCutoff_value_changed_cb( GtkSpinButton*, gpointer);
+}
+
+// Local Variables:
+// indent-tabs-mode: 8
+// End:
diff --git a/src/ui/sf/d/filters_cb.cc b/src/ui/sf/d/filters_cb.cc
new file mode 100644
index 0000000..6930f2c
--- /dev/null
+++ b/src/ui/sf/d/filters_cb.cc
@@ -0,0 +1,47 @@
+// ;-*-C++-*-
+/*
+ *       File name:  ui/sf/sf-filter_cb.cc
+ *         Project:  Aghermann
+ *          Author:  Andrei Zavada <[email protected]>
+ * Initial version:  2012-06-25
+ *
+ *         Purpose:  scoring facility Filters dialog callbacks
+ *
+ *         License:  GPL
+ */
+
+
+#include "ui/misc.hh"
+#include "sf.hh"
+#include "sf_cb.hh"
+
+using namespace std;
+using namespace aghui;
+
+
+extern "C" {
+
+
+void
+eSFFilterHighPassCutoff_value_changed_cb( GtkSpinButton *spinbutton, gpointer 
userdata)
+{
+       auto& FD = *(SScoringFacility::SFiltersDialog*)userdata;
+       double other_freq = gtk_spin_button_get_value( 
FD.eSFFilterLowPassCutoff);
+       gtk_widget_set_sensitive( (GtkWidget*)FD.bSFFilterOK,
+                                 fdim( other_freq, 0.) < 1e-5 || 
gtk_spin_button_get_value( spinbutton) < other_freq);
+}
+
+void
+eSFFilterLowPassCutoff_value_changed_cb( GtkSpinButton *spinbutton, gpointer 
userdata)
+{
+       auto& FD = *(SScoringFacility::SFiltersDialogWidgets*)userdata;
+       gdouble other_freq = gtk_spin_button_get_value( 
FD.eSFFilterHighPassCutoff);
+       gtk_widget_set_sensitive( (GtkWidget*)FD.bSFFilterOK,
+                                 fdim( other_freq, 0.) < 1e-5 || 
gtk_spin_button_get_value( spinbutton) > other_freq);
+}
+
+
+} // extern "C"
+
+
+// eof
diff --git a/src/ui/sf/dialogs/patterns-construct.cc 
b/src/ui/sf/d/patterns-construct.cc
similarity index 100%
rename from src/ui/sf/dialogs/patterns-construct.cc
rename to src/ui/sf/d/patterns-construct.cc
diff --git a/src/ui/sf/dialogs/patterns-draw.cc b/src/ui/sf/d/patterns-draw.cc
similarity index 100%
rename from src/ui/sf/dialogs/patterns-draw.cc
rename to src/ui/sf/d/patterns-draw.cc
diff --git a/src/ui/sf/dialogs/patterns-enumerate.cc 
b/src/ui/sf/d/patterns-enumerate.cc
similarity index 100%
rename from src/ui/sf/dialogs/patterns-enumerate.cc
rename to src/ui/sf/d/patterns-enumerate.cc
diff --git a/src/ui/sf/dialogs/patterns.cc b/src/ui/sf/d/patterns.cc
similarity index 100%
rename from src/ui/sf/dialogs/patterns.cc
rename to src/ui/sf/d/patterns.cc
diff --git a/src/ui/sf/dialogs/patterns.hh b/src/ui/sf/d/patterns.hh
similarity index 100%
rename from src/ui/sf/dialogs/patterns.hh
rename to src/ui/sf/d/patterns.hh
diff --git a/src/ui/sf/dialogs/patterns_cb.cc b/src/ui/sf/d/patterns_cb.cc
similarity index 100%
rename from src/ui/sf/dialogs/patterns_cb.cc
rename to src/ui/sf/d/patterns_cb.cc
diff --git a/src/ui/sf/dialogs/phasediff-construct.cc 
b/src/ui/sf/d/phasediff-construct.cc
similarity index 100%
rename from src/ui/sf/dialogs/phasediff-construct.cc
rename to src/ui/sf/d/phasediff-construct.cc
diff --git a/src/ui/sf/dialogs/phasediff.cc b/src/ui/sf/d/phasediff.cc
similarity index 100%
rename from src/ui/sf/dialogs/phasediff.cc
rename to src/ui/sf/d/phasediff.cc
diff --git a/src/ui/sf/dialogs/phasediff.hh b/src/ui/sf/d/phasediff.hh
similarity index 100%
rename from src/ui/sf/dialogs/phasediff.hh
rename to src/ui/sf/d/phasediff.hh
diff --git a/src/ui/sf/dialogs/phasediff_cb.cc b/src/ui/sf/d/phasediff_cb.cc
similarity index 100%
rename from src/ui/sf/dialogs/phasediff_cb.cc
rename to src/ui/sf/d/phasediff_cb.cc
diff --git a/src/ui/sf/dialogs/phasic-events.cc b/src/ui/sf/d/phasic-events.cc
similarity index 100%
rename from src/ui/sf/dialogs/phasic-events.cc
rename to src/ui/sf/d/phasic-events.cc
diff --git a/src/ui/sf/dialogs/artifacts_cb.cc 
b/src/ui/sf/dialogs/artifacts_cb.cc
deleted file mode 100644
index 31fe8c8..0000000
--- a/src/ui/sf/dialogs/artifacts_cb.cc
+++ /dev/null
@@ -1,209 +0,0 @@
-// ;-*-C++-*-
-/*
- *       File name:  ui/sf/dialogs/artifacts_cb.cc
- *         Project:  Aghermann
- *          Author:  Andrei Zavada <[email protected]>
- * Initial version:  2012-10-05
- *
- *         Purpose:  scoring facility: artifact detection dialog callbacks
- *
- *         License:  GPL
- */
-
-#include "ui/misc.hh"
-#include "sf.hh"
-#include "sf_cb.hh"
-
-using namespace std;
-using namespace aghui;
-
-
-
-void
-eSFADProfiles_changed_cb( GtkComboBox* w, gpointer userdata)
-{
-       auto& SF = *(SScoringFacility*)userdata;
-       auto& AD = SF.artifact_detection_dialog;
-
-       if ( gtk_combo_box_get_active( w) != -1 ) {
-               AD.P = SF._p.global_artifact_detection_profiles[
-                       gtk_combo_box_get_active_id(w)];
-               AD.W_V.up();
-               gtk_widget_set_sensitive( (GtkWidget*)SF.bSFADProfileDelete, 
TRUE);
-       } else
-               gtk_widget_set_sensitive( (GtkWidget*)SF.bSFADProfileDelete, 
FALSE);
-}
-
-void
-bSFADProfileSave_clicked_cb( GtkButton*, gpointer userdata)
-{
-       auto& SF = *(SScoringFacility*)userdata;
-       auto& AD = SF.artifact_detection_dialog;
-
-       if ( GTK_RESPONSE_OK ==
-            gtk_dialog_run( SF.wSFADSaveProfileName) ) {
-               AD.W_V.down();
-               SF._p.global_artifact_detection_profiles[
-                       gtk_entry_get_text( SF.eSFADSaveProfileNameName)] = 
AD.P;
-
-               SF._p.populate_mGlobalADProfiles();
-               SF.populate_mSFADProfiles(); // stupid
-
-               int now_active = 
SF._p.global_artifact_detection_profiles.size()-1;
-               gtk_combo_box_set_active( SF.eSFADProfiles, now_active);
-               gtk_combo_box_set_active( SF._p.eGlobalADProfiles, now_active);
-       }
-}
-
-void
-bSFADProfileDelete_clicked_cb( GtkButton*, gpointer userdata)
-{
-       auto& SF = *(SScoringFacility*)userdata;
-
-       const gchar *deleting_id = gtk_combo_box_get_active_id( 
SF.eSFADProfiles);
-       int deleting = gtk_combo_box_get_active( SF.eSFADProfiles);
-       SF._p.global_artifact_detection_profiles.erase( deleting_id);
-
-       SF._p.populate_mGlobalADProfiles();
-       SF.populate_mSFADProfiles(); // stupid
-
-       if ( SF._p.global_artifact_detection_profiles.size() > 0 &&
-            deleting > (int)SF._p.global_artifact_detection_profiles.size()-1 )
-               gtk_combo_box_set_active( SF.eSFADProfiles, deleting-1);
-
-       g_signal_emit_by_name( SF.eSFADProfiles, "changed");
-}
-
-
-void
-eSFADEstimateE_toggled_cb( GtkToggleButton *b, gpointer userdata)
-{
-       auto& SF = *(SScoringFacility*)userdata;
-       auto state = gtk_toggle_button_get_active( b);
-       gtk_widget_set_visible(
-               (GtkWidget*)SF.cSFADWhenEstimateEOn,
-               state);
-       gtk_widget_set_visible(
-               (GtkWidget*)SF.cSFADWhenEstimateEOff,
-               !state);
-}
-
-void
-eSFADUseThisRange_toggled_cb( GtkToggleButton *b, gpointer userdata)
-{
-       auto& SF = *(SScoringFacility*)userdata;
-       auto state = gtk_toggle_button_get_active( b);
-       gtk_widget_set_sensitive(
-               (GtkWidget*)SF.eSFADHistRangeMin,
-               state);
-       gtk_widget_set_sensitive(
-               (GtkWidget*)SF.eSFADHistRangeMax,
-               state);
-
-       // if ( state ) {
-       //      snprintf_buf( "Estimated <i>E</i> = %4.2f",
-       //                    SF.using_channel -> estimate_E( P));
-       // }
-}
-
-
-
-void
-bSFADApply_clicked_cb( GtkButton*, gpointer userdata)
-{
-       auto& SF = *(SScoringFacility*)userdata;
-       auto& AD = SF.artifact_detection_dialog;
-
-       gtk_widget_hide( (GtkWidget*)SF.wSFAD);
-
-       for ( auto& H : AD.channels_visible_backup )
-               H.first->hidden = H.second;
-       AD.channels_visible_backup.clear();
-       AD.artifacts_backup.clear_all();
-
-       gtk_widget_queue_draw( (GtkWidget*)SF.daSFMontage);
-       gtk_widget_queue_draw( (GtkWidget*)SF.daSFHypnogram);
-}
-
-void
-bSFADCancel_clicked_cb( GtkButton*, gpointer userdata)
-{
-       auto& SF = *(SScoringFacility*)userdata;
-       auto& AD = SF.artifact_detection_dialog;
-
-       gtk_widget_hide( (GtkWidget*)SF.wSFAD);
-
-       if ( gtk_toggle_button_get_active(SF.bSFADPreview) ) {
-               SF.using_channel -> artifacts = AD.artifacts_backup;
-               SF.using_channel -> get_signal_filtered();
-
-               gtk_widget_queue_draw( (GtkWidget*)SF.daSFMontage);
-               gtk_widget_queue_draw( (GtkWidget*)SF.daSFHypnogram);
-       }
-
-       for ( auto& H : AD.channels_visible_backup )
-               H.first->hidden = H.second;
-       AD.channels_visible_backup.clear();
-       AD.artifacts_backup.clear_all();
-}
-
-void
-bSFADPreview_toggled_cb( GtkToggleButton *b, gpointer userdata)
-{
-       auto& SF = *(SScoringFacility*)userdata;
-       auto& AD = SF.artifact_detection_dialog;
-
-       if ( AD.suppress_preview_handler )
-               return;
-
-       if ( gtk_toggle_button_get_active(b) ) {
-               aghui::SBusyBlock bb (SF.wSFAD);
-
-               AD.orig_signal_visible_backup = 
SF.using_channel->draw_original_signal;
-               AD.artifacts_backup = SF.using_channel->artifacts;
-
-               SF.using_channel -> detect_artifacts( (AD.W_V.down(), AD.P));
-               SF.using_channel -> draw_original_signal = true;
-               gtk_widget_set_sensitive( (GtkWidget*)SF.bSFADApply, TRUE);
-
-               AD.channels_visible_backup.clear();
-               if ( gtk_toggle_button_get_active( 
(GtkToggleButton*)SF.eSFADSingleChannelPreview) )
-                       for ( auto& H : SF.channels ) {
-                               AD.channels_visible_backup.emplace_back(
-                                       &H, H.hidden);
-                               if ( &H != SF.using_channel )
-                                       H.hidden = true;
-                       }
-
-       } else {
-               SF.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;
-               gtk_widget_set_sensitive( (GtkWidget*)SF.bSFADApply, FALSE);
-       }
-
-       SF.using_channel -> get_signal_filtered();
-
-       snprintf_buf( "%4.2f%% marked", 
SF.using_channel->calculate_dirty_percent() * 100);
-       gtk_label_set_markup( SF.lSFADDirtyPercent, __buf__);
-
-       gtk_widget_queue_draw( (GtkWidget*)SF.daSFMontage);
-       gtk_widget_queue_draw( (GtkWidget*)SF.daSFHypnogram);
-}
-
-
-gboolean
-wSFAD_delete_event_cb(GtkWidget*, GdkEvent*, gpointer userdata)
-{
-       bSFADCancel_clicked_cb( NULL, userdata);
-       return TRUE;
-}
-
-void
-wSFAD_close_cb(GtkWidget*, gpointer userdata)
-{
-       bSFADCancel_clicked_cb( NULL, userdata);
-}
-
-// eof
diff --git a/src/ui/sf/dialogs/filter.cc b/src/ui/sf/dialogs/filter.cc
deleted file mode 100644
index 6ebb684..0000000
--- a/src/ui/sf/dialogs/filter.cc
+++ /dev/null
@@ -1,26 +0,0 @@
-// ;-*-C++-*-
-/*
- *       File name:  ui/sf/sf-filter.cc
- *         Project:  Aghermann
- *          Author:  Andrei Zavada <[email protected]>
- * Initial version:  2011-01-30
- *
- *         Purpose:  scoring facility Butterworth filter dialog
- *
- *         License:  GPL
- */
-
-
-#include "sf.hh"
-
-using namespace std;
-
-aghui::SScoringFacility::SFiltersDialog::
-~SFiltersDialog()
-{
-       gtk_widget_destroy( (GtkWidget*)_p.wSFFilters);
-       // done in a swoop in ~SF
-}
-
-
-// eof
diff --git a/src/ui/sf/dialogs/filter_cb.cc b/src/ui/sf/dialogs/filter_cb.cc
deleted file mode 100644
index 6f0b553..0000000
--- a/src/ui/sf/dialogs/filter_cb.cc
+++ /dev/null
@@ -1,83 +0,0 @@
-// ;-*-C++-*-
-/*
- *       File name:  ui/sf/sf-filter_cb.cc
- *         Project:  Aghermann
- *          Author:  Andrei Zavada <[email protected]>
- * Initial version:  2012-06-25
- *
- *         Purpose:  scoring facility Filters dialog callbacks
- *
- *         License:  GPL
- */
-
-
-#include "ui/misc.hh"
-#include "sf.hh"
-#include "sf_cb.hh"
-
-using namespace std;
-using namespace aghui;
-
-
-extern "C" {
-
-void
-iSFPageFilter_activate_cb( GtkMenuItem *menuitem, gpointer userdata)
-{
-       auto& SF = *(SScoringFacility*)userdata;
-       auto& FD =  SF.filters_dialog;
-       auto& H  = *SF.using_channel;
-       aghui::SUIVarCollection WV;
-       WV.reg( FD._p.eSFFilterLowPassCutoff,  &H.filters.low_pass_cutoff);
-       WV.reg( FD._p.eSFFilterLowPassOrder,  (int*)&H.filters.low_pass_order);
-       WV.reg( FD._p.eSFFilterHighPassCutoff, &H.filters.high_pass_cutoff);
-       WV.reg( FD._p.eSFFilterHighPassOrder, (int*)&H.filters.high_pass_order);
-       WV.reg( FD._p.eSFFilterNotchFilter,   (int*)&H.filters.notch_filter);
-       WV.up();
-
-       snprintf_buf( "<big>Filters for channel <b>%s</b></big>", 
SF.using_channel->name);
-       gtk_label_set_markup( FD._p.lSFFilterCaption,
-                             __buf__);
-
-       if ( gtk_dialog_run( FD._p.wSFFilters) == GTK_RESPONSE_OK ) {
-               WV.down();
-               H.get_signal_filtered();
-
-               if ( H.type == sigfile::SChannel::TType::eeg ) {
-                       H.get_psd_course();
-                       H.get_psd_in_bands();
-                       H.get_spectrum( SF.cur_page());
-                       H.get_mc_course();
-               }
-               gtk_widget_queue_draw( (GtkWidget*)SF.daSFMontage);
-
-               if ( strcmp( SF.using_channel->name, SF._p.AghH()) == 0 )
-                       SF.redraw_ssubject_timeline();
-       }
-}
-
-
-
-void
-eSFFilterHighPassCutoff_value_changed_cb( GtkSpinButton *spinbutton, gpointer 
userdata)
-{
-       auto& SF = *(SScoringFacility*)userdata;
-       double other_freq = gtk_spin_button_get_value( 
SF.eSFFilterLowPassCutoff);
-       gtk_widget_set_sensitive( (GtkWidget*)SF.bSFFilterOK,
-                                 fdim( other_freq, 0.) < 1e-5 || 
gtk_spin_button_get_value( spinbutton) < other_freq);
-}
-
-void
-eSFFilterLowPassCutoff_value_changed_cb( GtkSpinButton *spinbutton, gpointer 
userdata)
-{
-       auto& SF = *(SScoringFacility*)userdata;
-       gdouble other_freq = gtk_spin_button_get_value( 
SF.eSFFilterHighPassCutoff);
-       gtk_widget_set_sensitive( (GtkWidget*)SF.bSFFilterOK,
-                                 fdim( other_freq, 0.) < 1e-5 || 
gtk_spin_button_get_value( spinbutton) > other_freq);
-}
-
-
-} // extern "C"
-
-
-// eof
diff --git a/src/ui/sf/dialogs/filters-construct.cc 
b/src/ui/sf/dialogs/filters-construct.cc
deleted file mode 100644
index 4549b31..0000000
--- a/src/ui/sf/dialogs/filters-construct.cc
+++ /dev/null
@@ -1,20 +0,0 @@
-       // aghui::SScoringFacility::SFiltersDialog::
-
-      // ------- wSFFilter
-       if ( !AGH_GBGETOBJ (GtkDialog,          wSFFilters) ||
-            !AGH_GBGETOBJ (GtkLabel,           lSFFilterCaption) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSFFilterLowPassCutoff) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSFFilterLowPassOrder) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSFFilterHighPassCutoff) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSFFilterHighPassOrder) ||
-            !AGH_GBGETOBJ (GtkComboBox,        eSFFilterNotchFilter) ||
-            !AGH_GBGETOBJ (GtkListStore,       mSFFilterNotchFilter) ||
-            !AGH_GBGETOBJ (GtkButton,          bSFFilterOK) )
-               throw runtime_error ("Failed to construct SF widgets (10)");
-
-       gtk_combo_box_set_model_properly(
-               eSFFilterNotchFilter, mSFFilterNotchFilter); // can't reuse 
_p.mNotchFilter
-
-       G_CONNECT_2 (eSFFilterHighPassCutoff, value, changed);
-       G_CONNECT_2 (eSFFilterLowPassCutoff, value, changed);
-
diff --git a/src/ui/sf/dialogs/filters.hh b/src/ui/sf/dialogs/filters.hh
deleted file mode 100644
index 3c7bfb2..0000000
--- a/src/ui/sf/dialogs/filters.hh
+++ /dev/null
@@ -1,32 +0,0 @@
-
-       struct SFiltersDialog {
-               DELETE_DEFAULT_METHODS (SFiltersDialog);
-
-               SFiltersDialog (SScoringFacility& parent)
-                     : _p (parent)
-                       {}
-             ~SFiltersDialog ();
-
-               SUIVarCollection
-                       W_V;
-
-               SScoringFacility&
-                       _p;
-       };
-
-
-
-       // filters dialog
-       GtkDialog
-               *wSFFilters;
-       GtkLabel
-               *lSFFilterCaption;
-       GtkSpinButton
-               *eSFFilterLowPassCutoff, *eSFFilterHighPassCutoff,
-               *eSFFilterLowPassOrder, *eSFFilterHighPassOrder;
-       GtkComboBox
-               *eSFFilterNotchFilter;
-       GtkListStore
-               *mSFFilterNotchFilter;
-       GtkButton
-               *bSFFilterOK;
diff --git a/src/ui/sf/montage_cb.cc b/src/ui/sf/montage_cb.cc
index 0d97549..087ea2c 100644
--- a/src/ui/sf/montage_cb.cc
+++ b/src/ui/sf/montage_cb.cc
@@ -124,7 +124,7 @@ daSFMontage_button_press_event_cb( GtkWidget *wid, 
GdkEventButton *event, gpoint
                    break;
                case 3:
                        Ch->update_power_check_menu_items();
-                       gtk_menu_popup( SF.iiSFPower,
+                       gtk_menu_popup( SF.iiSFPaower,
                                        NULL, NULL, NULL, NULL, 3, event->time);
                    break;
                }
@@ -619,6 +619,36 @@ iSFPageDrawEMGProfile_toggled_cb( GtkCheckMenuItem 
*checkmenuitem, gpointer user
 
 
 void
+iSFPageFilter_activate_cb( GtkMenuItem *menuitem, gpointer userdata)
+{
+       auto& SF = *(SScoringFacility*)userdata;
+       auto& FD =  SF.filters_d();
+       auto& H  = *SF.using_channel;
+       FD.W_V.up();
+
+       snprintf_buf( "<big>Filters for channel <b>%s</b></big>", 
SF.using_channel->name);
+       gtk_label_set_markup( SF.lSFFilterCaption,
+                             __buf__);
+
+       if ( gtk_dialog_run( SF.wSFFilters) == GTK_RESPONSE_OK ) {
+               FD.W_V.down();
+               H.get_signal_filtered();
+
+               if ( H.type == sigfile::SChannel::TType::eeg ) {
+                       H.get_psd_course();
+                       H.get_psd_in_bands();
+                       H.get_spectrum( SF.cur_page());
+                       H.get_mc_course();
+               }
+               gtk_widget_queue_draw( (GtkWidget*)SF.daSFMontage);
+
+               if ( strcmp( SF.using_channel->name, SF._p.AghH()) == 0 )
+                       SF.redraw_ssubject_timeline();
+       }
+}
+
+
+void
 iSFPageArtifactsDetect_activate_cb( GtkMenuItem*, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
diff --git a/src/ui/sf/sf.cc b/src/ui/sf/sf.cc
index 00ace08..95267c0 100644
--- a/src/ui/sf/sf.cc
+++ b/src/ui/sf/sf.cc
@@ -80,10 +80,10 @@ SScoringFacility (agh::CSubject& J,
                confval::SValidator<float>("montage.interchannel_gap",  
&interchannel_gap,      confval::SValidator<float>::SVFRangeIn (0., 400.)),
                confval::SValidator<float>("montage.height",            &da_ht, 
                confval::SValidator<float>::SVFRangeIn (10., 4000.)),
        }),
-       patterns_dialog (nullptr),
-       filters_dialog (nullptr),
-       phasediff_dialog (nullptr),
-       artifact_dialog (nullptr),
+       _patterns_d (nullptr),
+       _filters_d (nullptr),
+       _phasediff_d (nullptr),
+       _artifact_d (nullptr),
        using_channel (nullptr),
        da_ht (NAN) // bad value, to be estimated unless previously saved
 {
@@ -265,14 +265,14 @@ aghui::SScoringFacility::
        if ( ica )
                delete ica;
 
-       if ( artifacts_dialog )
-               delete artifacts_dialog;
-       if ( patterns_dialog )
-               delete patterns_dialog;
-       if ( phasediff_dialog )
-               delete phasediff_dialog;
-       if ( filters_dialog )
-               delete filters_dialog;
+       if ( _artifacts_d )
+               delete _artifacts_d;
+       if ( _patterns_d )
+               delete _patterns_d;
+       if ( _phasediff_d )
+               delete _phasediff_d;
+       if ( _filters_d )
+               delete _filters_d;
 
        // put scores
        put_hypnogram();
diff --git a/src/ui/sf/sf.hh b/src/ui/sf/sf.hh
index 2762bcb..a200b96 100644
--- a/src/ui/sf/sf.hh
+++ b/src/ui/sf/sf.hh
@@ -1,4 +1,3 @@
-// ;-*-C++-*-
 /*
  *       File name:  ui/sf/sf.hh
  *         Project:  Aghermann
@@ -23,13 +22,14 @@
 #include "common/config-validate.hh"
 #include "sigproc/winfun.hh"
 #include "sigproc/sigproc.hh"
+#include "metrics/mc-artifacts.hh"
 #include "metrics/phasic-events.hh"
 #include "expdesign/primaries.hh"
 #include "ica/ica.hh"
 #include "ui/globals.hh"
 #include "ui/ui++.hh"
 #include "ui/mw/mw.hh"
-#include "sf-widgets.hh"
+#include "widgets.hh"
 
 #if HAVE_CONFIG_H && !defined(VERSION)
 #  include "config.h"
@@ -495,23 +495,51 @@ class SScoringFacility
        void set_tooltip( TTipIdx i) const;
 
       // child dialogs:
+    public:
        struct SPatternsDialog;
-       SPatternsDialog
-               *patterns_dialog;
-
+       SPatternsDialog&
+       patterns_d()
+               {
+                       if ( not _patterns_d )
+                               _patterns_d = new SPatternsDialog(*this);
+                       return *_patterns_d;
+               }
        struct SFiltersDialog;
-       SFiltersDialog
-               *filters_dialog;
-
+       SFiltersDialog&
+       filters_d()
+               {
+                       if ( not _filters_d )
+                               _filters_d = new SFiltersDialog(*this);
+                       return *_filters_d;
+               }
        struct SPhasediffDialog;
+       SPhasediffDialog&
+       phasediff_d()
+               {
+                       if ( not _phasediff_d )
+                               _phasediff_d = new SPhasediffDialog(*this);
+                       return *_phasediff_d;
+               }
+       struct SArtifactsDialog;
+       SArtifactsDialog
+       artifacts_d()
+               {
+                       if ( not _artifacts_d )
+                               _artifacts_d = new SArtifactsDialog(*this);
+                       return *_artifacts_d;
+               }
+    private:
+       SPatternsDialog
+               *_patterns_d;
+       SFiltersDialog
+               *_filters_d;
        SPhasediffDialog
-               *phasediff_dialog;
-
-       struct SArtifactDetectionDialog;
+               *_phasediff_d;
        SArtifactDetectionDialog
-               *artifact_dialog;
+               *_artifact_d;
        void populate_mSFADProfiles();
 
+    public:
       // menu support
        SChannel
                *using_channel;
diff --git a/src/ui/sf/sf_cb.hh b/src/ui/sf/sf_cb.hh
index a8c99e8..873ce9d 100644
--- a/src/ui/sf/sf_cb.hh
+++ b/src/ui/sf/sf_cb.hh
@@ -1,4 +1,3 @@
-// ;-*-C++-*-
 /*
  *       File name:  ui/sf/sf_cb.hh
  *         Project:  Aghermann
@@ -10,8 +9,8 @@
  *         License:  GPL
  */
 
-#ifndef _AGH_UI_SCORING_FACILITY_CB_H
-#define _AGH_UI_SCORING_FACILITY_CB_H
+#ifndef _AGH_UI_SF_CB_H
+#define _AGH_UI_SF_CB_H
 
 #include <gtk/gtk.h>
 
@@ -111,16 +110,6 @@ void iSFPageSelectionDrawEnvelope_toggled_cb( 
GtkCheckMenuItem*, gpointer);
 void iSFPageSelectionDrawDzxdf_toggled_cb( GtkCheckMenuItem*, gpointer);
 
 
-gboolean wSFAD_delete_event_cb(GtkWidget*, GdkEvent*, gpointer);
-void wSFAD_close_cb(GtkWidget*, gpointer);
-void eSFADProfiles_changed_cb( GtkComboBox*, gpointer);
-void bSFADProfileSave_clicked_cb( GtkButton*, gpointer);
-void bSFADProfileDelete_clicked_cb( GtkButton*, gpointer);
-void eSFADEstimateE_toggled_cb( GtkToggleButton*, gpointer);
-void eSFADUseThisRange_toggled_cb( GtkToggleButton*, gpointer);
-void bSFADPreview_toggled_cb( GtkToggleButton*, gpointer);
-void bSFADApply_clicked_cb( GtkButton*, gpointer);
-void bSFADCancel_clicked_cb( GtkButton*, gpointer);
 
 void iSFICAPageMapIC_activate_cb( GtkRadioMenuItem*, gpointer);
 
@@ -168,9 +157,6 @@ void wSFFD_show_cb( GtkWidget*, gpointer);
 void wSFFD_hide_cb( GtkWidget*, gpointer);
 gboolean wSFFD_configure_event_cb( GtkWidget*, GdkEventConfigure*, gpointer);
 
-void eSFFilterHighPassCutoff_value_changed_cb( GtkSpinButton*, gpointer);
-void eSFFilterLowPassCutoff_value_changed_cb( GtkSpinButton*, gpointer);
-
 void eSFPDChannelA_changed_cb( GtkComboBox*, gpointer);
 void eSFPDChannelB_changed_cb( GtkComboBox*, gpointer);
 gboolean daSFPD_draw_cb( GtkWidget*, cairo_t*, gpointer);
@@ -187,6 +173,9 @@ gboolean wSF_delete_event_cb( GtkWidget*, GdkEvent*, 
gpointer);
 
 } // extern "C"
 
-#endif // _AGH_UI_SCORING_FACILITY_CB_H
+#endif // _AGH_UI_SF_
+
 
-// eof
+// Local Variables:
+// indent-tabs-mode: 8
+// End:
diff --git a/src/ui/sf/widgets.hh b/src/ui/sf/widgets.hh
index 1163859..2af83da 100644
--- a/src/ui/sf/widgets.hh
+++ b/src/ui/sf/widgets.hh
@@ -1,6 +1,5 @@
-// ;-*-C++-*-
 /*
- *       File name:  ui/sf/sf-widgets.hh
+ *       File name:  ui/sf/widgets.hh
  *         Project:  Aghermann
  *          Author:  Andrei Zavada <[email protected]>
  * Initial version:  2012-10-06
@@ -24,7 +23,7 @@ struct SScoringFacilityWidgets {
        // ourself, for every SScoringFacility instance being created, so
        // construct_widgets below takes an arg
        GtkBuilder *builder;
-       SScoringFacilityWidgets (SExpDesignUI&);
+       SScoringFacilityWidgets ();
        ~SScoringFacilityWidgets ();
 
        // storage

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