[med-svn] [SCM] aghermann branch, master, updated. f0d4c0fd35bf09e7dff56ddb9a2d798ae916c2ef

Andrei Zavada johnhommer at gmail.com
Sun Feb 3 12:52:54 UTC 2013


The following commit has been merged in the master branch:
commit ac46cfd9a233bd2e34707141e89a0adeb750239d
Author: Andrei Zavada <johnhommer at gmail.com>
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 <johnhommer at gmail.com>
  * 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 <johnhommer at gmail.com>
  * 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 <johnhommer at gmail.com>
  * 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 <johnhommer at gmail.com>
  * 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 <johnhommer at gmail.com>
+ * 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 <johnhommer at gmail.com>
+ * 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 <johnhommer at gmail.com>
+ * 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 <johnhommer at gmail.com>
+ * 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 <johnhommer at gmail.com>
+ * 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 <johnhommer at gmail.com>
- * 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 <johnhommer at gmail.com>
- * 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 <johnhommer at gmail.com>
- * 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 <johnhommer at gmail.com>
  * 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



More information about the debian-med-commit mailing list