[med-svn] [SCM] aghermann branch, master, updated. 06bda7dfaa687aaf0708a024d192024e2cd58421
Andrei Zavada
johnhommer at gmail.com
Thu Jan 24 00:43:44 UTC 2013
The following commit has been merged in the master branch:
commit 028104e398f37a9fe48b9d95c9c9e668cbb8b7da
Author: Andrei Zavada <johnhommer at gmail.com>
Date: Mon Jan 14 18:53:06 2013 +0200
patterns WIP
diff --git a/configure.ac b/configure.ac
index c89e809..2bdf1dd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -17,13 +17,13 @@ AC_PROG_CXX([$CXX])
AC_LANG([C++])
AC_OPENMP()
-dnl Check for c++0x features
-AC_DEFUN([AC_CXX_STDCPP0X_FEATURES],
-[AC_CACHE_CHECK(whether $CXX has all required c++0x features,
-ac_cv_cxx_cpp0x_features,
+dnl Check for c++11 features
+AC_DEFUN([AC_CXX_STDCPP11_FEATURES],
+[AC_CACHE_CHECK(whether $CXX has all required c++11 features,
+ac_cv_cxx_cpp11_features,
[AC_LANG([C++])
old_CXX=$CXX
- CXX="$CXX -std=c++0x"
+ CXX="$CXX -std=c++11"
AC_TRY_RUN([
#include <vector>
#include <algorithm>
@@ -39,14 +39,14 @@ ac_cv_cxx_cpp0x_features,
return 0;
}
],
- ac_cv_cxx_cpp0x_features=yes, ac_cv_cxx_cpp0x_features=no,
- ac_cv_cxx_cpp0x_features=yes)
+ ac_cv_cxx_cpp11_features=yes, ac_cv_cxx_cpp11_features=no,
+ ac_cv_cxx_cpp11_features=yes)
CXX=$old_CXX
])
])
-AC_CXX_STDCPP0X_FEATURES()
-test $ac_cv_cxx_cpp0x_features = no && \
- AC_MSG_ERROR([g++ >= 4.6 is required to build $PACKAGE as we must use -std=c++0x your C++ compiler doesn't seem to support], 1)
+AC_CXX_STDCPP11_FEATURES()
+test $ac_cv_cxx_cpp11_features = no && \
+ AC_MSG_ERROR([g++ >= 4.6 is required to build $PACKAGE as we must use -std=c++11 features your compiler doesn't seem to support], 1)
dnl AC_CXX_HAVE_STL # redundant: we check for STL implicitly in AC_CXX_STDCPP0X_FEATURES
diff --git a/data/sf.glade b/data/sf.glade
index 78b072f..a914cd6 100644
--- a/data/sf.glade
+++ b/data/sf.glade
@@ -1550,7 +1550,7 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="bPatternFindPrevious">
+ <object class="GtkButton" id="bPatternGotoPrevious">
<property name="label" translatable="yes">_Previous</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
@@ -1566,7 +1566,7 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="bPatternFindNext">
+ <object class="GtkButton" id="bPatternGotoNext">
<property name="label" translatable="yes">_Next</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
@@ -2178,6 +2178,9 @@
<placeholder/>
</child>
<child>
+ <placeholder/>
+ </child>
+ <child>
<object class="GtkLabel" id="label177">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -2209,6 +2212,9 @@
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -2225,12 +2231,12 @@
<placeholder/>
</child>
<child>
- <object class="GtkScrolledWindow" id="vpPatternSelection">
+ <object class="GtkScrolledWindow" id="swPatternSelection">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
- <object class="GtkViewport" id="vpPatternSelectioni">
+ <object class="GtkViewport" id="vpPatternSelection">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="resize_mode">queue</property>
@@ -2253,6 +2259,44 @@
</packing>
</child>
<child>
+ <object class="GtkScrolledWindow" id="swPatternField">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkViewport" id="vpPatternField">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkDrawingArea" id="daPatternField">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="bPatternSearch">
+ <property name="label" translatable="yes">Search</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="focus_on_click">False</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkLabel" id="lPatternSimilarity">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -2262,7 +2306,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">2</property>
+ <property name="position">5</property>
</packing>
</child>
</object>
@@ -2520,8 +2564,8 @@ on individual parameters</property>
</child>
<action-widgets>
<action-widget response="-1">bPatternDismiss</action-widget>
- <action-widget response="-1">bPatternFindPrevious</action-widget>
- <action-widget response="-1">bPatternFindNext</action-widget>
+ <action-widget response="-1">bPatternGotoPrevious</action-widget>
+ <action-widget response="-1">bPatternGotoNext</action-widget>
</action-widgets>
</object>
<object class="GtkDialog" id="wPatternName">
@@ -4742,15 +4786,15 @@ on individual parameters</property>
</packing>
</child>
<child>
- <object class="GtkButton" id="bScoreWake">
- <property name="label" translatable="yes">☺</property>
+ <object class="GtkButton" id="bScoreClear">
+ <property name="label" translatable="yes">⌫</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="tooltip_markup" translatable="yes">Wake (<b>w</b>)</property>
+ <property name="tooltip_markup" translatable="yes">Clear (<b>q</b>)</property>
<property name="valign">center</property>
<property name="focus_on_click">False</property>
- <accelerator key="w" signal="activate"/>
+ <accelerator key="q" signal="activate"/>
</object>
<packing>
<property name="expand">False</property>
@@ -4759,15 +4803,15 @@ on individual parameters</property>
</packing>
</child>
<child>
- <object class="GtkButton" id="bScoreClear">
- <property name="label" translatable="yes">⌫</property>
+ <object class="GtkButton" id="bScoreWake">
+ <property name="label" translatable="yes">☺</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="tooltip_markup" translatable="yes">Clear (<b>q</b>)</property>
+ <property name="tooltip_markup" translatable="yes">Wake (<b>w</b>)</property>
<property name="valign">center</property>
<property name="focus_on_click">False</property>
- <accelerator key="q" signal="activate"/>
+ <accelerator key="w" signal="activate"/>
</object>
<packing>
<property name="expand">False</property>
@@ -5002,17 +5046,18 @@ on individual parameters</property>
</packing>
</child>
<child>
- <object class="GtkToggleButton" id="bSFShowPhaseDiffDialog">
- <property name="label" translatable="yes">Δφ</property>
+ <object class="GtkToggleButton" id="bSFShowFindDialog">
+ <property name="label" translatable="yes">_Find</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="has_tooltip">True</property>
- <property name="tooltip_markup" translatable="yes">Interchannel signal shift (<b>F4</b>)</property>
- <property name="tooltip_text" translatable="yes">Interchannel signal shift (F4)</property>
+ <property name="tooltip_markup" translatable="yes">Find/manage patterns (<b>F3</b>)</property>
+ <property name="tooltip_text" translatable="yes">Find/manage patterns (F3)</property>
<property name="valign">center</property>
+ <property name="use_underline">True</property>
<property name="focus_on_click">False</property>
- <accelerator key="F4" signal="activate"/>
+ <accelerator key="F3" signal="activate"/>
</object>
<packing>
<property name="expand">False</property>
@@ -5022,18 +5067,17 @@ on individual parameters</property>
</packing>
</child>
<child>
- <object class="GtkToggleButton" id="bSFShowFindDialog">
- <property name="label" translatable="yes">_Find</property>
+ <object class="GtkToggleButton" id="bSFShowPhaseDiffDialog">
+ <property name="label" translatable="yes">Δφ</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="has_tooltip">True</property>
- <property name="tooltip_markup" translatable="yes">Find/manage patterns (<b>F3</b>)</property>
- <property name="tooltip_text" translatable="yes">Find/manage patterns (F3)</property>
+ <property name="tooltip_markup" translatable="yes">Interchannel signal shift (<b>F4</b>)</property>
+ <property name="tooltip_text" translatable="yes">Interchannel signal shift (F4)</property>
<property name="valign">center</property>
- <property name="use_underline">True</property>
<property name="focus_on_click">False</property>
- <accelerator key="F3" signal="activate"/>
+ <accelerator key="F4" signal="activate"/>
</object>
<packing>
<property name="expand">False</property>
diff --git a/src/sigproc/patterns.ii b/src/sigproc/patterns.ii
index f51ee14..0e02d45 100644
--- a/src/sigproc/patterns.ii
+++ b/src/sigproc/patterns.ii
@@ -27,7 +27,7 @@ do_search( const valarray<T>& fenv_u,
{
size_t fsize = ftarget_freq.size();
if ( inc == 0 || inc > fsize ) {
- fprintf( stderr, "%s: bad search increment: %d\n", __FUNCTION__, inc);
+ fprintf( stderr, "%s: bad search increment: %zu\n", __FUNCTION__, inc);
return -1;
}
diff --git a/src/ui/sf/sf-construct.cc b/src/ui/sf/sf-construct.cc
index 07b8372..d7c1e53 100644
--- a/src/ui/sf/sf-construct.cc
+++ b/src/ui/sf/sf-construct.cc
@@ -383,9 +383,11 @@ SScoringFacilityWidgets (SExpDesignUI& _p)
if ( !AGH_GBGETOBJ (GtkDialog, wPattern) ||
!AGH_GBGETOBJ (GtkDrawingArea, daPatternSelection) ||
!AGH_GBGETOBJ (GtkScrolledWindow, vpPatternSelection) ||
- !AGH_GBGETOBJ (GtkButton, bPatternFindPrevious) ||
- !AGH_GBGETOBJ (GtkButton, bPatternFindNext) ||
-// !AGH_GBGETOBJ (GtkButton, bPatternDismiss) ||
+ !AGH_GBGETOBJ (GtkDrawingArea, daPatternField) ||
+ !AGH_GBGETOBJ (GtkScrolledWindow, vpPatternField) ||
+ !AGH_GBGETOBJ (GtkButton, bPatternSearch) ||
+ !AGH_GBGETOBJ (GtkButton, bPatternGotoPrevious) ||
+ !AGH_GBGETOBJ (GtkButton, bPatternGotoNext) ||
!AGH_GBGETOBJ (GtkButton, bPatternSave) ||
!AGH_GBGETOBJ (GtkButton, bPatternDiscard) ||
!AGH_GBGETOBJ (GtkSpinButton, ePatternEnvTightness) ||
@@ -418,19 +420,16 @@ SScoringFacilityWidgets (SExpDesignUI& _p)
G_CONNECT_1 (daPatternSelection, draw);
G_CONNECT_2( daPatternSelection, scroll, event);
- g_signal_connect( bPatternFindNext, "clicked",
- G_CALLBACK (bPatternFind_clicked_cb),
- this);
- g_signal_connect( bPatternFindPrevious, "clicked",
- G_CALLBACK (bPatternFind_clicked_cb),
- this);
G_CONNECT_1 (bPatternSave, clicked);
G_CONNECT_1 (bPatternDiscard, clicked);
- for ( auto& W : {ePatternEnvTightness, ePatternBandPassFrom, ePatternBandPassUpto,
- ePatternBandPassOrder, ePatternDZCDFStep, ePatternDZCDFSigma, ePatternDZCDFSmooth,
- // ePatternParameterA, ePatternParameterB, ePatternParameterC, ePatternParameterD
- } )
+ for ( auto& W : {bPatternGotoNext, bPatternGotoPrevious} )
+ g_signal_connect( W, "clicked",
+ (GCallback)bPatternGoto_clicked_cb,
+ this);
+ for ( auto& W : {ePatternEnvTightness,
+ ePatternBandPassFrom, ePatternBandPassUpto, ePatternBandPassOrder,
+ ePatternDZCDFStep, ePatternDZCDFSigma, ePatternDZCDFSmooth} )
g_signal_connect( W, "value-changed",
(GCallback)ePattern_any_pattern_value_changed_cb,
this);
diff --git a/src/ui/sf/sf-patterns.cc b/src/ui/sf/sf-patterns.cc
index c64204b..bc48b0c 100644
--- a/src/ui/sf/sf-patterns.cc
+++ b/src/ui/sf/sf-patterns.cc
@@ -41,6 +41,9 @@ SFindDialog (SScoringFacility& parent)
W_V.reg( _p.ePatternParameterB, &get<1>(criteria));
W_V.reg( _p.ePatternParameterC, &get<2>(criteria));
W_V.reg( _p.ePatternParameterD, &get<3>(criteria));
+
+ gtk_widget_set_visible( (GtkWidget*)_p.daPatternField, FALSE);
+ gtk_widget_set_visible( (GtkWidget*)_p.bPatternSearch, TRUE);
}
aghui::SScoringFacility::SFindDialog::
@@ -57,6 +60,52 @@ aghui::SScoringFacility::SFindDialog::
+void
+aghui::SScoringFacility::SFindDialog::
+search()
+{
+ if ( field_channel && thing.size() > 0 ) {
+ if ( !(Pp == Pp2) || field_channel != field_channel_saved) {
+ Pp2 = Pp;
+ field_channel_saved = field_channel;
+ }
+ cpattern = new pattern::CPattern<TFloat>
+ ({thing, field_channel->samplerate()},
+ context_before, context_after,
+ Pp);
+ diff_line =
+ (cpattern->do_search(
+ field_channel->signal_envelope( Pp.env_tightness).first,
+ field_channel->signal_envelope( Pp.env_tightness).second,
+ field_channel->signal_bandpass( Pp.bwf_ffrom, Pp.bwf_fupto, Pp.bwf_order),
+ field_channel->signal_dzcdf( Pp.dzcdf_step, Pp.dzcdf_sigma, Pp.dzcdf_smooth),
+ increment * samplerate),
+ cpattern->diff);
+
+ delete cpattern;
+ cpattern = nullptr;
+
+ gtk_widget_set_visible( (GtkWidget*)_p.daPatternField, TRUE);
+ gtk_widget_set_visible( (GtkWidget*)_p.bPatternSearch, FALSE);
+ }
+}
+
+
+size_t
+aghui::SScoringFacility::SFindDialog::
+find_occurrences()
+{
+ occurrences.resize(0);
+ for ( size_t i = 0; i < diff_line.size(); ++i )
+ if ( diff_line[i].good_enough( criteria) )
+ occurrences.push_back(i);
+ return occurrences.size();
+}
+
+
+
+
+
void
@@ -77,7 +126,7 @@ set_pattern_da_width( int width)
void
aghui::SScoringFacility::SFindDialog::
-draw( cairo_t *cr)
+draw_thing( cairo_t *cr)
{
if ( thing.size() == 0 ) {
set_pattern_da_width( 200);
@@ -217,7 +266,11 @@ out:
;
}
-
+void
+aghui::SScoringFacility::SFindDialog::
+draw_field( cairo_t *cr)
+{
+}
void
@@ -392,54 +445,14 @@ discard_pattern( const char *label, bool do_globally)
-void
-aghui::SScoringFacility::SFindDialog::
-search()
-{
- if ( field_channel && thing.size() > 0 ) {
- if ( !(Pp == Pp2) || field_channel != field_channel_saved) {
- Pp2 = Pp;
- field_channel_saved = field_channel;
- }
- cpattern = new pattern::CPattern<TFloat>
- ({thing, field_channel->samplerate()},
- context_before, context_after,
- Pp);
- diff_line =
- (cpattern->do_search(
- field_channel->signal_envelope( Pp.env_tightness).first,
- field_channel->signal_envelope( Pp.env_tightness).second,
- field_channel->signal_bandpass( Pp.bwf_ffrom, Pp.bwf_fupto, Pp.bwf_order),
- field_channel->signal_dzcdf( Pp.dzcdf_step, Pp.dzcdf_sigma, Pp.dzcdf_smooth),
- increment * samplerate),
- cpattern->diff);
-
- delete cpattern;
- cpattern = nullptr;
- }
-}
-
-
-size_t
-aghui::SScoringFacility::SFindDialog::
-find_occurrences()
-{
- occurrences.resize(0);
- for ( size_t i = 0; i < diff_line.size(); ++i )
- if ( diff_line[i].good_enough( criteria) )
- occurrences.push_back(i);
- return occurrences.size();
-}
-
-
void
aghui::SScoringFacility::SFindDialog::
enable_controls( bool indeed)
{
- gtk_widget_set_sensitive( (GtkWidget*)_p.bPatternFindNext, (gboolean)indeed);
- gtk_widget_set_sensitive( (GtkWidget*)_p.bPatternFindPrevious, (gboolean)indeed);
+ gtk_widget_set_sensitive( (GtkWidget*)_p.bPatternGotoNext, (gboolean)indeed);
+ gtk_widget_set_sensitive( (GtkWidget*)_p.bPatternGotoPrevious, (gboolean)indeed);
gtk_widget_set_sensitive( (GtkWidget*)_p.bPatternSave, (gboolean)indeed);
gtk_widget_set_sensitive( (GtkWidget*)_p.bPatternDiscard, (gboolean)indeed);
}
diff --git a/src/ui/sf/sf-patterns_cb.cc b/src/ui/sf/sf-patterns_cb.cc
index de95937..8a1b968 100644
--- a/src/ui/sf/sf-patterns_cb.cc
+++ b/src/ui/sf/sf-patterns_cb.cc
@@ -26,7 +26,18 @@ daPatternSelection_draw_cb( GtkWidget *wid, cairo_t *cr, gpointer userdata)
auto& SF = *(SScoringFacility*)userdata;
auto& FD = SF.find_dialog;
- FD.draw( cr);
+ FD.draw_thing( cr);
+
+ return TRUE;
+}
+
+gboolean
+daPatternField_draw_cb( GtkWidget *wid, cairo_t *cr, gpointer userdata)
+{
+ auto& SF = *(SScoringFacility*)userdata;
+ auto& FD = SF.find_dialog;
+
+ FD.draw_field( cr);
return TRUE;
}
@@ -66,48 +77,37 @@ daPatternSelection_scroll_event_cb( GtkWidget *wid, GdkEventScroll *event, gpoin
void
-bPatternFind_clicked_cb( GtkButton *button, gpointer userdata)
+bPatternSearch_clicked_cb( GtkButton *button, gpointer userdata)
{
auto& SF = *(SScoringFacility*)userdata;
auto& FD = SF.find_dialog;
- gboolean
- go_forward = button == FD._p.bPatternFindNext;
-
- size_t from;
- if ( FD.last_find == (size_t)-1 )
- from = go_forward
- ? FD.context_before
- : FD.field_channel->n_samples() - FD.pattern.size();
- else
- from = FD.last_find
- + (go_forward
- ? .2 * FD.samplerate
- : FD.pattern_size_essential());
-
- aghui::SBusyBlock bb (FD._p.wPattern);
- FD.W_V.down();
- FD.Pp.criteria = FD.tolerance;
-
- FD.search( from);
- if ( FD.last_find == (size_t)-1 )
- pop_ok_message( (GtkWindow*)FD._p.wPattern, "Not found", nullptr);
- else { // reach up and out
- auto& SF = FD.field_channel->_p;
- SF.using_channel = FD.field_channel;
- SF.using_channel->put_selection( FD.last_find, FD.last_find + FD.pattern_size_essential());
- SF.suppress_redraw = true;
- SF.set_cur_vpage(
- FD.last_find / FD.samplerate / SF.vpagesize());
- SF.suppress_redraw = false;
- SF.queue_redraw_all();
-
- snprintf_buf( "at p. %zu (match: %4.2f, %4.2f, %4.2f, %4.2f)\n",
- SF.cur_vpage()+1, FD.match[0], FD.match[1], FD.match[2], FD.match[3]);
- gtk_label_set_markup( FD._p.lPatternSimilarity, __buf__);
-
- gtk_widget_queue_draw( (GtkWidget*)FD._p.lPatternSimilarity);
- gtk_widget_queue_draw( (GtkWidget*)FD._p.daPatternSelection);
- }
+
+
+
+}
+
+void
+bPatternGoto_clicked_cb( GtkButton *button, gpointer userdata)
+{
+ auto& SF = *(SScoringFacility*)userdata;
+ auto& FD = SF.find_dialog;
+ bool go_forward = button == FD._p.bPatternGotoNext;
+
+ SF.using_channel = FD.field_channel;
+
+
+ double next_at = 0.;
+ FAFA;
+
+ SF.suppress_redraw = true;
+ SF.set_cur_vpage(
+ next_at / FD.samplerate / SF.vpagesize());
+ SF.suppress_redraw = false;
+ SF.queue_redraw_all();
+
+ snprintf_buf( "%zu match%s\n",
+ FD.occurrences.size(), (FD.occurrences.size() == 1) ? "" : "es");
+ gtk_label_set_markup( FD._p.lPatternSimilarity, __buf__);
}
diff --git a/src/ui/sf/sf-widgets.hh b/src/ui/sf/sf-widgets.hh
index a8fe26d..b44a95f 100644
--- a/src/ui/sf/sf-widgets.hh
+++ b/src/ui/sf/sf-widgets.hh
@@ -184,11 +184,14 @@ struct SScoringFacilityWidgets {
*ePatternChannel,
*ePatternList;
GtkScrolledWindow
- *vpPatternSelection;
+ *vpPatternSelection,
+ *vpPatternField;
GtkDrawingArea
- *daPatternSelection;
+ *daPatternSelection,
+ *daPatternField;
GtkButton
- *bPatternFindNext, *bPatternFindPrevious,
+ *bPatternSearch,
+ *bPatternGotoNext, *bPatternGotoPrevious,
*bPatternSave, *bPatternDiscard;
GtkSpinButton
*ePatternEnvTightness,
diff --git a/src/ui/sf/sf.hh b/src/ui/sf/sf.hh
index 587dd79..48b5ef6 100644
--- a/src/ui/sf/sf.hh
+++ b/src/ui/sf/sf.hh
@@ -545,7 +545,8 @@ class SScoringFacility
// draw
bool draw_details:1;
- void draw( cairo_t*);
+ void draw_thing( cairo_t*);
+ void draw_field( cairo_t*);
float display_scale;
// widgets
diff --git a/src/ui/sf/sf_cb.hh b/src/ui/sf/sf_cb.hh
index f80961c..94066b5 100644
--- a/src/ui/sf/sf_cb.hh
+++ b/src/ui/sf/sf_cb.hh
@@ -151,9 +151,11 @@ void iSFScoreClear_activate_cb( GtkMenuItem*, gpointer);
void ePatternList_changed_cb( GtkComboBox*, gpointer);
void ePatternChannel_changed_cb( GtkComboBox*, gpointer);
+gboolean daPatternField_draw_cb( GtkWidget*, cairo_t*, gpointer);
gboolean daPatternSelection_draw_cb( GtkWidget*, cairo_t*, gpointer);
gboolean daPatternSelection_scroll_event_cb( GtkWidget*, GdkEventScroll*, gpointer);
-void bPatternFind_clicked_cb( GtkButton*, gpointer);
+void bPatternSearch_clicked_cb( GtkButton*, gpointer);
+void bPatternGoto_clicked_cb( GtkButton*, gpointer);
void bPatternSave_clicked_cb( GtkButton*, gpointer);
void bPatternDiscard_clicked_cb( GtkButton*, gpointer);
void ePattern_any_pattern_value_changed_cb( GtkSpinButton*, gpointer);
--
Sleep experiment manager
More information about the debian-med-commit
mailing list