Re: tree view column sizing problem
- From: Allin Cottrell <cottrell wfu edu>
- To: Dave Howorth <dhoworth mrc-lmb cam ac uk>
- Cc: gtk-app-devel-list gnome org
- Subject: Re: tree view column sizing problem
- Date: Tue, 28 Aug 2007 18:41:25 -0400 (EDT)
Just for the record, if anyone else hits this.
I wrote:
I have a tree view with 3 columns, which sits within a scrolled
window.
The middle column contains what can be quite a lengthy string.
When the user opens the window in question, I'd like her to be
visually aware that the third column is there: the problem is that
with the columns autosized, the length of the middle string can
push the third column out of the visible zone (you have to scroll
horizontally to reach it).
The ideal solution, I think, would be (a) set the starting width
of the middle column to some reasonable maximum (when the window
is first opened), but then (b) allow the user to expand it to read
the full string if need be.
Dave Howorth responded:
If the user can be satisfied with seeing one complete string at a time,
another option is to add a full-width label widget at the bottom of the
window showing the content of the second column of the currently
selected row. That avoids the need for the user to resize anything.
Or add tooltips to the column.
I tried tooltips (well, a hand-rolled tooltip using gtk_window,
since the current gtk tooltips API doesn't work with treeview
cells), but it was a lot of work, and didn't really cut it.
For example, if the user maximizes the window on a big screen, we
_really_ don't want to artificially restrict the width of the big
second column, and only show its full content via an auxiliary
popup.
My solution: check the widths in the process of creating the
window. If the middle column is going to push the third column
into the non-visible zone, restrict its width with
gtk_tree_view_column_set_max_width(). But also -- and this makes
the whole thing work -- add a callback to motion-notify-event for
the treeview:
static gboolean
big_col_callback (GtkWidget *w,
GdkEventMotion *e,
gpointer p)
{
GtkTreeViewColumn *col =
gtk_tree_view_get_column(GTK_TREE_VIEW(w), 1);
if (gtk_tree_view_column_get_max_width(col) > 0) {
/* remove the width constraint */
gtk_tree_view_column_set_max_width(col, -1);
}
return FALSE;
}
The effect is that column 1 starts at a size that allows the third
column to be visible, but as soon as the user moves the mouse in
the treeview window, the column becomes freely resizable.
Allin Cottrell
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]