Re: GtkTreeView having nodes with underlined text



Thank you David,

your code works fine. I kept looking at my code for at least twenty minutes before I noticed a bug in the line:

store = gtk_tree_store_new(3, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_BOOLEAN, G_TYPE_UINT);

This method would be much cooler if it could count number of parameters by itself (I forgot to increment column count).

Regards,
 Miroslav


----- Original Message ----- From: "David Necas (Yeti)" <yeti physics muni cz>
To: <gtk-app-devel-list gnome org>
Sent: Wednesday, November 22, 2006 2:57 PM
Subject: Re: GtkTreeView having nodes with underlined text


On Wed, Nov 22, 2006 at 01:28:32PM +0100, Miroslav Rajcic wrote:
I am having a problem to underline text for some (not all) nodes in a
GtkTreeView.

I've tried following:

1. a) add new column in the tree store of type G_TYPE_ENUM (tried integer
type too)

Should be G_TYPE_UINT.

    b) attach text renderer to this store column:

gtk_tree_view_column_set_attributes(column, renderer,
   "underline", STORE_IDX_UNDERLINE,
   NULL);

Should be gtk_tree_view_column_add_attribute().

Unfortuantely, this does not work. I even added a store column for
"underline-set", and attached the renderer property to that store col.

I'm not quite sure what the logic behind foo-set properties
is either, but setting them to TRUE at the begining and the
just changeing the actual property does what one normally
wants.

GValue             value = { 0, };
g_value_init (&value, PANGO_TYPE_UNDERLINE);
g_value_set_enum (&value, PANGO_UNDERLINE_SINGLE);
g_object_set_property (G_OBJECT (renderer), "underline", &value);
g_value_unset (&value);

This is a bit overengineered.

 g_object_set(renderer, "underline", PANGO_UNDERLINE_SINGLE, NULL);

does exactly the same.

Does anyone have the code to set underline font for arbitrary node in a tree

No, but can easily make some.

Yeti


--
Whatever.


===========================================================================
#include <string.h>
#include <gtk/gtk.h>

enum { COL_TEXT, COL_ULINE };

int
main(int argc, char *argv[])
{
   static const gchar *text[] = {
       "Foo", "Bar", "Baz", "Quux", "Bloody", "Underline",
   };
   GtkTreeViewColumn *column;
   GtkCellRenderer *renderer;
   GtkListStore *store;
   GtkTreeIter iter;
   GtkWidget *window, *view;
   PangoUnderline uline;
   guint i;

   gtk_init(&argc, &argv);
   window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   gtk_window_set_default_size(GTK_WINDOW(window), -1, 300);
   g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

   store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_UINT);
   for (i = 0; i < G_N_ELEMENTS(text); i++) {
       if (strchr(text[i], 'a'))
           uline = PANGO_UNDERLINE_DOUBLE;
       else if (strchr(text[i], 'o'))
           uline = PANGO_UNDERLINE_SINGLE;
       else
           uline = PANGO_UNDERLINE_NONE;
       gtk_list_store_append(store, &iter);
       gtk_list_store_set(store, &iter,
                          COL_TEXT, text[i],
                          COL_ULINE, uline,
                          -1);
   }

   view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
   gtk_container_add(GTK_CONTAINER(window), view);

   renderer = gtk_cell_renderer_text_new();
   g_object_set(renderer, "underline-set", TRUE, NULL);
   column = gtk_tree_view_column_new_with_attributes("Text", renderer,
                                                     "text", COL_TEXT,
"underline", COL_ULINE,
                                                     NULL);
   gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);

   gtk_widget_show_all(window);
   gtk_main();

   return 0;
}
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

__________ NOD32 1877 (20061122) Information __________

This message was checked by NOD32 antivirus system.
http://www.eset.com






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