The following commit has been merged in the master branch:
commit 58adc3deeef7cfb1fce593cfd2f1543eb6dc4bcd
Author: andrei zavada <[email protected]>
Date:   Thu Jan 24 11:17:06 2013 +0000

    splitting sf child dialogs WIP

diff --git a/src/ui/sf/Makefile.am b/src/ui/sf/Makefile.am
index 4dc15b3..5591e87 100644
--- a/src/ui/sf/Makefile.am
+++ b/src/ui/sf/Makefile.am
@@ -21,6 +21,7 @@ liba_a_SOURCES := \
        sf-montage.cc \
        sf-montage-overlays.cc \
        sf-montage_cb.cc \
+       sf-patterns.hh \
        sf-patterns.cc \
        sf-patterns-draw.cc \
        sf-patterns-enumerate.cc \
diff --git a/src/ui/sf/sf-channel.cc b/src/ui/sf/sf-channel.cc
index 77112ca..2316a4f 100644
--- a/src/ui/sf/sf-channel.cc
+++ b/src/ui/sf/sf-channel.cc
@@ -463,6 +463,9 @@ 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);
 }
diff --git a/src/ui/sf/sf-construct.cc b/src/ui/sf/sf-construct.cc
index ed4499d..7d6bd44 100644
--- a/src/ui/sf/sf-construct.cc
+++ b/src/ui/sf/sf-construct.cc
@@ -378,84 +378,6 @@ SScoringFacilityWidgets (SExpDesignUI& _p)
                throw runtime_error ("Failed to construct SF widgets (8)");
 
 
-      // find/manage patterns
-       mSFFDPatterns =
-               gtk_list_store_new( 1, G_TYPE_STRING);
-
-       if ( !AGH_GBGETOBJ (GtkDialog,          wSFFD) ||
-            !AGH_GBGETOBJ (GtkDrawingArea,     daSFFDThing) ||
-            !AGH_GBGETOBJ (GtkScrolledWindow,  swSFFDThing) ||
-            !AGH_GBGETOBJ (GtkDrawingArea,     daSFFDField) ||
-            !AGH_GBGETOBJ (GtkMenu,            iiSFFDField) ||
-            !AGH_GBGETOBJ (GtkScrolledWindow,  swSFFDField) ||
-            !AGH_GBGETOBJ (GtkTable,           cSFFDSearchButton) ||
-            !AGH_GBGETOBJ (GtkTable,           cSFFDAgainButton) ||
-            !AGH_GBGETOBJ (GtkBox,             cSFFDSearching) ||
-            !AGH_GBGETOBJ (GtkTable,           cSFFDParameters) ||
-            !AGH_GBGETOBJ (GtkTable,           cSFFDCriteria) ||
-            !AGH_GBGETOBJ (GtkButton,          bSFFDSearch) ||
-            !AGH_GBGETOBJ (GtkButton,          bSFFDAgain) ||
-            !AGH_GBGETOBJ (GtkButton,          bSFFDProfileSave) ||
-            !AGH_GBGETOBJ (GtkButton,          bSFFDProfileDiscard) ||
-            !AGH_GBGETOBJ (GtkButton,          bSFFDProfileRevert) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDEnvTightness) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDBandPassOrder) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDBandPassFrom) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDBandPassUpto) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDDZCDFStep) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDDZCDFSigma) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDDZCDFSmooth) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDParameterA) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDParameterB) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDParameterC) ||
-            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDParameterD) ||
-            !AGH_GBGETOBJ (GtkHBox,            cSFFDLabelBox) ||
-            !AGH_GBGETOBJ (GtkLabel,           lSFFDParametersBrief) ||
-            !AGH_GBGETOBJ (GtkLabel,           lSFFDFoundInfo) ||
-            !AGH_GBGETOBJ (GtkComboBox,        eSFFDPatternList) ||
-            !AGH_GBGETOBJ (GtkComboBox,        eSFFDChannel) ||
-            !AGH_GBGETOBJ (GtkDialog,          wSFFDPatternSave) ||
-            !AGH_GBGETOBJ (GtkEntry,           eSFFDPatternSaveName) ||
-            !AGH_GBGETOBJ (GtkToggleButton,    eSFFDPatternSaveOriginSubject) 
||
-            !AGH_GBGETOBJ (GtkToggleButton,    
eSFFDPatternSaveOriginExperiment) ||
-            !AGH_GBGETOBJ (GtkToggleButton,    eSFFDPatternSaveOriginUser) )
-               throw runtime_error ("Failed to construct SF widgets (9)");
-
-       gtk_combo_box_set_model_properly( eSFFDPatternList, mSFFDPatterns);
-       eSFFDPatternList_changed_cb_handler_id =
-               G_CONNECT_1 (eSFFDPatternList, changed);
-
-       gtk_combo_box_set_model_properly( eSFFDChannel, _p.mAllChannels);
-       eSFFDChannel_changed_cb_handler_id =
-               G_CONNECT_1 (eSFFDChannel, changed);
-
-       G_CONNECT_2 (wSFFD, configure, event);
-       G_CONNECT_1 (daSFFDThing, draw);
-       G_CONNECT_2 (daSFFDThing, scroll, event);
-       G_CONNECT_1 (daSFFDField, draw);
-       G_CONNECT_2 (daSFFDField, scroll, event);
-       G_CONNECT_3 (daSFFDField, motion, notify, event);
-       G_CONNECT_3 (daSFFDField, button, press, event);
-       G_CONNECT_1 (bSFFDProfileSave, clicked);
-       G_CONNECT_1 (bSFFDProfileDiscard, clicked);
-       G_CONNECT_1 (bSFFDProfileRevert, clicked);
-       G_CONNECT_1 (bSFFDSearch, clicked);
-       G_CONNECT_1 (bSFFDAgain, clicked);
-
-       for ( auto& W : {eSFFDEnvTightness,
-                        eSFFDBandPassFrom, eSFFDBandPassUpto, 
eSFFDBandPassOrder,
-                        eSFFDDZCDFStep, eSFFDDZCDFSigma, eSFFDDZCDFSmooth} )
-               g_signal_connect( W, "value-changed",
-                                 (GCallback)eSFFD_any_pattern_value_changed_cb,
-                                 this);
-       for ( auto& W : {eSFFDParameterA, eSFFDParameterB, eSFFDParameterC, 
eSFFDParameterD} )
-               g_signal_connect( W, "value-changed",
-                                 
(GCallback)eSFFD_any_criteria_value_changed_cb,
-                                 this);
-
-       G_CONNECT_1 (wSFFD, show);
-       G_CONNECT_1 (wSFFD, hide);
-
 
        // aghui::SScoringFacility::SFiltersDialog::
 
