[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