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.
147 lines
7.4 KiB
147 lines
7.4 KiB
#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;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){
|
|
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);
|
|
} |