The following commit has been merged in the master branch:
commit c309c0c3171a39bf93acd1840cc606b6115ccfac
Author: andrei zavada <[email protected]>
Date:   Sun Oct 28 03:05:45 2012 +0300

    preserve group expander state across populate_1 events

diff --git a/src/ui/mw/mw-measurements_cb.cc b/src/ui/mw/mw-measurements_cb.cc
index a9bf970..8c08f45 100644
--- a/src/ui/mw/mw-measurements_cb.cc
+++ b/src/ui/mw/mw-measurements_cb.cc
@@ -18,6 +18,13 @@ using namespace aghui;
 
 extern "C" {
 
+void
+cGroupExpander_activate_cb( GtkExpander *w, gpointer userdata)
+{
+       auto& G = *(SExpDesignUI::SGroupPresentation*)userdata;
+       G._p.group_unvisibility[G.name()] = gtk_expander_get_expanded(w);
+}
+
 // individual channel callbacks
 
 gboolean
diff --git a/src/ui/mw/mw-populate.cc b/src/ui/mw/mw-populate.cc
index 30951a2..eace913 100644
--- a/src/ui/mw/mw-populate.cc
+++ b/src/ui/mw/mw-populate.cc
@@ -351,8 +351,6 @@ populate_1()
        if ( ED->groups.empty() )
                return;
 
-       gtk_flush();
-
       // touch toolbar controls
        suppress_redraw = true;
        gtk_spin_button_set_value( eMsmtOpFreqFrom, operating_range_from);
@@ -410,7 +408,7 @@ populate_1()
              // convert avg episode times
                g_string_assign( __ss__, "");
                for ( auto &E : AghEE ) {
-                       pair<float, float>& avge = 
G.group().avg_episode_times[*_AghDi][E];
+                       pair<float, float>& avge = 
G.cjgroup().avg_episode_times[*_AghDi][E];
                        unsigned seconds, h0, m0, s0, h9, m9, s9;
                        seconds = avge.first * 24 * 60 * 60;
                        h0 = seconds / 60 / 60;
@@ -432,24 +430,28 @@ populate_1()
                snprintf_buf( "<b>%s</b> (%zu) %s", g_escaped, G.size(), 
__ss__->str);
                g_free( g_escaped);
 
-               G.expander = (GtkExpander*)gtk_expander_new( __buf__);
-               gtk_expander_set_use_markup( G.expander, TRUE);
-               g_object_set( (GObject*)G.expander,
+               GtkExpander *expander = (GtkExpander*)gtk_expander_new( 
__buf__);
+               gtk_expander_set_use_markup( expander, TRUE);
+               g_object_set( (GObject*)expander,
                              "visible", TRUE,
-                             "expanded", TRUE,
+                             "expanded", not group_unvisibility[G.name()],
                              "height-request", -1,
                              NULL);
+               g_signal_connect( expander, "activate",
+                                 (GCallback)cGroupExpander_activate_cb,
+                                 &G);
                gtk_box_pack_start( (GtkBox*)cMeasurements,
-                                   (GtkWidget*)G.expander, FALSE, TRUE, 3);
-               gtk_container_add( (GtkContainer*)G.expander,
-                                  (GtkWidget*) (G.vbox = 
(GtkExpander*)gtk_box_new( GTK_ORIENTATION_VERTICAL, 1)));
-               g_object_set( (GObject*)G.vbox,
+                                   (GtkWidget*)expander, FALSE, TRUE, 3);
+               GtkWidget *vbox;
+               gtk_container_add( (GtkContainer*)expander,
+                                  vbox = gtk_box_new( 
GTK_ORIENTATION_VERTICAL, 1));
+               g_object_set( (GObject*)vbox,
                              "height-request", -1,
                              NULL);
 
                for ( auto &J : G ) {
                        J.da = gtk_drawing_area_new();
-                       gtk_box_pack_start( (GtkBox*)G.vbox,
+                       gtk_box_pack_start( (GtkBox*)vbox,
                                            J.da, TRUE, TRUE, 2);
 
                        // determine tl_left_margin
diff --git a/src/ui/mw/mw.hh b/src/ui/mw/mw.hh
index fc9918f..e49081f 100644
--- a/src/ui/mw/mw.hh
+++ b/src/ui/mw/mw.hh
@@ -111,32 +111,30 @@ class SExpDesignUI
 
                const char* name() const
                        {
-                               return cjgroup->first.c_str();
+                               return gi->first.c_str();
                        }
-               agh::CJGroup& group()
+               agh::CJGroup& cjgroup()
                        {
-                               return cjgroup->second;
+                               return gi->second;
                        }
-               SGroupPresentation (agh::CExpDesign::TJGroups::iterator& _g,
+               SGroupPresentation (agh::CExpDesign::TJGroups::iterator& gi_,
                                    SExpDesignUI& parent)
                      : _p (parent),
-                       visible (true),
-                       cjgroup (_g)
+                       gi (gi_)
                        {}
 
                SExpDesignUI&
                        _p;
 
-               bool    visible;
-               GtkExpander
-                       *expander,
-                       *vbox;
-
            private:
-               agh::CExpDesign::TJGroups::iterator cjgroup;
+               agh::CExpDesign::TJGroups::iterator gi;
        };
        list<SGroupPresentation>
                groups;
+       // because groups are flushed clean routinely,
+       // here's this:
+       map<string, bool>
+               group_unvisibility;
        SSubjectPresentation
                *using_subject;
        SSubjectPresentation*
diff --git a/src/ui/mw/mw_cb.hh b/src/ui/mw/mw_cb.hh
index 0ea9398..6f63bf7 100644
--- a/src/ui/mw/mw_cb.hh
+++ b/src/ui/mw/mw_cb.hh
@@ -53,6 +53,7 @@ void eMsmtMCF0_value_changed_cb( GtkSpinButton*, gpointer);
 
 void tvGlobalAnnotations_row_activated_cb( GtkTreeView*, GtkTreePath*, 
GtkTreeViewColumn*, gpointer);
 
+void cGroupExpander_activate_cb( GtkExpander*, gpointer);
 void iiSubjectTimeline_show_cb( GtkWidget*, gpointer);
 void iSubjectTimelineScore_activate_cb( GtkMenuItem*, gpointer);
 void iSubjectTimelineDetectUltradianCycle_activate_cb( GtkMenuItem*, gpointer);

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