static GtkWidget* gwy_module_browser_construct(GtkWidget *parent) { static const gchar *columns[] = { N_("Module"), N_("Version"), N_("Author"), }; GtkWidget *tree; GtkListStore *store; GtkTreeSelection *selection; GtkCellRenderer *renderer; GtkTreeViewColumn *column; gsize i; store = gtk_list_store_new(MODEL_LAST, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_BOOLEAN); gwy_module_foreach((GHFunc)gwy_module_browser_store_module, store); _gwy_module_failure_foreach((GHFunc)gwy_module_browser_store_failure, store); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), MODEL_NAME, compare_modules, NULL, NULL); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), MODEL_NAME, GTK_SORT_ASCENDING); tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tree), TRUE); g_object_unref(store); for (i = 0; i < G_N_ELEMENTS(columns); i++) { renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_(columns[i]), renderer, NULL); gtk_tree_view_column_set_cell_data_func(column, renderer, gwy_module_browser_render, GUINT_TO_POINTER(i), NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column); } selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); g_signal_connect(tree, "cursor-changed", G_CALLBACK(update_module_info_cb), parent); return tree; }
static GtkWidget* gwy_module_browser_construct(GtkWidget *parent) { static const struct { const gchar *title; const guint id; } columns[] = { { N_("Module"), MODULE_NAME }, { N_("Version"), MODULE_VERSION }, { N_("Author"), MODULE_AUTHOR }, }; GtkWidget *tree; GtkListStore *store; GtkTreeSelection *selection; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GSList *l, *list = NULL; GtkTreeIter iter; gsize i; store = gtk_list_store_new(MODULE_LAST, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); gwy_module_foreach(gwy_hash_table_to_slist_cb, &list); list = g_slist_sort(list, (GCompareFunc)module_name_compare_cb); for (l = list; l; l = g_slist_next(l)) { const GwyModuleInfo *mod_info = (const GwyModuleInfo*)l->data; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, MODULE_NAME, mod_info->name, MODULE_VERSION, mod_info->version, MODULE_AUTHOR, mod_info->author, -1); } g_slist_free(list); tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tree), TRUE); g_object_unref(store); for (i = 0; i < G_N_ELEMENTS(columns); i++) { renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_(columns[i].title), renderer, "text", columns[i].id, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column); } selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); g_signal_connect(G_OBJECT(tree), "cursor-changed", G_CALLBACK(update_module_info_cb), parent); return tree; }