@ -80,6 +80,31 @@ void on_software_info(GtkWidget*, main_window *widgets){
yon_char_parsed_free ( parsed , size ) ;
}
void yon_packages_remove_empty_groups ( main_window * widgets ) {
GtkTreeModel * model = GTK_TREE_MODEL ( widgets - > PackagesList ) ;
GtkTreeIter iter ;
for_iter ( model , & iter ) {
if ( gtk_tree_model_iter_has_child ( model , & iter ) ) {
GtkTreeIter subiter ;
for ( int valid2 = gtk_tree_model_iter_children ( model , & subiter , & iter ) ; valid2 ; valid2 = gtk_tree_model_iter_next ( model , & subiter ) ) {
if ( ! gtk_tree_model_iter_has_child ( model , & subiter ) ) {
gtk_tree_store_remove ( widgets - > PackagesList , & subiter ) ;
if ( ! gtk_tree_model_iter_children ( model , & subiter , & iter ) ) {
valid2 = 0 ;
break ;
}
}
}
} else {
gtk_tree_store_remove ( widgets - > PackagesList , & iter ) ;
if ( ! gtk_tree_model_get_iter_first ( model , & iter ) ) {
valid = 0 ;
break ;
}
}
}
}
void yon_packages_tab_init ( main_window * widgets ) {
on_status_update ( NULL , widgets ) ;
if ( ! main_config . configure_mode ) {
@ -99,7 +124,9 @@ void yon_packages_tab_init(main_window *widgets){
for ( int i = 0 ; i < main_config . modules_size ; i + + ) {
int parsed_size = 0 ;
config_str parsed = yon_char_parse ( main_config . modules [ i ] , & parsed_size , " ; " ) ;
if ( yon_packages_check_exist ( parsed [ 1 ] ) ) {
yon_char_parsed_add_or_create_if_exists ( final , & final_size , parsed [ 1 ] ) ;
}
yon_char_parsed_free ( parsed , parsed_size ) ;
}
modules = yon_char_parsed_to_string ( final , final_size , " , " ) ;
@ -125,6 +152,20 @@ void yon_packages_tab_init(main_window *widgets){
config_str parsed = yon_char_parse ( packages [ i ] , & parsed_size , " ; " ) ;
GtkTreeIter * category_iter = yon_category_check ( widgets - > PackagesList , parsed [ 0 ] ) ;
char * name_render = yon_char_replace ( parsed [ 2 ] , " , " , " " ) ;
int final_size = 0 ;
config_str final = NULL ;
int modules_parsed_size = 0 ;
config_str modules_parsed = yon_char_parse ( parsed [ 2 ] , & modules_parsed_size , " " ) ;
int empty = 0 ;
for ( int j = 0 ; j < modules_parsed_size ; j + + ) {
if ( ! yon_packages_check_exist ( modules_parsed [ j ] ) ) {
empty = 1 ;
continue ;
}
}
if ( empty ) continue ;
yon_char_parsed_free ( modules_parsed , modules_parsed_size ) ;
char * modules_string = yon_char_parsed_to_string ( final , final_size , " \t " ) ;
if ( category_iter ) {
if ( ! yon_char_is_empty ( parsed [ 1 ] ) ) {
GtkTreeIter * subcategory_iter = yon_subcategory_check ( widgets - > PackagesList , category_iter , parsed [ 1 ] ) ;
@ -132,7 +173,7 @@ void yon_packages_tab_init(main_window *widgets){
GtkTreeIter package_iter ;
gtk_tree_store_append ( widgets - > PackagesList , & package_iter , subcategory_iter ) ;
char * full_string = yon_char_unite ( " <b> " , name_render , " </b> \n " , _ ( parsed [ 3 ] ) , NULL ) ;
gtk_tree_store_set ( widgets - > PackagesList , & package_iter , 0 , ! ! yon_char_check_elements ( config_packages , parsed[ 2 ] , " , " ) | | yon_char_check_elements ( modules , parsed[ 2 ] , " , " ) , 1 , parsed [ 2 ] , 2 , full_string , 3 , 1 , 4 , ! yon_char_check_elements ( modules , parsed[ 2 ] , " , " ) , 5 , parsed [ 2 ] , - 1 ) ;
gtk_tree_store_set ( widgets - > PackagesList , & package_iter , 0 , ! ! yon_char_check_elements ( config_packages , modules_string , " , " ) | | yon_char_check_elements ( modules , modules_string, " , " ) , 1 , modules_string , 2 , full_string , 3 , 1 , 4 , ! yon_char_check_elements ( modules , modules_string, " , " ) , 5 , modules_string , - 1 ) ;
free ( full_string ) ;
gtk_tree_iter_free ( subcategory_iter ) ;
} else {
@ -142,14 +183,14 @@ void yon_packages_tab_init(main_window *widgets){
gtk_tree_store_set ( widgets - > PackagesList , & subcatiter , 1 , parsed [ 1 ] , 2 , _ ( parsed [ 1 ] ) , 3 , 0 , - 1 ) ;
gtk_tree_store_append ( widgets - > PackagesList , & package_iter , & subcatiter ) ;
char * full_string = yon_char_unite ( " <b> " , name_render , " </b> \n " , _ ( parsed [ 3 ] ) , NULL ) ;
gtk_tree_store_set ( widgets - > PackagesList , & package_iter , 0 , ! ! yon_char_check_elements ( config_packages , parsed[ 2 ] , " , " ) | | yon_char_check_elements ( modules , parsed[ 2 ] , " , " ) , 1 , parsed [ 2 ] , 2 , full_string , 3 , 1 , 4 , ! yon_char_check_elements ( modules , parsed[ 2 ] , " , " ) , 5 , parsed [ 2 ] , - 1 ) ;
gtk_tree_store_set ( widgets - > PackagesList , & package_iter , 0 , ! ! yon_char_check_elements ( config_packages , modules_string , " , " ) | | yon_char_check_elements ( modules , modules_string, " , " ) , 1 , modules_string , 2 , full_string , 3 , 1 , 4 , ! yon_char_check_elements ( modules , modules_string, " , " ) , 5 , modules_string , - 1 ) ;
free ( full_string ) ;
}
} else {
GtkTreeIter package_iter ;
gtk_tree_store_append ( widgets - > PackagesList , & package_iter , category_iter ) ;
char * full_string = yon_char_unite ( " <b> " , name_render , " </b> \n " , _ ( parsed [ 3 ] ) , NULL ) ;
gtk_tree_store_set ( widgets - > PackagesList , & package_iter , 0 , ! ! yon_char_check_elements ( config_packages , parsed[ 2 ] , " , " ) | | yon_char_check_elements ( modules , parsed[ 2 ] , " , " ) , 1 , parsed [ 2 ] , 2 , full_string , 3 , 1 , 4 , ! yon_char_check_elements ( modules , parsed[ 2 ] , " , " ) , 5 , parsed [ 2 ] , - 1 ) ;
gtk_tree_store_set ( widgets - > PackagesList , & package_iter , 0 , ! ! yon_char_check_elements ( config_packages , modules_string , " , " ) | | yon_char_check_elements ( modules , modules_string, " , " ) , 1 , modules_string , 2 , full_string , 3 , 1 , 4 , ! yon_char_check_elements ( modules , modules_string, " , " ) , 5 , modules_string , - 1 ) ;
free ( full_string ) ;
}
gtk_tree_iter_free ( category_iter ) ;
@ -164,7 +205,7 @@ void yon_packages_tab_init(main_window *widgets){
gtk_tree_store_set ( widgets - > PackagesList , & subcategory_iter , 1 , parsed [ 1 ] , 2 , _ ( parsed [ 1 ] ) , 3 , 0 , - 1 ) ;
gtk_tree_store_append ( widgets - > PackagesList , & package_iter , & subcategory_iter ) ;
char * full_string = yon_char_unite ( " <b> " , name_render , " </b> \n " , _ ( parsed [ 3 ] ) , NULL ) ;
gtk_tree_store_set ( widgets - > PackagesList , & package_iter , 0 , ! ! yon_char_check_elements ( config_packages , parsed[ 2 ] , " , " ) | | yon_char_check_elements ( modules , parsed[ 2 ] , " , " ) , 1 , parsed [ 2 ] , 2 , full_string , 3 , 1 , 4 , ! yon_char_check_elements ( modules , parsed[ 2 ] , " , " ) , 5 , parsed [ 2 ] , - 1 ) ;
gtk_tree_store_set ( widgets - > PackagesList , & package_iter , 0 , ! ! yon_char_check_elements ( config_packages , modules_string , " , " ) | | yon_char_check_elements ( modules , modules_string, " , " ) , 1 , modules_string , 2 , full_string , 3 , 1 , 4 , ! yon_char_check_elements ( modules , modules_string, " , " ) , 5 , modules_string , - 1 ) ;
free ( full_string ) ;
} else {
GtkTreeIter package_iter ;
@ -173,11 +214,12 @@ void yon_packages_tab_init(main_window *widgets){
gtk_tree_store_set ( widgets - > PackagesList , & catiter , 1 , parsed [ 0 ] , 2 , _ ( parsed [ 0 ] ) , 3 , 0 , - 1 ) ;
gtk_tree_store_append ( widgets - > PackagesList , & package_iter , & catiter ) ;
char * full_string = yon_char_unite ( " <b> " , name_render , " </b> \n " , _ ( parsed [ 3 ] ) , NULL ) ;
gtk_tree_store_set ( widgets - > PackagesList , & package_iter , 0 , ! ! yon_char_check_elements ( config_packages , parsed[ 2 ] , " , " ) | | yon_char_check_elements ( modules , parsed[ 2 ] , " , " ) , 1 , parsed [ 2 ] , 2 , full_string , 3 , 1 , 4 , ! yon_char_check_elements ( modules , parsed[ 2 ] , " , " ) , 5 , parsed [ 2 ] , - 1 ) ;
gtk_tree_store_set ( widgets - > PackagesList , & package_iter , 0 , ! ! yon_char_check_elements ( config_packages , modules_string , " , " ) | | yon_char_check_elements ( modules , modules_string, " , " ) , 1 , modules_string , 2 , full_string , 3 , 1 , 4 , ! yon_char_check_elements ( modules , modules_string, " , " ) , 5 , modules_string , - 1 ) ;
free ( full_string ) ;
}
}
}
yon_packages_remove_empty_groups ( widgets ) ;
if ( ! yon_char_is_empty ( modules ) ) free ( modules ) ;
gtk_tree_view_expand_all ( GTK_TREE_VIEW ( widgets - > PackagesTree ) ) ;
}