static GtkTreeModel * audit_build_model (GvaAuditData *data, GError **error) { GtkTreeModel *model; GtkTreeIter iter; gboolean iter_valid; model = gva_game_store_new_from_query (SQL_SELECT_BAD_GAMES, error); if (model == NULL) return NULL; iter_valid = gtk_tree_model_get_iter_first (model, &iter); while (iter_valid) { GtkTreeIter child; guint index; gchar *name; gtk_tree_model_get (model, &iter, 0, &name, -1); index = GPOINTER_TO_UINT (g_hash_table_lookup ( data->output_index, name)); while (index > 0) { const gchar *line; line = g_ptr_array_index (data->output, --index); if (!g_str_has_prefix (line, name)) break; gtk_tree_store_prepend ( GTK_TREE_STORE (model), &child, &iter); gtk_tree_store_set ( GTK_TREE_STORE (model), &child, GVA_GAME_STORE_COLUMN_DESCRIPTION, line, -1); } g_free (name); iter_valid = gtk_tree_model_iter_next (model, &iter); } gtk_tree_sortable_set_sort_column_id ( GTK_TREE_SORTABLE (model), GVA_GAME_STORE_COLUMN_DESCRIPTION, GTK_SORT_ASCENDING); return model; }
static gboolean audit_build_model (GtkTreeStore *tree_store, GvaAuditData *data, GError **error) { GtkTreeModel *game_store; GtkTreeIter iter; gboolean iter_valid; game_store = gva_game_store_new_from_query ( SQL_SELECT_BAD_GAMES, error); if (game_store == NULL) return FALSE; gtk_tree_store_clear (tree_store); iter_valid = gtk_tree_model_get_iter_first (game_store, &iter); while (iter_valid) { GtkTreeIter parent; GtkTreeIter child; guint index; gchar *name; gchar *description; gtk_tree_model_get ( game_store, &iter, GVA_GAME_STORE_COLUMN_NAME, &name, GVA_GAME_STORE_COLUMN_DESCRIPTION, &description, -1); gtk_tree_store_append (tree_store, &parent, NULL); gtk_tree_store_set (tree_store, &parent, 0, description, -1); index = GPOINTER_TO_UINT (g_hash_table_lookup ( data->output_index, name)); while (index > 0) { const gchar *line; line = g_ptr_array_index (data->output, --index); if (!g_str_has_prefix (line, name)) break; gtk_tree_store_prepend (tree_store, &child, &parent); gtk_tree_store_set (tree_store, &child, 0, line, -1); } g_free (name); g_free (description); iter_valid = gtk_tree_model_iter_next (game_store, &iter); } gtk_tree_sortable_set_sort_column_id ( GTK_TREE_SORTABLE (tree_store), 0, GTK_SORT_ASCENDING); g_object_unref (game_store); return TRUE; }