You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ubinstall-gtk/source/ubinstall-gtk-packages.c

71 lines
2.8 KiB

#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;i<size;i++){
int parsed_size;
config_str parsed = yon_char_parse(packages[i],&parsed_size,";");
GtkTreeIter *category_iter = yon_category_check(widgets->PackagesList,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);
}
}
}