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

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


The following commit has been merged in the master branch:
commit 39002cbc24011368a4ff53f8062f2aed28bf0bf6
Author: Andrei Zavada <johnhommer at gmail.com>
Date:   Fri Jan 25 19:45:36 2013 +0200

    WIP

diff --git a/src/Makefile.am b/src/Makefile.am
index 1e2726f..3136dde 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -22,6 +22,7 @@ aghermann_LDADD := \
 	ui/sm/liba.a \
 	ui/mw/liba.a \
 	ui/sf/liba.a \
+	ui/sf/d/liba.a \
 	ui/mf/liba.a \
 	ui/liba.a \
 	model/liba.a \
diff --git a/src/ui/sf/Makefile.am b/src/ui/sf/Makefile.am
index 40b8a7b..c241642 100644
--- a/src/ui/sf/Makefile.am
+++ b/src/ui/sf/Makefile.am
@@ -24,14 +24,12 @@ liba_a_SOURCES := \
 	widgets.hh \
 	sf.cc \
 	sf.hh \
-	sf_cb.cc \
-	sf_cb.hh
+	sf_cb.cc
 
 if DO_PCH
 BUILT_SOURCES = \
 	sf.hh.gch \
-	widgets.hh.gch \
-	sf_cb.hh.gch
+	widgets.hh.gch
 %.hh.gch: %.hh
 	$(CXXCOMPILE) -c $<
 CLEANFILES := \
diff --git a/src/ui/sf/channel.cc b/src/ui/sf/channel.cc
index 2316a4f..e47c8c6 100644
--- a/src/ui/sf/channel.cc
+++ b/src/ui/sf/channel.cc
@@ -18,6 +18,8 @@
 #include "sigproc/exstrom.hh"
 #include "ui/globals.hh"
 #include "sf.hh"
+#include "d/artifacts.hh"
+#include "d/patterns.hh"
 
 using namespace std;
 
@@ -463,11 +465,8 @@ void
 aghui::SScoringFacility::SChannel::
 mark_region_as_pattern()
 {
-	if ( not _p.find_dialog )
-		_p.find_dialog =
-			new aghui::SScoringFacility::SFindDialog (_p);
-	_p.find_dialog.import_from_selection( *this);
-	gtk_widget_show( (GtkWidget*)_p.wSFFD);
+	_p.patterns_d().import_from_selection( *this);
+	gtk_widget_show( (GtkWidget*)_p.patterns_d().wSFFD);
 }
 
 
