/* * Compile with: * gcc -o helloworld helloworld.c `pkg-config --cflags --libs gtk+-2.0` * */ #include enum { COL_IP = 0, COL_PORT, COL_COMPLETED, COL_UP, COL_DOWN, NUM_COLS } ; static GtkTreeModel * create_and_fill_model (void) { GtkListStore *store; GtkTreeIter iter; store = gtk_list_store_new (NUM_COLS, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); /* Append a row and fill in some data */ gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, COL_IP, "127.0.0.2", COL_PORT, 9984, COL_COMPLETED, "96%", COL_UP, "24.2 KiB/s", COL_DOWN, "2.04 KiB/s", -1); gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, COL_IP, "193.231.236.128", COL_PORT, 55845, COL_COMPLETED, "100%", COL_UP, "0 KiB/s", COL_DOWN, "885.49 KiB/s", -1); return GTK_TREE_MODEL (store); } static GtkWidget * create_view_and_model (void) { GtkCellRenderer *renderer; GtkTreeModel *model; GtkWidget *view; view = gtk_tree_view_new (); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), -1, "Peer IP", renderer, "text", COL_IP, NULL); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), -1, "Port", renderer, "text", COL_PORT, NULL); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), -1, "% Completed", renderer, "text", COL_COMPLETED, NULL); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), -1, "UL Speed", renderer, "text", COL_UP, NULL); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), -1, "DL Speed", renderer, "text", COL_DOWN, NULL); model = create_and_fill_model (); gtk_tree_view_set_model (GTK_TREE_VIEW (view), model); /* The tree view has acquired its own reference to the * model, so we can drop ours. That way the model will * be freed automatically when the tree view is destroyed */ g_object_unref (model); return view; } int main (int argc, char **argv) { GtkWidget *window; GtkWidget *view; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (window, "delete_event", gtk_main_quit, NULL); /* dirty */ view = create_view_and_model (); gtk_container_add (GTK_CONTAINER (window), view); gtk_widget_show_all (window); gtk_main (); return 0; }