#include "ubinstall-gtk.h" GtkTreeIter *yon_category_check(GtkTreeStore *target,char *category){ GtkTreeIter iter; GtkTreeIter *ret_iter = NULL; for_iter(target,&iter){ char *cur_category; gtk_tree_model_get(GTK_TREE_MODEL(target),&iter,0,&cur_category,-1); if (!strcmp(cur_category,category)){ ret_iter = gtk_tree_iter_copy(&iter); } } return ret_iter; } GtkTreeIter *yon_subcategory_check(GtkTreeStore *target, GtkTreeIter *parent_iter, char *category){ GtkTreeIter iter; GtkTreeIter *ret_iter = NULL; gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&iter,parent_iter); for(int valid = 1; valid; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&iter)){ char *cur_category; gtk_tree_model_get(GTK_TREE_MODEL(target),&iter,0,&cur_category,-1); if (!strcmp(cur_category,category)){ ret_iter = gtk_tree_iter_copy(&iter); } } return ret_iter; } void yon_packages_tab_init(main_window *widgets){ GHashTable *category = g_hash_table_new(g_str_hash,g_str_equal); GHashTable *subcategory = g_hash_table_new(g_str_hash,g_str_equal); int size; config_str packages = yon_resource_open_file(groups_list_path,&size); for (int i=0;iPackagesList,parsed[0]); if (category_iter){ GtkTreeIter *subcategory_iter = yon_subcategory_check(widgets->PackagesList,category_iter,parsed[0]); if (subcategory_iter){ GtkTreeIter package_iter; gtk_tree_store_append(widgets->PackagesList,&package_iter,subcategory_iter); gtk_tree_store_set(widgets->PackagesList,&package_iter,0,packages[2],1,packages[3],-1); gtk_tree_iter_free(subcategory_iter); } gtk_tree_iter_free(category_iter); } } } void yon_on_packages_chosen(GtkTreeStore *, char *path, main_window *widgets){ GtkTreeIter iter, chiter; gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->PackagesList),&iter,path); GtkTreePath *cur_path = gtk_tree_model_get_path(GTK_TREE_MODEL(widgets->PackagesList),&iter); int depth = gtk_tree_path_get_depth(cur_path); if (depth<2){ GtkTreeIter *cur_parent, *cur_iter; cur_parent = gtk_tree_iter_copy(&iter); cur_iter = gtk_tree_iter_copy(&chiter); switch(depth){ case 0: gtk_tree_model_iter_children(GTK_TREE_MODEL(widgets->PackagesList),cur_iter,&iter); __attribute__((fallthrough)); case 1: gtk_tree_model_iter_children(GTK_TREE_MODEL(widgets->PackagesList),cur_iter,cur_parent); } } }