@@ -574,8 +573,8 @@ aghui::SScoringFacility::SChannel::
 _put_selection()
 {
 	if ( selection_end_time - selection_start_time > 1. ) {
-		_p.artifact_detection_dialog.W_V.down();
-		auto& P = _p.artifact_detection_dialog.P;
+		_p.artifacts_d().W_V.down();
+		auto& P = _p.artifacts_d().P;
 		auto sssu =
 			metrics::mc::do_sssu_reduction(
 				valarray<TFloat> {signal_filtered[ slice (selection_start, (selection_end - selection_start), 1) ]},
diff --git a/src/ui/sf/construct.cc b/src/ui/sf/construct.cc
index 3dc2fc8..8d3a124 100644
--- a/src/ui/sf/construct.cc
+++ b/src/ui/sf/construct.cc
@@ -14,14 +14,13 @@
 
 #include "ui/mw/mw.hh"
 #include "ui/ui.hh"
-#include "widgets.hh"
-#include "sf_cb.hh"
+#include "sf.hh"
 
 using namespace std;
 
 
 aghui::SScoringFacilityWidgets::
-SScoringFacilityWidgets (SExpDesignUI& _p)
+SScoringFacilityWidgets ()
 {
 	builder = gtk_builder_new();
 	if ( !gtk_builder_add_from_resource( builder, "/org/gtk/aghermann/sf.glade", NULL) )
diff --git a/src/ui/sf/d/Makefile.am b/src/ui/sf/d/Makefile.am
index 628b1bf..027a390 100644
--- a/src/ui/sf/d/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)  $(CAIRO_CFLAGS) \
+	$(GTK_CFLAGS)  $(UNIQUE_CFLAGS) $(CAIRO_CFLAGS) \
 	-DPACKAGE_DATADIR=\"$(datadir)\" \
 	$(OPENMP_CXXFLAGS) \
 	-I$(top_srcdir)/src
diff --git a/src/ui/sf/d/artifacts-construct.cc b/src/ui/sf/d/artifacts-construct.cc
index 2170f25..6537180 100644
--- a/src/ui/sf/d/artifacts-construct.cc
+++ b/src/ui/sf/d/artifacts-construct.cc
@@ -17,8 +17,8 @@
 using namespace std;
 
 
-aghui::SScoringFacility::SArtifactsDialogWidgets::
-SArtifactsDialogWidgets (SScoringFacility& _p)
+aghui::SArtifactsDialogWidgets::
+SArtifactsDialogWidgets ()
 {
 	builder = gtk_builder_new();
 	if ( !gtk_builder_add_from_resource( builder, "/org/gtk/aghermann/sf-artifacts.glade", NULL) )
@@ -76,6 +76,15 @@ SArtifactsDialogWidgets (SScoringFacility& _p)
 	G_CONNECT_1 (bSFADCancel, clicked);
 }
 
+
+aghui::SArtifactsDialogWidgets::
+~SArtifactsDialogWidgets ()
+{
+	gtk_widget_destroy( (GtkWidget*)wSFAD);
+	g_object_unref( (GObject*)builder);
+}
+
+
 // Local Variables:
 // indent-tabs-mode: 8
 // End:
diff --git a/src/ui/sf/d/artifacts.cc b/src/ui/sf/d/artifacts.cc
index 71de3a4..70cbf3e 100644
--- a/src/ui/sf/d/artifacts.cc
+++ b/src/ui/sf/d/artifacts.cc
@@ -42,25 +42,21 @@ SArtifactsDialog (aghui::SScoringFacility& p_)
 	W_V.reg( eSFADHistBins,		(int*)&P.sssu_hist_size);
 	W_V.reg( eSFADSmoothSide,	(int*)&P.smooth_side);
 	W_V.reg( eSFADUseThisRange,	&P.use_range);
+
+	populate_mSFADProfiles();
 }
 
 
-aghui::SScoringFacility::SArtifactDetectionDialog::
-~SArtifactDetectionDialog ()
-{
-	gtk_widget_destroy( (GtkWidget*)_p.wSFAD);
-	g_object_unref( (GObject*)builder);
-}
 
 
 // maybe it's not needed in GTK+ 3?
 void
-aghui::SScoringFacility::
+aghui::SScoringFacility::SArtifactsDialog::
 populate_mSFADProfiles()
 {
 	g_signal_handler_block( eSFADProfiles, eSFADProfiles_changed_cb_handler_id);
 	gtk_list_store_clear( mSFADProfiles);
-	for ( auto &P : _p.global_artifact_detection_profiles ) {
+	for ( auto &P : _p._p.global_artifact_detection_profiles ) {
 		GtkTreeIter iter;
 		gtk_list_store_append( mSFADProfiles, &iter);
 		gtk_list_store_set( mSFADProfiles, &iter,
diff --git a/src/ui/sf/d/artifacts.hh b/src/ui/sf/d/artifacts.hh
index 3a695c6..ae54428 100644
--- a/src/ui/sf/d/artifacts.hh
+++ b/src/ui/sf/d/artifacts.hh
@@ -29,31 +29,6 @@ using namespace std;
 
 namespace aghui {
 
-struct SArtifactsDialogWidgets;
-
-struct SScoringFacility::SArtifactsDialog
-    : public SArtifactsDialog {
-
-	DELETE_DEFAULT_METHODS (SArtifactDetectionDialog);
-
-	SArtifactsDialog (SScoringFacility&);
-       ~SArtifactsDialog ();
-
-	metrics::mc::SArtifactDetectionPP
-		P;
-	sigfile::SArtifacts
-		artifacts_backup;
-	bool	orig_signal_visible_backup;
-	list<pair<SScoringFacility::SChannel*, bool>>
-		channels_visible_backup;
-	bool	suppress_preview_handler;
-	SUIVarCollection
-		W_V;
-
-	SScoringFacility&
-		_p;
-};
-
 struct SArtifactsDialogWidgets {
 
 	SArtifactsDialogWidgets ();
@@ -108,6 +83,32 @@ struct SArtifactsDialogWidgets {
 		*eSFADSaveProfileNameName;
 };
 
+struct SScoringFacility::SArtifactsDialog
+    : public SArtifactsDialogWidgets {
+
+	DELETE_DEFAULT_METHODS (SArtifactsDialog);
+
+	SArtifactsDialog (SScoringFacility&);
+       ~SArtifactsDialog ();
+
+	metrics::mc::SArtifactDetectionPP
+		P;
+	sigfile::SArtifacts
+		artifacts_backup;
+	bool	orig_signal_visible_backup;
+	list<pair<SScoringFacility::SChannel*, bool>>
+		channels_visible_backup;
+	bool	suppress_preview_handler;
+	SUIVarCollection
+		W_V;
+
+	SScoringFacility&
+		_p;
+
+	void populate_mSFADProfiles();
+};
+
+
 } // namespace aghui
 
 
@@ -125,6 +126,8 @@ void bSFADApply_clicked_cb( GtkButton*, gpointer);
 void bSFADCancel_clicked_cb( GtkButton*, gpointer);
 }
 
+#endif // _AGH_UI_SF_ARTIFACTS_H
+
 // 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
index 4229cc9..a4d98f6 100644
--- a/src/ui/sf/d/artifacts_cb.cc
+++ b/src/ui/sf/d/artifacts_cb.cc
@@ -10,8 +10,7 @@
  */
 
 #include "ui/misc.hh"
-#include "sf.hh"
-#include "sf_cb.hh"
+#include "artifacts.hh"
 
 using namespace std;
 using namespace aghui;
@@ -21,10 +20,11 @@ using namespace aghui;
 void
 eSFADProfiles_changed_cb( GtkComboBox* w, gpointer userdata)
 {
-	auto& SD = *(SScoringFacility::SArtifactsDialog*)userdata;
+	auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+	auto& SF = AD._p;
 
 	if ( gtk_combo_box_get_active( w) != -1 ) {
-		AD.P = AD._p._p.global_artifact_detection_profiles[
+		AD.P = SF._p.global_artifact_detection_profiles[
 			gtk_combo_box_get_active_id(w)];
 		AD.W_V.up();
 		gtk_widget_set_sensitive( (GtkWidget*)AD.bSFADProfileDelete, TRUE);
@@ -36,19 +36,20 @@ void
 bSFADProfileSave_clicked_cb( GtkButton*, gpointer userdata)
 {
 	auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+	auto& SF = AD._p;
 
 	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;
+		SF._p.global_artifact_detection_profiles[
+			gtk_entry_get_text( AD.eSFADSaveProfileNameName)] = AD.P;
 
-		AD._p._p.populate_mGlobalADProfiles();
+		SF._p.populate_mGlobalADProfiles();
 		AD.populate_mSFADProfiles(); // stupid
 
-		int now_active = AD._p._p.global_artifact_detection_profiles.size()-1;
+		int now_active = SF._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);
+		gtk_combo_box_set_active( SF._p.eGlobalADProfiles, now_active);
 	}
 }
 
@@ -56,16 +57,17 @@ void
 bSFADProfileDelete_clicked_cb( GtkButton*, gpointer userdata)
 {
 	auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+	auto& SF = AD._p;
 
 	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);
+	SF._p.global_artifact_detection_profiles.erase( deleting_id);
 
-	AD._p._p.populate_mGlobalADProfiles();
-	AD._p.populate_mSFADProfiles(); // stupid
+	SF._p.populate_mGlobalADProfiles();
+	AD.populate_mSFADProfiles(); // stupid
 
-	if ( AD._p._p.global_artifact_detection_profiles.size() > 0 &&
-	     deleting > (int)AD._p._p.global_artifact_detection_profiles.size()-1 )
+	if ( SF._p.global_artifact_detection_profiles.size() > 0 &&
+	     deleting > (int)SF._p.global_artifact_detection_profiles.size()-1 )
 		gtk_combo_box_set_active( AD.eSFADProfiles, deleting-1);
 
 	g_signal_emit_by_name( AD.eSFADProfiles, "changed");
@@ -76,6 +78,7 @@ 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,
@@ -89,6 +92,7 @@ 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,
@@ -109,6 +113,7 @@ void
 bSFADApply_clicked_cb( GtkButton*, gpointer userdata)
 {
 	auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+	auto& SF = AD._p;
 
 	gtk_widget_hide( (GtkWidget*)AD.wSFAD);
 
@@ -117,23 +122,24 @@ bSFADApply_clicked_cb( GtkButton*, gpointer userdata)
 	AD.channels_visible_backup.clear();
 	AD.artifacts_backup.clear_all();
 
-	gtk_widget_queue_draw( (GtkWidget*)AD.daSFMontage);
-	gtk_widget_queue_draw( (GtkWidget*)AD.daSFHypnogram);
+	gtk_widget_queue_draw( (GtkWidget*)SF.daSFMontage);
+	gtk_widget_queue_draw( (GtkWidget*)SF.daSFHypnogram);
 }
 
 void
 bSFADCancel_clicked_cb( GtkButton*, gpointer userdata)
 {
 	auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+	auto& SF = AD._p;
 
 	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();
+		SF.using_channel -> artifacts = AD.artifacts_backup;
+		SF.using_channel -> get_signal_filtered();
 
-		gtk_widget_queue_draw( (GtkWidget*)AD.daSFMontage);
-		gtk_widget_queue_draw( (GtkWidget*)AD.daSFHypnogram);
+		gtk_widget_queue_draw( (GtkWidget*)SF.daSFMontage);
+		gtk_widget_queue_draw( (GtkWidget*)SF.daSFHypnogram);
 	}
 
 	for ( auto& H : AD.channels_visible_backup )
@@ -146,6 +152,7 @@ void
 bSFADPreview_toggled_cb( GtkToggleButton *b, gpointer userdata)
 {
 	auto& AD = *(SScoringFacility::SArtifactsDialog*)userdata;
+	auto& SF = AD._p;
 
 	if ( AD.suppress_preview_handler )
 		return;
@@ -153,16 +160,16 @@ bSFADPreview_toggled_cb( GtkToggleButton *b, gpointer userdata)
 	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.orig_signal_visible_backup = SF.using_channel->draw_original_signal;
+		AD.artifacts_backup = SF.using_channel->artifacts;
 
-		AD._p.using_channel -> detect_artifacts( (AD.W_V.down(), AD.P));
-		AD._p.using_channel -> draw_original_signal = true;
+		SF.using_channel -> detect_artifacts( (AD.W_V.down(), AD.P));
+		SF.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 ) {
+			for ( auto& H : SF.channels ) {
 				AD.channels_visible_backup.emplace_back(
 					&H, H.hidden);
 				if ( &H != SF.using_channel )
@@ -170,20 +177,20 @@ bSFADPreview_toggled_cb( GtkToggleButton *b, gpointer userdata)
 			}
 
 	} else {
-		AD._p.using_channel->artifacts = AD.artifacts_backup;
+		SF.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;
+		SF.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();
+	SF.using_channel -> get_signal_filtered();
 
-	snprintf_buf( "%4.2f%% marked", AD._p.using_channel->calculate_dirty_percent() * 100);
+	snprintf_buf( "%4.2f%% marked", SF.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);
+	gtk_widget_queue_draw( (GtkWidget*)SF.daSFMontage);
+	gtk_widget_queue_draw( (GtkWidget*)SF.daSFHypnogram);
 }
 
 
@@ -195,7 +202,7 @@ wSFAD_show_cb( GtkWidget*, gpointer userdata)
 	auto& SF = AD._p;
 
 	AD.W_V.up();
-	SF.populate_mSFADProfiles();
+	AD.populate_mSFADProfiles();
 	g_signal_emit_by_name( AD.eSFADProfiles, "changed");
 
 	g_signal_emit_by_name( AD.eSFADEstimateE, "toggled");
diff --git a/src/ui/sf/d/filters-construct.cc b/src/ui/sf/d/filters-construct.cc
index e5b3eda..301b078 100644
--- a/src/ui/sf/d/filters-construct.cc
+++ b/src/ui/sf/d/filters-construct.cc
@@ -16,9 +16,8 @@
 
 using namespace std;
 
-
-aghui::SScoringFacility::SFiltersDialogWidgets::
-SFiltersDialogWidgets (SScoringFacility& _p)
+aghui::SFiltersDialogWidgets::
+SFiltersDialogWidgets ()
 {
 	builder = gtk_builder_new();
 	if ( !gtk_builder_add_from_resource( builder, "/org/gtk/aghermann/sf-filters.glade", NULL) )
@@ -43,6 +42,15 @@ SFiltersDialogWidgets (SScoringFacility& _p)
 	G_CONNECT_2 (eSFFilterLowPassCutoff, value, changed);
 }
 
+aghui::SFiltersDialogWidgets::
+~SFiltersDialogWidgets ()
+{
+	// 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.cc b/src/ui/sf/d/filters.cc
index e6b0b60..d26dfd0 100644
--- a/src/ui/sf/d/filters.cc
+++ b/src/ui/sf/d/filters.cc
@@ -26,22 +26,15 @@ filters_d()
 
 aghui::SScoringFacility::SFiltersDialog::
 SFiltersDialog (SScoringFacility& p_)
-      : _p (parent)
+      : _p (p_)
 {
-	W_V.reg( eSFFilterLowPassCutoff,  P.low_pass_cutoff);
-	W_V.reg( eSFFilterLowPassOrder,   P.low_pass_order);
-	W_V.reg( eSFFilterHighPassCutoff, P.high_pass_cutoff);
-	W_V.reg( eSFFilterHighPassOrder,  P.high_pass_order);
+	W_V.reg( eSFFilterLowPassCutoff,  &P.low_pass_cutoff);
+	W_V.reg( eSFFilterLowPassOrder,   (int*)&P.low_pass_order);
+	W_V.reg( eSFFilterHighPassCutoff, &P.high_pass_cutoff);
+	W_V.reg( eSFFilterHighPassOrder,  (int*)&P.high_pass_order);
 	W_V.reg( eSFFilterNotchFilter,    (int*)&P.notch_filter);
 }
 
-aghui::SScoringFacility::SFiltersDialogWidgets::
-~SScoringFacilityWidgets ()
-{
-	// destroy toplevels
-	gtk_widget_destroy( (GtkWidget*)wSFFilters);
-	g_object_unref( (GObject*)builder);
-}
 
 // Local Variables:
 // indent-tabs-mode: 8
diff --git a/src/ui/sf/d/filters.hh b/src/ui/sf/d/filters.hh
index ea18945..8b868e0 100644
--- a/src/ui/sf/d/filters.hh
+++ b/src/ui/sf/d/filters.hh
@@ -25,27 +25,6 @@ using namespace std;
 
 namespace aghui {
 
-struct SFiltersDialogWidgets;
-
-struct SScoringFacility::SFiltersDialog
-  : public SFiltersDialogWidgets {
-
-	DELETE_DEFAULT_METHODS (SFiltersDialog);
-
-	SFiltersDialog (SScoringFacility&);
-       ~SFiltersDialog ();
-
-	sigfile::SFilterPack&
-		P;
-
-	SUIVarCollection
-		W_V;
-
-	SScoringFacility&
-		_p;
-};
-
-
 struct SFiltersDialogWidgets {
 
 	SFiltersDialogWidgets ();
@@ -68,11 +47,33 @@ struct SFiltersDialogWidgets {
 		*bSFFilterOK;
 };
 
+struct SScoringFacility::SFiltersDialog
+  : public SFiltersDialogWidgets {
+
+	DELETE_DEFAULT_METHODS (SFiltersDialog);
+
+	SFiltersDialog (SScoringFacility&);
+       ~SFiltersDialog ();
+
+	sigfile::SFilterPack
+		P;
+
+	SUIVarCollection
+		W_V;
+
+	SScoringFacility&
+		_p;
+};
+
+} // namespace aghui
+
 extern "C" {
 void eSFFilterHighPassCutoff_value_changed_cb( GtkSpinButton*, gpointer);
 void eSFFilterLowPassCutoff_value_changed_cb( GtkSpinButton*, gpointer);
 }
 
+#endif // _AGH_UI_SF_FILTERS_H
+
 // 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
index b8f7c8e..c60abcb 100644
--- a/src/ui/sf/d/filters_cb.cc
+++ b/src/ui/sf/d/filters_cb.cc
@@ -31,7 +31,7 @@ eSFFilterHighPassCutoff_value_changed_cb( GtkSpinButton *spinbutton, gpointer us
 void
 eSFFilterLowPassCutoff_value_changed_cb( GtkSpinButton *spinbutton, gpointer userdata)
 {
-	auto& FD = *(SScoringFacility::SFiltersDialogWidgets*)userdata;
+	auto& FD = *(SScoringFacility::SFiltersDialog*)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);
diff --git a/src/ui/sf/d/patterns-construct.cc b/src/ui/sf/d/patterns-construct.cc
index 97712fc..e32f627 100644
--- a/src/ui/sf/d/patterns-construct.cc
+++ b/src/ui/sf/d/patterns-construct.cc
@@ -1,6 +1,5 @@
-// ;-*-C++-*-
 /*
- *       File name:  ui/sf/sf-patterns-construct.cc
+ *       File name:  ui/sf/d/patterns-construct.cc
  *         Project:  Aghermann
  *          Author:  Andrei Zavada <johnhommer at gmail.com>
  * Initial version:  2013-01-24
@@ -11,7 +10,17 @@
  */
 
 #include <stdexcept>
+#include "patterns.hh"
 
+using namespace std;
+
+aghui::SPatternsDialogWidgets::
+SPatternsDialogWidgets (SScoringFacility& SF)
+{
+	builder = gtk_builder_new();
+	if ( !gtk_builder_add_from_resource( builder, "/org/gtk/aghermann/sf-patterns.glade", NULL) )
+		throw runtime_error( "Failed to load SF::patterns glade resource");
+	gtk_builder_connect_signals( builder, NULL);
 
 	mSFFDPatterns =
 		gtk_list_store_new( 1, G_TYPE_STRING);
@@ -59,7 +68,7 @@
 	eSFFDPatternList_changed_cb_handler_id =
 		G_CONNECT_1 (eSFFDPatternList, changed);
 
-	gtk_combo_box_set_model_properly( eSFFDChannel, _p.mAllChannels);
+	gtk_combo_box_set_model_properly( eSFFDChannel, SF._p.mAllChannels);
 	eSFFDChannel_changed_cb_handler_id =
 		G_CONNECT_1 (eSFFDChannel, changed);
 
@@ -89,5 +98,18 @@
 
 	G_CONNECT_1 (wSFFD, show);
 	G_CONNECT_1 (wSFFD, hide);
+}
 
+aghui::SPatternsDialogWidgets::
+~SPatternsDialogWidgets ()
+{
+	// destroy toplevels
+	gtk_widget_destroy( (GtkWidget*)wSFFD);
+	g_object_unref( (GObject*)builder);
 }
+
+
+// Local Variables:
+// Mode: c++
+// indent-tabs-mode: 8
+// End:
diff --git a/src/ui/sf/d/patterns-draw.cc b/src/ui/sf/d/patterns-draw.cc
index ac7d413..5364641 100644
--- a/src/ui/sf/d/patterns-draw.cc
+++ b/src/ui/sf/d/patterns-draw.cc
@@ -11,26 +11,26 @@
  */
 
 #include "ui/misc.hh"
-#include "sf.hh"
+#include "patterns.hh"
 
 using namespace std;
 
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 set_thing_da_width( int width)
 {
-	g_object_set( (GObject*)_p.daSFFDThing,
+	g_object_set( (GObject*)daSFFDThing,
 		      "width-request", da_thing_wd = max( width+5, 600),
 		      "height-request", da_thing_ht,
 		      NULL);
 }
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 set_field_da_width( int width)
 {
-	g_object_set( (GObject*)_p.daSFFDField,
+	g_object_set( (GObject*)daSFFDField,
 		      "width-request", da_field_wd = max( width+5, 600),
 		      "height-request", da_field_ht,
 		      NULL);
@@ -39,7 +39,7 @@ set_field_da_width( int width)
 
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 draw_thing( cairo_t *cr)
 {
 	if ( current_pattern == patterns.end() ) {
@@ -156,7 +156,7 @@ out:
 }
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 draw_field( cairo_t *cr)
 {
       // field
diff --git a/src/ui/sf/d/patterns-enumerate.cc b/src/ui/sf/d/patterns-enumerate.cc
index d1fdb13..173655a 100644
--- a/src/ui/sf/d/patterns-enumerate.cc
+++ b/src/ui/sf/d/patterns-enumerate.cc
@@ -1,6 +1,5 @@
-// ;-*-C++-*-
 /*
- *       File name:  ui/sf/sf-patterns-enumerate.cc
+ *       File name:  ui/sf/d/patterns-enumerate.cc
  *         Project:  Aghermann
  *          Author:  Andrei Zavada <johnhommer at gmail.com>
  * Initial version:  2013-01-16
@@ -12,13 +11,13 @@
 
 #include <tuple>
 #include "ui/misc.hh"
-#include "sf.hh"
+#include "patterns.hh"
 
 using namespace std;
 
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 import_from_selection( SScoringFacility::SChannel& field)
 {
 	// double check, possibly redundant after due check in callback
@@ -57,7 +56,7 @@ import_from_selection( SScoringFacility::SChannel& field)
 
 	setup_controls_for_find();
 
-	gtk_widget_queue_draw( (GtkWidget*)_p.daSFFDThing);
+	gtk_widget_queue_draw( (GtkWidget*)daSFFDThing);
 }
 
 
@@ -107,7 +106,7 @@ make_subject_patterns_location(const agh::CExpDesign& ED, const agh::CSubject& J
 
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 load_patterns()
 {
 	patterns.clear();
@@ -134,35 +133,35 @@ load_patterns()
 
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 populate_combo()
 {
-	g_signal_handler_block( _p.eSFFDPatternList, _p.eSFFDPatternList_changed_cb_handler_id);
-	gtk_list_store_clear( _p.mSFFDPatterns);
+	g_signal_handler_block( eSFFDPatternList, eSFFDPatternList_changed_cb_handler_id);
+	gtk_list_store_clear( mSFFDPatterns);
 
 	if ( not patterns.empty() ) {
 		GtkTreeIter iter, current_pattern_iter;
 		for ( auto I = patterns.begin(); I != patterns.end(); ++I ) {
 			snprintf_buf( "%s %s", origin_markers[I->origin], I->name.c_str());
-			gtk_list_store_append( _p.mSFFDPatterns, &iter);
-			gtk_list_store_set( _p.mSFFDPatterns, &iter,
+			gtk_list_store_append( mSFFDPatterns, &iter);
+			gtk_list_store_set( mSFFDPatterns, &iter,
 					    0, __buf__,
 					    -1);
 			if ( I == current_pattern )
 				current_pattern_iter = iter;
 		}
 
-		gtk_combo_box_set_active_iter( _p.eSFFDPatternList, &current_pattern_iter);
+		gtk_combo_box_set_active_iter( eSFFDPatternList, &current_pattern_iter);
 	} else
-		gtk_combo_box_set_active_iter( _p.eSFFDPatternList, NULL);
+		gtk_combo_box_set_active_iter( eSFFDPatternList, NULL);
 
-	g_signal_handler_unblock( _p.eSFFDPatternList, _p.eSFFDPatternList_changed_cb_handler_id);
+	g_signal_handler_unblock( eSFFDPatternList, eSFFDPatternList_changed_cb_handler_id);
 }
 
 
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 save_patterns()
 {
 	for ( auto& P : patterns )
@@ -187,7 +186,7 @@ save_patterns()
 
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 discard_current_pattern()
 {
 	if ( current_pattern == patterns.end() )
@@ -201,4 +200,7 @@ discard_current_pattern()
 
 
 
-// eof
+// Local Variables:
+// Mode: c++
+// indent-tabs-mode: 8
+// End:
diff --git a/src/ui/sf/d/patterns.cc b/src/ui/sf/d/patterns.cc
index a96ce5e..fca1524 100644
--- a/src/ui/sf/d/patterns.cc
+++ b/src/ui/sf/d/patterns.cc
@@ -11,7 +11,7 @@
  */
 
 #include "ui/misc.hh"
-#include "sf.hh"
+#include "patterns.hh"
 
 using namespace std;
 
@@ -24,9 +24,10 @@ patterns_d()
 	return *_patterns_d;
 }
 
-aghui::SScoringFacility::SFindDialog::
-SFindDialog (SScoringFacility& parent)
-      : Pp2 {.25,  0., 1.5, 1,  .1, .5, 3},
+aghui::SScoringFacility::SPatternsDialog::
+SPatternsDialog (SScoringFacility& parent)
+      : SPatternsDialogWidgets (parent),
+	Pp2 {.25,  0., 1.5, 1,  .1, .5, 3},
 	cpattern (nullptr),
 	increment (.05),
 	field_profile_type (metrics::TType::mc),
@@ -34,18 +35,18 @@ SFindDialog (SScoringFacility& parent)
 	_p (parent)
 {
 	suppress_w_v = true;
-	W_V.reg( _p.eSFFDEnvTightness, 	&Pp2.env_scope);
-	W_V.reg( _p.eSFFDBandPassOrder, &Pp2.bwf_order);
-	W_V.reg( _p.eSFFDBandPassFrom, 	&Pp2.bwf_ffrom);
-	W_V.reg( _p.eSFFDBandPassUpto, 	&Pp2.bwf_fupto);
-	W_V.reg( _p.eSFFDDZCDFStep, 	&Pp2.dzcdf_step);
-	W_V.reg( _p.eSFFDDZCDFSigma, 	&Pp2.dzcdf_sigma);
-	W_V.reg( _p.eSFFDDZCDFSmooth, 	&Pp2.dzcdf_smooth);
-
-	W_V.reg( _p.eSFFDParameterA, 	&get<0>(criteria));
-	W_V.reg( _p.eSFFDParameterB, 	&get<1>(criteria));
-	W_V.reg( _p.eSFFDParameterC, 	&get<2>(criteria));
-	W_V.reg( _p.eSFFDParameterD, 	&get<3>(criteria));
+	W_V.reg( eSFFDEnvTightness, 	&Pp2.env_scope);
+	W_V.reg( eSFFDBandPassOrder, &Pp2.bwf_order);
+	W_V.reg( eSFFDBandPassFrom, 	&Pp2.bwf_ffrom);
+	W_V.reg( eSFFDBandPassUpto, 	&Pp2.bwf_fupto);
+	W_V.reg( eSFFDDZCDFStep, 	&Pp2.dzcdf_step);
+	W_V.reg( eSFFDDZCDFSigma, 	&Pp2.dzcdf_sigma);
+	W_V.reg( eSFFDDZCDFSmooth, 	&Pp2.dzcdf_smooth);
+
+	W_V.reg( eSFFDParameterA, 	&get<0>(criteria));
+	W_V.reg( eSFFDParameterB, 	&get<1>(criteria));
+	W_V.reg( eSFFDParameterC, 	&get<2>(criteria));
+	W_V.reg( eSFFDParameterD, 	&get<3>(criteria));
 
 	W_V.up();
 	suppress_w_v = false;
@@ -53,22 +54,22 @@ SFindDialog (SScoringFacility& parent)
 	load_patterns();
 }
 
-aghui::SScoringFacility::SFindDialog::
-~SFindDialog ()
+aghui::SScoringFacility::SPatternsDialog::
+~SPatternsDialog ()
 {
 	save_patterns();
 
 	assert ( cpattern == nullptr );
 
 	// g_object_unref( mPatterns);
-	gtk_widget_destroy( (GtkWidget*)_p.wSFFDPatternSave);
-	gtk_widget_destroy( (GtkWidget*)_p.wSFFD);
+	gtk_widget_destroy( (GtkWidget*)wSFFDPatternSave);
+	gtk_widget_destroy( (GtkWidget*)wSFFD);
 }
 
 
 
 list<pattern::SPattern<TFloat>>::iterator
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 pattern_by_idx( size_t idx)
 {
 	size_t i = 0;
@@ -84,7 +85,7 @@ pattern_by_idx( size_t idx)
 
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 search()
 {
 	if ( unlikely
@@ -113,7 +114,7 @@ search()
 
 
 size_t
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 find_occurrences()
 {
 	if ( unlikely (current_pattern == patterns.end()) )
@@ -136,7 +137,7 @@ find_occurrences()
 
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 occurrences_to_annotations()
 {
 	for ( size_t o = 0; o < occurrences.size(); ++o )
@@ -148,7 +149,7 @@ occurrences_to_annotations()
 }
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 save_annotations()
 {
 	saved_annotations = field_channel->annotations;
@@ -156,7 +157,7 @@ save_annotations()
 }
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 restore_annotations()
 {
 	field_channel->annotations = saved_annotations;
@@ -168,76 +169,76 @@ restore_annotations()
 
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 setup_controls_for_find()
 {
 	bool	have_any = current_pattern != patterns.end();
 
-	gtk_widget_set_visible( (GtkWidget*)_p.cSFFDSearchButton, have_any and TRUE);
-	gtk_widget_set_visible( (GtkWidget*)_p.cSFFDSearching, FALSE);
-	gtk_widget_set_visible( (GtkWidget*)_p.cSFFDAgainButton, FALSE);
+	gtk_widget_set_visible( (GtkWidget*)cSFFDSearchButton, have_any and TRUE);
+	gtk_widget_set_visible( (GtkWidget*)cSFFDSearching, FALSE);
+	gtk_widget_set_visible( (GtkWidget*)cSFFDAgainButton, FALSE);
 
-	gtk_widget_set_visible( (GtkWidget*)_p.cSFFDParameters, have_any and TRUE);
+	gtk_widget_set_visible( (GtkWidget*)cSFFDParameters, have_any and TRUE);
 
-	gtk_widget_set_visible( (GtkWidget*)_p.swSFFDField, FALSE);
-	gtk_widget_set_visible( (GtkWidget*)_p.cSFFDCriteria, FALSE);
+	gtk_widget_set_visible( (GtkWidget*)swSFFDField, FALSE);
+	gtk_widget_set_visible( (GtkWidget*)cSFFDCriteria, FALSE);
 
-	gtk_label_set_markup( _p.lSFFDFoundInfo, "");
+	gtk_label_set_markup( lSFFDFoundInfo, "");
 }
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 setup_controls_for_wait()
 {
-	gtk_widget_set_visible( (GtkWidget*)_p.cSFFDSearchButton, FALSE);
-	gtk_widget_set_visible( (GtkWidget*)_p.cSFFDSearching, TRUE);
-	gtk_widget_set_visible( (GtkWidget*)_p.cSFFDAgainButton, FALSE);
+	gtk_widget_set_visible( (GtkWidget*)cSFFDSearchButton, FALSE);
+	gtk_widget_set_visible( (GtkWidget*)cSFFDSearching, TRUE);
+	gtk_widget_set_visible( (GtkWidget*)cSFFDAgainButton, FALSE);
 
-	gtk_widget_set_visible( (GtkWidget*)_p.cSFFDParameters, TRUE);
+	gtk_widget_set_visible( (GtkWidget*)cSFFDParameters, TRUE);
 
-	gtk_widget_set_visible( (GtkWidget*)_p.swSFFDField, FALSE);
-	gtk_widget_set_visible( (GtkWidget*)_p.cSFFDCriteria, FALSE);
+	gtk_widget_set_visible( (GtkWidget*)swSFFDField, FALSE);
+	gtk_widget_set_visible( (GtkWidget*)cSFFDCriteria, FALSE);
 }
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 setup_controls_for_tune()
 {
-	gtk_widget_set_visible( (GtkWidget*)_p.cSFFDSearchButton, FALSE);
-	gtk_widget_set_visible( (GtkWidget*)_p.cSFFDSearching, FALSE);
-	gtk_widget_set_visible( (GtkWidget*)_p.cSFFDAgainButton, TRUE);
+	gtk_widget_set_visible( (GtkWidget*)cSFFDSearchButton, FALSE);
+	gtk_widget_set_visible( (GtkWidget*)cSFFDSearching, FALSE);
+	gtk_widget_set_visible( (GtkWidget*)cSFFDAgainButton, TRUE);
 
-	gtk_widget_set_visible( (GtkWidget*)_p.cSFFDParameters, FALSE);
+	gtk_widget_set_visible( (GtkWidget*)cSFFDParameters, FALSE);
 
-	gtk_widget_set_visible( (GtkWidget*)_p.swSFFDField, TRUE);
-	gtk_widget_set_visible( (GtkWidget*)_p.cSFFDCriteria, TRUE);
+	gtk_widget_set_visible( (GtkWidget*)swSFFDField, TRUE);
+	gtk_widget_set_visible( (GtkWidget*)cSFFDCriteria, TRUE);
 }
 
 
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 set_profile_manage_buttons_visibility()
 {
 	bool	have_any = current_pattern != patterns.end(),
 		is_transient = have_any && current_pattern->origin == pattern::TOrigin::transient,
 		is_modified  = have_any && not (current_pattern->Pp == Pp2);
-	gtk_widget_set_visible( (GtkWidget*)_p.bSFFDProfileSave, have_any and is_transient);
-	gtk_widget_set_visible( (GtkWidget*)_p.bSFFDProfileRevert, have_any and not is_transient and is_modified);
-	gtk_widget_set_visible( (GtkWidget*)_p.bSFFDProfileDiscard, have_any and not is_transient);
+	gtk_widget_set_visible( (GtkWidget*)bSFFDProfileSave, have_any and is_transient);
+	gtk_widget_set_visible( (GtkWidget*)bSFFDProfileRevert, have_any and not is_transient and is_modified);
+	gtk_widget_set_visible( (GtkWidget*)bSFFDProfileDiscard, have_any and not is_transient);
 }
 
 
 void
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 preselect_channel( const char *ch)
 {
 	if ( ch == NULL ) {
-		gtk_combo_box_set_active_iter( _p.eSFFDChannel, NULL);
+		gtk_combo_box_set_active_iter( eSFFDChannel, NULL);
 		return;
 	}
 
-	GtkTreeModel *model = gtk_combo_box_get_model( _p.eSFFDChannel);
+	GtkTreeModel *model = gtk_combo_box_get_model( eSFFDChannel);
 	GtkTreeIter iter;
 	gboolean valid;
 	valid = gtk_tree_model_get_iter_first( model, &iter);
@@ -247,7 +248,7 @@ preselect_channel( const char *ch)
 				    0, &entry,
 				    -1);
 		if ( strcmp( entry, ch) == 0 ) {
-			gtk_combo_box_set_active_iter( _p.eSFFDChannel, &iter);
+			gtk_combo_box_set_active_iter( eSFFDChannel, &iter);
 			return;
 		}
 		valid = gtk_tree_model_iter_next( model, &iter);
@@ -257,7 +258,7 @@ preselect_channel( const char *ch)
 
 
 size_t
-aghui::SScoringFacility::SFindDialog::
+aghui::SScoringFacility::SPatternsDialog::
 nearest_occurrence( double x) const
 {
 	double shortest = INFINITY;
diff --git a/src/ui/sf/d/patterns.hh b/src/ui/sf/d/patterns.hh
index 44d9b3e..3f1af20 100644
--- a/src/ui/sf/d/patterns.hh
+++ b/src/ui/sf/d/patterns.hh
@@ -1,6 +1,5 @@
-// ;-*-C++-*-
 /*
- *       File name:  ui/sf/dialogs/patterns.hh
+ *       File name:  ui/sf/d/patterns.hh
  *         Project:  Aghermann
  *          Author:  Andrei Zavada <johnhommer at gmail.com>
  * Initial version:  2013-01-24
@@ -14,7 +13,7 @@
 #define _AGH_UI_SF_PATTERNS_H
 
 #include "patterns/patterns.hh"
-#include "sf.hh"
+#include "ui/sf/sf.hh"
 
 #if HAVE_CONFIG_H && !defined(VERSION)
 #  include "config.h"
@@ -24,12 +23,70 @@ using namespace std;
 
 namespace aghui {
 
-struct SScoringFacility::SFindDialog {
-	DELETE_DEFAULT_METHODS (SFindDialog);
+
+struct SPatternsDialogWidgets {
+
+	SPatternsDialogWidgets (SScoringFacility&); // need access to mAllChannels
+       ~SPatternsDialogWidgets ();
+
+	GtkBuilder *builder;
+
+	// find/patterns dialog
+	GtkListStore
+		*mSFFDPatterns;
+	GtkDialog
+		*wSFFD;
+	GtkComboBox
+		*eSFFDChannel,
+		*eSFFDPatternList;
+	GtkScrolledWindow
+		*swSFFDThing,
+		*swSFFDField;
+	GtkTable
+		*cSFFDParameters,
+		*cSFFDCriteria,
+		*cSFFDSearchButton,
+		*cSFFDAgainButton;
+	GtkBox	*cSFFDSearching;
+	GtkDrawingArea
+		*daSFFDThing,
+		*daSFFDField;
+	GtkMenu	*iiSFFDField;
+	GtkButton
+		*bSFFDSearch, *bSFFDAgain,
+		*bSFFDProfileSave, *bSFFDProfileDiscard, *bSFFDProfileRevert;
+	GtkSpinButton
+		*eSFFDEnvTightness,
+		*eSFFDBandPassFrom, *eSFFDBandPassUpto, *eSFFDBandPassOrder,
+		*eSFFDDZCDFStep, *eSFFDDZCDFSigma, *eSFFDDZCDFSmooth,
+		*eSFFDParameterA, *eSFFDParameterB,
+		*eSFFDParameterC, *eSFFDParameterD;
+	GtkHBox
+		*cSFFDLabelBox;
+	GtkLabel
+		*lSFFDParametersBrief,
+		*lSFFDFoundInfo;
+	GtkDialog
+		*wSFFDPatternSave;
+	GtkEntry
+		*eSFFDPatternSaveName;
+	GtkToggleButton
+		*eSFFDPatternSaveOriginSubject,
+		*eSFFDPatternSaveOriginExperiment,
+		*eSFFDPatternSaveOriginUser;
+	gulong	eSFFDChannel_changed_cb_handler_id,
+		eSFFDPatternList_changed_cb_handler_id;
+};
+
+
+struct SScoringFacility::SPatternsDialog
+  : public SPatternsDialogWidgets{
+
+	DELETE_DEFAULT_METHODS (SPatternsDialog);
 
       // ctor, dtor
-	SFindDialog (SScoringFacility& parent);
-       ~SFindDialog ();
+	SPatternsDialog (SScoringFacility& parent);
+       ~SPatternsDialog ();
 
       // saved patterns
 	list<pattern::SPattern<TFloat>>
@@ -109,53 +166,29 @@ struct SScoringFacility::SFindDialog {
 };
 
 
-
-	// find/patterns dialog
-	GtkListStore
-		*mSFFDPatterns;
-	GtkDialog
-		*wSFFD;
-	GtkComboBox
-		*eSFFDChannel,
-		*eSFFDPatternList;
-	GtkScrolledWindow
-		*swSFFDThing,
-		*swSFFDField;
-	GtkTable
-		*cSFFDParameters,
-		*cSFFDCriteria,
-		*cSFFDSearchButton,
-		*cSFFDAgainButton;
-	GtkBox	*cSFFDSearching;
-	GtkDrawingArea
-		*daSFFDThing,
-		*daSFFDField;
-	GtkMenu	*iiSFFDField;
-	GtkButton
-		*bSFFDSearch, *bSFFDAgain,
-		*bSFFDProfileSave, *bSFFDProfileDiscard, *bSFFDProfileRevert;
-	GtkSpinButton
-		*eSFFDEnvTightness,
-		*eSFFDBandPassFrom, *eSFFDBandPassUpto, *eSFFDBandPassOrder,
-		*eSFFDDZCDFStep, *eSFFDDZCDFSigma, *eSFFDDZCDFSmooth,
-		*eSFFDParameterA, *eSFFDParameterB,
-		*eSFFDParameterC, *eSFFDParameterD;
-	GtkHBox
-		*cSFFDLabelBox;
-	GtkLabel
-		*lSFFDParametersBrief,
-		*lSFFDFoundInfo;
-	GtkDialog
-		*wSFFDPatternSave;
-	GtkEntry
-		*eSFFDPatternSaveName;
-	GtkToggleButton
-		*eSFFDPatternSaveOriginSubject,
-		*eSFFDPatternSaveOriginExperiment,
-		*eSFFDPatternSaveOriginUser;
-	gulong	eSFFDChannel_changed_cb_handler_id,
-		eSFFDPatternList_changed_cb_handler_id;
-
 } // namespace aghui
 
+extern "C" {
+void eSFFDPatternList_changed_cb( GtkComboBox*, gpointer);
+void eSFFDChannel_changed_cb( GtkComboBox*, gpointer);
+gboolean daSFFDField_draw_cb( GtkWidget*, cairo_t*, gpointer);
+gboolean daSFFDField_scroll_event_cb( GtkWidget*, GdkEventScroll*, gpointer);
+gboolean daSFFDField_button_press_event_cb( GtkWidget*, GdkEventButton*, gpointer);
+gboolean daSFFDField_motion_notify_event_cb( GtkWidget*, GdkEventMotion*, gpointer);
+gboolean daSFFDThing_draw_cb( GtkWidget*, cairo_t*, gpointer);
+gboolean daSFFDThing_scroll_event_cb( GtkWidget*, GdkEventScroll*, gpointer);
+void bSFFDSearch_clicked_cb( GtkButton*, gpointer);
+void bSFFDAgain_clicked_cb( GtkButton*, gpointer);
+void bSFFDProfileSave_clicked_cb( GtkButton*, gpointer);
+void bSFFDProfileDiscard_clicked_cb( GtkButton*, gpointer);
+void bSFFDProfileRevert_clicked_cb( GtkButton*, gpointer);
+void eSFFD_any_pattern_value_changed_cb( GtkSpinButton*, gpointer);
+void eSFFD_any_criteria_value_changed_cb( GtkSpinButton*, gpointer);
+void wSFFD_show_cb( GtkWidget*, gpointer);
+void wSFFD_hide_cb( GtkWidget*, gpointer);
+gboolean wSFFD_configure_event_cb( GtkWidget*, GdkEventConfigure*, gpointer);
+}
+
+#endif // _AGH_UI_SF_PATTERNS_H
+
 // eof
diff --git a/src/ui/sf/d/patterns_cb.cc b/src/ui/sf/d/patterns_cb.cc
index 10b172b..db6486b 100644
--- a/src/ui/sf/d/patterns_cb.cc
+++ b/src/ui/sf/d/patterns_cb.cc
@@ -13,7 +13,7 @@
 #include <sys/time.h>
 
 #include "ui/misc.hh"
-#include "sf.hh"
+#include "patterns.hh"
 
 using namespace std;
 
@@ -24,8 +24,7 @@ extern "C" {
 gboolean
 daSFFDThing_draw_cb( GtkWidget *wid, cairo_t *cr, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
 
 	FD.draw_thing( cr);
 
@@ -35,8 +34,7 @@ daSFFDThing_draw_cb( GtkWidget *wid, cairo_t *cr, gpointer userdata)
 gboolean
 daSFFDField_draw_cb( GtkWidget *wid, cairo_t *cr, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
 
 	FD.draw_field( cr);
 
@@ -49,8 +47,7 @@ daSFFDField_draw_cb( GtkWidget *wid, cairo_t *cr, gpointer userdata)
 gboolean
 daSFFDThing_scroll_event_cb( GtkWidget *wid, GdkEventScroll *event, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
 
 	switch ( event->direction ) {
 	case GDK_SCROLL_UP:
@@ -78,8 +75,7 @@ daSFFDThing_scroll_event_cb( GtkWidget *wid, GdkEventScroll *event, gpointer use
 gboolean
 daSFFDField_scroll_event_cb( GtkWidget *wid, GdkEventScroll *event, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
 
 	switch ( event->direction ) {
 	case GDK_SCROLL_UP:
@@ -107,8 +103,8 @@ daSFFDField_scroll_event_cb( GtkWidget *wid, GdkEventScroll *event, gpointer use
 gboolean
 daSFFDField_button_press_event_cb( GtkWidget *wid, GdkEventButton *event, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
+	auto& SF = FD._p;
 
 	switch ( event->button ) {
 	case 1:
@@ -117,7 +113,7 @@ daSFFDField_button_press_event_cb( GtkWidget *wid, GdkEventButton *event, gpoint
 				((double)FD.occurrences[FD.highlighted_occurrence] / FD.diff_line.size()) * SF.total_vpages());
 	    break;
 	case 3:
-		gtk_menu_popup( SF.iiSFFDField,
+		gtk_menu_popup( FD.iiSFFDField,
 				NULL, NULL, NULL, NULL, 3, event->time);
 	    break;
 	}
@@ -130,8 +126,7 @@ daSFFDField_button_press_event_cb( GtkWidget *wid, GdkEventButton *event, gpoint
 gboolean
 daSFFDField_motion_notify_event_cb( GtkWidget *wid, GdkEventMotion *event, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
 
 	FD.highlighted_occurrence = FD.nearest_occurrence( event->x);
 
@@ -145,10 +140,10 @@ daSFFDField_motion_notify_event_cb( GtkWidget *wid, GdkEventMotion *event, gpoin
 void
 bSFFDSearch_clicked_cb( GtkButton *button, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
+	auto& SF = FD._p;
 
-	aghui::SBusyBlock bb (SF.wSFFD);
+	aghui::SBusyBlock bb (FD.wSFFD);
 
 	FD.setup_controls_for_wait();
 	gtk_flush();
@@ -176,14 +171,13 @@ bSFFDSearch_clicked_cb( GtkButton *button, gpointer userdata)
 		      FD.Pp2.env_scope,
 		      FD.Pp2.bwf_ffrom, FD.Pp2.bwf_fupto, FD.Pp2.bwf_order,
 		      FD.Pp2.dzcdf_step, FD.Pp2.dzcdf_sigma, FD.Pp2.dzcdf_smooth);
-	gtk_label_set_markup( SF.lSFFDParametersBrief, __buf__);
+	gtk_label_set_markup( FD.lSFFDParametersBrief, __buf__);
 }
 
 void
 bSFFDAgain_clicked_cb( GtkButton *button, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
 
 	FD.restore_annotations();
 	FD.occurrences.clear();
@@ -195,8 +189,8 @@ bSFFDAgain_clicked_cb( GtkButton *button, gpointer userdata)
 void
 eSFFD_any_pattern_value_changed_cb( GtkSpinButton *spinbutton, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
+
 	if ( FD.suppress_w_v )
 		return;
 
@@ -205,7 +199,7 @@ eSFFD_any_pattern_value_changed_cb( GtkSpinButton *spinbutton, gpointer userdata
 
 	FD.set_profile_manage_buttons_visibility();
 
-	gtk_widget_queue_draw( (GtkWidget*)FD._p.daSFFDThing);
+	gtk_widget_queue_draw( (GtkWidget*)FD.daSFFDThing);
 }
 
 inline namespace {
@@ -220,8 +214,8 @@ timeval_elapsed( const struct timeval &x, const struct timeval &y)
 void
 eSFFD_any_criteria_value_changed_cb( GtkSpinButton *spinbutton, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
+
 	if ( FD.suppress_w_v )
 		return;
 
@@ -236,11 +230,11 @@ eSFFD_any_criteria_value_changed_cb( GtkSpinButton *spinbutton, gpointer userdat
 
 		snprintf_buf( "%zu match%s\n",
 			      FD.occurrences.size(), (FD.occurrences.size() == 1) ? "" : "es");
-		gtk_label_set_markup( FD._p.lSFFDFoundInfo, __buf__);
+		gtk_label_set_markup( FD.lSFFDFoundInfo, __buf__);
 
 		FD.set_profile_manage_buttons_visibility();
 
-		gtk_widget_queue_draw( (GtkWidget*)FD._p.daSFFDField);
+		gtk_widget_queue_draw( (GtkWidget*)FD.daSFFDField);
 	}
 }
 
@@ -252,8 +246,7 @@ eSFFD_any_criteria_value_changed_cb( GtkSpinButton *spinbutton, gpointer userdat
 void
 eSFFDPatternList_changed_cb( GtkComboBox *combo, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
 
 	if ( FD.current_pattern != FD.patterns.end() ) {
 		FD.current_pattern->Pp = FD.Pp2;
@@ -270,7 +263,7 @@ eSFFDPatternList_changed_cb( GtkComboBox *combo, gpointer userdata)
 
 	FD.set_profile_manage_buttons_visibility();
 
-	gtk_widget_queue_draw( (GtkWidget*)SF.daSFFDThing);
+	gtk_widget_queue_draw( (GtkWidget*)FD.daSFFDThing);
 }
 
 
@@ -278,17 +271,16 @@ eSFFDPatternList_changed_cb( GtkComboBox *combo, gpointer userdata)
 void
 bSFFDProfileSave_clicked_cb( GtkButton *button, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
 
 	assert (FD.current_pattern->origin == pattern::TOrigin::transient );
 
 	auto& P = *FD.current_pattern;
-	if ( gtk_dialog_run( SF.wSFFDPatternSave) == GTK_RESPONSE_OK ) {
-		P.name = gtk_entry_get_text( SF.eSFFDPatternSaveName);
-		P.origin = gtk_toggle_button_get_active( SF.eSFFDPatternSaveOriginSubject)
+	if ( gtk_dialog_run( FD.wSFFDPatternSave) == GTK_RESPONSE_OK ) {
+		P.name = gtk_entry_get_text( FD.eSFFDPatternSaveName);
+		P.origin = gtk_toggle_button_get_active( FD.eSFFDPatternSaveOriginSubject)
 			? pattern::TOrigin::subject
-			: gtk_toggle_button_get_active( SF.eSFFDPatternSaveOriginExperiment)
+			: gtk_toggle_button_get_active( FD.eSFFDPatternSaveOriginExperiment)
 			? pattern::TOrigin::experiment
 			: pattern::TOrigin::user;
 		P.Pp = FD.Pp2;
@@ -303,10 +295,9 @@ bSFFDProfileSave_clicked_cb( GtkButton *button, gpointer userdata)
 void
 bSFFDProfileDiscard_clicked_cb( GtkButton *button, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
 
-	gint ci = gtk_combo_box_get_active( SF.eSFFDPatternList);
+	gint ci = gtk_combo_box_get_active( FD.eSFFDPatternList);
 
 	assert ( FD.current_pattern != FD.patterns.end() );
 	assert ( FD.current_pattern->origin != pattern::TOrigin::transient );
@@ -332,8 +323,7 @@ bSFFDProfileDiscard_clicked_cb( GtkButton *button, gpointer userdata)
 void
 bSFFDProfileRevert_clicked_cb( GtkButton *button, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
 
 	assert ( FD.current_pattern != FD.patterns.end() );
 	assert ( FD.current_pattern->origin != pattern::TOrigin::transient );
@@ -353,8 +343,8 @@ bSFFDProfileRevert_clicked_cb( GtkButton *button, gpointer userdata)
 void
 eSFFDChannel_changed_cb( GtkComboBox *combo, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
+	auto& SF = FD._p;
 
 	GtkTreeIter iter;
 	if ( gtk_combo_box_get_active_iter( combo, &iter) == FALSE )
@@ -377,8 +367,7 @@ eSFFDChannel_changed_cb( GtkComboBox *combo, gpointer userdata)
 void
 wSFFD_show_cb( GtkWidget *widget, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
 
 	FD.setup_controls_for_find();
 	FD.populate_combo();
@@ -394,8 +383,8 @@ wSFFD_show_cb( GtkWidget *widget, gpointer userdata)
 void
 wSFFD_hide_cb( GtkWidget *widget, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& FD = *SF.find_dialog;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
+	auto& SF = FD._p;
 
 	if ( not FD.occurrences.empty() )  // closing while dialog is in matching state
 		if ( GTK_RESPONSE_YES !=
@@ -414,13 +403,14 @@ wSFFD_configure_event_cb( GtkWidget *widget,
 			  GdkEventConfigure *event,
 			  gpointer userdata)
 {
-	 if ( event->type == GDK_CONFIGURE ) {
-		 auto& SF = *(SScoringFacility*)userdata;
-		 int marijke = gtk_widget_get_allocated_width( (GtkWidget*)SF.swSFFDThing);
-		 SF.find_dialog.set_thing_da_width( marijke);
-		 SF.find_dialog.set_field_da_width( marijke);
-	 }
-	 return FALSE;
+	auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
+
+	if ( event->type == GDK_CONFIGURE ) {
+		int marijke = gtk_widget_get_allocated_width( (GtkWidget*)FD.swSFFDThing);
+		FD.set_thing_da_width( marijke);
+		FD.set_field_da_width( marijke);
+	}
+	return FALSE;
 }
 
 } // extern "C"
diff --git a/src/ui/sf/d/phasediff-construct.cc b/src/ui/sf/d/phasediff-construct.cc
index 8f8b3e4..fb81861 100644
--- a/src/ui/sf/d/phasediff-construct.cc
+++ b/src/ui/sf/d/phasediff-construct.cc
@@ -1,4 +1,27 @@
-      // ------- wPhaseDiff
+/*
+ *       File name:  ui/sf/d/phasediff-construct.cc
+ *         Project:  Aghermann
+ *          Author:  Andrei Zavada <johnhommer at gmail.com>
+ * Initial version:  2013-01-25
+ *
+ *         Purpose:  scoring facility Patterns widget construction
+ *
+ *         License:  GPL
+ */
+
+#include <stdexcept>
+#include "phasediff.hh"
+
+using namespace std;
+
+aghui::SPhasediffDialogWidgets::
+SPhasediffDialogWidgets (SScoringFacility& SF)
+{
+	builder = gtk_builder_new();
+	if ( !gtk_builder_add_from_resource( builder, "/org/gtk/aghermann/sf-patterns.glade", NULL) )
+		throw runtime_error( "Failed to load SF::patterns glade resource");
+	gtk_builder_connect_signals( builder, NULL);
+
 	if ( !(AGH_GBGETOBJ (GtkDialog,		wSFPD)) ||
 	     !(AGH_GBGETOBJ (GtkDrawingArea,	daSFPD)) ||
 	     !(AGH_GBGETOBJ (GtkComboBox,	eSFPDChannelA)) ||
@@ -9,11 +32,11 @@
 		throw runtime_error ("Failed to construct SF widgets (11)");
 
 	gtk_combo_box_set_model_properly(
-		eSFPDChannelA, _p.mEEGChannels);
+		eSFPDChannelA, SF._p.mEEGChannels);
 	eSFPDChannelA_changed_cb_handler_id =
 		G_CONNECT_1 (eSFPDChannelA, changed);
 
-	gtk_combo_box_set_model_properly( eSFPDChannelB, _p.mEEGChannels);
+	gtk_combo_box_set_model_properly( eSFPDChannelB, SF._p.mEEGChannels);
 	eSFPDChannelB_changed_cb_handler_id =
 		G_CONNECT_1 (eSFPDChannelB, changed);
 
@@ -26,3 +49,9 @@
 	G_CONNECT_2 (eSFPDSmooth, value, changed);
 	G_CONNECT_1 (wSFPD, show);
 	G_CONNECT_1 (wSFPD, hide);
+}
+
+// Local Variables:
+// Mode: c++
+// indent-tabs-mode: 8
+// End:
diff --git a/src/ui/sf/d/phasediff.cc b/src/ui/sf/d/phasediff.cc
index 4eec6d5..4acff20 100644
--- a/src/ui/sf/d/phasediff.cc
+++ b/src/ui/sf/d/phasediff.cc
@@ -1,6 +1,5 @@
-// ;-*-C++-*-
 /*
- *       File name:  ui/sf/sf-phasediff.cc
+ *       File name:  ui/sf/d/phasediff.cc
  *         Project:  Aghermann
  *          Author:  Andrei Zavada <johnhommer at gmail.com>
  * Initial version:  2011-01-29
@@ -12,7 +11,7 @@
 
 #include "common/lang.hh"
 #include "ui/misc.hh"
-#include "sf.hh"
+#include "phasediff.hh"
 
 using namespace std;
 
@@ -20,14 +19,15 @@ aghui::SScoringFacility::SPhasediffDialog&
 aghui::SScoringFacility::phasediff_d()
 {
 	if ( not _phasediff_d )
-		_phasediff_d = new SPhasediffDialog(*this);
+		_phasediff_d = new SScoringFacility::SPhasediffDialog(*this);
 	return *_phasediff_d;
 }
 
 
 aghui::SScoringFacility::SPhasediffDialog::
 SPhasediffDialog (aghui::SScoringFacility& parent)
-      : channel1 (nullptr),
+      : SPhasediffDialogWidgets (parent),
+	channel1 (nullptr),
 	channel2 (nullptr),
 	use_original_signal (false),
 	from (1.), upto (2.),
@@ -43,7 +43,7 @@ SPhasediffDialog (aghui::SScoringFacility& parent)
 aghui::SScoringFacility::SPhasediffDialog::
 ~SPhasediffDialog ()
 {
-	gtk_widget_destroy( (GtkWidget*)_p.wSFPD);
+	gtk_widget_destroy( (GtkWidget*)wSFPD);
 }
 
 
@@ -243,4 +243,7 @@ draw( cairo_t* cr, int wd, int ht)
 }
 
 
-// eof
+// Local Variables:
+// Mode: c++
+// indent-tabs-mode: 8
+// End:
diff --git a/src/ui/sf/d/phasediff.hh b/src/ui/sf/d/phasediff.hh
index 8001452..d2ebbcd 100644
--- a/src/ui/sf/d/phasediff.hh
+++ b/src/ui/sf/d/phasediff.hh
@@ -1,37 +1,33 @@
-	struct SPhasediffDialog {
-		DELETE_DEFAULT_METHODS (SPhasediffDialog);
+/*
+ *       File name:  ui/sf/d/phasediff.hh
+ *         Project:  Aghermann
+ *          Author:  Andrei Zavada <johnhommer at gmail.com>
+ * Initial version:  2013-01-24
+ *
+ *         Purpose:  scoring facility Phasediff child dialog
+ *
+ *         License:  GPL
+ */
 
-		SPhasediffDialog (SScoringFacility&);
-	       ~SPhasediffDialog ();
+#ifndef _AGH_UI_SF_PHASEDIFF_H
+#define _AGH_UI_SF_PHASEDIFF_H
 
-		const SChannel
-			*channel1,
-			*channel2;
-		bool	use_original_signal;
-		float	from,
-			upto;
+#include "ui/sf/sf.hh"
 
-		unsigned
-			bwf_order,
-			scope;
-		float	display_scale;
+#if HAVE_CONFIG_H && !defined(VERSION)
+#  include "config.h"
+#endif
 
-		valarray<TFloat>
-			course;
-		size_t	smooth_side;
-		void update_course();
+using namespace std;
 
-		const SChannel* channel_from_cbox( GtkComboBox *cbox);
-		void preselect_channel( GtkComboBox *cbox, const char *ch);
+namespace aghui {
 
-		void draw( cairo_t* cr, int wd, int ht);
+struct SPhasediffDialogWidgets {
 
-		bool suspend_draw;
-
-		SScoringFacility&
-			_p;
-	};
+	SPhasediffDialogWidgets (SScoringFacility&);
+       ~SPhasediffDialogWidgets ();
 
+	GtkBuilder *builder;
 
 	// phasediff dialog
 	GtkDialog
@@ -48,4 +44,64 @@
 	gulong
 		eSFPDChannelA_changed_cb_handler_id,
 		eSFPDChannelB_changed_cb_handler_id;
+};
+
+struct SScoringFacility::SPhasediffDialog
+  : public SPhasediffDialogWidgets {
+
+	DELETE_DEFAULT_METHODS (SPhasediffDialog);
+
+	SPhasediffDialog (SScoringFacility&);
+       ~SPhasediffDialog ();
+
+	const SScoringFacility::SChannel
+		*channel1,
+		*channel2;
+	bool	use_original_signal;
+	float	from,
+		upto;
+
+	unsigned
+		bwf_order,
+		scope;
+	float	display_scale;
+
+	valarray<TFloat>
+		course;
+	size_t	smooth_side;
+	void update_course();
+
+	const SScoringFacility::SChannel* channel_from_cbox( GtkComboBox *cbox);
+	void preselect_channel( GtkComboBox *cbox, const char *ch);
+
+	void draw( cairo_t* cr, int wd, int ht);
+
+	bool suspend_draw;
+
+	SScoringFacility&
+		_p;
+};
+
+} // namespace aghui
+
+extern "C" {
+void eSFPDChannelA_changed_cb( GtkComboBox*, gpointer);
+void eSFPDChannelB_changed_cb( GtkComboBox*, gpointer);
+gboolean daSFPD_draw_cb( GtkWidget*, cairo_t*, gpointer);
+gboolean daSFPD_scroll_event_cb( GtkWidget*, GdkEventScroll*, gpointer);
+void eSFPDChannelA_changed_cb( GtkComboBox*, gpointer);
+void eSFPDChannelB_changed_cb( GtkComboBox*, gpointer);
+void eSFPDFreqFrom_value_changed_cb( GtkSpinButton*, gpointer);
+void eSFPDBandwidth_value_changed_cb( GtkSpinButton*, gpointer);
+void eSFPDSmooth_value_changed_cb( GtkScaleButton*, gdouble, gpointer);
+void wSFPD_show_cb( GtkWidget*, gpointer);
+void wSFPD_hide_cb( GtkWidget*, gpointer);
+}
+
+
+#endif // _AGH_UI_SF_PHASEDIFF_H
 
+// Local Variables:
+// Mode: c++
+// indent-tabs-mode: 8
+// End:
diff --git a/src/ui/sf/d/phasediff_cb.cc b/src/ui/sf/d/phasediff_cb.cc
index 7821d11..786db83 100644
--- a/src/ui/sf/d/phasediff_cb.cc
+++ b/src/ui/sf/d/phasediff_cb.cc
@@ -12,7 +12,7 @@
 
 #include "common/lang.hh"
 #include "ui/misc.hh"
-#include "sf.hh"
+#include "phasediff.hh"
 
 using namespace std;
 using namespace aghui;
@@ -22,15 +22,16 @@ extern "C" {
 gboolean
 daSFPD_draw_cb( GtkWidget *wid, cairo_t *cr, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& PD = SF.phasediff_dialog;
+	auto& PD = *(SScoringFacility::SPhasediffDialog*)userdata;
 
 	if ( PD.suspend_draw )
 		return TRUE;
 
-	aghui::SBusyBlock bb (PD._p.wSFPD);
+	aghui::SBusyBlock bb (PD.wSFPD);
 
-	PD.draw( cr, gtk_widget_get_allocated_width( wid), gtk_widget_get_allocated_height( wid));
+	PD.draw( cr,
+		 gtk_widget_get_allocated_width( wid),
+		 gtk_widget_get_allocated_height( wid));
 
 	return TRUE;
 }
@@ -39,8 +40,7 @@ daSFPD_draw_cb( GtkWidget *wid, cairo_t *cr, gpointer userdata)
 gboolean
 daSFPD_scroll_event_cb( GtkWidget *wid, GdkEventScroll *event, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& PD = SF.phasediff_dialog;
+	auto& PD = *(SScoringFacility::SPhasediffDialog*)userdata;
 
 	switch ( event->direction ) {
 	case GDK_SCROLL_UP:
@@ -63,8 +63,7 @@ daSFPD_scroll_event_cb( GtkWidget *wid, GdkEventScroll *event, gpointer userdata
 void
 eSFPDChannelA_changed_cb( GtkComboBox *cbox, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& PD = SF.phasediff_dialog;
+	auto& PD = *(SScoringFacility::SPhasediffDialog*)userdata;
 
 	if ( PD.suspend_draw )
 		return;
@@ -72,14 +71,13 @@ eSFPDChannelA_changed_cb( GtkComboBox *cbox, gpointer userdata)
 	PD.channel1 = PD.channel_from_cbox( cbox);
 
 	PD.update_course();
-	gtk_widget_queue_draw( (GtkWidget*)PD._p.daSFPD);
+	gtk_widget_queue_draw( (GtkWidget*)PD.daSFPD);
 }
 
 void
 eSFPDChannelB_changed_cb( GtkComboBox *cbox, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& PD = SF.phasediff_dialog;
+	auto& PD = *(SScoringFacility::SPhasediffDialog*)userdata;
 
 	if ( PD.suspend_draw )
 		return;
@@ -87,7 +85,7 @@ eSFPDChannelB_changed_cb( GtkComboBox *cbox, gpointer userdata)
 	PD.channel2 = PD.channel_from_cbox( cbox);
 
 	PD.update_course();
-	gtk_widget_queue_draw( (GtkWidget*)PD._p.daSFPD);
+	gtk_widget_queue_draw( (GtkWidget*)PD.daSFPD);
 }
 
 
@@ -97,25 +95,23 @@ void
 eSFPDFreqFrom_value_changed_cb( GtkSpinButton *spinbutton,
 				gpointer       userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& PD = SF.phasediff_dialog;
+	auto& PD = *(SScoringFacility::SPhasediffDialog*)userdata;
 
 	if ( PD.suspend_draw )
 		return;
 
 	PD.from = gtk_spin_button_get_value( spinbutton);
-	PD.upto = PD.from + gtk_spin_button_get_value( PD._p.eSFPDBandwidth);
+	PD.upto = PD.from + gtk_spin_button_get_value( PD.eSFPDBandwidth);
 
 	PD.update_course();
-	gtk_widget_queue_draw( (GtkWidget*)PD._p.daSFPD);
+	gtk_widget_queue_draw( (GtkWidget*)PD.daSFPD);
 }
 
 void
 eSFPDBandwidth_value_changed_cb( GtkSpinButton *spinbutton,
 				 gpointer       userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& PD = SF.phasediff_dialog;
+	auto& PD = *(SScoringFacility::SPhasediffDialog*)userdata;
 
 	if ( PD.suspend_draw )
 		return;
@@ -123,7 +119,7 @@ eSFPDBandwidth_value_changed_cb( GtkSpinButton *spinbutton,
 	PD.upto = PD.from + gtk_spin_button_get_value( spinbutton);
 
 	PD.update_course();
-	gtk_widget_queue_draw( (GtkWidget*)PD._p.daSFPD);
+	gtk_widget_queue_draw( (GtkWidget*)PD.daSFPD);
 }
 
 
@@ -133,8 +129,7 @@ eSFPDSmooth_value_changed_cb( GtkScaleButton *b,
 			      gdouble v,
 			      gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& PD = SF.phasediff_dialog;
+	auto& PD = *(SScoringFacility::SPhasediffDialog*)userdata;
 
 	snprintf_buf( "Smooth: %zu",
 		      PD.smooth_side = v);
@@ -142,7 +137,7 @@ eSFPDSmooth_value_changed_cb( GtkScaleButton *b,
 	if ( PD.suspend_draw )
 		return;
 
-	gtk_widget_queue_draw( (GtkWidget*)PD._p.daSFPD);
+	gtk_widget_queue_draw( (GtkWidget*)PD.daSFPD);
 }
 
 
@@ -150,37 +145,36 @@ eSFPDSmooth_value_changed_cb( GtkScaleButton *b,
 void
 wSFPD_show_cb( GtkWidget *wid, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& PD = SF.phasediff_dialog;
+	auto& PD = *(SScoringFacility::SPhasediffDialog*)userdata;
+	auto& SF = PD._p;
 
 	PD.suspend_draw = true;
-	if ( gtk_combo_box_get_active( PD._p.eSFPDChannelA) == -1 ||
-	     gtk_combo_box_get_active( PD._p.eSFPDChannelB) == -1 ) {
-		PD.channel1 = &*PD._p.channels.begin();
-		PD.channel2 = &*next(PD._p.channels.begin());
-		PD.preselect_channel( PD._p.eSFPDChannelA, PD.channel1->name);
-		PD.preselect_channel( PD._p.eSFPDChannelB, PD.channel2->name);
+	if ( gtk_combo_box_get_active( PD.eSFPDChannelA) == -1 ||
+	     gtk_combo_box_get_active( PD.eSFPDChannelB) == -1 ) {
+		PD.channel1 = &*SF.channels.begin();
+		PD.channel2 = &*next(SF.channels.begin());
+		PD.preselect_channel( PD.eSFPDChannelA, PD.channel1->name);
+		PD.preselect_channel( PD.eSFPDChannelB, PD.channel2->name);
 	} else {
 		// they have been nicely set before, havent't they
 		// PD.channel1 = PD.channel_from_cbox( eSFPDChannelA);
 		// PD.channel2 = PD.channel_from_cbox( eSFPDChannelB);
 	}
 
-	gtk_spin_button_set_value( PD._p.eSFPDFreqFrom, PD.from);
-	gtk_spin_button_set_value( PD._p.eSFPDBandwidth, PD.upto - PD.from);
+	gtk_spin_button_set_value( PD.eSFPDFreqFrom, PD.from);
+	gtk_spin_button_set_value( PD.eSFPDBandwidth, PD.upto - PD.from);
 	snprintf_buf( "Smooth: %zu", PD.smooth_side);
-	gtk_button_set_label( (GtkButton*)PD._p.eSFPDSmooth, __buf__);
+	gtk_button_set_label( (GtkButton*)PD.eSFPDSmooth, __buf__);
 
 	PD.update_course();
 	PD.suspend_draw = false;
-	gtk_widget_queue_draw( (GtkWidget*)PD._p.daSFPD);
+	gtk_widget_queue_draw( (GtkWidget*)PD.daSFPD);
 }
 
 void
 wSFPD_hide_cb( GtkWidget *wid, gpointer userdata)
 {
-	auto& SF = *(SScoringFacility*)userdata;
-	auto& PD = SF.phasediff_dialog;
+	auto& PD = *(SScoringFacility::SPhasediffDialog*)userdata;
 
 	gtk_toggle_button_set_active( PD._p.bSFShowPhaseDiffDialog, FALSE);
 }
diff --git a/src/ui/sf/ica.cc b/src/ui/sf/ica.cc
index 462f602..d922ddc 100644
--- a/src/ui/sf/ica.cc
+++ b/src/ui/sf/ica.cc
@@ -16,7 +16,6 @@
 #include "ica/ica.hh"
 #include "ui/misc.hh"
 #include "sf.hh"
-#include "sf_cb.hh"
 
 using namespace std;
 
diff --git a/src/ui/sf/ica_cb.cc b/src/ui/sf/ica_cb.cc
index bc04275..aad1164 100644
--- a/src/ui/sf/ica_cb.cc
+++ b/src/ui/sf/ica_cb.cc
@@ -12,7 +12,7 @@
 
 #include "ui/misc.hh"
 #include "sf.hh"
-#include "sf-widgets.hh"
+#include "widgets.hh"
 
 using namespace std;
 using namespace aghui;
diff --git a/src/ui/sf/montage.cc b/src/ui/sf/montage.cc
index 3e3d0c9..d0545b1 100644
--- a/src/ui/sf/montage.cc
+++ b/src/ui/sf/montage.cc
@@ -15,6 +15,7 @@
 #include "common/lang.hh"
 #include "ui/misc.hh"
 #include "sf.hh"
+#include "d/patterns.hh"
 
 using namespace std;
 
@@ -254,7 +255,7 @@ draw_page( cairo_t *cr,
 
 		if ( selection_end - selection_start > 5 ) {  // don't mark end if selection is too short
 		      // signal properties
-			auto& Pp = _p.find_dialog.Pp2;
+			auto& Pp = _p.patterns_d().Pp2;
 			if ( draw_selection_envelope ) {
 				valarray<TFloat>
 					selection {(draw_filtered_signal
diff --git a/src/ui/sf/montage_cb.cc b/src/ui/sf/montage_cb.cc
index a7d6cc8..1ca55ee 100644
--- a/src/ui/sf/montage_cb.cc
+++ b/src/ui/sf/montage_cb.cc
@@ -15,7 +15,8 @@
 
 #include "ui/misc.hh"
 #include "sf.hh"
-#include "sf_cb.hh"
+#include "d/artifacts.hh"
+#include "d/filters.hh"
 
 
 using namespace std;
@@ -124,7 +125,7 @@ daSFMontage_button_press_event_cb( GtkWidget *wid, GdkEventButton *event, gpoint
 		    break;
 		case 3:
 			Ch->update_power_check_menu_items();
-			gtk_menu_popup( SF.iiSFPaower,
+			gtk_menu_popup( SF.iiSFPower,
 					NULL, NULL, NULL, NULL, 3, event->time);
 		    break;
 		}
@@ -627,7 +628,7 @@ iSFPageFilter_activate_cb( GtkMenuItem *menuitem, gpointer userdata)
 	FD.P = H.filters;
 	FD.W_V.up();
 
-	snprintf_buf( "<big>Filters for channel <b>%s</b></big>", FDusing_channel->name);
+	snprintf_buf( "<big>Filters for channel <b>%s</b></big>", SF.using_channel->name);
 	gtk_label_set_markup( FD.lSFFilterCaption,
 			      __buf__);
 
diff --git a/src/ui/sf/sf.hh b/src/ui/sf/sf.hh
index 6d6a712..3ecc19a 100644
--- a/src/ui/sf/sf.hh
+++ b/src/ui/sf/sf.hh
@@ -520,8 +520,7 @@ class SScoringFacility
 	SPhasediffDialog
 		*_phasediff_d;
 	SArtifactsDialog
-		*_artifact_d;
-	void populate_mSFADProfiles();
+		*_artifacts_d;
 
     public:
       // menu support
@@ -709,6 +708,131 @@ SScoringFacility::channel_y0( const T& h) const
 
 } // namespace aghui
 
+
+extern "C" {
+
+//gboolean wScoringFacility_configure_event_cb( GtkWidget*, GdkEventConfigure*, gpointer);
+gboolean daSFMontage_configure_event_cb( GtkWidget*, GdkEventConfigure*, gpointer);
+
+gboolean daSFMontage_draw_cb( GtkWidget*, cairo_t*, gpointer);
+gboolean daSFMontage_button_press_event_cb( GtkWidget*, GdkEventButton*, gpointer);
+gboolean daSFMontage_button_release_event_cb( GtkWidget*, GdkEventButton*, gpointer);
+gboolean daSFMontage_motion_notify_event_cb( GtkWidget*, GdkEventMotion*, gpointer);
+gboolean daSFMontage_leave_notify_event_cb( GtkWidget*, GdkEventMotion*, gpointer);
+gboolean daSFMontage_scroll_event_cb( GtkWidget*, GdkEventScroll*, gpointer);
+
+void eSFPageSize_changed_cb( GtkComboBox*, gpointer);
+void eSFCurrentPage_value_changed_cb( GtkSpinButton*, gpointer);
+
+void bSFScoreClear_clicked_cb( GtkButton*, gpointer);
+void bSFScoreNREM1_clicked_cb( GtkButton*, gpointer);
+void bSFScoreNREM2_clicked_cb( GtkButton*, gpointer);
+void bSFScoreNREM3_clicked_cb( GtkButton*, gpointer);
+void bSFScoreNREM4_clicked_cb( GtkButton*, gpointer);
+void bSFScoreREM_clicked_cb  ( GtkButton*, gpointer);
+void bSFScoreWake_clicked_cb ( GtkButton*, gpointer);
+
+void eSFCurrentPos_clicked_cb( GtkButton*, gpointer);
+void bSFForward_clicked_cb( GtkButton*, gpointer);
+void bSFBack_clicked_cb( GtkButton*, gpointer);
+void bSFGotoPrevUnscored_clicked_cb( GtkButton*, gpointer);
+void bSFGotoNextUnscored_clicked_cb( GtkButton*, gpointer);
+void bSFGotoPrevArtifact_clicked_cb( GtkButton*, gpointer);
+void bSFGotoNextArtifact_clicked_cb( GtkButton*, gpointer);
+void bSFDrawCrosshair_toggled_cb( GtkToggleButton*, gpointer);
+void bSFShowFindDialog_toggled_cb( GtkToggleButton*, gpointer);
+void bSFShowPhaseDiffDialog_toggled_cb( GtkToggleButton*, gpointer);
+void bSFRunICA_clicked_cb( GtkButton*, gpointer);
+//void bSFResetMontage_clicked_cb( GtkButton*, gpointer);
+
+
+void eSFICARemixMode_changed_cb( GtkComboBox*, gpointer);
+void eSFICANonlinearity_changed_cb( GtkComboBox*, gpointer);
+void eSFICAApproach_changed_cb( GtkComboBox*, gpointer);
+void eSFICAFineTune_toggled_cb( GtkCheckButton*, gpointer);
+void eSFICAStabilizationMode_toggled_cb( GtkCheckButton*, gpointer);
+void eSFICAa1_value_changed_cb( GtkSpinButton*, gpointer);
+void eSFICAa2_value_changed_cb( GtkSpinButton*, gpointer);
+void eSFICAmu_value_changed_cb( GtkSpinButton*, gpointer);
+void eSFICAepsilon_value_changed_cb( GtkSpinButton*, gpointer);
+void eSFICASampleSizePercent_value_changed_cb( GtkSpinButton*, gpointer);
+void eSFICANofICs_value_changed_cb( GtkSpinButton*, gpointer);
+void eSFICAEigVecFirst_value_changed_cb( GtkSpinButton*, gpointer);
+void eSFICAEigVecLast_value_changed_cb( GtkSpinButton*, gpointer);
+void eSFICAMaxIterations_value_changed_cb( GtkSpinButton*, gpointer);
+void bSFICATry_clicked_cb( GtkButton*, gpointer);
+void bSFICAPreview_toggled_cb( GtkToggleButton*, gpointer);
+void bSFICAShowMatrix_toggled_cb( GtkToggleButton*, gpointer);
+void wSFICAMatrix_hide_cb( GtkWidget*, gpointer);
+void bSFICAApply_clicked_cb( GtkButton*, gpointer);
+void bSFICACancel_clicked_cb( GtkButton*, gpointer);
+
+
+void bSFAccept_clicked_cb( GtkToolButton*, gpointer);
+void iSFAcceptAndTakeNext_activate_cb( GtkMenuItem*, gpointer);
+
+void iSFPageShowOriginal_toggled_cb( GtkCheckMenuItem*, gpointer);
+void iSFPageShowProcessed_toggled_cb( GtkCheckMenuItem*, gpointer);
+void iSFPageUseResample_toggled_cb( GtkCheckMenuItem*, gpointer);
+void iSFPageDrawZeroline_toggled_cb( GtkCheckMenuItem*, gpointer);
+void iSFPageArtifactsDetect_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageArtifactsMarkFlat_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageArtifactsClear_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageFilter_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageSaveChannelAsSVG_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageSaveMontageAsSVG_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageExportSignal_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageUseThisScale_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageClearArtifacts_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageHide_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageHidden_select_cb( GtkMenuItem*, gpointer);
+void iSFPageHidden_deselect_cb( GtkMenuItem*, gpointer);
+void iSFPageShowHidden_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageSpaceEvenly_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageLocateSelection_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageDrawPSDProfile_toggled_cb( GtkCheckMenuItem*, gpointer);
+void iSFPageDrawPSDSpectrum_toggled_cb( GtkCheckMenuItem*, gpointer);
+void iSFPageDrawSWUProfile_toggled_cb( GtkCheckMenuItem*, gpointer);
+void iSFPageDrawMCProfile_toggled_cb( GtkCheckMenuItem*, gpointer);
+void iSFPageDrawEMGProfile_toggled_cb( GtkCheckMenuItem*, gpointer);
+
+void iSFPageSelectionDrawCourse_toggled_cb( GtkCheckMenuItem*, gpointer);
+void iSFPageSelectionDrawEnvelope_toggled_cb( GtkCheckMenuItem*, gpointer);
+void iSFPageSelectionDrawDzxdf_toggled_cb( GtkCheckMenuItem*, gpointer);
+
+void iSFICAPageMapIC_activate_cb( GtkRadioMenuItem*, gpointer);
+
+void iSFPageAnnotationDelete_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageAnnotationEdit_activate_cb( GtkMenuItem*, gpointer);
+
+void iSFPageSelectionMarkArtifact_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageSelectionClearArtifact_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageSelectionFindPattern_activate_cb( GtkMenuItem*, gpointer);
+void iSFPageSelectionAnnotate_activate_cb( GtkMenuItem*, gpointer);
+
+void iSFPowerExportRange_activate_cb( GtkMenuItem*, gpointer);
+void iSFPowerExportAll_activate_cb( GtkMenuItem*, gpointer);
+void iSFPowerSmooth_toggled_cb( GtkCheckMenuItem*, gpointer);
+void iSFPowerDrawBands_toggled_cb( GtkCheckMenuItem*, gpointer);
+void iSFPowerUseThisScale_activate_cb( GtkMenuItem*, gpointer);
+void iSFPowerAutoscale_toggled_cb( GtkCheckMenuItem*, gpointer);
+
+gboolean daSFHypnogram_draw_cb( GtkWidget*, cairo_t*, gpointer);
+gboolean daSFHypnogram_button_press_event_cb( GtkWidget*, GdkEventButton*, gpointer);
+gboolean daSFHypnogram_button_release_event_cb( GtkWidget*, GdkEventButton*, gpointer);
+gboolean daSFHypnogram_motion_notify_event_cb( GtkWidget*, GdkEventMotion*, gpointer);
+
+void iSFScoreAssist_activate_cb( GtkMenuItem*, gpointer);
+void iSFScoreImport_activate_cb( GtkMenuItem*, gpointer);
+void iSFScoreExport_activate_cb( GtkMenuItem*, gpointer);
+void iSFScoreClear_activate_cb( GtkMenuItem*, gpointer);
+
+gboolean wSF_delete_event_cb( GtkWidget*, GdkEvent*, gpointer);
+
+} // extern "C"
+
+
+
 #endif
 
 // eof
diff --git a/src/ui/sf/sf_cb.hh b/src/ui/sf/sf_cb.hh
deleted file mode 100644
index 873ce9d..0000000
--- a/src/ui/sf/sf_cb.hh
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- *       File name:  ui/sf/sf_cb.hh
- *         Project:  Aghermann
- *          Author:  Andrei Zavada <johnhommer at gmail.com>
- * Initial version:  2012-06-25
- *
- *         Purpose:  forward declarations of SF callbacks
- *
- *         License:  GPL
- */
-
-#ifndef _AGH_UI_SF_CB_H
-#define _AGH_UI_SF_CB_H
-
-#include <gtk/gtk.h>
-
-#if HAVE_CONFIG_H && !defined(VERSION)
-#  include "config.h"
-#endif
-
-extern "C" {
-
-//gboolean wScoringFacility_configure_event_cb( GtkWidget*, GdkEventConfigure*, gpointer);
-gboolean daSFMontage_configure_event_cb( GtkWidget*, GdkEventConfigure*, gpointer);
-
-gboolean daSFMontage_draw_cb( GtkWidget*, cairo_t*, gpointer);
-gboolean daSFMontage_button_press_event_cb( GtkWidget*, GdkEventButton*, gpointer);
-gboolean daSFMontage_button_release_event_cb( GtkWidget*, GdkEventButton*, gpointer);
-gboolean daSFMontage_motion_notify_event_cb( GtkWidget*, GdkEventMotion*, gpointer);
-gboolean daSFMontage_leave_notify_event_cb( GtkWidget*, GdkEventMotion*, gpointer);
-gboolean daSFMontage_scroll_event_cb( GtkWidget*, GdkEventScroll*, gpointer);
-
-void eSFPageSize_changed_cb( GtkComboBox*, gpointer);
-void eSFCurrentPage_value_changed_cb( GtkSpinButton*, gpointer);
-
-void bSFScoreClear_clicked_cb( GtkButton*, gpointer);
-void bSFScoreNREM1_clicked_cb( GtkButton*, gpointer);
-void bSFScoreNREM2_clicked_cb( GtkButton*, gpointer);
-void bSFScoreNREM3_clicked_cb( GtkButton*, gpointer);
-void bSFScoreNREM4_clicked_cb( GtkButton*, gpointer);
-void bSFScoreREM_clicked_cb  ( GtkButton*, gpointer);
-void bSFScoreWake_clicked_cb ( GtkButton*, gpointer);
-
-void eSFCurrentPos_clicked_cb( GtkButton*, gpointer);
-void bSFForward_clicked_cb( GtkButton*, gpointer);
-void bSFBack_clicked_cb( GtkButton*, gpointer);
-void bSFGotoPrevUnscored_clicked_cb( GtkButton*, gpointer);
-void bSFGotoNextUnscored_clicked_cb( GtkButton*, gpointer);
-void bSFGotoPrevArtifact_clicked_cb( GtkButton*, gpointer);
-void bSFGotoNextArtifact_clicked_cb( GtkButton*, gpointer);
-void bSFDrawCrosshair_toggled_cb( GtkToggleButton*, gpointer);
-void bSFShowFindDialog_toggled_cb( GtkToggleButton*, gpointer);
-void bSFShowPhaseDiffDialog_toggled_cb( GtkToggleButton*, gpointer);
-void bSFRunICA_clicked_cb( GtkButton*, gpointer);
-//void bSFResetMontage_clicked_cb( GtkButton*, gpointer);
-
-
-void eSFICARemixMode_changed_cb( GtkComboBox*, gpointer);
-void eSFICANonlinearity_changed_cb( GtkComboBox*, gpointer);
-void eSFICAApproach_changed_cb( GtkComboBox*, gpointer);
-void eSFICAFineTune_toggled_cb( GtkCheckButton*, gpointer);
-void eSFICAStabilizationMode_toggled_cb( GtkCheckButton*, gpointer);
-void eSFICAa1_value_changed_cb( GtkSpinButton*, gpointer);
-void eSFICAa2_value_changed_cb( GtkSpinButton*, gpointer);
-void eSFICAmu_value_changed_cb( GtkSpinButton*, gpointer);
-void eSFICAepsilon_value_changed_cb( GtkSpinButton*, gpointer);
-void eSFICASampleSizePercent_value_changed_cb( GtkSpinButton*, gpointer);
-void eSFICANofICs_value_changed_cb( GtkSpinButton*, gpointer);
-void eSFICAEigVecFirst_value_changed_cb( GtkSpinButton*, gpointer);
-void eSFICAEigVecLast_value_changed_cb( GtkSpinButton*, gpointer);
-void eSFICAMaxIterations_value_changed_cb( GtkSpinButton*, gpointer);
-void bSFICATry_clicked_cb( GtkButton*, gpointer);
-void bSFICAPreview_toggled_cb( GtkToggleButton*, gpointer);
-void bSFICAShowMatrix_toggled_cb( GtkToggleButton*, gpointer);
-void wSFICAMatrix_hide_cb( GtkWidget*, gpointer);
-void bSFICAApply_clicked_cb( GtkButton*, gpointer);
-void bSFICACancel_clicked_cb( GtkButton*, gpointer);
-
-
-void bSFAccept_clicked_cb( GtkToolButton*, gpointer);
-void iSFAcceptAndTakeNext_activate_cb( GtkMenuItem*, gpointer);
-
-void iSFPageShowOriginal_toggled_cb( GtkCheckMenuItem*, gpointer);
-void iSFPageShowProcessed_toggled_cb( GtkCheckMenuItem*, gpointer);
-void iSFPageUseResample_toggled_cb( GtkCheckMenuItem*, gpointer);
-void iSFPageDrawZeroline_toggled_cb( GtkCheckMenuItem*, gpointer);
-void iSFPageArtifactsDetect_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageArtifactsMarkFlat_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageArtifactsClear_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageFilter_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageSaveChannelAsSVG_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageSaveMontageAsSVG_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageExportSignal_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageUseThisScale_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageClearArtifacts_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageHide_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageHidden_select_cb( GtkMenuItem*, gpointer);
-void iSFPageHidden_deselect_cb( GtkMenuItem*, gpointer);
-void iSFPageShowHidden_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageSpaceEvenly_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageLocateSelection_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageDrawPSDProfile_toggled_cb( GtkCheckMenuItem*, gpointer);
-void iSFPageDrawPSDSpectrum_toggled_cb( GtkCheckMenuItem*, gpointer);
-void iSFPageDrawSWUProfile_toggled_cb( GtkCheckMenuItem*, gpointer);
-void iSFPageDrawMCProfile_toggled_cb( GtkCheckMenuItem*, gpointer);
-void iSFPageDrawEMGProfile_toggled_cb( GtkCheckMenuItem*, gpointer);
-
-void iSFPageSelectionDrawCourse_toggled_cb( GtkCheckMenuItem*, gpointer);
-void iSFPageSelectionDrawEnvelope_toggled_cb( GtkCheckMenuItem*, gpointer);
-void iSFPageSelectionDrawDzxdf_toggled_cb( GtkCheckMenuItem*, gpointer);
-
-
-
-void iSFICAPageMapIC_activate_cb( GtkRadioMenuItem*, gpointer);
-
-void iSFPageAnnotationDelete_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageAnnotationEdit_activate_cb( GtkMenuItem*, gpointer);
-
-void iSFPageSelectionMarkArtifact_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageSelectionClearArtifact_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageSelectionFindPattern_activate_cb( GtkMenuItem*, gpointer);
-void iSFPageSelectionAnnotate_activate_cb( GtkMenuItem*, gpointer);
-
-void iSFPowerExportRange_activate_cb( GtkMenuItem*, gpointer);
-void iSFPowerExportAll_activate_cb( GtkMenuItem*, gpointer);
-void iSFPowerSmooth_toggled_cb( GtkCheckMenuItem*, gpointer);
-void iSFPowerDrawBands_toggled_cb( GtkCheckMenuItem*, gpointer);
-void iSFPowerUseThisScale_activate_cb( GtkMenuItem*, gpointer);
-void iSFPowerAutoscale_toggled_cb( GtkCheckMenuItem*, gpointer);
-
-gboolean daSFHypnogram_draw_cb( GtkWidget*, cairo_t*, gpointer);
-gboolean daSFHypnogram_button_press_event_cb( GtkWidget*, GdkEventButton*, gpointer);
-gboolean daSFHypnogram_button_release_event_cb( GtkWidget*, GdkEventButton*, gpointer);
-gboolean daSFHypnogram_motion_notify_event_cb( GtkWidget*, GdkEventMotion*, gpointer);
-
-void iSFScoreAssist_activate_cb( GtkMenuItem*, gpointer);
-void iSFScoreImport_activate_cb( GtkMenuItem*, gpointer);
-void iSFScoreExport_activate_cb( GtkMenuItem*, gpointer);
-void iSFScoreClear_activate_cb( GtkMenuItem*, gpointer);
-
-void eSFFDPatternList_changed_cb( GtkComboBox*, gpointer);
-void eSFFDChannel_changed_cb( GtkComboBox*, gpointer);
-gboolean daSFFDField_draw_cb( GtkWidget*, cairo_t*, gpointer);
-gboolean daSFFDField_scroll_event_cb( GtkWidget*, GdkEventScroll*, gpointer);
-gboolean daSFFDField_button_press_event_cb( GtkWidget*, GdkEventButton*, gpointer);
-gboolean daSFFDField_motion_notify_event_cb( GtkWidget*, GdkEventMotion*, gpointer);
-gboolean daSFFDThing_draw_cb( GtkWidget*, cairo_t*, gpointer);
-gboolean daSFFDThing_scroll_event_cb( GtkWidget*, GdkEventScroll*, gpointer);
-void bSFFDSearch_clicked_cb( GtkButton*, gpointer);
-void bSFFDAgain_clicked_cb( GtkButton*, gpointer);
-void bSFFDProfileSave_clicked_cb( GtkButton*, gpointer);
-void bSFFDProfileDiscard_clicked_cb( GtkButton*, gpointer);
-void bSFFDProfileRevert_clicked_cb( GtkButton*, gpointer);
-void eSFFD_any_pattern_value_changed_cb( GtkSpinButton*, gpointer);
-void eSFFD_any_criteria_value_changed_cb( GtkSpinButton*, gpointer);
-void wSFFD_show_cb( GtkWidget*, gpointer);
-void wSFFD_hide_cb( GtkWidget*, gpointer);
-gboolean wSFFD_configure_event_cb( GtkWidget*, GdkEventConfigure*, gpointer);
-
-void eSFPDChannelA_changed_cb( GtkComboBox*, gpointer);
-void eSFPDChannelB_changed_cb( GtkComboBox*, gpointer);
-gboolean daSFPD_draw_cb( GtkWidget*, cairo_t*, gpointer);
-gboolean daSFPD_scroll_event_cb( GtkWidget*, GdkEventScroll*, gpointer);
-void eSFPDChannelA_changed_cb( GtkComboBox*, gpointer);
-void eSFPDChannelB_changed_cb( GtkComboBox*, gpointer);
-void eSFPDFreqFrom_value_changed_cb( GtkSpinButton*, gpointer);
-void eSFPDBandwidth_value_changed_cb( GtkSpinButton*, gpointer);
-void eSFPDSmooth_value_changed_cb( GtkScaleButton*, gdouble, gpointer);
-void wSFPD_show_cb( GtkWidget*, gpointer);
-void wSFPD_hide_cb( GtkWidget*, gpointer);
-
-gboolean wSF_delete_event_cb( GtkWidget*, GdkEvent*, gpointer);
-
-} // extern "C"
-
-#endif // _AGH_UI_SF_
-
-
-// Local Variables:
-// indent-tabs-mode: 8
-// End:
diff --git a/src/ui/sf/widgets.hh b/src/ui/sf/widgets.hh
index 2af83da..c11d2df 100644
--- a/src/ui/sf/widgets.hh
+++ b/src/ui/sf/widgets.hh
@@ -22,10 +22,11 @@ struct SScoringFacilityWidgets {
 	// we load and construct own widget set (wSF and all its contents)
 	// ourself, for every SScoringFacility instance being created, so
 	// construct_widgets below takes an arg
-	GtkBuilder *builder;
 	SScoringFacilityWidgets ();
        ~SScoringFacilityWidgets ();
 
+	GtkBuilder *builder;
+
 	// storage
 	GtkListStore
 		*mSFScoringPageSize,

-- 
Sleep experiment manager



More information about the debian-med-commit mailing list