Re: capture "changed" signal for the cell of treeview



On Sat, May 4, 2013 at 8:02 PM, yu wu <vanii warem gmail com> wrote:
Since more than one column is changed, row-changed signal will be emitted
more than once and widgets will be updated more than once. But I just want
to update other widget once.

This is only more or less true.

When you receive "row-changed" multiple times, then you probably do
something like:

  o gtk_label_set_text()... which is not going to queue a redraw if
the new text is the same as the old text

  o If the text has changed, it will queue a redraw...

So even if a couple things actually changed on a couple different
widgets, that is all happening
synchronously, and then a redraw is queued, things only get painted
once with the new value.

Cheers,
       -Tristan

This is why I want to know if it is possible to
know which column is changed in other email. But from your reply to my other
email, there is no way to know which column to change when row-changed is
emitted. Then I have to update widgets when cell of column 0 is edited or in
other functions which result in the change in column 1~3 mentioned above.

As to GtkCellView, I have never used it. I have to read it first and then
see.


2013/5/4 <tristan van berkom gmail com>


On 2013-05-04, at 7:00 PM, yu wu <vanii warem gmail com> wrote:

As I wrote in my original email, the renderer is ** not ** set editable.
Therefore, it can't be connected to ** edited ** signal.

Here is the situation for example. Renderer 1 -- column 0 is set editable.
Renderer 2-4, i.e., column 1-3, is not set editable. When column 0 is
edited, the value of column 1 is set. As to the values for column 2-3, they
are set by other functions. Then I would like to capture the changes of
column 1-3. After I get the changes, some other widgets (inside treeview or
outside treeview) will be updated.


I see, well the most efficient way to handle your situation really depends
on what you need.

For your other display widgets, you might consider using GtkCellView (a
widget for rendering a single row from a tree model), or like you mention in
the other mail, you could listen to "row-chaned" and update all the widgets
which need to display the changed row.

You could also implement custom display widgets like GtkCellView, by
keeping a GtkTreeRowReference, queuing a redraw when the row changes, and
drawing the visual state based of the row data at "draw" time.

By the way, I don't know the difference between gtk-list and
gtk-devel-list. Now I know it. Could you or someone tell me how to move this
post to gtk-list?


Don't worry about it, posts can't be "moved", just use the other lists
next time ;)


在 2013年5月4日星期六,Tristan Van Berkom 写道:

On Sat, May 4, 2013 at 12:37 PM, yu wu <vanii warem gmail com> wrote:
I am using the followed to renderer text in cells:

++++++++++++++++++++++++

  renderer = gtk_cell_renderer_text_new();
  column = gtk_tree_view_column_new_with_attributes((local =
char_to_utf8
("weight(kg/m)")), renderer, "text", MEM_SEC_WEIGHT_PER_METER, NULL);
  g_free(local);
  gtk_tree_view_append_column(treeview, column);

++++++++++++++++++++++++

I don't set `editable' attribute for the renderer. The value for
specified
cell is set by

other sub-function. Then how can I get the `changed' signal for the
specified cell when its
value is changed? My purpose is to update other widget when text value
in
cell is changed.
For the text cell renderer, it only has edited signal that is not
useful for
my case

How come the "edited" signal is not useful ?

You want to catch *every* change while the user is editing a cell ?

This can be done, but it kind of changes the way cell editing usually
works, i.e. pressing escape, or losing editor focus while editing a text
cell is generally supposed to "cancel" the current edit, hence usually
you wait until the "edited" signal is fired in order to commit any
changes
to the underlying model.

If you need to handle every keystroke, then connect to the
"editing-started"
signal of a GtkCellRendererText for example, the GtkCellEditable widget
will
in this case be a GtkEntry (which will exist for the duration of the
edit), then
you can connect to the "changed" signal of this entry.

Note also, this list is about development of GTK+ itself, you should
direct
your questions about using GTK+ to gtk-app-devel-list instead.

Cheers,
       -Tristan

(or maybe I misunderstand some points). When some cell is changed, it
might
have no
any selection. That's, the `changed' signal for selection has no use
here.

Please help.

_______________________________________________
gtk-devel-list mailing list
gtk-devel-list gnome org
https://mail.gnome.org/mailman/listinfo/gtk-devel-list





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]