diff --git a/src/ui/sf/sf-patterns-construct.cc 
b/src/ui/sf/sf-patterns-construct.cc
new file mode 100644
index 0000000..97712fc
--- /dev/null
+++ b/src/ui/sf/sf-patterns-construct.cc
@@ -0,0 +1,93 @@
+// ;-*-C++-*-
+/*
+ *       File name:  ui/sf/sf-patterns-construct.cc
+ *         Project:  Aghermann
+ *          Author:  Andrei Zavada <[email protected]>
+ * Initial version:  2013-01-24
+ *
+ *         Purpose:  scoring facility Patterns widget construction
+ *
+ *         License:  GPL
+ */
+
+#include <stdexcept>
+
+
+       mSFFDPatterns =
+               gtk_list_store_new( 1, G_TYPE_STRING);
+
+       if ( !AGH_GBGETOBJ (GtkDialog,          wSFFD) ||
+            !AGH_GBGETOBJ (GtkDrawingArea,     daSFFDThing) ||
+            !AGH_GBGETOBJ (GtkScrolledWindow,  swSFFDThing) ||
+            !AGH_GBGETOBJ (GtkDrawingArea,     daSFFDField) ||
+            !AGH_GBGETOBJ (GtkMenu,            iiSFFDField) ||
+            !AGH_GBGETOBJ (GtkScrolledWindow,  swSFFDField) ||
+            !AGH_GBGETOBJ (GtkTable,           cSFFDSearchButton) ||
+            !AGH_GBGETOBJ (GtkTable,           cSFFDAgainButton) ||
+            !AGH_GBGETOBJ (GtkBox,             cSFFDSearching) ||
+            !AGH_GBGETOBJ (GtkTable,           cSFFDParameters) ||
+            !AGH_GBGETOBJ (GtkTable,           cSFFDCriteria) ||
+            !AGH_GBGETOBJ (GtkButton,          bSFFDSearch) ||
+            !AGH_GBGETOBJ (GtkButton,          bSFFDAgain) ||
+            !AGH_GBGETOBJ (GtkButton,          bSFFDProfileSave) ||
+            !AGH_GBGETOBJ (GtkButton,          bSFFDProfileDiscard) ||
+            !AGH_GBGETOBJ (GtkButton,          bSFFDProfileRevert) ||
+            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDEnvTightness) ||
+            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDBandPassOrder) ||
+            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDBandPassFrom) ||
+            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDBandPassUpto) ||
+            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDDZCDFStep) ||
+            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDDZCDFSigma) ||
+            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDDZCDFSmooth) ||
+            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDParameterA) ||
+            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDParameterB) ||
+            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDParameterC) ||
+            !AGH_GBGETOBJ (GtkSpinButton,      eSFFDParameterD) ||
+            !AGH_GBGETOBJ (GtkHBox,            cSFFDLabelBox) ||
+            !AGH_GBGETOBJ (GtkLabel,           lSFFDParametersBrief) ||
+            !AGH_GBGETOBJ (GtkLabel,           lSFFDFoundInfo) ||
+            !AGH_GBGETOBJ (GtkComboBox,        eSFFDPatternList) ||
+            !AGH_GBGETOBJ (GtkComboBox,        eSFFDChannel) ||
+            !AGH_GBGETOBJ (GtkDialog,          wSFFDPatternSave) ||
+            !AGH_GBGETOBJ (GtkEntry,           eSFFDPatternSaveName) ||
+            !AGH_GBGETOBJ (GtkToggleButton,    eSFFDPatternSaveOriginSubject) 
||
+            !AGH_GBGETOBJ (GtkToggleButton,    
eSFFDPatternSaveOriginExperiment) ||
+            !AGH_GBGETOBJ (GtkToggleButton,    eSFFDPatternSaveOriginUser) )
+               throw runtime_error ("Failed to construct SF widgets (9)");
+
+       gtk_combo_box_set_model_properly( eSFFDPatternList, mSFFDPatterns);
+       eSFFDPatternList_changed_cb_handler_id =
+               G_CONNECT_1 (eSFFDPatternList, changed);
+
+       gtk_combo_box_set_model_properly( eSFFDChannel, _p.mAllChannels);
+       eSFFDChannel_changed_cb_handler_id =
+               G_CONNECT_1 (eSFFDChannel, changed);
+
+       G_CONNECT_2 (wSFFD, configure, event);
+       G_CONNECT_1 (daSFFDThing, draw);
+       G_CONNECT_2 (daSFFDThing, scroll, event);
+       G_CONNECT_1 (daSFFDField, draw);
+       G_CONNECT_2 (daSFFDField, scroll, event);
+       G_CONNECT_3 (daSFFDField, motion, notify, event);
+       G_CONNECT_3 (daSFFDField, button, press, event);
+       G_CONNECT_1 (bSFFDProfileSave, clicked);
+       G_CONNECT_1 (bSFFDProfileDiscard, clicked);
+       G_CONNECT_1 (bSFFDProfileRevert, clicked);
+       G_CONNECT_1 (bSFFDSearch, clicked);
+       G_CONNECT_1 (bSFFDAgain, clicked);
+
+       for ( auto& W : {eSFFDEnvTightness,
+                        eSFFDBandPassFrom, eSFFDBandPassUpto, 
eSFFDBandPassOrder,
+                        eSFFDDZCDFStep, eSFFDDZCDFSigma, eSFFDDZCDFSmooth} )
+               g_signal_connect( W, "value-changed",
+                                 (GCallback)eSFFD_any_pattern_value_changed_cb,
+                                 this);
+       for ( auto& W : {eSFFDParameterA, eSFFDParameterB, eSFFDParameterC, 
eSFFDParameterD} )
+               g_signal_connect( W, "value-changed",
+                                 
(GCallback)eSFFD_any_criteria_value_changed_cb,
+                                 this);
+
+       G_CONNECT_1 (wSFFD, show);
+       G_CONNECT_1 (wSFFD, hide);
+
+}
diff --git a/src/ui/sf/sf-patterns.hh b/src/ui/sf/sf-patterns.hh
new file mode 100644
index 0000000..2a74536
--- /dev/null
+++ b/src/ui/sf/sf-patterns.hh
@@ -0,0 +1,113 @@
+// ;-*-C++-*-
+/*
+ *       File name:  ui/sf/sf-patterns.hh
+ *         Project:  Aghermann
+ *          Author:  Andrei Zavada <[email protected]>
+ * Initial version:  2013-01-24
+ *
+ *         Purpose:  scoring facility Patterns child dialog
+ *
+ *         License:  GPL
+ */
+
+#ifndef _AGH_UI_SF_PATTERNS_H
+#define _AGH_UI_SF_PATTERNS_H
+
+#include "patterns/patterns.hh"
+#include "sf.hh"
+
+#if HAVE_CONFIG_H && !defined(VERSION)
+#  include "config.h"
+#endif
+
+using namespace std;
+
+namespace aghui {
+
+struct SScoringFacility::SFindDialog {
+       DELETE_DEFAULT_METHODS (SFindDialog);
+
+      // ctor, dtor
+       SFindDialog (SScoringFacility& parent);
+       ~SFindDialog ();
+
+      // saved patterns
+       list<pattern::SPattern<TFloat>>
+               patterns;
+       list<pattern::SPattern<TFloat>>::iterator
+               current_pattern;
+       list<pattern::SPattern<TFloat>>::iterator
+       pattern_by_idx( size_t);
+
+       void import_from_selection( SScoringFacility::SChannel&);
+       void load_patterns();
+       void save_patterns();
+       void discard_current_pattern();
+       void populate_combo();
+
+      // finding tool
+       pattern::SPatternPPack<TFloat>
+               Pp2;
+       pattern::CPatternTool<TFloat>
+               *cpattern;
+       double  increment; // in seconds
+
+      // matches
+       pattern::CMatch<TFloat>
+               criteria;
+       vector<pattern::CMatch<TFloat>>
+               diff_line;
+       vector<size_t>
+               occurrences;
+       size_t  highlighted_occurrence;
+       void search();
+       size_t find_occurrences();
+       size_t nearest_occurrence( double) const;
+
+      // field
+       SScoringFacility::SChannel
+               *field_channel,
+               *field_channel_saved;
+       list<sigfile::SAnnotation>
+               saved_annotations;
+       void occurrences_to_annotations();
+       void save_annotations();
+       void restore_annotations();
+
+       metrics::TType
+               field_profile_type; // where appropriate; otherwise draw 
compressed raw
+
+      // draw
+       bool    draw_details:1,
+               suppress_w_v:1;
+       void draw_thing( cairo_t*);
+       void draw_field( cairo_t*);
+       float   thing_display_scale,
+               field_display_scale;
+
+      // widgets
+       SUIVarCollection
+               W_V;
+
+       void preselect_channel( const char*);
+
+       void setup_controls_for_find();
+       void setup_controls_for_wait();
+       void setup_controls_for_tune();
+       void set_profile_manage_buttons_visibility();
+
+       static const int
+               da_thing_ht = 200,
+               da_field_ht = 130;
+       int     da_thing_wd,
+               da_field_wd;
+       void set_thing_da_width( int);
+       void set_field_da_width( int);
+
+       aghui::SScoringFacility&
+               _p;
+};
+
+} // namespace aghui
+
+// eof
diff --git a/src/ui/sf/sf-patterns_cb.cc b/src/ui/sf/sf-patterns_cb.cc
index 2e1ae5b..10b172b 100644
--- a/src/ui/sf/sf-patterns_cb.cc
+++ b/src/ui/sf/sf-patterns_cb.cc
@@ -25,7 +25,7 @@ gboolean
 daSFFDThing_draw_cb( GtkWidget *wid, cairo_t *cr, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
 
        FD.draw_thing( cr);
 
@@ -36,7 +36,7 @@ gboolean
 daSFFDField_draw_cb( GtkWidget *wid, cairo_t *cr, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
 
        FD.draw_field( cr);
 
@@ -50,7 +50,7 @@ gboolean
 daSFFDThing_scroll_event_cb( GtkWidget *wid, GdkEventScroll *event, gpointer 
userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
 
        switch ( event->direction ) {
        case GDK_SCROLL_UP:
@@ -79,7 +79,7 @@ gboolean
 daSFFDField_scroll_event_cb( GtkWidget *wid, GdkEventScroll *event, gpointer 
userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
 
        switch ( event->direction ) {
        case GDK_SCROLL_UP:
@@ -108,7 +108,7 @@ gboolean
 daSFFDField_button_press_event_cb( GtkWidget *wid, GdkEventButton *event, 
gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
 
        switch ( event->button ) {
        case 1:
@@ -131,7 +131,7 @@ gboolean
 daSFFDField_motion_notify_event_cb( GtkWidget *wid, GdkEventMotion *event, 
gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
 
        FD.highlighted_occurrence = FD.nearest_occurrence( event->x);
 
@@ -146,7 +146,7 @@ void
 bSFFDSearch_clicked_cb( GtkButton *button, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
 
        aghui::SBusyBlock bb (SF.wSFFD);
 
@@ -183,7 +183,7 @@ void
 bSFFDAgain_clicked_cb( GtkButton *button, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
 
        FD.restore_annotations();
        FD.occurrences.clear();
@@ -196,7 +196,7 @@ void
 eSFFD_any_pattern_value_changed_cb( GtkSpinButton *spinbutton, gpointer 
userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
        if ( FD.suppress_w_v )
                return;
 
@@ -221,7 +221,7 @@ void
 eSFFD_any_criteria_value_changed_cb( GtkSpinButton *spinbutton, gpointer 
userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
        if ( FD.suppress_w_v )
                return;
 
@@ -253,7 +253,7 @@ void
 eSFFDPatternList_changed_cb( GtkComboBox *combo, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
 
        if ( FD.current_pattern != FD.patterns.end() ) {
                FD.current_pattern->Pp = FD.Pp2;
@@ -279,7 +279,7 @@ void
 bSFFDProfileSave_clicked_cb( GtkButton *button, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
 
        assert (FD.current_pattern->origin == pattern::TOrigin::transient );
 
@@ -304,7 +304,7 @@ void
 bSFFDProfileDiscard_clicked_cb( GtkButton *button, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
 
        gint ci = gtk_combo_box_get_active( SF.eSFFDPatternList);
 
@@ -333,7 +333,7 @@ void
 bSFFDProfileRevert_clicked_cb( GtkButton *button, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
 
        assert ( FD.current_pattern != FD.patterns.end() );
        assert ( FD.current_pattern->origin != pattern::TOrigin::transient );
@@ -354,7 +354,7 @@ void
 eSFFDChannel_changed_cb( GtkComboBox *combo, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
 
        GtkTreeIter iter;
        if ( gtk_combo_box_get_active_iter( combo, &iter) == FALSE )
@@ -378,7 +378,7 @@ void
 wSFFD_show_cb( GtkWidget *widget, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
 
        FD.setup_controls_for_find();
        FD.populate_combo();
@@ -395,7 +395,7 @@ void
 wSFFD_hide_cb( GtkWidget *widget, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       auto& FD = SF.find_dialog;
+       auto& FD = *SF.find_dialog;
 
        if ( not FD.occurrences.empty() )  // closing while dialog is in 
matching state
                if ( GTK_RESPONSE_YES !=
diff --git a/src/ui/sf/sf.cc b/src/ui/sf/sf.cc
index f8657fc..3e56b97 100644
--- a/src/ui/sf/sf.cc
+++ b/src/ui/sf/sf.cc
@@ -80,7 +80,7 @@ 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.)),
        }),
-       find_dialog (*this),
+       find_dialog (nullptr),
        filters_dialog (*this),
        phasediff_dialog (*this),
        artifact_detection_dialog (*this),
@@ -265,6 +265,9 @@ aghui::SScoringFacility::
        if ( ica )
                delete ica;
 
+       if ( find_dialog )
+               delete find_dialog;
+
        // put scores
        put_hypnogram();
 
diff --git a/src/ui/sf/sf.hh b/src/ui/sf/sf.hh
index d048e8f..47c735e 100644
--- a/src/ui/sf/sf.hh
+++ b/src/ui/sf/sf.hh
@@ -17,14 +17,12 @@
 #include <list>
 
 #include <cairo/cairo.h>
-#include <cairo/cairo-svg.h>
 #include <gtk/gtk.h>
 
 #include "common/alg.hh"
 #include "common/config-validate.hh"
 #include "sigproc/winfun.hh"
 #include "sigproc/sigproc.hh"
-#include "patterns/patterns.hh"
 #include "metrics/phasic-events.hh"
 #include "expdesign/primaries.hh"
 #include "ica/ica.hh"
@@ -497,92 +495,9 @@ class SScoringFacility
        void set_tooltip( TTipIdx i) const;
 
       // child dialogs:
-      // pattern find dialog
-       struct SFindDialog {
-               DELETE_DEFAULT_METHODS (SFindDialog);
-
-             // ctor, dtor
-               SFindDialog (SScoringFacility& parent);
-              ~SFindDialog ();
-
-             // saved patterns
-               list<pattern::SPattern<TFloat>>
-                       patterns;
-               list<pattern::SPattern<TFloat>>::iterator
-                       current_pattern;
-               list<pattern::SPattern<TFloat>>::iterator
-               pattern_by_idx( size_t);
-
-               void import_from_selection( SScoringFacility::SChannel&);
-               void load_patterns();
-               void save_patterns();
-               void discard_current_pattern();
-               void populate_combo();
-
-             // finding tool
-               pattern::SPatternPPack<TFloat>
-                       Pp2;
-               pattern::CPatternTool<TFloat>
-                       *cpattern;
-               double  increment; // in seconds
-
-             // matches
-               pattern::CMatch<TFloat>
-                       criteria;
-               vector<pattern::CMatch<TFloat>>
-                       diff_line;
-               vector<size_t>
-                       occurrences;
-               size_t  highlighted_occurrence;
-               void search();
-               size_t find_occurrences();
-               size_t nearest_occurrence( double) const;
-
-             // field
-               SScoringFacility::SChannel
-                       *field_channel,
-                       *field_channel_saved;
-               list<sigfile::SAnnotation>
-                       saved_annotations;
-               void occurrences_to_annotations();
-               void save_annotations();
-               void restore_annotations();
-
-               metrics::TType
-                       field_profile_type; // where appropriate; otherwise 
draw compressed raw
-
-             // draw
-               bool    draw_details:1,
-                       suppress_w_v:1;
-               void draw_thing( cairo_t*);
-               void draw_field( cairo_t*);
-               float   thing_display_scale,
-                       field_display_scale;
-
-             // widgets
-               SUIVarCollection
-                       W_V;
-
-               void preselect_channel( const char*);
-
-               void setup_controls_for_find();
-               void setup_controls_for_wait();
-               void setup_controls_for_tune();
-               void set_profile_manage_buttons_visibility();
-
-               static const int
-                       da_thing_ht = 200,
-                       da_field_ht = 130;
-               int     da_thing_wd,
-                       da_field_wd;
-               void set_thing_da_width( int);
-               void set_field_da_width( int);
-
-               SScoringFacility&
-                       _p;
-       };
+       struct SFindDialog;
        SFindDialog
-               find_dialog;
+               *find_dialog;
 
        struct SFiltersDialog {
                DELETE_DEFAULT_METHODS (SFiltersDialog);
diff --git a/src/ui/sf/sf_cb.cc b/src/ui/sf/sf_cb.cc
index b282803..31b60e9 100644
--- a/src/ui/sf/sf_cb.cc
+++ b/src/ui/sf/sf_cb.cc
@@ -193,7 +193,10 @@ bSFShowFindDialog_toggled_cb( GtkToggleButton 
*togglebutton, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
        if ( gtk_toggle_button_get_active( togglebutton) ) {
-               SF.find_dialog.setup_controls_for_find();
+               if ( not SF.find_dialog )
+                       SF.find_dialog =
+                               new aghui::SScoringFacility::SFindDialog (SF);
+               SF.find_dialog->setup_controls_for_find();
                gtk_widget_show( (GtkWidget*)SF.wSFFD);
        } else
                gtk_widget_hide( (GtkWidget*)SF.wSFFD);

-- 
Sleep experiment manager

_______________________________________________
debian-med-commit mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit

Reply via email to