rendered paste body#include <stdio.h>#include <gtk/gtk.h>/* gcc -Wall -g `pkg-config --cflags --libs gtk+-2.0` -o slow slowview.c */enum SLOWVIEW{ COL1, COL2, COL3, COL4, PL_TAG_ID_COL, PL_PTR_COL, PL_COLOR_COL, PL_N_COLS};void on_selection_change(){ }void on_drag_data_get(){ }void on_drag_data_received(){ }void on_drag_begin(){ }void on_drag_drop(){ }void on_row_activated(){ }void on_key_press_event(){ }static GtkTargetEntry targetentries[] ={ {"STRING", 0, 1 }, { "GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_WIDGET, 0}};GtkWidget *create_view(){ GtkListStore *store; GtkTreeView *view; GtkTreeIter iter; GtkTreeSelection *selector; int i; /* Create the playlist */ store = gtk_list_store_new(PL_N_COLS, G_TYPE_STRING, // col1 G_TYPE_STRING, // col2 G_TYPE_STRING, // col3 G_TYPE_STRING, // col4 G_TYPE_ULONG, // tag_id G_TYPE_POINTER, // pointer G_TYPE_STRING // color ); /* Small Sample data */ for(i=0;i<5000;i++){ gtk_list_store_append(store,&iter); gtk_list_store_set(store,&iter, COL1,"There are no cats", COL2,"In America", COL3,"And the Streets are filled with", COL4,"Cheese", PL_TAG_ID_COL,22, -1); } view = GTK_TREE_VIEW(gtk_tree_view_new_with_model( GTK_TREE_MODEL(store))); gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(view),TRUE); gtk_tree_view_set_search_column(GTK_TREE_VIEW(view),COL1);// g_object_unref(playlist_store); selector = gtk_tree_view_get_selection(view); gtk_tree_selection_set_mode(selector,GTK_SELECTION_MULTIPLE); g_signal_connect(G_OBJECT(selector),"changed", G_CALLBACK(on_selection_change), NULL); g_signal_connect(view,"drag-data-received", G_CALLBACK(on_drag_data_received), NULL); g_signal_connect(view,"drag-data-get", G_CALLBACK(on_drag_data_get),NULL); g_signal_connect(view,"drag-begin", G_CALLBACK(on_drag_begin),NULL); gtk_drag_dest_set(GTK_WIDGET(view),GTK_DEST_DEFAULT_ALL, targetentries,2, GDK_ACTION_LINK); gtk_drag_source_set(GTK_WIDGET(view),GDK_BUTTON1_MASK, targetentries,2, GDK_ACTION_LINK); g_signal_connect(view,"drag-drop",G_CALLBACK(on_drag_drop),NULL); g_signal_connect(view,"row-activated",G_CALLBACK(on_row_activated),NULL); g_signal_connect(view,"key-press-event",G_CALLBACK(on_key_press_event),NULL); gtk_tree_view_set_grid_lines(view,GTK_TREE_VIEW_GRID_LINES_VERTICAL); //GTK_WIDGET_UNSET_FLAGS (playlist_view, GTK_DOUBLE_BUFFERED); GtkCellRenderer *renderer; GtkTreeViewColumn *column; /* column 1 */ renderer = gtk_cell_renderer_text_new(); g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, "size-points",10.0,NULL); column = gtk_tree_view_column_new_with_attributes("Column1",renderer, "text",COL1,"background",PL_COLOR_COL,NULL); gtk_tree_view_column_set_resizable (column,TRUE); gtk_tree_view_column_set_sizing (column,GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_expand (column,TRUE); gtk_tree_view_column_set_sort_column_id (column,COL1); gtk_tree_view_append_column (view, column); /* column 2 */ renderer = gtk_cell_renderer_text_new (); g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, "size-points",10.0,NULL); column = gtk_tree_view_column_new_with_attributes ("Column2",renderer, "text",COL2,"background",PL_COLOR_COL,NULL); gtk_tree_view_column_set_resizable (column,TRUE); gtk_tree_view_column_set_sizing (column,GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_expand (column,TRUE); gtk_tree_view_column_set_sort_column_id (column, COL2); gtk_tree_view_append_column (view, column); /* column 2 */ renderer = gtk_cell_renderer_text_new (); g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, "size-points",10.0,NULL); column = gtk_tree_view_column_new_with_attributes ("Column3",renderer, "text",COL3,"background",PL_COLOR_COL,NULL); gtk_tree_view_column_set_resizable (column,TRUE); gtk_tree_view_column_set_sizing (column,GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_expand (column,TRUE); gtk_tree_view_column_set_sort_column_id (column, COL3); gtk_tree_view_append_column (view, column); /* Column 4 */ renderer = gtk_cell_renderer_text_new(); g_object_set(renderer,"size-points",10.0,NULL); column = gtk_tree_view_column_new_with_attributes("Length",renderer, "text",COL4,"background",PL_COLOR_COL,NULL); gtk_tree_view_column_set_resizable (column,TRUE); gtk_tree_view_column_set_sizing (column,GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_column_set_sort_column_id (column, COL4); gtk_tree_view_append_column (view, column); return GTK_WIDGET(view);} int main(int argc, char **argv){ gtk_init(&argc,&argv); GtkWidget *window; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); GdkGeometry gdkGeometry; gdkGeometry.min_width= 800; gdkGeometry.min_height = 600; gtk_window_set_geometry_hints(GTK_WINDOW(window), window, &gdkGeometry, GDK_HINT_MIN_SIZE); GtkWidget *scroll; scroll = gtk_scrolled_window_new(NULL,NULL); GtkWidget *slowview; slowview = create_view(); gtk_container_add(GTK_CONTAINER(scroll),slowview); gtk_container_add(GTK_CONTAINER(window),scroll); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_widget_show_all(window); gtk_main(); return 0;}