#include "ubinstall-gtk.h" int yon_packages_tab_save(main_window *widgets){ GtkTreeIter parentiter, subiter,packiter; if (yon_char_is_empty(config(modules_extra_parameter))){ yon_config_register(modules_extra_parameter,modules_extra_parameter_command,NULL); } for_iter(widgets->PackagesList,&parentiter){ for (int valid2 = gtk_tree_model_iter_children(GTK_TREE_MODEL(widgets->PackagesList),&subiter,&parentiter);valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->PackagesList),&subiter)){ int selectable, status; char *package; gtk_tree_model_get(GTK_TREE_MODEL(widgets->PackagesList),&subiter,0,&status,1,&package,3,&selectable,-1); if (selectable&&status){ yon_config_append_element(modules_extra_parameter,package,","); } else { for (int valid3 = gtk_tree_model_iter_children(GTK_TREE_MODEL(widgets->PackagesList),&packiter,&subiter);valid3;valid3 = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->PackagesList),&packiter)){ gtk_tree_model_get(GTK_TREE_MODEL(widgets->PackagesList),&packiter,0,&status,1,&package,3,&selectable,-1); yon_config_append_element(modules_extra_parameter,package,","); } } } } return 1; } GtkTreeIter *yon_category_check(GtkTreeStore *target,char *category); 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,1,&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 *yon_subcategory_check(GtkTreeStore *target, GtkTreeIter *parent_iter, char *category){ GtkTreeIter iter; GtkTreeIter *ret_iter = NULL; int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&iter,parent_iter); for(; valid; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&iter)){ char *cur_category; gtk_tree_model_get(GTK_TREE_MODEL(target),&iter,1,&cur_category,-1); if ((yon_char_is_empty(cur_category)&&yon_char_is_empty(category))||!strcmp(cur_category,category)){ ret_iter = gtk_tree_iter_copy(&iter); } } return ret_iter; } void yon_packages_tab_init(main_window *widgets){ int size; config_str packages = yon_resource_open_file(groups_list_path,&size); for (int i=1;iPackagesList,parsed[0]); if (category_iter){ if (!yon_char_is_empty(parsed[1])){ GtkTreeIter *subcategory_iter = yon_subcategory_check(widgets->PackagesList,category_iter,parsed[1]); 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,0,1,parsed[2],2,parsed[3],3,1,-1); gtk_tree_iter_free(subcategory_iter); } else { GtkTreeIter subcatiter; GtkTreeIter package_iter; gtk_tree_store_append(widgets->PackagesList,&subcatiter,category_iter); gtk_tree_store_set(widgets->PackagesList,&subcatiter,1,parsed[1],2,parsed[3],3,0,-1); gtk_tree_store_append(widgets->PackagesList,&package_iter,&subcatiter); gtk_tree_store_set(widgets->PackagesList,&package_iter,0,0,1,parsed[2],2,parsed[3],3,1,-1); } } else { GtkTreeIter package_iter; gtk_tree_store_append(widgets->PackagesList,&package_iter,category_iter); gtk_tree_store_set(widgets->PackagesList,&package_iter,0,0,1,parsed[2],2,parsed[3],3,1,-1); } gtk_tree_iter_free(category_iter); } else { if (!yon_char_is_empty(parsed[1])){ GtkTreeIter subcategory_iter; GtkTreeIter catiter; GtkTreeIter package_iter; gtk_tree_store_append(widgets->PackagesList,&catiter,NULL); gtk_tree_store_set(widgets->PackagesList,&catiter,1,parsed[0],2,parsed[3],3,0,-1); gtk_tree_store_append(widgets->PackagesList,&subcategory_iter,&catiter); gtk_tree_store_set(widgets->PackagesList,&subcategory_iter,1,parsed[1],2,parsed[3],3,0,-1); gtk_tree_store_append(widgets->PackagesList,&package_iter,&subcategory_iter); gtk_tree_store_set(widgets->PackagesList,&package_iter,1,parsed[2],2,parsed[3],3,1,-1); } else { GtkTreeIter package_iter; GtkTreeIter catiter; gtk_tree_store_append(widgets->PackagesList,&catiter,NULL); gtk_tree_store_set(widgets->PackagesList,&catiter,1,parsed[0],2,parsed[3],3,0,-1); gtk_tree_store_append(widgets->PackagesList,&package_iter,&catiter); gtk_tree_store_set(widgets->PackagesList,&package_iter,0,0,1,parsed[2],2,parsed[3],3,1,-1); } } } gtk_tree_view_expand_all(GTK_TREE_VIEW(widgets->PackagesTree)); } void yon_on_packages_selected(GtkWidget *, main_window *widgets){ GtkTreeIter iter; GtkTreeModel *model; gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->PackagesTree)),&model,&iter); GtkTreeIter cur_parent, cur_iter; int status; gtk_tree_model_get(model,&iter,3,&status,-1); if (status) return; gtk_tree_model_iter_children(model,&cur_parent,&iter); gtk_tree_model_get(model,&cur_parent,3,&status,-1); if (status){ GtkTreePath *path = gtk_tree_model_get_path(model,&cur_parent); gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->PackagesTree),path); gtk_tree_path_free(path); gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->PackagesTree)),&cur_parent); return; } gtk_tree_model_iter_children(model,&cur_iter,&cur_parent); GtkTreePath *path = gtk_tree_model_get_path(model,&cur_iter); gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->PackagesTree),path); gtk_tree_path_free(path); gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->PackagesTree)),&cur_iter); } void yon_on_packages_chosen(GtkWidget *, char *path, main_window *widgets){ GtkTreeIter iter; gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->PackagesList),&iter,path); int status; gtk_tree_model_get(GTK_TREE_MODEL(widgets->PackagesList),&iter,0,&status,-1); gtk_tree_store_set(widgets->PackagesList,&iter,0,!status,-1); } void yon_on_packages_activated(GtkWidget *, GtkTreePath* path, GtkTreeViewColumn* , main_window *widgets){ GtkTreeIter iter; gtk_tree_model_get_iter(GTK_TREE_MODEL(widgets->PackagesList),&iter,path); int status; gtk_tree_model_get(GTK_TREE_MODEL(widgets->PackagesList),&iter,0,&status,-1); gtk_tree_store_set(widgets->PackagesList,&iter,0,!status,-1); }