[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: Column Values Changing in Treeview When Row Selected
- From: Andrew Rowland <weibullguy charter net>
- To: James Scott Jr <skoona verizon net>
- Cc: gtk-app-devel-list gnome org
- Subject: Re: Column Values Changing in Treeview When Row Selected
- Date: Sat, 17 May 2008 18:20:30 -0400
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.
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]