James,

I appreciate your hints, unfortunately after further research and your
hints, I am still seeing the behavior previously described.  I know it
is something that I am doing wrong and can't seem to figure out what.

I've added the following to the end of the routine that creates the
TreeView:

GtkTreeSelection *part_select = NULL;
part_select = gtk_tree_view_get_selection
( GTK_TREE_VIEW(winPartList.partlist) );
gtk_tree_selection_set_mode ( part_select, GTK_SELECTION_SINGLE );
g_object_set_data ( G_OBJECT(winPartList.partlist), "selection-pointer",
(gpointer) part_select );

And altered the routine that was giving me problems as follows:

gboolean
populate_part_general_tab( )
{

    gchar *string = NULL;
    gfloat *floater;
    gint *integer;

    GtkTreeSelection *part_select = NULL;
    GtkTreeIter iter;

    part_select = ( GtkTreeSelection
*)g_object_get_data( G_OBJECT(winPartList.partlist),
                                "selection-pointer" );

    if ( gtk_tree_selection_get_selected(part_select, NULL, &iter) )
    {

        /* Set the part type combo box. */
        gtk_tree_model_get( GTK_TREE_MODEL(winPartList.partstore),
&iter,
                                          PART_COLUMN_CLASS, &integer,
-1 );
        gtk_combo_box_set_active( GTK_COMBO_BOX( part_type ), integer );


Any further hints would be appreciated.

TIA

Andrew "Weibullguy" Rowland

On Sun, 2008-05-11 at 22:16 -0400, James Scott Jr wrote:
> Andrew,
> 
> I reviewed the code you supplied.  The gtk_tree_model_get() have the
> correct column numbers, so the fact that PART_COLUMN_CLASS is changing
> is interesting from a gcc compiler option perspective; but not cause for
> the problems you are experiencing.
> 
> PART_COLUMN_CLASS should be a fixed enum value, and any changes to its
> value are likely to be caused by optimizing compiler options - not
> runtime issues. What are your compiler options; "-Wall -g -ansi -O2",
> where -oh two(not zero two) is significant.  I'm going to ignore that
> this number is changing - as its ability to change would cause chaos for
> all of gtk which makes extensive use of enums.
> 
> Most likely cause of the behavior you describe!.  The *iter value is not
> set to the currently selected row.  I.E no selection mechanisum being
> used, or used incorrectly.
> 
> CODE EXAMPLE:
> 
> /* at the end of the treeview create routine */
> ...
> GtkTreeSelection *part_select = NULL;
> part_select = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
> gtk_tree_selection_set_mode (part_select, GTK_SELECTION_SINGLE);
> g_object_set_data (G_OBJECT (treeview), "selection-pointer", (gpointer) 
> part_select);
> ...
> 
> /* 
>  * in the supplied routine -- validate the selection first, 
>  * then get/set data as originally shown 
> */
> GtkTreeSelection *part_select = NULL;
> GtkTreeIter iter;            /* will get set to the selection */
> 
> part_select = (GtkTreeSelection *)g_object_get_data (G_OBJECT(treeview),
> "selection-pointer");
> 
> if (gtk_tree_selection_get_selected (prod_select, NULL, &iter))
> {
>     gtk_tree_model_get (model, &iter...);   /* NOTICE SYNTAX OF iter --> & */
>     /* -- set data */
> }
> else
> {
>    /* nothing selected */
> 
> }
>  
> END CODE EXAMPLE:
> 
> Maybe this is what was calling your original routine, I don't know.
> These are tips, research and adapt to your program as needed.  The
> thinking is to set treeview for single selection, and when selected get
> the selected iter, then get the data.  Getting the selected iter ensure
> you get the correct one each time.
> 
> g_object_get_data/g_object_set_data() are example ways of storing values
> in the common object, so your routines don't need such a long parm list.
> 
> James,
> 
> 
> 
> 
> On Sat, 2008-05-10 at 19:34 -0400, Andrew Rowland wrote:
> > All,
> > 
> > I'm not sure what I'm doing wrong.  When I select a row in a treeview,
> > the values of the columns are read and used to populate various entries
> > and combos.  The thing that I can't figure out is that the value of one
> > column is being changed to the value of another column.
> > 
> > Below is a snippet of the function (ANNOTATED IN CAPS) wherein the
> > column value is changing.  Running my app in gdb, I've been able to
> > figure out where the change is occurring, but not why.  I've looked at
> > the API docs for GTK+ and studied the use of gtk_tree_model_get at
> > codase.com.  I don't see anything in my code that should cause this
> > behavior.  I've also tried to use gtk_tree_model_get_value and the same
> > thing occurs.
> > 
> > Any pointer, hints, outright solutions, or swift kicks in the keister
> > would be greatly appreciated.
> > 
> > TIA,
> > 
> > Andrew "Weibullguy" Rowland
> > 
> > ------- CODE FOLLOWS -------
> > 
> > gboolean
> > populate_part_general_tab( GtkTreeModel *model,
> >                            GtkTreeIter  *iter )
> > {
> > 
> >     gchar *string = NULL;
> >     gfloat *floater;
> >     gint *integer;
> > 
> >     /* Populate the usage information. */
> >     gtk_tree_model_get( model, iter, PART_COLUMN_PN, &string, -1 );
> >     gtk_entry_set_text( GTK_ENTRY(part_number), string );
> >     gtk_tree_model_get( model, iter, PART_COLUMN_REFDES, &string, -1 );
> >     gtk_entry_set_text( GTK_ENTRY(ref_des), string );
> >     gtk_tree_model_get( model, iter, PART_COLUMN_COMPREFDES, &string, -
> > 1 );
> >     gtk_entry_set_text( GTK_ENTRY(comp_ref_des), string );
> >     gtk_tree_model_get( model, iter, PART_COLUMN_DESC, &string, - 1 );
> >     gtk_entry_set_text( GTK_ENTRY(description), string );
> >     gtk_tree_model_get( model, iter, PART_COLUMN_QUANT, &integer, - 1 );
> >     snprintf(string, 3, "%d", integer);
> >     gtk_entry_set_text( GTK_ENTRY(quantity), string );
> > 
> >     /* Set the part type combo box. */
> >     gtk_tree_model_get( model, iter, PART_COLUMN_CLASS, &integer, - 1 );
> > 
> > AT THIS POINT THE VALUE OF PART_COLUMN_CLASS IS 1, WHICH IS CORRECT
> > 
> >     gtk_combo_box_set_active( GTK_COMBO_BOX( part_type ), integer);
> > 
> > AT THIS POINT THE VALUE OF PART_COLUMN_CLASS IS 0, WHICH IS INCORRECT
> > 
> >     /* Set the part subtype combo box. */
> >     gtk_tree_model_get( model, iter, PART_COLUMN_COMP_SUBTYPE, &integer,
> > - 1 );
> > 
> > AT THIS POINT THE VALUE OF PART_COLUMN_CLASS IS 3, WHICH IS INCORRECT
> > FOR PART_COLUMN_CLASS.  BUT IS THE CORRECT VALUE OF
> > PART_COLUMN_COMP_SUBTYPE.
> > 
> >     gtk_combo_box_set_active( GTK_COMBO_BOX( part_subclass ), integer );
> > 
> 
-- 
Visit the ReliaFree Project at http://reliafree.sourceforge.net/

Please do not send me *.doc, *.xls, *.ppt, or *.mdb files.  They are a 
proprietary format and do not conform to any recognized standards available 
in the public domain.  I have no need for the proprietary programs used to 
view and edit these file types and prefer standards-compliant formats.
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to