The following commit has been merged in the master branch:
commit 5c117bdefee72dc83d50646b26b30f5bc77a88e6
Author: Andrei Zavada <[email protected]>
Date:   Fri Oct 12 02:39:12 2012 +0300

    SUIVar WIP

diff --git a/src/ui/expdesign.cc b/src/ui/expdesign.cc
index 6f0776b..028fa4f 100644
--- a/src/ui/expdesign.cc
+++ b/src/ui/expdesign.cc
@@ -193,6 +193,11 @@ SExpDesignUI (aghui::SSessionChooser *parent,
                                        placeholders::_1, placeholders::_2, 
placeholders::_3));
        nodestroy_by_cb = false;
 
+       // bind fields to widgets
+       W_V.reg( eUltradianCycleDetectionAccuracy, uc_accuracy_factor);
+       W_V.reg( eArtifDampenWindowType, (int)ED->af_dampen_window_type);
+       W_V.reg( eArtifDampenFactor, ED->af_dampen_factor);
+
        fft_params_welch_window_type_saved      = 
ED->fft_params.welch_window_type;
        af_dampen_window_type_saved             = ED->af_dampen_window_type;
        af_dampen_factor_saved                  = ED->af_dampen_factor;
diff --git a/src/ui/expdesign.hh b/src/ui/expdesign.hh
index 6f160b4..6dd558c 100644
--- a/src/ui/expdesign.hh
+++ b/src/ui/expdesign.hh
@@ -284,6 +284,8 @@ class SExpDesignUI
        //      fft_params_saved; // members not represented in widgets as is
        sigfile::SMCParamSet
                mc_params_saved;
+       SUICollection
+               W_V;
 
       // status bar bits
        void sb_main_progress_indicator( const char*, size_t n, size_t i);
diff --git a/src/ui/ui.hh b/src/ui/ui.hh
index 02464f5..fe0e998 100644
--- a/src/ui/ui.hh
+++ b/src/ui/ui.hh
@@ -18,6 +18,7 @@
 #include <cstdlib>
 #include <cstring>
 #include <string>
+#include <list>
 #include <valarray>
 #include <itpp/base/mat.h>
 #include <gtk/gtk.h>
@@ -202,49 +203,69 @@ class SBusyBlock {
 
 
 
+class SUIVar_base {
+    public:
+       virtual void down() const = 0;
+       virtual void up() const = 0;
+};
+
 
 template <typename Tw, typename Tv>
-class SUIVar {
-       DELETE_DEFAULT_METHODS (SUIVar);
+class SUIVar_ : public SUIVar_base {
+       DELETE_DEFAULT_METHODS (SUIVar_);
 
-    private:
        Tw      *w;
        Tv&     v;
 
     public:
-       SUIVar (Tw w_, Tv& v_)
+       SUIVar_ (Tw* w_, Tv& v_)
              : w (w_), v (v_)
                {}
-       void down();
-       void up();
+
+       virtual void down() const;
+       virtual void up() const;
 };
 
 
 template <>
 inline void
-SUIVar<GtkSpinButton, double>::up()
+SUIVar_<GtkSpinButton, double>::up() const
 {
        gtk_spin_button_set_value( w, v);
 }
 
 template <>
 inline void
-SUIVar<GtkSpinButton, double>::down()
+SUIVar_<GtkSpinButton, double>::down() const
 {
        v = gtk_spin_button_get_value( w);
 }
 
+template <>
+inline void
+SUIVar_<GtkSpinButton, int>::up() const
+{
+       gtk_spin_button_set_value( w, (double)v);
+}
+
+template <>
+inline void
+SUIVar_<GtkSpinButton, int>::down() const
+{
+       v = (int)round(gtk_spin_button_get_value( w));
+}
+
 
 template <>
 inline void
-SUIVar<GtkCheckButton, bool>::up()
+SUIVar_<GtkCheckButton, bool>::up() const
 {
        gtk_toggle_button_set_active( (GtkToggleButton*)w, v);
 }
 
 template <>
 inline void
-SUIVar<GtkCheckButton, bool>::down()
+SUIVar_<GtkCheckButton, bool>::down() const
 {
        v = gtk_toggle_button_get_active( (GtkToggleButton*)w);
 }
@@ -252,14 +273,14 @@ SUIVar<GtkCheckButton, bool>::down()
 
 template <>
 inline void
-SUIVar<GtkEntry, string>::up()
+SUIVar_<GtkEntry, string>::up() const
 {
        gtk_entry_set_text( w, v.c_str());
 }
 
 template <>
 inline void
-SUIVar<GtkEntry, string>::down()
+SUIVar_<GtkEntry, string>::down() const
 {
        const char *tmp = gtk_entry_get_text( w);
        v.assign(tmp);
@@ -268,6 +289,50 @@ SUIVar<GtkEntry, string>::down()
 
 
 
+class SUICollection {
+    public:
+       ~SUICollection ()
+               {
+                       for ( auto& A : c )
+                               delete A;
+               }
+
+       void reg( GtkSpinButton *w, double& v)
+               {
+                       c.push_back( new SUIVar_<GtkSpinButton, double> (w, v));
+               }
+       void reg( GtkSpinButton *w, int& v)
+               {
+                       c.push_back( new SUIVar_<GtkSpinButton, int> (w, v));
+               }
+       void reg( GtkCheckButton *w, bool& v)
+               {
+                       c.push_back( new SUIVar_<GtkCheckButton, bool> (w, v));
+               }
+       void reg( GtkEntry *w, string& v)
+               {
+                       c.push_back( new SUIVar_<GtkEntry, string> (w, v));
+               }
+
+       void up() const
+               {
+                       for ( auto& A : c )
+                               A->up();
+               }
+       void down() const
+               {
+                       for ( auto& A : c )
+                               A->down();
+               }
+
+    private:
+       list<SUIVar_base*> c;
+};
+
+
+
+
+
 
 
 #define AGH_GBGETOBJ(Type, A)                          \

-- 
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