The following commit has been merged in the master branch:
commit 337e2c0e6724c71e1082e5635b9b2a58293bd184
Author: Andrei Zavada <[email protected]>
Date:   Sun Feb 3 12:40:52 2013 +0200

    optimize channel selection in Patterns dialog

diff --git a/src/ui/sf/d/patterns-profiles.cc b/src/ui/sf/d/patterns-profiles.cc
index 4e9de4a..38dc46d 100644
--- a/src/ui/sf/d/patterns-profiles.cc
+++ b/src/ui/sf/d/patterns-profiles.cc
@@ -63,7 +63,7 @@ import_from_selection( SScoringFacility::SChannel& field)
 
        set_thing_da_width( full_sample / field.spp());
 
-       preselect_channel( field.name);
+       preselect_channel( _p.channel_idx( &field));
 
        setup_controls_for_find();
 
diff --git a/src/ui/sf/d/patterns.cc b/src/ui/sf/d/patterns.cc
index 6437dc2..052e53d 100644
--- a/src/ui/sf/d/patterns.cc
+++ b/src/ui/sf/d/patterns.cc
@@ -229,28 +229,14 @@ set_profile_manage_buttons_visibility()
 
 void
 aghui::SScoringFacility::SPatternsDialog::
-preselect_channel( const char *ch)
+preselect_channel( int h) const
 {
-       if ( ch == NULL ) {
-               gtk_combo_box_set_active_iter( eSFFDChannel, NULL);
+       if ( h < 0 ) {
+               gtk_combo_box_set_active( eSFFDChannel, -1);
                return;
        }
 
-       GtkTreeModel *model = gtk_combo_box_get_model( eSFFDChannel);
-       GtkTreeIter iter;
-       gboolean valid;
-       valid = gtk_tree_model_get_iter_first( model, &iter);
-       while ( valid ) {
-               DEF_UNIQUE_CHARP (entry);
-               gtk_tree_model_get( model, &iter,
-                                   0, &entry,
-                                   -1);
-               if ( strcmp( entry, ch) == 0 ) {
-                       gtk_combo_box_set_active_iter( eSFFDChannel, &iter);
-                       return;
-               }
-               valid = gtk_tree_model_iter_next( model, &iter);
-       }
+       gtk_combo_box_set_active( eSFFDChannel, h);
 }
 
 
diff --git a/src/ui/sf/d/patterns.hh b/src/ui/sf/d/patterns.hh
index aa6295f..b1d413f 100644
--- a/src/ui/sf/d/patterns.hh
+++ b/src/ui/sf/d/patterns.hh
@@ -164,7 +164,7 @@ struct SScoringFacility::SPatternsDialog
                        suppress_w_v = false;
                }
 
-       void preselect_channel( const char*);
+       void preselect_channel( int) const;
 
        void setup_controls_for_find();
        void setup_controls_for_wait();
diff --git a/src/ui/sf/d/patterns_cb.cc b/src/ui/sf/d/patterns_cb.cc
index 723e8ef..ccbea57 100644
--- a/src/ui/sf/d/patterns_cb.cc
+++ b/src/ui/sf/d/patterns_cb.cc
@@ -352,21 +352,9 @@ eSFFDChannel_changed_cb( GtkComboBox *combo, gpointer 
userdata)
        auto& FD = *(SScoringFacility::SPatternsDialog*)userdata;
        auto& SF = FD._p;
 
-       GtkTreeIter iter;
-       if ( gtk_combo_box_get_active_iter( combo, &iter) == FALSE )
-               return;
-
-       gchar *label;
-       gtk_tree_model_get( gtk_combo_box_get_model( combo), &iter,
-                           0, &label,
-                           -1);
-       for ( auto &H : SF.channels ) {
-               if ( strcmp( H.name, label) == 0 ) {
-                       FD.field_channel = SF.using_channel = &H;
-                       break;
-               }
-       }
-       g_free( label);
+       gint h = gtk_combo_box_get_active( combo);
+       if ( h > 0 )
+               FD.field_channel = SF.using_channel = &SF[h];
 }
 
 
@@ -379,11 +367,11 @@ wSFFD_show_cb( GtkWidget *widget, gpointer userdata)
        FD.populate_combo();
        FD.set_profile_manage_buttons_visibility();
 
-       if ( FD._p.using_channel == nullptr ) // not invoked for a preselected 
signal via a menu
+       if ( not FD._p.using_channel ) // not invoked for a preselected signal 
via a menu
                FD._p.using_channel = &FD._p.channels.front();
        FD.field_channel = FD.field_channel_saved = FD._p.using_channel;
 
-       FD.preselect_channel( FD.field_channel->name);
+       FD.preselect_channel( FD._p.using_channel_idx());
 }
 
 void
diff --git a/src/ui/sf/sf.hh b/src/ui/sf/sf.hh
index f3e8e8f..eb84355 100644
--- a/src/ui/sf/sf.hh
+++ b/src/ui/sf/sf.hh
@@ -532,6 +532,19 @@ class SScoringFacility
       // menu support
        SChannel
                *using_channel;
+       int using_channel_idx() const
+               {
+                       return channel_idx( using_channel);
+               }
+       int channel_idx( SChannel* h) const
+               {
+                       int i = 0;
+                       for ( auto& H : channels )
+                               if ( &H == h )
+                                       return i;
+                               else ++i;
+                       return -1;
+               }
        list<sigfile::SAnnotation*>
                over_annotations;
        sigfile::SAnnotation*

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