From 394d610b4b1920a88339adaff8bf117121966416 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Wed, 25 Feb 2026 18:01:15 +0600 Subject: [PATCH 1/3] WIP davanced installation loading --- source/ubinstall-gtk-advanced.c | 172 +++++++++++++++++++++++++++- source/ubinstall-gtk-config-hub.c | 2 +- source/ubinstall-gtk-grub.c | 4 +- source/ubinstall-gtk-installation.c | 15 +-- source/ubinstall-gtk-page-switch.c | 2 - source/ubinstall-gtk-separate.c | 4 +- source/ubinstall-gtk.h | 22 ++-- 7 files changed, 195 insertions(+), 26 deletions(-) diff --git a/source/ubinstall-gtk-advanced.c b/source/ubinstall-gtk-advanced.c index ee838ac..0df81b3 100644 --- a/source/ubinstall-gtk-advanced.c +++ b/source/ubinstall-gtk-advanced.c @@ -212,7 +212,6 @@ void on_advanced_partition_create(GtkWidget *, main_window *widgets){ sections_size++; } } - } if (!found&&last_unvalid){ char *target; @@ -253,7 +252,36 @@ void on_advanced_partition_add(GtkWidget *, char *path, main_window *widgets){ } +void yon_advanced_device_choose(main_window *widgets, const char *device){ + if (yon_char_is_empty(device)) return; + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList); + for_iter(model, &iter){ + char *target; + gtk_tree_model_get(model,&iter,0,&target,-1); + if (!yon_char_is_empty(target)&&strstr(device,target)){ + char *path = gtk_tree_model_get_string_from_iter(model,&iter); + g_signal_emit_by_name(G_OBJECT(widgets->AdvancedDeviceChosenCell),"toggled",path,NULL); + } + } +} + +void yon_advanced_part_choose(main_window *widgets, const char *part){ + if (yon_char_is_empty(part)) return; + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); + for_iter(model, &iter){ + char *target; + gtk_tree_model_get(model,&iter,0,&target,-1); + if (!yon_char_is_empty(target)&&strstr(part,target)){ + char *path = gtk_tree_model_get_string_from_iter(model,&iter); + g_signal_emit_by_name(G_OBJECT(widgets->AdvancedPartChosenCell),"toggled",path,NULL); + } + } +} + void yon_install_advanced_init(main_window *widgets){ + yon_advanced_partition_clear(widgets); g_signal_handlers_block_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->AdvancedVirtualDeviceCombo)); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->AdvancedVirtualDeviceCombo),NO_LABEL); @@ -268,6 +296,146 @@ void yon_install_advanced_init(main_window *widgets){ } yon_char_parsed_free(vmf_file,size); g_signal_handlers_unblock_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); + char *device = config(device_parameter); + char *parts = config(part_parameter); + char *part_size = config(part_size_parameter); + char *part_label = config(part_label_parameter); + char *part_fs_type = config(part_fs_type_parameter); + char *part_fs_label = config(part_fs_label_parameter); + char *part_crypt = config(part_crypt_parameter); + char *part_format = config(part_format_parameter); + char *boot = config(boot_parameter); + char *swap = config(swap_parameter); + char *swap_size = config(swap_size_parameter); + if (yon_char_is_empty(device)&&yon_char_is_empty(parts)) return; + { + int size; + config_str device_parsed = yon_char_parse(device,&size,","); + if (size>0&&!yon_char_is_empty(device_parsed[0])){ + yon_advanced_device_choose(widgets,device_parsed[0]); + // sections[0] = yon_advanced_section_new(); + while(gtk_events_pending()) gtk_main_iteration(); + sections[0]->device=device_parsed[0]; + on_advanced_partition_create(NULL,widgets); + if (size>1&&!yon_char_is_empty(device_parsed[1])){ + yon_advanced_device_choose(widgets,device_parsed[1]); + // sections[1] = yon_advanced_section_new(); + while(gtk_events_pending()) gtk_main_iteration(); + sections[1]->device=device_parsed[1]; + on_advanced_partition_create(NULL,widgets); + } + free(device_parsed); + }; + } + { + int size; + config_str part_parsed = yon_char_parse(parts,&size,","); + if (size>0){ + // sections[0] = yon_advanced_section_new(); + yon_advanced_device_choose(widgets,part_parsed[0]); + yon_advanced_part_choose(widgets,part_parsed[0]); + while(gtk_events_pending()) gtk_main_iteration(); + sections[0]->partition=part_parsed[0]; + if (size>1&&!yon_char_is_empty(part_parsed[1])){ + // sections[1] = yon_advanced_section_new(); + yon_advanced_device_choose(widgets,part_parsed[1]); + yon_advanced_part_choose(widgets,part_parsed[1]); + while(gtk_events_pending()) gtk_main_iteration(); + sections[1]->device=part_parsed[1]; + } + free(part_parsed); + }; + } + { + if (!yon_char_is_empty(part_size)){ + int size; + config_str parsed = yon_char_parse(part_size,&size,","); + if (size>0&&!yon_char_is_empty(parsed[0])){ + sections[0]->size = atol(parsed[0]); + sections[0]->size_letter = parsed[0][strlen(parsed[0])-1]; + if (size>1&&!yon_char_is_empty(parsed[1])){ + + sections[1]->size = atol(parsed[1]); + sections[1]->size_letter = parsed[1][strlen(parsed[1])-1]; + } + } + free(parsed); + } + if (!yon_char_is_empty(part_label)){ + int size; + config_str parsed = yon_char_parse(part_label,&size,","); + if (size>0&&!yon_char_is_empty(parsed[0])){ + sections[0]->part_label = parsed[0]; + if (size>1&&!yon_char_is_empty(parsed[1])){ + sections[1]->part_label = parsed[1]; + } + } + free(parsed); + } + if (!yon_char_is_empty(part_fs_type)){ + int size; + config_str parsed = yon_char_parse(part_fs_type,&size,","); + if (size>0&&!yon_char_is_empty(parsed[0])){ + sections[0]->fs_type = parsed[0]; + if (size>1&&!yon_char_is_empty(parsed[1])){ + sections[1]->fs_type = parsed[1]; + } + } + free(parsed); + } + if (!yon_char_is_empty(part_fs_label)){ + int size; + config_str parsed = yon_char_parse(part_fs_label,&size,","); + if (size>0&&!yon_char_is_empty(parsed[0])){ + sections[0]->fs_label = parsed[0]; + if (size>1&&!yon_char_is_empty(parsed[1])){ + sections[1]->fs_label = parsed[1]; + } + } + free(parsed); + } + if (!yon_char_is_empty(part_crypt)){ + int size; + config_str parsed = yon_char_parse(part_crypt,&size,","); + if (size>0&&!yon_char_is_empty(parsed[0])){ + sections[0]->encryption = parsed[0]; + if (size>1&&!yon_char_is_empty(parsed[1])){ + sections[1]->encryption = parsed[1]; + } + } + free(parsed); + } + if (!yon_char_is_empty(part_format)){ + int size; + config_str parsed = yon_char_parse(part_format,&size,","); + if (size>0&&!yon_char_is_empty(parsed[0])){ + if (!strcmp(parsed[0],"yes")){ + sections[0]->format = 2; + } else if (!strcmp(parsed[0],"no")){ + sections[0]->format = 1; + } + if (size>1&&!yon_char_is_empty(parsed[1])){ + if (!strcmp(parsed[1],"yes")){ + sections[1]->format = 2; + } else if (!strcmp(parsed[1],"no")){ + sections[1]->format = 1; + } + } + } + free(parsed); + } + if (!yon_char_is_empty(boot)){ + + } + if (!yon_char_is_empty(swap)){ + + } + if (!yon_char_is_empty(swap_size)){ + + } + + } + yon_advanced_update(widgets); } void on_install_advanced_partition_chosen(GtkCellRenderer*, gchar *path, main_window *widgets){ @@ -656,7 +824,7 @@ int yon_advanced_save(main_window *widgets){ if (devices[0]||devices[1]){ char *devices_str = yon_char_parsed_to_string_full(devices,2,","); - yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,devices_str); + yon_config_register(device_parameter,device_parameter_command,devices_str); } if (!yon_char_is_empty(parts[0])||!yon_char_is_empty(parts[1])){ char *parts_str = yon_char_parsed_to_string_full(parts,2,","); diff --git a/source/ubinstall-gtk-config-hub.c b/source/ubinstall-gtk-config-hub.c index 9920f73..5c2523c 100644 --- a/source/ubinstall-gtk-config-hub.c +++ b/source/ubinstall-gtk-config-hub.c @@ -26,7 +26,7 @@ int yon_installation_check_packages_size(main_window *widgets){ } if (!strcmp(install_mode,"fast")){ - char *device = config(AUTOINSTALL_DEVICE); + char *device = config(device_parameter); GtkTreeIter iter; for_iter(widgets->DevicesList,&iter){ char *target; diff --git a/source/ubinstall-gtk-grub.c b/source/ubinstall-gtk-grub.c index 0137b2e..d5d1cb1 100644 --- a/source/ubinstall-gtk-grub.c +++ b/source/ubinstall-gtk-grub.c @@ -17,7 +17,7 @@ int yon_grub_install_save(main_window *widgets){ } char *partition; gtk_tree_model_get(model,&iter,0,&partition,-1); - yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,cur_device); + yon_config_register(device_parameter,device_parameter_command,cur_device); yon_config_register(part_parameter,part_parameter_command,partition); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"grub_install"); return 1; @@ -40,7 +40,7 @@ int yon_grub_update_save(main_window *widgets){ } char *partition; gtk_tree_model_get(model,&iter,0,&partition,-1); - yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,cur_device); + yon_config_register(device_parameter,device_parameter_command,cur_device); yon_config_register(part_parameter,part_parameter_command,partition); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"grub_update"); return 1; diff --git a/source/ubinstall-gtk-installation.c b/source/ubinstall-gtk-installation.c index 38db982..86b6b18 100644 --- a/source/ubinstall-gtk-installation.c +++ b/source/ubinstall-gtk-installation.c @@ -13,7 +13,7 @@ int yon_install_common_save(main_window *widgets){ yon_config_remove_by_key(part_parameter); gtk_tree_model_get(model,&iter,0,&device,-1); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"fast"); - yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,device); + yon_config_register(device_parameter,device_parameter_command,device); char *device_name = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->CommonInstallationSectionNameEntry)); if (!yon_char_is_empty(device_name)){ @@ -31,7 +31,7 @@ int yon_install_common_save(main_window *widgets){ if (!main_config.configure_mode){ int size; - config_str parameters = yon_config_get_save_parameters_by_key(&size,AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_DEVICE,part_label_parameter,part_fs_type_parameter,NULL); + config_str parameters = yon_config_get_save_parameters_by_key(&size,AUTOINSTALL_TYPE_INSTALL,device_parameter,part_label_parameter,part_fs_type_parameter,NULL); if (parameters){ char *command_parameters = yon_char_parsed_to_string(parameters,size," -- "); char *command = yon_char_unite(ubconfig_dull_command,"--target system ",command_parameters,NULL); @@ -63,7 +63,7 @@ int yon_install_separate_save(main_window *widgets){ glong size,free_space; gtk_tree_model_get(model,&iter,0,&part,5,&size,6,&free_space,-1); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"next"); - yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,device); + yon_config_register(device_parameter,device_parameter_command,device); yon_config_register(part_parameter,part_parameter_command,part); if (gtk_switch_get_active(GTK_SWITCH(widgets->NextInstallationFormatSwitch))){ yon_config_register(part_format_parameter,part_format_parameter_command,"yes"); @@ -113,7 +113,7 @@ int yon_install_separate_save(main_window *widgets){ if (!main_config.configure_mode){ int size; - config_str parameters = yon_config_get_save_parameters_by_key(&size,part_format_parameter,part_label_parameter,part_fs_type_parameter,AUTOINSTALL_DEVICE,part_parameter,NULL); + config_str parameters = yon_config_get_save_parameters_by_key(&size,part_format_parameter,part_label_parameter,part_fs_type_parameter,device_parameter,part_parameter,NULL); if (parameters){ char *command_parameters = yon_char_parsed_to_string(parameters,size," -- "); char *command = yon_char_unite(ubconfig_dull_command,"--target system ",command_parameters,NULL); @@ -144,7 +144,7 @@ int yon_install_same_partition_save(main_window *widgets){ char *part; gtk_tree_model_get(model,&iter,0,&part,-1); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"part"); - yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,device); + yon_config_register(device_parameter,device_parameter_command,device); yon_config_register(part_parameter,part_parameter_command,part); if (gtk_switch_get_active(GTK_SWITCH(widgets->SameInstallationFormatSwitch))){ @@ -171,7 +171,7 @@ int yon_install_same_partition_save(main_window *widgets){ } if (!main_config.configure_mode){ int size; - config_str parameters = yon_config_get_save_parameters_by_key(&size,part_format_parameter,part_size_parameter,part_label_parameter,part_fs_type_parameter,AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_DEVICE,part_parameter,NULL); + config_str parameters = yon_config_get_save_parameters_by_key(&size,part_format_parameter,part_size_parameter,part_label_parameter,part_fs_type_parameter,AUTOINSTALL_TYPE_INSTALL,device_parameter,part_parameter,NULL); if (parameters){ char *command_parameters = yon_char_parsed_to_string(parameters,size," -- "); char *command = yon_char_unite(ubconfig_dull_command,"--target system ",command_parameters,NULL); @@ -354,6 +354,7 @@ void on_device_selection_changed(GtkWidget *self, main_window *widgets){ void yon_devices_setup(main_window *widgets){ GtkTreeIter iter; gtk_list_store_clear(widgets->DevicesList); + gtk_list_store_clear(widgets->PartitionsList); // int size; // config_str parameters = NULL; // parameters = yon_config_load(yon_debug_output("%s\n",get_devices_command),&size); @@ -475,7 +476,7 @@ void yon_install_init(main_window *widgets, enum YON_PAGES page){ default:return; } - char *device = config(AUTOINSTALL_DEVICE); + char *device = config(device_parameter); char *part = config(part_parameter); if (!yon_char_is_empty(device)){ diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index 06e60bc..e205f8c 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -468,8 +468,6 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){ yon_packages_tab_init(widgets); break; case YON_PAGE_INSTALL_ADVANCED: - yon_install_advanced_init(widgets); - __attribute__((fallthrough)); case YON_PAGE_INSTALL_COMMON: case YON_PAGE_INSTALL_SEPARATE: case YON_PAGE_INSTALL_SAME_PARTITION: diff --git a/source/ubinstall-gtk-separate.c b/source/ubinstall-gtk-separate.c index 1fc8930..4a8aeb4 100644 --- a/source/ubinstall-gtk-separate.c +++ b/source/ubinstall-gtk-separate.c @@ -16,7 +16,7 @@ int yon_install_options_save(GtkWidget *device_tree, GtkWidget *part_tree,char * char *cur_device, *cur_section; gtk_tree_model_get(model,&iter,0,&cur_device,-1); gtk_tree_model_get(model2,&itar,0,&cur_section,-1); - yon_config_register(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_command,cur_device); + yon_config_register(device_parameter,device_parameter_command,cur_device); yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,mode); yon_config_register(part_parameter,part_parameter_command,cur_section); @@ -24,7 +24,7 @@ int yon_install_options_save(GtkWidget *device_tree, GtkWidget *part_tree,char * if(cur_device) free(cur_device); if (!main_config.configure_mode){ int size; - config_str parameters = yon_config_get_save_parameters_by_key(&size,AUTOINSTALL_DEVICE,AUTOINSTALL_TYPE_INSTALL,part_parameter,NULL); + config_str parameters = yon_config_get_save_parameters_by_key(&size,device_parameter,AUTOINSTALL_TYPE_INSTALL,part_parameter,NULL); if (parameters){ char *command_parameters = yon_char_parsed_to_string(parameters,size," -- "); char *command = yon_char_unite(ubconfig_dull_command,"--target system ",command_parameters,NULL); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 8c229be..af3840e 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -162,8 +162,8 @@ layout && /description:/ {\ #define AUTOINSTALL_TYPE_INSTALL "AUTOINSTALL[install_type]" #define AUTOINSTALL_TYPE_INSTALL_command "ubconfig --source global get [autoinstall] AUTOINSTALL[install_type]" -#define AUTOINSTALL_DEVICE "AUTOINSTALL[device]" -#define AUTOINSTALL_DEVICE_command "ubconfig --source global get [autoinstall] AUTOINSTALL[device]" +#define device_parameter "AUTOINSTALL[device]" +#define device_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[device]" #define part_parameter "AUTOINSTALL[part]" #define part_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part]" @@ -311,14 +311,14 @@ layout && /description:/ {\ #define install_common_parameters \ AUTOINSTALL_TYPE_INSTALL, \ - AUTOINSTALL_DEVICE, \ + device_parameter, \ part_format_parameter, \ part_label_parameter, \ part_fs_type_parameter #define install_part_parameters \ AUTOINSTALL_TYPE_INSTALL, \ - AUTOINSTALL_DEVICE, \ + device_parameter, \ part_format_parameter, \ part_fs_label_parameter, \ part_parameter, \ @@ -327,7 +327,7 @@ layout && /description:/ {\ #define install_next_parameters \ AUTOINSTALL_TYPE_INSTALL, \ - AUTOINSTALL_DEVICE, \ + device_parameter, \ part_format_parameter, \ part_fs_label_parameter, \ part_parameter, \ @@ -336,7 +336,7 @@ layout && /description:/ {\ #define install_advanced_parameters \ AUTOINSTALL_TYPE_INSTALL, \ - AUTOINSTALL_DEVICE, \ + device_parameter, \ part_format_parameter, \ part_label_parameter, \ part_parameter, \ @@ -345,12 +345,12 @@ layout && /description:/ {\ #define install_grub_install_update_parameters \ AUTOINSTALL_TYPE_INSTALL, \ - AUTOINSTALL_DEVICE, \ + device_parameter, \ part_parameter #define install_system_only_parameters \ AUTOINSTALL_TYPE_INSTALL, \ - AUTOINSTALL_DEVICE, \ + device_parameter, \ part_format_parameter, \ part_label_parameter, \ part_parameter, \ @@ -360,7 +360,7 @@ layout && /description:/ {\ #define install_userdata_only_parameters \ AUTOINSTALL_TYPE_INSTALL, \ - AUTOINSTALL_DEVICE, \ + device_parameter, \ part_format_parameter, \ part_label_parameter, \ part_parameter, \ @@ -1531,4 +1531,6 @@ void on_pacman_search_enter(GtkEntry *self, main_window *widgets); gboolean yon_log_scroll(log_window *window); gboolean on_log_window_exit(GtkWidget *,GdkEvent*, log_window *window); void yon_modules_missed_func(main_window *widgets); -void yon_scroll_block_for_builder(GtkBuilder *builder); \ No newline at end of file +void yon_scroll_block_for_builder(GtkBuilder *builder); +void yon_advanced_device_choose(main_window *widgets, const char *device); +void yon_advanced_part_choose(main_window *widgets, const char *part); \ No newline at end of file -- 2.35.1 From 10b822f7687a191a9a66b4b25d4858dd49227b0b Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Thu, 26 Feb 2026 18:30:08 +0600 Subject: [PATCH 2/3] WIP advanced installation rework --- source/ubinstall-gtk-advanced.c | 2144 ++++++++++++++------------ source/ubinstall-gtk-installation.c | 8 +- source/ubinstall-gtk-page-switch.c | 2 +- source/ubinstall-gtk.c | 6 +- source/ubinstall-gtk.h | 67 +- ubinstall-gtk-keyboard-layouts.glade | 6 +- ubinstall-gtk.glade | 3 + 7 files changed, 1225 insertions(+), 1011 deletions(-) diff --git a/source/ubinstall-gtk-advanced.c b/source/ubinstall-gtk-advanced.c index 0df81b3..8ba3949 100644 --- a/source/ubinstall-gtk-advanced.c +++ b/source/ubinstall-gtk-advanced.c @@ -3,958 +3,1217 @@ #define toggled_icon_name "com.ublinux.libublsettingsui-gtk3.toggled-symbolic" #define untoggled_icon_name "com.ublinux.libublsettingsui-gtk3.untoggled-symbolic" -advanced_section *yon_advanced_section_new(); -void yon_advanced_section_remove(); - -int sections_size=0; -advanced_section *sections[2] = {NULL}; - -advanced_section *yon_advanced_section_new(){ - if (sections_size>=2) return NULL; - advanced_section *section = malloc(sizeof(advanced_section)); - memset(section,0,sizeof(advanced_section)); - if (!sections_size){ - section->sys_section=1; - section->user_section=1; - } else { - section->sys_section=0; - section->user_section=1; - sections[0]->sys_section=1; - sections[0]->user_section=0; - } - return section; -} - -void yon_advanced_section_remove_all(){ - if (sections[0]){ - free(sections[0]); - sections[0]=NULL; - } - if (sections[1]){ - free(sections[1]); - sections[1]=NULL; - } - sections_size=0; -} - -void yon_advanced_section_remove_by_name(char *part){ - int pos = yon_advanced_section_get(part); - switch(pos){ - case 0: - if (sections[0]){ - free(sections[0]); - if (sections[1]){ - sections[0]=sections[1]; - sections[1]=NULL; - } else { - sections[0]=NULL; - } - sections_size--; - } - break; - case 1: - if (sections[1]){ - free(sections[1]); - sections[1]=NULL; - sections_size--; - } - break; - default: return; - } -} -void yon_advanced_section_remove(advanced_partition *part){ - int pos = yon_advanced_section_get_by_part(part); - switch(pos){ - case 0: - if (sections[0]){ - free(sections[0]); - if (sections[1]){ - sections[0]=sections[1]; - sections[1]=NULL; - } else { - sections[0]=NULL; - } - sections_size--; - } - break; - case 1: - if (sections[1]){ - free(sections[1]); - sections[1]=NULL; - sections_size--; - } - break; - default:return; - } -} +// advanced_section *yon_advanced_section_new(); +// void yon_advanced_section_remove(); + +// int sections_size=0; +// advanced_section *sections[2] = {NULL}; + +// advanced_section *yon_advanced_section_new(){ +// if (sections_size>=2) return NULL; +// advanced_section *section = malloc(sizeof(advanced_section)); +// memset(section,0,sizeof(advanced_section)); +// if (!sections_size){ +// section->sys_section=1; +// section->user_section=1; +// } else { +// section->sys_section=0; +// section->user_section=1; +// section->sys_section=1; +// section->user_section=0; +// } +// return section; +// } + +// void yon_advanced_section_remove_all(){ +// if (sections[0]){ +// free(sections[0]); +// sections[0]=NULL; +// } +// if (sections[1]){ +// free(sections[1]); +// sections[1]=NULL; +// } +// sections_size=0; +// } + +// void yon_advanced_section_remove_by_name(char *part){ +// int pos = yon_advanced_section_get(part); +// switch(pos){ +// case 0: +// if (sections[0]){ +// free(sections[0]); +// if (sections[1]){ +// sections[0]=sections[1]; +// sections[1]=NULL; +// } else { +// sections[0]=NULL; +// } +// sections_size--; +// } +// break; +// case 1: +// if (sections[1]){ +// free(sections[1]); +// sections[1]=NULL; +// sections_size--; +// } +// break; +// default: return; +// } +// } +// void yon_advanced_section_remove(advanced_part_widgets *part){ +// int pos = yon_advanced_section_get_by_part(part); +// switch(pos){ +// case 0: +// if (sections[0]){ +// free(sections[0]); +// if (sections[1]){ +// sections[0]=sections[1]; +// sections[1]=NULL; +// } else { +// sections[0]=NULL; +// } +// sections_size--; +// } +// break; +// case 1: +// if (sections[1]){ +// free(sections[1]); +// sections[1]=NULL; +// sections_size--; +// } +// break; +// default:return; +// } +// } + +// int yon_advanced_section_get_by_part(advanced_part_widgets *part){ +// if (!part) return -1; +// if (sections_size>0&§ions[0]->partition_widgets==part){ +// return 0; +// } else if (sections_size>1&§ions[1]->partition_widgets==part){ +// return 1; +// } +// return -1; +// } + +// int yon_advanced_section_get(char *partition){ +// if (yon_char_is_empty(partition)) return -1; +// if (sections_size>0&&!strcmp(sections[0]->part_source==PART_SOURCE_PART?sections[0]->partition:sections[0]->device,partition)){ +// return 0; +// } else if (sections_size>1&&!strcmp(sections[1]->part_source==PART_SOURCE_PART?sections[1]->partition:sections[1]->device,partition)){ +// return 1; +// } +// return -1; +// } + +// void yon_advanced_partition_set_from_section(advanced_part_widgets *part, advanced_section *section){ +// if (part&§ion){ +// gtk_label_set_text(GTK_LABEL(part->SectionLabel),section->part_source==PART_SOURCE_PART?section->partition:section->device); +// part->part = yon_char_new(section->partition); +// part->device = yon_char_new(section->device); +// if (!yon_char_is_empty(part->part)) part->part_type = ADVANCED_PART_NEW; +// else part->part_type = ADVANCED_PART_EXISTING; +// if (section->format){ +// gtk_combo_box_set_active(GTK_COMBO_BOX(part->FormatCombo),section->format); +// if (section->size){ +// gtk_spin_button_set_value(GTK_SPIN_BUTTON(part->SizeSpin),section->size); +// gtk_combo_box_set_active(GTK_COMBO_BOX(part->SizeCombo),yon_get_size_get_from_letter(section->size_letter)-1); +// } +// if (section->part_label){ +// gtk_entry_set_text(GTK_ENTRY(part->PartLabelEntry),section->part_label); +// } +// if (section->fs_label) +// gtk_entry_set_text(GTK_ENTRY(part->FileSystemLabelEntry),section->fs_label); +// if (!yon_char_is_empty(section->fs_type)){ +// gtk_combo_box_set_active_id(GTK_COMBO_BOX(part->FileSystemTypeCombo),section->fs_type); +// } +// if (!yon_char_is_empty(section->encryption)){ +// gtk_combo_box_set_active_id(GTK_COMBO_BOX(part->EncryptionCombo),section->encryption); +// gtk_entry_set_text(GTK_ENTRY(part->EncryptionEntry),section->encryption_password); +// } +// } +// } +// } + +// void yon_advanced_update(main_window *widgets){ +// yon_advanced_partition_clear(widgets); +// int virtual_found = 0; +// for (int i=0;ipartition_widgets) sections[i]->partition_widgets = NULL; +// sections[i]->partition_widgets = part; +// g_signal_connect(G_OBJECT(part->RemoveButton),"clicked",G_CALLBACK(on_advanced_part_remove),widgets); +// g_signal_connect(G_OBJECT(part->SystemSectionToggle),"clicked",G_CALLBACK(on_advanced_section_toggled),widgets); +// g_signal_connect(G_OBJECT(part->UserDataSectionToggle),"clicked",G_CALLBACK(on_advanced_section_toggled),widgets); +// // g_signal_connect(G_OBJECT(part->SizeCombo),"changed",G_CALLBACK(on_advanced_size_changed),widgets); +// if (i==0){ +// gtk_widget_set_sensitive(part->SystemSectionToggle,0); +// gtk_widget_set_sensitive(part->UserDataSectionToggle,0); +// GtkWidget *SystemImage = gtk_button_get_image(GTK_BUTTON(part->SystemSectionToggle)); +// GtkWidget *UserImage = gtk_button_get_image(GTK_BUTTON(part->UserDataSectionToggle)); +// gtk_image_set_from_icon_name(GTK_IMAGE(SystemImage),toggled_icon_name,GTK_ICON_SIZE_BUTTON); +// gtk_image_set_from_icon_name(GTK_IMAGE(UserImage),toggled_icon_name,GTK_ICON_SIZE_BUTTON); +// } +// yon_advanced_partition_set_from_section(part,sections[i]); +// // yon_advanced_set_max_size_from_partition(part,widgets); +// gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); +// g_signal_handlers_block_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); +// if (!virtual_found&>k_combo_box_set_active_id(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo),sections[i]->part_source==PART_SOURCE_PART?sections[i]->partition:sections[i]->device)){ +// virtual_found=1; +// } +// g_signal_handlers_unblock_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); + +// part->part_type = ADVANCED_PART_EXISTING; +// } +// if (!virtual_found||!sections_size) { +// g_signal_handlers_block_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); +// gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo),0); +// g_signal_handlers_unblock_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); +// } +// yon_advanced_section_update(widgets); +// GtkTreeIter itar; +// for_iter(GTK_TREE_MODEL(widgets->PartitionsList),&itar){ +// int status; +// char *target; +// gtk_tree_model_get(GTK_TREE_MODEL(widgets->PartitionsList),&itar,0,&target,7,&status,-1); +// if (!((sections_size>0&&!strcmp(target,sections[0]->part_source==PART_SOURCE_PART?sections[0]->partition:sections[0]->device))||(sections_size>1&&!strcmp(target,sections[1]->part_source==PART_SOURCE_PART?sections[1]->partition:sections[1]->device)))){ +// gtk_list_store_set(widgets->PartitionsList,&itar,7,0,-1); +// } +// } +// if (sections_size>=2){ +// gtk_widget_hide(widgets->AdvancedAddButton); +// } else { +// gtk_widget_show(widgets->AdvancedAddButton); + +// } +// } + +// void on_advanced_partition_create(GtkWidget *, main_window *widgets){ +// int found = 0; +// GtkTreeIter iter, *last_unvalid = NULL; +// GtkTreeModel *model; +// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->AdvancedDeviceTree)),&model,&iter)){ +// char *target; +// int active; +// gtk_tree_model_get(GTK_TREE_MODEL(widgets->DevicesList),&iter,0,&target,5,&active,-1); +// if (active){ +// if (!yon_advanced_section_get(target)){ +// last_unvalid = gtk_tree_iter_copy(&iter); +// } else { +// found=1; +// if (sections_size==2) return; +// advanced_section *section = yon_advanced_section_new(); +// section->part_source = PART_SOURCE_DEVICE; +// section->device = target; +// section->partition = NULL; +// sections[sections_size]=section; +// sections_size++; +// } +// } +// } +// if (!found&&last_unvalid){ +// char *target; +// int active; +// gtk_tree_model_get(GTK_TREE_MODEL(widgets->DevicesList),last_unvalid,0,&target,5,&active,-1); + +// if (sections_size==2) return; +// advanced_section *section = yon_advanced_section_new(); +// section->part_source = PART_SOURCE_DEVICE; +// section->device = target; +// section->partition = NULL; +// sections[sections_size]=section; +// sections_size++; +// } +// yon_advanced_update(widgets); +// } + +// void on_advanced_partition_add(GtkWidget *, char *path, main_window *widgets){ +// GtkTreeIter iter; +// if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->PartitionsList),&iter,path)){ +// char *target, *device; +// int status; +// gtk_tree_model_get(GTK_TREE_MODEL(widgets->PartitionsList),&iter,0,&target,7,&status,9,&device,-1); +// gtk_list_store_set(widgets->DevicesList,&iter,7,!status,-1); +// if (!status){ +// if (sections_size==2) return; +// advanced_section *section = yon_advanced_section_new(); +// section->part_source = PART_SOURCE_PART; +// section->device = NULL; +// section->partition = target = device; +// sections[sections_size]=section; +// sections_size++; +// } else { +// yon_advanced_section_remove_by_name(target); +// } +// } +// yon_advanced_update(widgets); + +// } + +// void yon_advanced_device_choose(main_window *widgets, const char *device){ +// if (yon_char_is_empty(device)) return; +// GtkTreeIter iter; +// GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList); +// for_iter(model, &iter){ +// char *target; +// gtk_tree_model_get(model,&iter,0,&target,-1); +// if (!yon_char_is_empty(target)&&strstr(device,target)){ +// char *path = gtk_tree_model_get_string_from_iter(model,&iter); +// g_signal_emit_by_name(G_OBJECT(widgets->AdvancedDeviceChosenCell),"toggled",path,NULL); +// } +// } +// } + +// void yon_advanced_part_choose(main_window *widgets, const char *part){ +// if (yon_char_is_empty(part)) return; +// GtkTreeIter iter; +// GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); +// for_iter(model, &iter){ +// char *target; +// gtk_tree_model_get(model,&iter,0,&target,-1); +// if (!yon_char_is_empty(target)&&strstr(part,target)){ +// char *path = gtk_tree_model_get_string_from_iter(model,&iter); +// g_signal_emit_by_name(G_OBJECT(widgets->AdvancedPartChosenCell),"toggled",path,NULL); +// } +// } +// } + +// void yon_install_advanced_init(main_window *widgets){ +// yon_advanced_partition_clear(widgets); +// g_signal_handlers_block_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); +// gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->AdvancedVirtualDeviceCombo)); +// gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->AdvancedVirtualDeviceCombo),NO_LABEL); +// gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo),0); +// int size; +// config_str vmf_file = yon_resource_open_file(vfs_list_path,&size); +// for (int i=1;iAdvancedVirtualDeviceCombo),parsed[2],parsed[0]); +// yon_char_parsed_free(parsed,parsed_size); +// } +// yon_char_parsed_free(vmf_file,size); +// g_signal_handlers_unblock_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); +// char *device = config(device_parameter); +// char *parts = config(part_parameter); +// char *part_size = config(part_size_parameter); +// char *part_label = config(part_label_parameter); +// char *part_fs_type = config(part_fs_type_parameter); +// char *part_fs_label = config(part_fs_label_parameter); +// char *part_crypt = config(part_crypt_parameter); +// char *part_format = config(part_format_parameter); +// char *boot = config(boot_parameter); +// char *swap = config(swap_parameter); +// char *swap_size = config(swap_size_parameter); +// if (yon_char_is_empty(device)&&yon_char_is_empty(parts)) return; +// { +// int size; +// config_str device_parsed = yon_char_parse(device,&size,","); +// if (size>0&&!yon_char_is_empty(device_parsed[0])){ +// yon_advanced_device_choose(widgets,device_parsed[0]); +// while(gtk_events_pending()) gtk_main_iteration(); +// sections[0] = yon_advanced_section_new(); +// sections_size++; +// on_advanced_partition_create(NULL,widgets); +// sections[0]->device=device_parsed[0]; +// }; +// if (size>1&&!yon_char_is_empty(device_parsed[1])){ +// yon_advanced_device_choose(widgets,device_parsed[1]); +// while(gtk_events_pending()) gtk_main_iteration(); +// sections[1] = yon_advanced_section_new(); +// on_advanced_partition_create(NULL,widgets); +// sections_size++; +// sections[1]->device=device_parsed[1]; +// } +// if (size) free(device_parsed); +// } +// { +// int size; +// config_str part_parsed = yon_char_parse(parts,&size,","); +// if (size>0&&!yon_char_is_empty(part_parsed[0])){ +// yon_advanced_device_choose(widgets,part_parsed[0]); +// yon_advanced_part_choose(widgets,part_parsed[0]); +// sections[0] = yon_advanced_section_new(); +// while(gtk_events_pending()) gtk_main_iteration(); +// sections[0]->partition=part_parsed[0]; +// }; +// if (size>1&&!yon_char_is_empty(part_parsed[1])){ +// yon_advanced_device_choose(widgets,part_parsed[1]); +// yon_advanced_part_choose(widgets,part_parsed[1]); +// sections[1] = yon_advanced_section_new(); +// while(gtk_events_pending()) gtk_main_iteration(); +// sections[1]->device=part_parsed[1]; +// } +// if (size) free(part_parsed); +// } +// { +// if (!yon_char_is_empty(part_size)){ +// int size; +// config_str parsed = yon_char_parse(part_size,&size,","); +// if (size>0&&!yon_char_is_empty(parsed[0])){ +// sections[0]->size = atol(parsed[0]); +// sections[0]->size_letter = parsed[0][strlen(parsed[0])-1]; +// if (size>1&&!yon_char_is_empty(parsed[1])){ + +// sections[1]->size = atol(parsed[1]); +// sections[1]->size_letter = parsed[1][strlen(parsed[1])-1]; +// } +// } +// free(parsed); +// } +// if (!yon_char_is_empty(part_label)){ +// int size; +// config_str parsed = yon_char_parse(part_label,&size,","); +// if (size>0&&!yon_char_is_empty(parsed[0])){ +// sections[0]->part_label = parsed[0]; +// if (size>1&&!yon_char_is_empty(parsed[1])){ +// sections[1]->part_label = parsed[1]; +// } +// } +// free(parsed); +// } +// if (!yon_char_is_empty(part_fs_type)){ +// int size; +// config_str parsed = yon_char_parse(part_fs_type,&size,","); +// if (size>0&&!yon_char_is_empty(parsed[0])){ +// sections[0]->fs_type = parsed[0]; +// if (size>1&&!yon_char_is_empty(parsed[1])){ +// sections[1]->fs_type = parsed[1]; +// } +// } +// free(parsed); +// } +// if (!yon_char_is_empty(part_fs_label)){ +// int size; +// config_str parsed = yon_char_parse(part_fs_label,&size,","); +// if (size>0&&!yon_char_is_empty(parsed[0])){ +// sections[0]->fs_label = parsed[0]; +// if (size>1&&!yon_char_is_empty(parsed[1])){ +// sections[1]->fs_label = parsed[1]; +// } +// } +// free(parsed); +// } +// if (!yon_char_is_empty(part_crypt)){ +// int size; +// config_str parsed = yon_char_parse(part_crypt,&size,","); +// if (size>0&&!yon_char_is_empty(parsed[0])){ +// sections[0]->encryption = parsed[0]; +// if (size>1&&!yon_char_is_empty(parsed[1])){ +// sections[1]->encryption = parsed[1]; +// } +// } +// free(parsed); +// } +// if (!yon_char_is_empty(part_format)){ +// int size; +// config_str parsed = yon_char_parse(part_format,&size,","); +// if (size>0&&!yon_char_is_empty(parsed[0])){ +// if (!strcmp(parsed[0],"yes")){ +// sections[0]->format = 2; +// } else if (!strcmp(parsed[0],"no")){ +// sections[0]->format = 1; +// } +// if (size>1&&!yon_char_is_empty(parsed[1])){ +// if (!strcmp(parsed[1],"yes")){ +// sections[1]->format = 2; +// } else if (!strcmp(parsed[1],"no")){ +// sections[1]->format = 1; +// } +// } +// } +// free(parsed); +// } +// if (!yon_char_is_empty(boot)){ + +// } +// if (!yon_char_is_empty(swap)){ -int yon_advanced_section_get_by_part(advanced_partition *part){ - if (!part) return -1; - if (sections_size>0&§ions[0]->partition_widgets==part){ - return 0; - } else if (sections_size>1&§ions[1]->partition_widgets==part){ - return 1; - } - return -1; -} +// } +// if (!yon_char_is_empty(swap_size)){ -int yon_advanced_section_get(char *partition){ - if (yon_char_is_empty(partition)) return -1; - if (sections_size>0&&!strcmp(sections[0]->part_source==PART_SOURCE_PART?sections[0]->partition:sections[0]->device,partition)){ - return 0; - } else if (sections_size>1&&!strcmp(sections[1]->part_source==PART_SOURCE_PART?sections[1]->partition:sections[1]->device,partition)){ - return 1; - } - return -1; -} - -void yon_advanced_partition_set_from_section(advanced_partition *part, advanced_section *section){ - if (part&§ion){ - gtk_label_set_text(GTK_LABEL(part->SectionLabel),section->part_source==PART_SOURCE_PART?section->partition:section->device); - part->part = yon_char_new(section->partition); - part->device = yon_char_new(section->device); - if (!yon_char_is_empty(part->part)) part->part_type = ADVANCED_PART_NEW; - else part->part_type = ADVANCED_PART_EXISTING; - if (section->format){ - gtk_combo_box_set_active(GTK_COMBO_BOX(part->FormatCombo),section->format); - if (section->size){ - gtk_spin_button_set_value(GTK_SPIN_BUTTON(part->SizeSpin),section->size); - gtk_combo_box_set_active(GTK_COMBO_BOX(part->SizeCombo),yon_get_size_get_from_letter(section->size_letter)-1); - } - if (section->part_label){ - gtk_entry_set_text(GTK_ENTRY(part->PartLabelEntry),section->part_label); - } - if (section->fs_label) - gtk_entry_set_text(GTK_ENTRY(part->FileSystemLabelEntry),section->fs_label); - if (!yon_char_is_empty(section->fs_type)){ - gtk_combo_box_set_active_id(GTK_COMBO_BOX(part->FileSystemTypeCombo),section->fs_type); - } - if (!yon_char_is_empty(section->encryption)){ - gtk_combo_box_set_active_id(GTK_COMBO_BOX(part->EncryptionCombo),section->encryption); - gtk_entry_set_text(GTK_ENTRY(part->EncryptionEntry),section->encryption_password); - } - } - } -} +// } + +// } +// yon_advanced_update(widgets); +// } + +// void on_install_advanced_partition_chosen(GtkCellRenderer*, gchar *path, main_window *widgets){ +// GtkTreeIter iter; +// GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); + +// int chosen = 0; +// chosen = yon_advanced_get_part_size(widgets); + +// gtk_tree_model_get_iter_from_string(model,&iter,path); +// int status; +// char *target_part, *device; +// gulong part_size; +// gtk_tree_model_get(model,&iter,0,&target_part,5,&part_size,7,&status,9,&device,-1); + +// if (!status){ +// if (chosen<2){ +// gtk_list_store_set(widgets->PartitionsList,&iter,7,1,-1); +// chosen++; +// advanced_section *section = yon_advanced_section_new(); +// section->part_source = PART_SOURCE_PART; +// section->partition = target_part; +// section->device = NULL; +// section->full_part_size = part_size; +// sections[sections_size]=section; +// sections_size++; +// } +// } else { +// yon_advanced_section_remove_by_name(target_part); +// gtk_list_store_set(widgets->PartitionsList,&iter,7,0,-1); +// } +// yon_advanced_update(widgets); +// } + +// void yon_advanced_parts_update(main_window *widgets){ +// int size; +// config_str partitions; +// partitions = yon_config_load(yon_debug_output("%s\n",get_parts_and_devices_command),&size); +// for (int i=0;iDevicesList); +// GtkTreeIter iter; +// for_iter (model,&iter){ +// char *disk_path; +// int status; +// gtk_tree_model_get(model,&iter,0,&disk_path,5,&status,-1); +// if (!status) continue; + +// for (int i=0;i2){ +// char sizemod='\0'; +// capacity_long = atol(parsed[2]); + +// char *temp = yon_char_from_double(yon_size_long_convert_automatic(capacity_long,&sizemod)); +// capacity = yon_char_append_c(temp,sizemod); +// free(temp); +// } +// if (parsed_size>7&&!yon_char_is_empty(parsed[7])){ +// char sizemod='\0'; +// free_space_long = capacity_long-atol(parsed[7]); +// char *temp = yon_char_from_double(yon_size_long_convert_automatic(free_space_long,&sizemod)); +// free_space = yon_char_append_c(temp,sizemod); +// free(temp); +// } +// if (parsed_size>3){ +// fs_type = parsed[3]; +// } +// if (parsed_size>4){ +// label = parsed[4]; +// } + +// GtkTreeIter itar; +// gtk_list_store_append(widgets->PartitionsList,&itar); +// gtk_list_store_set(widgets->PartitionsList,&itar,0,name,1,capacity,2,free_space,3,fs_type,4,label,5,capacity_long,6,free_space_long,8,1,9,disk_path,-1); +// } +// yon_char_parsed_free(parsed,parsed_size); +// } +// } +// } +// yon_char_parsed_free(partitions,size); +// } + +// void yon_advanced_set_max_size_from_partition(advanced_part_widgets *part, main_window *widgets){ +// char *cur_name = part->part_type == ADVANCED_PART_EXISTING?part->device:part->part; +// GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); +// GtkTreeIter iter; +// long selected_size; + +// for_iter(model,&iter){ +// char *target; +// gtk_tree_model_get(model,&iter,part->part_type == ADVANCED_PART_EXISTING?9:0,&target,-1); +// if (!strcmp(target,cur_name)){ +// gtk_tree_model_get(model,&iter,6,&selected_size,-1); +// if (!selected_size){ +// gtk_tree_model_get(model,&iter,5,&selected_size,-1); +// } +// if (selected_size){ +// GtkAdjustment *adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(part->SizeSpin)); +// const char *sizemod = gtk_combo_box_get_active_id(GTK_COMBO_BOX(part->SizeCombo)); +// double new_size = yon_size_long_convert_to_mod(selected_size,sizemod[0]); +// gtk_adjustment_set_upper(adj,new_size); +// gdouble old_value = gtk_adjustment_get_value(adj); +// if (old_value>new_size){ +// gtk_adjustment_set_value(adj,new_size); +// } +// } +// } +// } +// } + +// void on_advanced_size_changed(GtkWidget *,main_window *){ +// // advanced_part_widgets *part = g_object_get_data(G_OBJECT(self),"advanced_part_widgets"); +// // yon_advanced_set_max_size_from_partition(part,widgets); +// } + +// void on_install_advanced_device_chosen(GtkCellRenderer *, gchar *path, main_window *widgets){ +// gtk_list_store_clear(widgets->PartitionsList); +// yon_advanced_section_remove_all(); +// GtkTreeIter iter; +// GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList); +// // chosen = yon_advanced_get_part_size(widgets); + +// if (gtk_tree_model_get_iter_from_string(model,&iter,path)){ +// int status; +// char *target; +// gtk_tree_model_get(model,&iter,0,&target,5,&status,-1); +// if (!status){ // checks +// gtk_list_store_set(widgets->DevicesList,&iter,5,!status,-1); + +// } else { // unchecks +// gtk_list_store_set(widgets->DevicesList,&iter,5,!status,-1); +// for_iter (model,&iter){ +// gtk_list_store_set(widgets->DevicesList,&iter,6,1,-1); +// } +// } +// } +// int chosen_amount = 0; +// for_iter(model,&iter){ +// int status; +// gtk_tree_model_get(model,&iter,5,&status,-1); +// if (status)chosen_amount++; +// } +// // gtk_widget_set_sensitive(widgets->AdvancedVirtualDeviceCombo,chosen_amount>=2); +// // if (chosen) gtk_widget_set_sensitive(widgets->AdvancedAddButton,1); +// // else gtk_widget_set_sensitive(widgets->AdvancedAddButton,0); +// yon_advanced_parts_update(widgets); +// yon_advanced_update(widgets); +// } + +// void on_advanced_password_clicked(GtkWidget *, advanced_part_widgets *part){ +// yon_password_window *window = yon_password_open(GTK_ENTRY(part->EncryptionEntry)); +// gtk_widget_hide(gtk_widget_get_parent(window->EncryptionCombo)); +// gtk_widget_hide(window->HashBox); +// gtk_widget_hide(window->NoEncriptionCheck); +// } + +// void yon_advanced_partition_clear(main_window *widgets){ +// GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); +// GList *iter; +// for (iter=list;iter;iter=iter->next){ +// advanced_part_widgets *part = g_object_get_data(G_OBJECT(iter->data),"advanced_part_widgets"); +// gtk_widget_destroy(GTK_WIDGET(iter->data)); +// free(part); +// } +// } + +// int yon_advanced_get_part_size(main_window *widgets){ +// int size = 0; +// GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); +// size = g_list_length(list); +// g_list_free(list); +// return size; +// } + +// void yon_advanced_section_update_section(advanced_part_widgets *part,GtkWidget *cur_toggle,main_window *widgets){ +// int systoggle = cur_toggle == part->SystemSectionToggle; +// advanced_section *section = sections[yon_advanced_section_get_by_part(part)]; +// g_signal_handlers_block_by_func(G_OBJECT(cur_toggle),G_CALLBACK(on_advanced_section_toggled),widgets); +// gboolean active = systoggle?section->sys_section:section->user_section; +// gtk_widget_set_sensitive(cur_toggle,!active); +// gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cur_toggle),active); +// g_signal_handlers_unblock_by_func(G_OBJECT(cur_toggle),G_CALLBACK(on_advanced_section_toggled),widgets); +// GtkWidget *compare_image = gtk_button_get_image(GTK_BUTTON(cur_toggle)); +// gtk_image_set_from_icon_name(GTK_IMAGE(compare_image),!active?untoggled_icon_name:toggled_icon_name,GTK_ICON_SIZE_BUTTON); +// } + +// void yon_advanced_section_update(main_window *widgets){ +// GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); +// GList *iter; +// for (iter=list;iter;iter=iter->next){ +// advanced_part_widgets *compare_part = g_object_get_data(G_OBJECT(iter->data),"advanced_part_widgets"); +// GtkWidget *cur_toggle = compare_part->SystemSectionToggle; +// yon_advanced_section_update_section(compare_part,cur_toggle,widgets); +// cur_toggle = compare_part->UserDataSectionToggle; +// yon_advanced_section_update_section(compare_part,cur_toggle,widgets); +// } +// } + +// void on_advanced_section_toggled(GtkWidget *self, main_window *widgets){ +// advanced_part_widgets *part = g_object_get_data(G_OBJECT(self),"advanced_part_widgets"); +// int pos = yon_advanced_section_get_by_part(part); +// if (self == part->SystemSectionToggle){ +// sections[pos]->sys_section = 1; +// if (sections[!pos]&§ions[pos]->user_section){ +// sections[pos]->user_section=0; +// sections[!pos]->user_section=1; +// } +// } else { +// sections[pos]->user_section = 1; +// if (sections[!pos]&§ions[pos]->sys_section){ +// sections[pos]->sys_section=0; +// sections[!pos]->sys_section=1; +// } +// } +// GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); +// GList *iter; +// for (iter=list;iter;iter=iter->next){ +// advanced_part_widgets *compare_part = g_object_get_data(G_OBJECT(iter->data),"advanced_part_widgets"); +// if (part != compare_part) { +// if (self == part->SystemSectionToggle){ +// sections[yon_advanced_section_get_by_part(compare_part)]->sys_section = 0; +// } else { +// sections[yon_advanced_section_get_by_part(compare_part)]->user_section = 0; +// } +// } +// } +// yon_advanced_section_update(widgets); +// } + +// int yon_advanced_save(main_window *widgets){ +// yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"custom"); +// char *devices[2] = {NULL}; +// char *parts[2] = {NULL}; +// char *part_size[2] = {NULL}; +// char *part_label[2] = {NULL}; +// char *fs_type[2] = {NULL}; +// char *fs_label[2] = {NULL}; +// char *encryption[2] = {NULL}; +// char *format[2] = {NULL}; +// if (!sections_size){ +// yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// return 0; +// } +// advanced_section *cur_section = sections[0]->sys_section?sections[0]:sections[1]; +// if (cur_section->part_source == PART_SOURCE_VIRTUAL){ + +// char *device = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo)); +// int size; +// config_str vfs_file = yon_resource_open_file(vfs_list_path,&size); +// config_str cur_device = NULL; +// for (int i=0;iDevicesList); +// int active_devices=0; +// for_iter(model,&iter){ +// int status; +// gtk_tree_model_get(model,&iter,5,&status,-1); +// if (status) active_devices++; +// } +// if (atoi(cur_device[3])>active_devices){ +// yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),COUNT_INVALID_LABEL(cur_device[3]),5,BACKGROUND_IMAGE_INFO_TYPE); +// yon_ubl_status_highlight_incorrect(widgets->AdvancedVirtualDeviceCombo); +// yon_char_parsed_free(cur_device,4); +// return 0; +// } + +// if (atoi(cur_device[4])%active_devices!=0){ +// yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),PARITY_INVALID_LABEL(cur_device[4]),5,BACKGROUND_IMAGE_INFO_TYPE); +// yon_ubl_status_highlight_incorrect(widgets->AdvancedVirtualDeviceCombo); +// yon_char_parsed_free(cur_device,4); +// return 0; +// } +// } +// } + +// if (cur_section->format==2){ +// format[0]="yes"; +// } else if (cur_section->format == 1){ +// format[0]="no"; +// } else { +// format[0]=NULL; +// } +// if (!yon_char_is_empty(cur_section->partition)){ +// if (!yon_char_is_empty(cur_section->partition)){ +// parts[0]=cur_section->partition; +// } else { +// parts[0]=""; +// } +// } else { +// devices[0]=cur_section->device; +// } +// if (cur_section->user_section){ +// if (!yon_char_is_empty(cur_section->device)){ +// if (!yon_char_is_empty(cur_section->partition)){ +// parts[1]=cur_section->partition; +// } else { +// parts[1]=""; +// } +// } else { +// devices[1]=cur_section->device; +// } +// } + +// if (cur_section->format==2){ +// if (cur_section->size&&yon_size_long_convert_to_mod(cur_section->full_part_size,cur_section->size_letter)>cur_section->size){ + +// char *size_str = yon_char_from_long(cur_section->size); +// char *sz_str = yon_char_append_c(size_str,cur_section->size_letter); +// part_size[0]=sz_str; +// } else { +// yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NOT_ENOUGH_SPACE_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// return 0; +// } +// if (!yon_char_is_empty(cur_section->part_label)){ +// part_label[0]=cur_section->part_label; +// } +// if (!yon_char_is_empty(cur_section->fs_type)){ +// fs_type[0]=cur_section->fs_type; +// } +// if (!yon_char_is_empty(cur_section->fs_label)){ +// fs_label[0]=cur_section->fs_label; +// } +// } +// if (sections_size>1){ +// cur_section = sections[0]->sys_section?sections[1]:sections[0]; + +// if (cur_section->format==2){ +// format[1]="yes"; +// } else if (cur_section->format==1){ +// format[1]="no"; +// } else { +// format[1] = NULL; +// } + +// devices[1]=cur_section->device; +// if (!yon_char_is_empty(cur_section->partition)){ +// parts[1]=cur_section->partition; +// } else { +// parts[1]=""; +// } + +// if (cur_section->format==2){ +// if (cur_section->size){ +// char *size_str = yon_char_from_long(cur_section->size); +// char *sz_str = yon_char_append_c(size_str,cur_section->size_letter); +// part_size[1]=sz_str; +// } +// if (!yon_char_is_empty(cur_section->part_label)){ +// part_label[1]=cur_section->part_label; +// } +// if (!yon_char_is_empty(cur_section->fs_type)){ +// fs_type[1]=cur_section->fs_type; +// } +// if (!yon_char_is_empty(cur_section->fs_label)){ +// fs_label[1]=cur_section->fs_label; +// } +// if (!yon_char_is_empty(cur_section->encryption)){ +// char *encrypt_str = yon_char_unite(cur_section->encryption,":",cur_section->encryption_password,NULL); +// encryption[1]=encrypt_str; +// } +// } +// } + +// if (devices[0]||devices[1]){ +// char *devices_str = yon_char_parsed_to_string_full(devices,2,","); +// yon_config_register(device_parameter,device_parameter_command,devices_str); +// } +// if (!yon_char_is_empty(parts[0])||!yon_char_is_empty(parts[1])){ +// char *parts_str = yon_char_parsed_to_string_full(parts,2,","); +// yon_config_register(part_parameter,part_parameter_command,parts_str); +// } else { +// yon_config_remove_by_key(part_parameter); +// } +// if (part_size[0]||part_size[1]){ +// char *part_size_str = yon_char_parsed_to_string_full(part_size,2,","); +// yon_config_register(part_size_parameter,part_size_parameter_command,part_size_str); +// } else { +// yon_config_remove_by_key(part_size_parameter); +// } +// if (part_label[0]||part_label[1]){ +// char *part_label_str = yon_char_parsed_to_string_full(part_label,2,","); +// yon_config_register(part_label_parameter,part_label_parameter_command,part_label_str); + +// } else { +// yon_config_remove_by_key(part_label_parameter); +// } +// if (fs_type[0]||fs_type[1]){ +// char *fs_type_str = yon_char_parsed_to_string_full(fs_type,2,","); +// yon_config_register(part_fs_type_parameter,part_fs_type_parameter_command,fs_type_str); + +// } else { +// yon_config_remove_by_key(part_fs_type_parameter); +// } +// if (fs_label[0]||fs_label[1]){ +// char *fs_label_str = yon_char_parsed_to_string_full(fs_label,2,","); +// yon_config_register(part_fs_label_parameter,part_fs_label_parameter_command,fs_label_str); + +// } else { +// yon_config_remove_by_key(part_fs_label_parameter); +// } +// if (encryption[0]||encryption[1]){ +// char *encryption_str = yon_char_parsed_to_string_full(encryption,2,","); +// yon_config_register(part_crypt_parameter,part_crypt_parameter_command,encryption_str); + +// } else { +// yon_config_remove_by_key(part_crypt_parameter); +// } +// if (format[0]||format[1]){ +// char *format_str = yon_char_parsed_to_string_full(format,2,","); +// yon_config_register(part_format_parameter,part_format_parameter_command,format_str); + +// } else { +// yon_config_remove_by_key(part_format_parameter); +// } +// if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedLoadTypeSwitch))){ +// char *boot = NULL; +// if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedBiosSectorSwitch))){ +// yon_char_append_element(boot,"bios","+"); +// } +// if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedEFISwitch))){ +// yon_char_append_element(boot,"efi","+"); + +// } +// if (!yon_char_is_empty(boot)){ +// yon_config_register(boot_parameter,boot_parameter_command,boot); +// } else { +// yon_config_remove_by_key(boot_parameter); +// } +// } else { +// yon_config_remove_by_key(boot_parameter); +// } +// if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapSwitch))){ +// if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapAutoSwitch))){ +// yon_config_register(swap_parameter,swap_parameter_command,"auto"); + +// } else if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapRamSwitch))){ +// yon_config_register(swap_parameter,swap_parameter_command,"yes"); +// yon_config_register(swap_size_parameter,swap_parameter_command,"ram"); + +// } else if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapFixedSwitch))){ +// yon_config_register(swap_parameter,swap_parameter_command,"yes"); +// long swap_size = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widgets->AdvancedSwapFixedSpin)); +// int size_letter = gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapFixedSizeSwitch)); +// char *swap_str = yon_char_from_long(swap_size); +// char *size_final = yon_char_unite(swap_str,size_letter?"G":"M",NULL); +// yon_config_register(swap_size_parameter,swap_parameter_command,size_final); +// } else { +// yon_config_remove_by_key(swap_parameter); +// yon_config_remove_by_key(swap_size_parameter); +// } +// } +// char *parameters = yon_config_get_all_info(); +// yon_debug_output("%s\n",parameters); +// return 1; +// } + + +// void yon_advanced_part_parameter_changed(GtkWidget *self, advanced_part_widgets *part){ +// advanced_section *section = sections[yon_advanced_section_get_by_part(part)]; +// if (self == part->SizeCombo||self == part->SizeSpin){ +// section->size = gtk_spin_button_get_value(GTK_SPIN_BUTTON(part->SizeSpin)); +// int size_id = gtk_combo_box_get_active(GTK_COMBO_BOX(part->SizeCombo)); +// section->size_letter = *yon_size_get_mod(size_id>-1?size_id:0); +// } else if (self == part->PartLabelEntry){ +// section->part_label = yon_char_new(gtk_entry_get_text(GTK_ENTRY(part->PartLabelEntry))); +// } else if (self == part->FileSystemTypeCombo){ +// if (!gtk_combo_box_get_active(GTK_COMBO_BOX(part->FileSystemTypeCombo))){ +// section->fs_type = NULL; +// } else { +// GList *list = gtk_container_get_children(GTK_CONTAINER(part->FileSystemTypeCombo)); +// section->fs_type = yon_char_new(gtk_entry_get_text(GTK_ENTRY(list->data))); +// g_list_free(list); +// } +// } else if (self == part->FileSystemLabelEntry){ +// section->fs_label = yon_char_new(gtk_entry_get_text(GTK_ENTRY(part->FileSystemLabelEntry))); +// } else if (self == part->EncryptionCombo||self == part->EncryptionEntry){ +// section->encryption = yon_char_new(gtk_combo_box_get_active_id(GTK_COMBO_BOX(part->EncryptionCombo))); +// section->encryption_password = yon_char_new(gtk_entry_get_text(GTK_ENTRY(part->EncryptionEntry))); +// } else if (self == part->FormatCombo){ +// section->format = gtk_combo_box_get_active(GTK_COMBO_BOX(part->FormatCombo)); +// } +// } + +// void on_format_changed(GtkWidget *self, advanced_part_widgets *part){ +// int active = gtk_combo_box_get_active(GTK_COMBO_BOX(self)); +// switch (active){ +// case 0: +// case 1: gtk_revealer_set_reveal_child(GTK_REVEALER(part->FormatRevealer),0); +// break; +// case 2: gtk_revealer_set_reveal_child(GTK_REVEALER(part->FormatRevealer),1); +// } +// yon_advanced_part_parameter_changed(self, part); +// } + +// advanced_part_widgets *yon_advanced_partition_new(){ +// advanced_part_widgets *part = new(advanced_part_widgets); +// GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_advanced_part); +// yon_scroll_block_for_builder(builder); +// part->MainBox = yon_gtk_builder_get_widget(builder,"MainBox"); +// part->SectionLabel = yon_gtk_builder_get_widget(builder,"SectionLabel"); +// part->SystemSectionToggle = yon_gtk_builder_get_widget(builder,"SystemSectionToggle"); +// part->UserDataSectionToggle = yon_gtk_builder_get_widget(builder,"UserDataSectionToggle"); +// part->RemoveButton = yon_gtk_builder_get_widget(builder,"RemoveButton"); +// part->FormatCombo = yon_gtk_builder_get_widget(builder,"FormatCombo"); +// part->SizeSpin = yon_gtk_builder_get_widget(builder,"SizeSpin"); +// part->SizeCombo = yon_gtk_builder_get_widget(builder,"SizeCombo"); +// part->PartLabelEntry = yon_gtk_builder_get_widget(builder,"PartLabelEntry"); +// part->FileSystemTypeCombo = yon_gtk_builder_get_widget(builder,"FileSystemTypeCombo"); +// part->FileSystemLabelEntry = yon_gtk_builder_get_widget(builder,"FileSystemLabelEntry"); +// part->EncryptionCombo = yon_gtk_builder_get_widget(builder,"EncryptionCombo"); +// part->EncryptionEntry = yon_gtk_builder_get_widget(builder,"EncryptionEntry"); +// part->EncryptionButton = yon_gtk_builder_get_widget(builder,"EncryptionButton"); +// part->FormatRevealer = yon_gtk_builder_get_widget(builder,"FormatRevealer"); +// part->order_iter = NULL; +// part->part = NULL; +// part->device = NULL; + +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"K",_("Kb")); +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"M",_("Mb")); +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"G",_("Gb")); +// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"T",_("Tb")); +// gtk_combo_box_set_active(GTK_COMBO_BOX(part->SizeCombo),0); + +// gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(part->FormatCombo),DEFAULT_LABEL); +// gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(part->FormatCombo),DO_NOT_FORMAT_LABEL); +// gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(part->FormatCombo),FORMAT_LABEL); +// gtk_combo_box_set_active(GTK_COMBO_BOX(part->FormatCombo),0); + +// g_signal_connect(G_OBJECT(part->EncryptionButton),"clicked",G_CALLBACK(on_advanced_password_clicked),part); +// g_signal_connect(G_OBJECT(part->EncryptionCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),part->EncryptionButton); +// g_signal_connect(G_OBJECT(part->EncryptionCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),part->EncryptionEntry); +// g_signal_connect(G_OBJECT(part->EncryptionEntry),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); +// g_signal_connect(G_OBJECT(part->FormatCombo),"changed",G_CALLBACK(on_format_changed),part); +// g_signal_connect(G_OBJECT(part->SizeCombo),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); +// g_signal_connect(G_OBJECT(part->SizeSpin),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); +// g_signal_connect(G_OBJECT(part->PartLabelEntry),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); +// g_signal_connect(G_OBJECT(part->FileSystemTypeCombo),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); +// g_signal_connect(G_OBJECT(part->FileSystemLabelEntry),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); +// g_signal_connect(G_OBJECT(part->EncryptionCombo),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); + +// yon_fs_type_setup(GTK_COMBO_BOX_TEXT(part->FileSystemTypeCombo)); + +// g_object_set_data(G_OBJECT(part->MainBox),"advanced_part_widgets",part); +// g_object_set_data(G_OBJECT(part->SizeCombo),"advanced_part_widgets",part); +// g_object_set_data(G_OBJECT(part->RemoveButton),"advanced_part_widgets",part); +// g_object_set_data(G_OBJECT(part->SystemSectionToggle),"advanced_part_widgets",part); +// g_object_set_data(G_OBJECT(part->UserDataSectionToggle),"advanced_part_widgets",part); + +// int size; +// config_str encryptions = yon_char_parsed_new(&size,encryptions_list,NULL); +// for (int i=0;iEncryptionCombo),encryptions[i],encryptions[i]); +// } +// yon_char_parsed_free(encryptions,size); +// return part; +// } + +// void on_advanced_part_remove(GtkWidget *self, main_window *widgets){ +// advanced_part_widgets *part = g_object_get_data(G_OBJECT(self),"advanced_part_widgets"); +// yon_advanced_section_remove(part); +// if (sections_size){ +// sections[0]->sys_section=1; +// sections[0]->user_section=1; +// } +// yon_advanced_update(widgets); + +// } + +// int yon_advanced_section_append(advanced_section *section){ +// if (sections_size==2) return -1; +// sections[sections_size] = section; +// sections_size++; +// return sections_size-1; +// } -void yon_advanced_update(main_window *widgets){ - yon_advanced_partition_clear(widgets); - int virtual_found = 0; - for (int i=0;ipartition_widgets) sections[i]->partition_widgets = NULL; - sections[i]->partition_widgets = part; - g_signal_connect(G_OBJECT(part->RemoveButton),"clicked",G_CALLBACK(on_advanced_part_remove),widgets); - g_signal_connect(G_OBJECT(part->SystemSectionToggle),"clicked",G_CALLBACK(on_advanced_section_toggled),widgets); - g_signal_connect(G_OBJECT(part->UserDataSectionToggle),"clicked",G_CALLBACK(on_advanced_section_toggled),widgets); - // g_signal_connect(G_OBJECT(part->SizeCombo),"changed",G_CALLBACK(on_advanced_size_changed),widgets); - if (i==0){ - gtk_widget_set_sensitive(part->SystemSectionToggle,0); - gtk_widget_set_sensitive(part->UserDataSectionToggle,0); - GtkWidget *SystemImage = gtk_button_get_image(GTK_BUTTON(part->SystemSectionToggle)); - GtkWidget *UserImage = gtk_button_get_image(GTK_BUTTON(part->UserDataSectionToggle)); - gtk_image_set_from_icon_name(GTK_IMAGE(SystemImage),toggled_icon_name,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(UserImage),toggled_icon_name,GTK_ICON_SIZE_BUTTON); - } - yon_advanced_partition_set_from_section(part,sections[i]); - // yon_advanced_set_max_size_from_partition(part,widgets); - gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); - g_signal_handlers_block_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); - if (!virtual_found&>k_combo_box_set_active_id(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo),sections[i]->part_source==PART_SOURCE_PART?sections[i]->partition:sections[i]->device)){ - virtual_found=1; +void on_advanced_virtual_device_changed(GtkWidget *, main_window *widgets){ + char *device = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo)); + int size; + config_str vfs_file = yon_resource_open_file(vfs_list_path,&size); + for (int i=0;iAdvancedVirtualDeviceLabel),_(parsed[1])); + gtk_widget_show(gtk_widget_get_parent(widgets->AdvancedVirtualDeviceLabel)); + yon_char_parsed_free(parsed,parsed_size); + break; + } else { + gtk_widget_hide(gtk_widget_get_parent(widgets->AdvancedVirtualDeviceLabel)); + yon_char_parsed_free(parsed,parsed_size); } - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); - - part->part_type = ADVANCED_PART_EXISTING; - } - if (!virtual_found||!sections_size) { - g_signal_handlers_block_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo),0); - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); } - yon_advanced_section_update(widgets); - GtkTreeIter itar; - for_iter(GTK_TREE_MODEL(widgets->PartitionsList),&itar){ - int status; - char *target; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->PartitionsList),&itar,0,&target,7,&status,-1); - if (!((sections_size>0&&!strcmp(target,sections[0]->part_source==PART_SOURCE_PART?sections[0]->partition:sections[0]->device))||(sections_size>1&&!strcmp(target,sections[1]->part_source==PART_SOURCE_PART?sections[1]->partition:sections[1]->device)))){ - gtk_list_store_set(widgets->PartitionsList,&itar,7,0,-1); + if (!yon_char_is_empty(device)){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList); + int active_devices=0; + for_iter(model,&iter){ + int status; + gtk_tree_model_get(model,&iter,5,&status,-1); + if (status) active_devices++; } - } - if (sections_size>=2){ - gtk_widget_hide(widgets->AdvancedAddButton); - } else { - gtk_widget_show(widgets->AdvancedAddButton); + advanced_part_data *data = yon_advanced_part_data_new(); + advanced_part_widgets *part = yon_advanced_part_create(data); + data->part_source = PART_SOURCE_VIRTUAL; + data->partition = device; + data->device = device; + gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); } + yon_char_parsed_free(vfs_file,size); + // yon_advanced_update(widgets); } -void on_advanced_partition_create(GtkWidget *, main_window *widgets){ - int found = 0; - GtkTreeIter iter, *last_unvalid = NULL; - GtkTreeModel *model; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->AdvancedDeviceTree)),&model,&iter)){ - char *target; - int active; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->DevicesList),&iter,0,&target,5,&active,-1); - if (active){ - if (!yon_advanced_section_get(target)){ - last_unvalid = gtk_tree_iter_copy(&iter); - } else { - found=1; - if (sections_size==2) return; - advanced_section *section = yon_advanced_section_new(); - section->part_source = PART_SOURCE_DEVICE; - section->device = target; - section->partition = NULL; - sections[sections_size]=section; - sections_size++; - } - } - } - if (!found&&last_unvalid){ - char *target; - int active; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->DevicesList),last_unvalid,0,&target,5,&active,-1); - - if (sections_size==2) return; - advanced_section *section = yon_advanced_section_new(); - section->part_source = PART_SOURCE_DEVICE; - section->device = target; - section->partition = NULL; - sections[sections_size]=section; - sections_size++; - } - yon_advanced_update(widgets); + +advanced_part_data *yon_advanced_part_data_new(){ + advanced_part_data *data = malloc(sizeof(advanced_part_data)); + memset(data,0,sizeof(advanced_part_data)); + return data; } -void on_advanced_partition_add(GtkWidget *, char *path, main_window *widgets){ - GtkTreeIter iter; - if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->PartitionsList),&iter,path)){ - char *target, *device; - int status; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->PartitionsList),&iter,0,&target,7,&status,9,&device,-1); - gtk_list_store_set(widgets->DevicesList,&iter,7,!status,-1); - if (!status){ - if (sections_size==2) return; - advanced_section *section = yon_advanced_section_new(); - section->part_source = PART_SOURCE_PART; - section->device = NULL; - section->partition = target = device; - sections[sections_size]=section; - sections_size++; - } else { - yon_advanced_section_remove_by_name(target); +char *yon_advanced_part_data_get_parameter(const char *config_param, int pos){ + char *final = NULL; + char *parameter = (char*)config((char*)config_param); + if (!yon_char_is_empty(parameter)){ + int size; + config_str parsed = yon_char_parse(parameter,&size,","); + if (size&&posDevicesList); - for_iter(model, &iter){ - char *target; - gtk_tree_model_get(model,&iter,0,&target,-1); - if (!yon_char_is_empty(target)&&strstr(device,target)){ - char *path = gtk_tree_model_get_string_from_iter(model,&iter); - g_signal_emit_by_name(G_OBJECT(widgets->AdvancedDeviceChosenCell),"toggled",path,NULL); - } +advanced_part_data *yon_advanced_get_config_data(int pos){ + advanced_part_data *data = yon_advanced_part_data_new(); + data->device = yon_advanced_part_data_get_parameter(device_parameter,pos); + data->partition = yon_advanced_part_data_get_parameter(part_parameter,pos); + data->part_label = yon_advanced_part_data_get_parameter(part_label_parameter,pos); + data->fs_type = yon_advanced_part_data_get_parameter(part_fs_type_parameter,pos); + data->fs_label = yon_advanced_part_data_get_parameter(part_fs_label_parameter,pos); + data->encryption = yon_advanced_part_data_get_parameter(part_crypt_parameter,pos); + data->format = yon_advanced_part_data_get_parameter(part_format_parameter,pos); + data->encryption_password = yon_advanced_part_data_get_parameter(part_crypt_parameter, pos); + char *size_str = yon_advanced_part_data_get_parameter(part_size_parameter,pos); + if (!yon_char_is_empty(size_str)){ + data->size = atol(size_str); } + return data; } -void yon_advanced_part_choose(main_window *widgets, const char *part){ - if (yon_char_is_empty(part)) return; - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); - for_iter(model, &iter){ - char *target; - gtk_tree_model_get(model,&iter,0,&target,-1); - if (!yon_char_is_empty(target)&&strstr(part,target)){ - char *path = gtk_tree_model_get_string_from_iter(model,&iter); - g_signal_emit_by_name(G_OBJECT(widgets->AdvancedPartChosenCell),"toggled",path,NULL); - } - } +void yon_advanced_part_create_for_device(advanced_part_data *data, main_window *widgets){ + advanced_part_widgets *part = yon_advanced_part_create(data); + gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); + } -void yon_install_advanced_init(main_window *widgets){ - yon_advanced_partition_clear(widgets); - g_signal_handlers_block_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->AdvancedVirtualDeviceCombo)); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->AdvancedVirtualDeviceCombo),NO_LABEL); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo),0); - int size; - config_str vmf_file = yon_resource_open_file(vfs_list_path,&size); - for (int i=1;iAdvancedVirtualDeviceCombo),parsed[2],parsed[0]); - yon_char_parsed_free(parsed,parsed_size); - } - yon_char_parsed_free(vmf_file,size); - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); - char *device = config(device_parameter); - char *parts = config(part_parameter); - char *part_size = config(part_size_parameter); - char *part_label = config(part_label_parameter); - char *part_fs_type = config(part_fs_type_parameter); - char *part_fs_label = config(part_fs_label_parameter); - char *part_crypt = config(part_crypt_parameter); - char *part_format = config(part_format_parameter); - char *boot = config(boot_parameter); - char *swap = config(swap_parameter); - char *swap_size = config(swap_size_parameter); - if (yon_char_is_empty(device)&&yon_char_is_empty(parts)) return; - { +void yon_advanced_part_add_parts_for_device(const char *device_name, main_window *widgets){ + for (int i=0;i0&&!yon_char_is_empty(device_parsed[0])){ - yon_advanced_device_choose(widgets,device_parsed[0]); - // sections[0] = yon_advanced_section_new(); - while(gtk_events_pending()) gtk_main_iteration(); - sections[0]->device=device_parsed[0]; - on_advanced_partition_create(NULL,widgets); - if (size>1&&!yon_char_is_empty(device_parsed[1])){ - yon_advanced_device_choose(widgets,device_parsed[1]); - // sections[1] = yon_advanced_section_new(); - while(gtk_events_pending()) gtk_main_iteration(); - sections[1]->device=device_parsed[1]; - on_advanced_partition_create(NULL,widgets); - } - free(device_parsed); - }; - } - { - int size; - config_str part_parsed = yon_char_parse(parts,&size,","); - if (size>0){ - // sections[0] = yon_advanced_section_new(); - yon_advanced_device_choose(widgets,part_parsed[0]); - yon_advanced_part_choose(widgets,part_parsed[0]); - while(gtk_events_pending()) gtk_main_iteration(); - sections[0]->partition=part_parsed[0]; - if (size>1&&!yon_char_is_empty(part_parsed[1])){ - // sections[1] = yon_advanced_section_new(); - yon_advanced_device_choose(widgets,part_parsed[1]); - yon_advanced_part_choose(widgets,part_parsed[1]); - while(gtk_events_pending()) gtk_main_iteration(); - sections[1]->device=part_parsed[1]; - } - free(part_parsed); - }; - } - { - if (!yon_char_is_empty(part_size)){ - int size; - config_str parsed = yon_char_parse(part_size,&size,","); - if (size>0&&!yon_char_is_empty(parsed[0])){ - sections[0]->size = atol(parsed[0]); - sections[0]->size_letter = parsed[0][strlen(parsed[0])-1]; - if (size>1&&!yon_char_is_empty(parsed[1])){ - - sections[1]->size = atol(parsed[1]); - sections[1]->size_letter = parsed[1][strlen(parsed[1])-1]; - } - } - free(parsed); - } - if (!yon_char_is_empty(part_label)){ - int size; - config_str parsed = yon_char_parse(part_label,&size,","); - if (size>0&&!yon_char_is_empty(parsed[0])){ - sections[0]->part_label = parsed[0]; - if (size>1&&!yon_char_is_empty(parsed[1])){ - sections[1]->part_label = parsed[1]; - } - } - free(parsed); - } - if (!yon_char_is_empty(part_fs_type)){ - int size; - config_str parsed = yon_char_parse(part_fs_type,&size,","); - if (size>0&&!yon_char_is_empty(parsed[0])){ - sections[0]->fs_type = parsed[0]; - if (size>1&&!yon_char_is_empty(parsed[1])){ - sections[1]->fs_type = parsed[1]; - } - } - free(parsed); - } - if (!yon_char_is_empty(part_fs_label)){ - int size; - config_str parsed = yon_char_parse(part_fs_label,&size,","); - if (size>0&&!yon_char_is_empty(parsed[0])){ - sections[0]->fs_label = parsed[0]; - if (size>1&&!yon_char_is_empty(parsed[1])){ - sections[1]->fs_label = parsed[1]; - } - } - free(parsed); - } - if (!yon_char_is_empty(part_crypt)){ - int size; - config_str parsed = yon_char_parse(part_crypt,&size,","); - if (size>0&&!yon_char_is_empty(parsed[0])){ - sections[0]->encryption = parsed[0]; - if (size>1&&!yon_char_is_empty(parsed[1])){ - sections[1]->encryption = parsed[1]; - } + config_str parsed = yon_char_parse(main_config.partitions[i],&size,";"); + if (strstr(device_name,parsed[0])){ + GtkTreeIter iter; + long capacity = 0; + if (size>3&&!yon_char_is_empty(parsed[3])){ + capacity = atol(parsed[3]); } - free(parsed); - } - if (!yon_char_is_empty(part_format)){ - int size; - config_str parsed = yon_char_parse(part_format,&size,","); - if (size>0&&!yon_char_is_empty(parsed[0])){ - if (!strcmp(parsed[0],"yes")){ - sections[0]->format = 2; - } else if (!strcmp(parsed[0],"no")){ - sections[0]->format = 1; - } - if (size>1&&!yon_char_is_empty(parsed[1])){ - if (!strcmp(parsed[1],"yes")){ - sections[1]->format = 2; - } else if (!strcmp(parsed[1],"no")){ - sections[1]->format = 1; - } - } + char *capacity_string = capacity? yon_size_long_convert_automatic_to_string(capacity) : yon_char_new(""); + long free_space = 0; + if (size>8&&!yon_char_is_empty(parsed[8])){ + free_space = capacity-atol(parsed[8]); } - free(parsed); - } - if (!yon_char_is_empty(boot)){ - - } - if (!yon_char_is_empty(swap)){ - - } - if (!yon_char_is_empty(swap_size)){ - + char *free_space_string = free_space ? yon_size_long_convert_automatic_to_string(free_space) : yon_char_new(""); + gtk_list_store_append(widgets->PartitionsList,&iter); + gtk_list_store_set(widgets->PartitionsList,&iter, + 0,parsed[1], 1,capacity_string, + 2,free_space_string, 3,parsed[4], + 4,parsed[5], 5,capacity, + 6,free_space, 8,1, + 9,parsed[7], 10,parsed[0], + 11,parsed[10],-1); } - } - yon_advanced_update(widgets); } -void on_install_advanced_partition_chosen(GtkCellRenderer*, gchar *path, main_window *widgets){ +void yon_advanced_part_remove_parts_for_device(const char *device_name, main_window *widgets){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); - - int chosen = 0; - chosen = yon_advanced_get_part_size(widgets); - - gtk_tree_model_get_iter_from_string(model,&iter,path); - int status; - char *target_part, *device; - gulong part_size; - gtk_tree_model_get(model,&iter,0,&target_part,5,&part_size,7,&status,9,&device,-1); - - if (!status){ - if (chosen<2){ - gtk_list_store_set(widgets->PartitionsList,&iter,7,1,-1); - chosen++; - advanced_section *section = yon_advanced_section_new(); - section->part_source = PART_SOURCE_PART; - section->partition = target_part; - section->device = NULL; - section->full_part_size = part_size; - sections[sections_size]=section; - sections_size++; - } - } else { - yon_advanced_section_remove_by_name(target_part); - gtk_list_store_set(widgets->PartitionsList,&iter,7,0,-1); - } - yon_advanced_update(widgets); -} - -void yon_advanced_parts_update(main_window *widgets){ - int size; - config_str partitions; - partitions = yon_config_load(yon_debug_output("%s\n",get_parts_and_devices_command),&size); - for (int i=0;iDevicesList); - GtkTreeIter iter; - for_iter (model,&iter){ - char *disk_path; - int status; - gtk_tree_model_get(model,&iter,0,&disk_path,5,&status,-1); - if (!status) continue; - - for (int i=0;i2){ - char sizemod='\0'; - capacity_long = atol(parsed[2]); - - char *temp = yon_char_from_double(yon_size_long_convert_automatic(capacity_long,&sizemod)); - capacity = yon_char_append_c(temp,sizemod); - free(temp); - } - if (parsed_size>7&&!yon_char_is_empty(parsed[7])){ - char sizemod='\0'; - free_space_long = capacity_long-atol(parsed[7]); - char *temp = yon_char_from_double(yon_size_long_convert_automatic(free_space_long,&sizemod)); - free_space = yon_char_append_c(temp,sizemod); - free(temp); - } - if (parsed_size>3){ - fs_type = parsed[3]; - } - if (parsed_size>4){ - label = parsed[4]; - } - - GtkTreeIter itar; - gtk_list_store_append(widgets->PartitionsList,&itar); - gtk_list_store_set(widgets->PartitionsList,&itar,0,name,1,capacity,2,free_space,3,fs_type,4,label,5,capacity_long,6,free_space_long,8,1,9,disk_path,-1); - } - yon_char_parsed_free(parsed,parsed_size); - } - } - } - yon_char_parsed_free(partitions,size); -} - -void yon_advanced_set_max_size_from_partition(advanced_partition *part, main_window *widgets){ - char *cur_name = part->part_type == ADVANCED_PART_EXISTING?part->device:part->part; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); - GtkTreeIter iter; - long selected_size; - - for_iter(model,&iter){ + for_iter(model, &iter){ char *target; - gtk_tree_model_get(model,&iter,part->part_type == ADVANCED_PART_EXISTING?9:0,&target,-1); - if (!strcmp(target,cur_name)){ - gtk_tree_model_get(model,&iter,6,&selected_size,-1); - if (!selected_size){ - gtk_tree_model_get(model,&iter,5,&selected_size,-1); - } - if (selected_size){ - GtkAdjustment *adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(part->SizeSpin)); - const char *sizemod = gtk_combo_box_get_active_id(GTK_COMBO_BOX(part->SizeCombo)); - double new_size = yon_size_long_convert_to_mod(selected_size,sizemod[0]); - gtk_adjustment_set_upper(adj,new_size); - gdouble old_value = gtk_adjustment_get_value(adj); - if (old_value>new_size){ - gtk_adjustment_set_value(adj,new_size); - } + gtk_tree_model_get(model,&iter,0,&target,-1); + for (int i=0;iPartitionsList,&iter); } + yon_char_parsed_free(parsed,size); } } } -void on_advanced_size_changed(GtkWidget *,main_window *){ - // advanced_partition *part = g_object_get_data(G_OBJECT(self),"advanced_partition"); - // yon_advanced_set_max_size_from_partition(part,widgets); -} - -void on_install_advanced_device_chosen(GtkCellRenderer *, gchar *path, main_window *widgets){ - gtk_list_store_clear(widgets->PartitionsList); - yon_advanced_section_remove_all(); +void on_advanced_part_create(GtkWidget *, main_window *widgets){ GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList); - // chosen = yon_advanced_get_part_size(widgets); - - if (gtk_tree_model_get_iter_from_string(model,&iter,path)){ - int status; + GtkTreeModel *model; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->AdvancedDeviceTree)),&model,&iter)){ char *target; - gtk_tree_model_get(model,&iter,0,&target,5,&status,-1); - if (!status){ // checks - gtk_list_store_set(widgets->DevicesList,&iter,5,!status,-1); - - } else { // unchecks - gtk_list_store_set(widgets->DevicesList,&iter,5,!status,-1); - for_iter (model,&iter){ - gtk_list_store_set(widgets->DevicesList,&iter,6,1,-1); - } - } - } - int chosen_amount = 0; - for_iter(model,&iter){ - int status; - gtk_tree_model_get(model,&iter,5,&status,-1); - if (status)chosen_amount++; - } - // gtk_widget_set_sensitive(widgets->AdvancedVirtualDeviceCombo,chosen_amount>=2); - // if (chosen) gtk_widget_set_sensitive(widgets->AdvancedAddButton,1); - // else gtk_widget_set_sensitive(widgets->AdvancedAddButton,0); - yon_advanced_parts_update(widgets); - yon_advanced_update(widgets); -} - -void on_advanced_password_clicked(GtkWidget *, advanced_partition *part){ - yon_password_window *window = yon_password_open(GTK_ENTRY(part->EncryptionEntry)); - gtk_widget_hide(gtk_widget_get_parent(window->EncryptionCombo)); - gtk_widget_hide(window->HashBox); - gtk_widget_hide(window->NoEncriptionCheck); -} - -void yon_advanced_partition_clear(main_window *widgets){ - GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); - GList *iter; - for (iter=list;iter;iter=iter->next){ - advanced_partition *part = g_object_get_data(G_OBJECT(iter->data),"advanced_partition"); - gtk_widget_destroy(GTK_WIDGET(iter->data)); - free(part); - } -} - -int yon_advanced_get_part_size(main_window *widgets){ - int size = 0; - GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); - size = g_list_length(list); - g_list_free(list); - return size; -} - -void yon_advanced_section_update_section(advanced_partition *part,GtkWidget *cur_toggle,main_window *widgets){ - int systoggle = cur_toggle == part->SystemSectionToggle; - advanced_section *section = sections[yon_advanced_section_get_by_part(part)]; - g_signal_handlers_block_by_func(G_OBJECT(cur_toggle),G_CALLBACK(on_advanced_section_toggled),widgets); - gboolean active = systoggle?section->sys_section:section->user_section; - gtk_widget_set_sensitive(cur_toggle,!active); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cur_toggle),active); - g_signal_handlers_unblock_by_func(G_OBJECT(cur_toggle),G_CALLBACK(on_advanced_section_toggled),widgets); - GtkWidget *compare_image = gtk_button_get_image(GTK_BUTTON(cur_toggle)); - gtk_image_set_from_icon_name(GTK_IMAGE(compare_image),!active?untoggled_icon_name:toggled_icon_name,GTK_ICON_SIZE_BUTTON); -} - -void yon_advanced_section_update(main_window *widgets){ - GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); - GList *iter; - for (iter=list;iter;iter=iter->next){ - advanced_partition *compare_part = g_object_get_data(G_OBJECT(iter->data),"advanced_partition"); - GtkWidget *cur_toggle = compare_part->SystemSectionToggle; - yon_advanced_section_update_section(compare_part,cur_toggle,widgets); - cur_toggle = compare_part->UserDataSectionToggle; - yon_advanced_section_update_section(compare_part,cur_toggle,widgets); - } -} - -void on_advanced_section_toggled(GtkWidget *self, main_window *widgets){ - advanced_partition *part = g_object_get_data(G_OBJECT(self),"advanced_partition"); - int pos = yon_advanced_section_get_by_part(part); - if (self == part->SystemSectionToggle){ - sections[pos]->sys_section = 1; - if (sections[!pos]&§ions[pos]->user_section){ - sections[pos]->user_section=0; - sections[!pos]->user_section=1; - } - } else { - sections[pos]->user_section = 1; - if (sections[!pos]&§ions[pos]->sys_section){ - sections[pos]->sys_section=0; - sections[!pos]->sys_section=1; - } - } - GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); - GList *iter; - for (iter=list;iter;iter=iter->next){ - advanced_partition *compare_part = g_object_get_data(G_OBJECT(iter->data),"advanced_partition"); - if (part != compare_part) { - if (self == part->SystemSectionToggle){ - sections[yon_advanced_section_get_by_part(compare_part)]->sys_section = 0; - } else { - sections[yon_advanced_section_get_by_part(compare_part)]->user_section = 0; - } - } + gtk_tree_model_get(model,&iter,0,&target,-1); + advanced_part_data *data = yon_advanced_part_data_new(); + yon_advanced_part_create_for_device(data,widgets); } - yon_advanced_section_update(widgets); } -int yon_advanced_save(main_window *widgets){ - yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"custom"); - char *devices[2] = {NULL}; - char *parts[2] = {NULL}; - char *part_size[2] = {NULL}; - char *part_label[2] = {NULL}; - char *fs_type[2] = {NULL}; - char *fs_label[2] = {NULL}; - char *encryption[2] = {NULL}; - char *format[2] = {NULL}; - if (!sections_size){ - yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - return 0; - } - advanced_section *cur_section = sections[0]->sys_section?sections[0]:sections[1]; - if (cur_section->part_source == PART_SOURCE_VIRTUAL){ - - char *device = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo)); - int size; - config_str vfs_file = yon_resource_open_file(vfs_list_path,&size); - config_str cur_device = NULL; - for (int i=0;iDevicesList); - int active_devices=0; - for_iter(model,&iter){ - int status; - gtk_tree_model_get(model,&iter,5,&status,-1); - if (status) active_devices++; - } - if (atoi(cur_device[3])>active_devices){ - yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),COUNT_INVALID_LABEL(cur_device[3]),5,BACKGROUND_IMAGE_INFO_TYPE); - yon_ubl_status_highlight_incorrect(widgets->AdvancedVirtualDeviceCombo); - yon_char_parsed_free(cur_device,4); - return 0; - } - - if (atoi(cur_device[4])%active_devices!=0){ - yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),PARITY_INVALID_LABEL(cur_device[4]),5,BACKGROUND_IMAGE_INFO_TYPE); - yon_ubl_status_highlight_incorrect(widgets->AdvancedVirtualDeviceCombo); - yon_char_parsed_free(cur_device,4); - return 0; - } - } - } - - if (cur_section->format==2){ - format[0]="yes"; - } else if (cur_section->format == 1){ - format[0]="no"; - } else { - format[0]=NULL; - } - if (!yon_char_is_empty(cur_section->partition)){ - if (!yon_char_is_empty(cur_section->partition)){ - parts[0]=cur_section->partition; - } else { - parts[0]=""; - } - } else { - devices[0]=cur_section->device; - } - if (cur_section->user_section){ - if (!yon_char_is_empty(cur_section->device)){ - if (!yon_char_is_empty(cur_section->partition)){ - parts[1]=cur_section->partition; - } else { - parts[1]=""; +int yon_advanced_part_select_for_data(advanced_part_data *data, main_window *widgets){ + GtkTreeIter device_iter; + GtkTreeModel *device_model = GTK_TREE_MODEL(widgets->DevicesList); + for_iter(device_model, &device_iter){ + char *device_name; + gtk_tree_model_get(device_model,&device_iter,0,&device_name,-1); + if (!strcmp(device_name,data->device)){ + gtk_list_store_set(widgets->DevicesList,&device_iter, 5,1,-1); + yon_advanced_part_add_parts_for_device(device_name,widgets); + if (yon_char_is_empty(data->partition)){ + yon_advanced_part_create_for_device(data,widgets); } - } else { - devices[1]=cur_section->device; - } - } - - if (cur_section->format==2){ - if (cur_section->size&&yon_size_long_convert_to_mod(cur_section->full_part_size,cur_section->size_letter)>cur_section->size){ - - char *size_str = yon_char_from_long(cur_section->size); - char *sz_str = yon_char_append_c(size_str,cur_section->size_letter); - part_size[0]=sz_str; - } else { - yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NOT_ENOUGH_SPACE_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - return 0; - } - if (!yon_char_is_empty(cur_section->part_label)){ - part_label[0]=cur_section->part_label; - } - if (!yon_char_is_empty(cur_section->fs_type)){ - fs_type[0]=cur_section->fs_type; - } - if (!yon_char_is_empty(cur_section->fs_label)){ - fs_label[0]=cur_section->fs_label; } } - if (sections_size>1){ - cur_section = sections[0]->sys_section?sections[1]:sections[0]; - - if (cur_section->format==2){ - format[1]="yes"; - } else if (cur_section->format==1){ - format[1]="no"; - } else { - format[1] = NULL; - } - - devices[1]=cur_section->device; - if (!yon_char_is_empty(cur_section->partition)){ - parts[1]=cur_section->partition; - } else { - parts[1]=""; - } - - if (cur_section->format==2){ - if (cur_section->size){ - char *size_str = yon_char_from_long(cur_section->size); - char *sz_str = yon_char_append_c(size_str,cur_section->size_letter); - part_size[1]=sz_str; + if (!yon_char_is_empty(data->partition)){ + GtkTreeIter part_iter; + GtkTreeModel *part_model = GTK_TREE_MODEL(widgets->PartitionsList); + for_iter(part_model,&part_iter){ + char *part_name; + gtk_tree_model_get(part_model,&part_iter,0,&part_name,-1); + if (!strcmp(part_name,data->partition)){ + gtk_list_store_set(GTK_LIST_STORE(widgets->PartitionsList),&part_iter,7,1,-1); + } - if (!yon_char_is_empty(cur_section->part_label)){ - part_label[1]=cur_section->part_label; - } - if (!yon_char_is_empty(cur_section->fs_type)){ - fs_type[1]=cur_section->fs_type; - } - if (!yon_char_is_empty(cur_section->fs_label)){ - fs_label[1]=cur_section->fs_label; - } - if (!yon_char_is_empty(cur_section->encryption)){ - char *encrypt_str = yon_char_unite(cur_section->encryption,":",cur_section->encryption_password,NULL); - encryption[1]=encrypt_str; - } - } - } - - if (devices[0]||devices[1]){ - char *devices_str = yon_char_parsed_to_string_full(devices,2,","); - yon_config_register(device_parameter,device_parameter_command,devices_str); - } - if (!yon_char_is_empty(parts[0])||!yon_char_is_empty(parts[1])){ - char *parts_str = yon_char_parsed_to_string_full(parts,2,","); - yon_config_register(part_parameter,part_parameter_command,parts_str); - } else { - yon_config_remove_by_key(part_parameter); - } - if (part_size[0]||part_size[1]){ - char *part_size_str = yon_char_parsed_to_string_full(part_size,2,","); - yon_config_register(part_size_parameter,part_size_parameter_command,part_size_str); - } else { - yon_config_remove_by_key(part_size_parameter); - } - if (part_label[0]||part_label[1]){ - char *part_label_str = yon_char_parsed_to_string_full(part_label,2,","); - yon_config_register(part_label_parameter,part_label_parameter_command,part_label_str); - - } else { - yon_config_remove_by_key(part_label_parameter); - } - if (fs_type[0]||fs_type[1]){ - char *fs_type_str = yon_char_parsed_to_string_full(fs_type,2,","); - yon_config_register(part_fs_type_parameter,part_fs_type_parameter_command,fs_type_str); - - } else { - yon_config_remove_by_key(part_fs_type_parameter); - } - if (fs_label[0]||fs_label[1]){ - char *fs_label_str = yon_char_parsed_to_string_full(fs_label,2,","); - yon_config_register(part_fs_label_parameter,part_fs_label_parameter_command,fs_label_str); - - } else { - yon_config_remove_by_key(part_fs_label_parameter); - } - if (encryption[0]||encryption[1]){ - char *encryption_str = yon_char_parsed_to_string_full(encryption,2,","); - yon_config_register(part_crypt_parameter,part_crypt_parameter_command,encryption_str); - - } else { - yon_config_remove_by_key(part_crypt_parameter); - } - if (format[0]||format[1]){ - char *format_str = yon_char_parsed_to_string_full(format,2,","); - yon_config_register(part_format_parameter,part_format_parameter_command,format_str); - - } else { - yon_config_remove_by_key(part_format_parameter); - } - if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedLoadTypeSwitch))){ - char *boot = NULL; - if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedBiosSectorSwitch))){ - yon_char_append_element(boot,"bios","+"); - } - if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedEFISwitch))){ - yon_char_append_element(boot,"efi","+"); - - } - if (!yon_char_is_empty(boot)){ - yon_config_register(boot_parameter,boot_parameter_command,boot); - } else { - yon_config_remove_by_key(boot_parameter); - } - } else { - yon_config_remove_by_key(boot_parameter); - } - if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapSwitch))){ - if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapAutoSwitch))){ - yon_config_register(swap_parameter,swap_parameter_command,"auto"); - - } else if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapRamSwitch))){ - yon_config_register(swap_parameter,swap_parameter_command,"yes"); - yon_config_register(swap_size_parameter,swap_parameter_command,"ram"); - - } else if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapFixedSwitch))){ - yon_config_register(swap_parameter,swap_parameter_command,"yes"); - long swap_size = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widgets->AdvancedSwapFixedSpin)); - int size_letter = gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapFixedSizeSwitch)); - char *swap_str = yon_char_from_long(swap_size); - char *size_final = yon_char_unite(swap_str,size_letter?"G":"M",NULL); - yon_config_register(swap_size_parameter,swap_parameter_command,size_final); - } else { - yon_config_remove_by_key(swap_parameter); - yon_config_remove_by_key(swap_size_parameter); } } - char *parameters = yon_config_get_all_info(); - yon_debug_output("%s\n",parameters); return 1; } +void yon_advanced_init(main_window *widgets){ + advanced_part_data *data1 = yon_advanced_get_config_data(0); + advanced_part_data *data2 = yon_advanced_get_config_data(1); + yon_advanced_part_select_for_data(data1,widgets); + yon_advanced_part_select_for_data(data2,widgets); -void yon_advanced_part_parameter_changed(GtkWidget *self, advanced_partition *part){ - advanced_section *section = sections[yon_advanced_section_get_by_part(part)]; - if (self == part->SizeCombo||self == part->SizeSpin){ - section->size = gtk_spin_button_get_value(GTK_SPIN_BUTTON(part->SizeSpin)); - int size_id = gtk_combo_box_get_active(GTK_COMBO_BOX(part->SizeCombo)); - section->size_letter = *yon_size_get_mod(size_id>-1?size_id:0); - } else if (self == part->PartLabelEntry){ - section->part_label = yon_char_new(gtk_entry_get_text(GTK_ENTRY(part->PartLabelEntry))); - } else if (self == part->FileSystemTypeCombo){ - if (!gtk_combo_box_get_active(GTK_COMBO_BOX(part->FileSystemTypeCombo))){ - section->fs_type = NULL; - } else { - GList *list = gtk_container_get_children(GTK_CONTAINER(part->FileSystemTypeCombo)); - section->fs_type = yon_char_new(gtk_entry_get_text(GTK_ENTRY(list->data))); - g_list_free(list); - } - } else if (self == part->FileSystemLabelEntry){ - section->fs_label = yon_char_new(gtk_entry_get_text(GTK_ENTRY(part->FileSystemLabelEntry))); - } else if (self == part->EncryptionCombo||self == part->EncryptionEntry){ - section->encryption = yon_char_new(gtk_combo_box_get_active_id(GTK_COMBO_BOX(part->EncryptionCombo))); - section->encryption_password = yon_char_new(gtk_entry_get_text(GTK_ENTRY(part->EncryptionEntry))); - } else if (self == part->FormatCombo){ - section->format = gtk_combo_box_get_active(GTK_COMBO_BOX(part->FormatCombo)); - } -} - -void on_format_changed(GtkWidget *self, advanced_partition *part){ - int active = gtk_combo_box_get_active(GTK_COMBO_BOX(self)); - switch (active){ - case 0: - case 1: gtk_revealer_set_reveal_child(GTK_REVEALER(part->FormatRevealer),0); - break; - case 2: gtk_revealer_set_reveal_child(GTK_REVEALER(part->FormatRevealer),1); - } - yon_advanced_part_parameter_changed(self, part); + } -advanced_partition *yon_advanced_partition_new(){ - advanced_partition *part = new(advanced_partition); +advanced_part_widgets *yon_advanced_part_create(advanced_part_data *part_data){ + advanced_part_widgets *part = new(advanced_part_widgets); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_advanced_part); yon_scroll_block_for_builder(builder); part->MainBox = yon_gtk_builder_get_widget(builder,"MainBox"); @@ -976,10 +1235,10 @@ advanced_partition *yon_advanced_partition_new(){ part->part = NULL; part->device = NULL; - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"K",_("Kb")); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"M",_("Mb")); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"G",_("Gb")); - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"T",_("Tb")); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"K",KB_LABEL); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"M",MB_LABEL); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"G",GB_LABEL); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"T",TB_LABEL); gtk_combo_box_set_active(GTK_COMBO_BOX(part->SizeCombo),0); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(part->FormatCombo),DEFAULT_LABEL); @@ -987,25 +1246,19 @@ advanced_partition *yon_advanced_partition_new(){ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(part->FormatCombo),FORMAT_LABEL); gtk_combo_box_set_active(GTK_COMBO_BOX(part->FormatCombo),0); - g_signal_connect(G_OBJECT(part->EncryptionButton),"clicked",G_CALLBACK(on_advanced_password_clicked),part); + // g_signal_connect(G_OBJECT(part->EncryptionButton),"clicked",G_CALLBACK(on_advanced_password_clicked),part); g_signal_connect(G_OBJECT(part->EncryptionCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),part->EncryptionButton); g_signal_connect(G_OBJECT(part->EncryptionCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),part->EncryptionEntry); - g_signal_connect(G_OBJECT(part->EncryptionEntry),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); - g_signal_connect(G_OBJECT(part->FormatCombo),"changed",G_CALLBACK(on_format_changed),part); - g_signal_connect(G_OBJECT(part->SizeCombo),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); - g_signal_connect(G_OBJECT(part->SizeSpin),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); - g_signal_connect(G_OBJECT(part->PartLabelEntry),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); - g_signal_connect(G_OBJECT(part->FileSystemTypeCombo),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); - g_signal_connect(G_OBJECT(part->FileSystemLabelEntry),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); - g_signal_connect(G_OBJECT(part->EncryptionCombo),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); + // g_signal_connect(G_OBJECT(part->FormatCombo),"changed",G_CALLBACK(on_format_changed),part); yon_fs_type_setup(GTK_COMBO_BOX_TEXT(part->FileSystemTypeCombo)); - g_object_set_data(G_OBJECT(part->MainBox),"advanced_partition",part); - g_object_set_data(G_OBJECT(part->SizeCombo),"advanced_partition",part); - g_object_set_data(G_OBJECT(part->RemoveButton),"advanced_partition",part); - g_object_set_data(G_OBJECT(part->SystemSectionToggle),"advanced_partition",part); - g_object_set_data(G_OBJECT(part->UserDataSectionToggle),"advanced_partition",part); + g_object_set_data(G_OBJECT(part->MainBox),"advanced_part_widgets",part); + g_object_set_data(G_OBJECT(part->MainBox),"advanced_part_data",part_data); + g_object_set_data(G_OBJECT(part->SizeCombo),"advanced_part_widgets",part); + g_object_set_data(G_OBJECT(part->RemoveButton),"advanced_part_widgets",part); + g_object_set_data(G_OBJECT(part->SystemSectionToggle),"advanced_part_widgets",part); + g_object_set_data(G_OBJECT(part->UserDataSectionToggle),"advanced_part_widgets",part); int size; config_str encryptions = yon_char_parsed_new(&size,encryptions_list,NULL); @@ -1014,61 +1267,4 @@ advanced_partition *yon_advanced_partition_new(){ } yon_char_parsed_free(encryptions,size); return part; -} - -void on_advanced_part_remove(GtkWidget *self, main_window *widgets){ - advanced_partition *part = g_object_get_data(G_OBJECT(self),"advanced_partition"); - yon_advanced_section_remove(part); - if (sections_size){ - sections[0]->sys_section=1; - sections[0]->user_section=1; - } - yon_advanced_update(widgets); - -} - -int yon_advanced_section_append(advanced_section *section){ - if (sections_size==2) return -1; - sections[sections_size] = section; - sections_size++; - return sections_size-1; -} - -void on_advanced_virtual_device_changed(GtkWidget *, main_window *widgets){ - yon_advanced_section_remove_all(); - char *device = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo)); - int size; - config_str vfs_file = yon_resource_open_file(vfs_list_path,&size); - for (int i=0;iAdvancedVirtualDeviceLabel),_(parsed[1])); - gtk_widget_show(gtk_widget_get_parent(widgets->AdvancedVirtualDeviceLabel)); - yon_char_parsed_free(parsed,parsed_size); - break; - } else { - gtk_widget_hide(gtk_widget_get_parent(widgets->AdvancedVirtualDeviceLabel)); - yon_char_parsed_free(parsed,parsed_size); - } - } - if (!yon_char_is_empty(device)){ - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList); - int active_devices=0; - for_iter(model,&iter){ - int status; - gtk_tree_model_get(model,&iter,5,&status,-1); - if (status) active_devices++; - } - - advanced_section *section = yon_advanced_section_new(); - section->part_source = PART_SOURCE_VIRTUAL; - section->partition = device; - section->device = device; - yon_advanced_section_append(section); - - } - yon_char_parsed_free(vfs_file,size); - yon_advanced_update(widgets); } \ No newline at end of file diff --git a/source/ubinstall-gtk-installation.c b/source/ubinstall-gtk-installation.c index 86b6b18..6990577 100644 --- a/source/ubinstall-gtk-installation.c +++ b/source/ubinstall-gtk-installation.c @@ -185,10 +185,10 @@ int yon_install_same_partition_save(main_window *widgets){ int yon_advanced_sections_save(dictionary *dict){ if (!dict) return 0; - advanced_partition *first_section = yon_dictionary_get_data(dict->first,advanced_partition*); - advanced_partition *last_section = NULL; + advanced_part_widgets *first_section = yon_dictionary_get_data(dict->first,advanced_part_widgets*); + advanced_part_widgets *last_section = NULL; if (dict->first->next){ - last_section = yon_dictionary_get_data(dict->first->next,advanced_partition*); + last_section = yon_dictionary_get_data(dict->first->next,advanced_part_widgets*); } char *part_first = first_section->part; @@ -435,7 +435,7 @@ void yon_install_init(main_window *widgets, enum YON_PAGES page){ break; case YON_PAGE_INSTALL_ADVANCED: - yon_install_advanced_init(widgets); + // yon_install_advanced_init(widgets); return; break; case YON_PAGE_RECOVERY_GRUB_INSTALL: diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index e205f8c..0982c5d 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -281,7 +281,7 @@ int yon_page_save(main_window *widgets, enum YON_PAGES page){ return yon_install_same_partition_save(widgets); break; case YON_PAGE_INSTALL_ADVANCED: - return yon_advanced_save(widgets); + // return yon_advanced_save(widgets); break; case YON_PAGE_RECOVERY_GRUB_INSTALL: return yon_grub_install_save(widgets); diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index d731b25..bb562b6 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -773,11 +773,11 @@ void yon_main_window_create(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->AdvancedSwapFixedSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch),widgets->AdvancedSwapFixedSpin); g_signal_connect(G_OBJECT(widgets->AdvancedSwapFixedSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch),widgets->AdvancedSwapFixedSizeSwitch); - g_signal_connect(G_OBJECT(widgets->AdvancedDeviceChosenCell),"toggled",G_CALLBACK(on_install_advanced_device_chosen),widgets); + // g_signal_connect(G_OBJECT(widgets->AdvancedDeviceChosenCell),"toggled",G_CALLBACK(on_install_advanced_device_chosen),widgets); g_signal_connect(G_OBJECT(widgets->StartScenarioButton),"clicked",G_CALLBACK(yon_quick_install),widgets); g_signal_connect(G_OBJECT(widgets->SourceButton),"clicked",G_CALLBACK(on_source_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->AdvancedAddButton),"clicked",G_CALLBACK(on_advanced_partition_create),widgets); - g_signal_connect(G_OBJECT(widgets->AdvancedPartChosenCell),"toggled",G_CALLBACK(on_install_advanced_partition_chosen),widgets); + g_signal_connect(G_OBJECT(widgets->AdvancedAddButton),"clicked",G_CALLBACK(on_advanced_part_create),widgets); + // g_signal_connect(G_OBJECT(widgets->AdvancedPartChosenCell),"toggled",G_CALLBACK(on_install_advanced_partition_chosen),widgets); g_signal_connect(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),"changed",G_CALLBACK(on_advanced_virtual_device_changed),widgets); g_signal_connect(G_OBJECT(widgets->PackagesTree),"cursor-changed",G_CALLBACK(yon_on_packages_selected),widgets); g_signal_connect(G_OBJECT(widgets->PackagesTree),"row-activated",G_CALLBACK(yon_on_packages_activated),widgets); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index af3840e..7b26eb9 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -828,7 +828,7 @@ typedef struct enum ADVANCED_PART_TYPE part_type; char *part; char *device; -} advanced_partition; +} advanced_part_widgets; typedef struct { @@ -1097,7 +1097,7 @@ typedef struct char *device; int sys_section; int user_section; - int format; + char *format; gulong full_part_size; unsigned long size; char size_letter; @@ -1107,8 +1107,8 @@ typedef struct char *encryption; char *encryption_password; enum PART_SOURCE part_source; - advanced_partition *partition_widgets; -} advanced_section; + advanced_part_widgets *partition_widgets; +} advanced_part_data; struct row_data { @@ -1361,8 +1361,8 @@ void yon_software_init(main_window *widgets); void on_install_advanced_device_chosen(GtkCellRenderer *, gchar *path, main_window *widgets); void on_install_advanced_partition_chosen(GtkCellRenderer *, gchar *path, main_window *widgets); void yon_devices_setup(main_window *widgets); -void on_advanced_password_clicked(GtkWidget *, advanced_partition *part); -advanced_partition *yon_advanced_partition_new(); +void on_advanced_password_clicked(GtkWidget *, advanced_part_widgets *part); +advanced_part_widgets *yon_advanced_partition_new(); void on_advanced_part_remove(GtkWidget *self, main_window *widgets); int yon_advanced_get_part_size(main_window *widgets); void yon_advanced_partition_clear(main_window *widgets); @@ -1392,28 +1392,28 @@ gboolean on_country_filter(GtkTreeModel *self, GtkTreeIter *iter, main_window *w gboolean yon_os_component_insert(struct row_data *row_input); void *yon_os_components_setup(main_window *widgets); gboolean yon_spinner_switch_off(GtkSpinner *target); -void on_advanced_added(GtkWidget *, char *, main_window *); -void on_advanced_new(GtkWidget *, main_window *); -int yon_advanced_section_get(char *partition); -void yon_advanced_partition_set_from_section(advanced_partition *part, advanced_section *section); -void yon_advanced_update(main_window *widgets); -void on_advanced_partition_create(GtkWidget *, main_window *widgets); -void yon_advanced_parts_update(main_window *widgets); -void on_advanced_partition_add(GtkWidget *, char *path, main_window *widgets); -void yon_advanced_section_remove_all(); -void on_advanced_section_toggled(GtkWidget *self, main_window *widgets); +// void on_advanced_added(GtkWidget *, char *, main_window *); +// void on_advanced_new(GtkWidget *, main_window *); +// int yon_advanced_section_get(char *partition); +// void yon_advanced_partition_set_from_section(advanced_part_widgets *part, advanced_part_widgets *section); +// void yon_advanced_update(main_window *widgets); +// void on_advanced_partition_create(GtkWidget *, main_window *widgets); +// void yon_advanced_parts_update(main_window *widgets); +// void on_advanced_partition_add(GtkWidget *, char *path, main_window *widgets); +// void yon_advanced_section_remove_all(); +// void on_advanced_section_toggled(GtkWidget *self, main_window *widgets); void yon_fs_type_setup(GtkComboBoxText *target); -void yon_advanced_set_max_size_from_partition(advanced_partition *part, main_window *widgets); -void on_advanced_size_changed(GtkWidget *self, main_window *widgets); -int yon_advanced_save(main_window *widgets); -void yon_advanced_part_parameter_changed(GtkWidget *self, advanced_partition *part); -void yon_advanced_section_update(main_window *widgets); -void yon_advanced_section_update_section(advanced_partition *part, GtkWidget *cur_toggle, main_window *widgets); -int yon_advanced_section_get_by_part(advanced_partition *part); -void yon_advanced_section_remove_by_name(char *part); -void on_advanced_virtual_device_changed(GtkWidget *, main_window *widgets); -int yon_advanced_section_append(advanced_section *section); -void on_format_changed(GtkWidget *self, advanced_partition *part); +// void yon_advanced_set_max_size_from_partition(advanced_part_widgets *part, main_window *widgets); +// void on_advanced_size_changed(GtkWidget *self, main_window *widgets); +// int yon_advanced_save(main_window *widgets); +// void yon_advanced_part_parameter_changed(GtkWidget *self, advanced_part_widgets *part); +// void yon_advanced_section_update(main_window *widgets); +// void yon_advanced_section_update_section(advanced_part_widgets *part, GtkWidget *cur_toggle, main_window *widgets); +// int yon_advanced_section_get_by_part(advanced_part_widgets *part); +// void yon_advanced_section_remove_by_name(char *part); +// void on_advanced_virtual_device_changed(GtkWidget *, main_window *widgets); +// int yon_advanced_section_append(advanced_part_widgets *section); +void on_format_changed(GtkWidget *self, advanced_part_widgets *part); int yon_layouts_get(); void on_link(GtkWidget *self, char *uri, gpointer); void on_source_changed(GtkComboBox *self); @@ -1533,4 +1533,15 @@ gboolean on_log_window_exit(GtkWidget *,GdkEvent*, log_window *window); void yon_modules_missed_func(main_window *widgets); void yon_scroll_block_for_builder(GtkBuilder *builder); void yon_advanced_device_choose(main_window *widgets, const char *device); -void yon_advanced_part_choose(main_window *widgets, const char *part); \ No newline at end of file +void yon_advanced_part_choose(main_window *widgets, const char *part); +advanced_part_data *yon_advanced_part_data_new(); +char *yon_advanced_part_data_get_parameter(const char *config_param, int pos); +advanced_part_data *yon_advanced_get_config_data(int pos); +void yon_advanced_part_create_for_device(advanced_part_data *data, main_window *widgets); +void yon_advanced_part_add_parts_for_device(const char *device_name, main_window *widgets); +void yon_advanced_part_remove_parts_for_device(const char *device_name, main_window *widgets); +void yon_advanced_init(main_window *widgets); +advanced_part_widgets *yon_advanced_part_create(advanced_part_data *part_data); +void on_advanced_virtual_device_changed(GtkWidget *, main_window *widgets); +void on_advanced_part_create(GtkWidget *self, main_window *widgets); +int yon_advanced_part_select_for_data(advanced_part_data *data, main_window *widgets); \ No newline at end of file diff --git a/ubinstall-gtk-keyboard-layouts.glade b/ubinstall-gtk-keyboard-layouts.glade index 8bc5236..a44c65a 100644 --- a/ubinstall-gtk-keyboard-layouts.glade +++ b/ubinstall-gtk-keyboard-layouts.glade @@ -1,5 +1,5 @@ - + @@ -17,6 +17,7 @@ 550 True False + True com.ublinux.ubl-settings-keyboard @@ -29,6 +30,9 @@ True False 1 + + + column diff --git a/ubinstall-gtk.glade b/ubinstall-gtk.glade index 1a30674..c248eae 100644 --- a/ubinstall-gtk.glade +++ b/ubinstall-gtk.glade @@ -10134,6 +10134,9 @@ separately into the selected partition. + + + False -- 2.35.1 From 5ba059ac2ab5ed2efc2a4fef5a2e924e24042e6b Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Fri, 27 Feb 2026 18:00:09 +0600 Subject: [PATCH 3/3] WIP advanced installation rework --- source/ubinstall-gtk-advanced.c | 1357 ++++++--------------------- source/ubinstall-gtk-config-hub.c | 5 +- source/ubinstall-gtk-decorations.c | 8 +- source/ubinstall-gtk-installation.c | 111 +-- source/ubinstall-gtk-page-switch.c | 4 +- source/ubinstall-gtk-region.c | 4 +- source/ubinstall-gtk.c | 6 +- source/ubinstall-gtk.h | 21 +- 8 files changed, 374 insertions(+), 1142 deletions(-) diff --git a/source/ubinstall-gtk-advanced.c b/source/ubinstall-gtk-advanced.c index 8ba3949..91f9a83 100644 --- a/source/ubinstall-gtk-advanced.c +++ b/source/ubinstall-gtk-advanced.c @@ -3,1041 +3,112 @@ #define toggled_icon_name "com.ublinux.libublsettingsui-gtk3.toggled-symbolic" #define untoggled_icon_name "com.ublinux.libublsettingsui-gtk3.untoggled-symbolic" -// advanced_section *yon_advanced_section_new(); -// void yon_advanced_section_remove(); - -// int sections_size=0; -// advanced_section *sections[2] = {NULL}; - -// advanced_section *yon_advanced_section_new(){ -// if (sections_size>=2) return NULL; -// advanced_section *section = malloc(sizeof(advanced_section)); -// memset(section,0,sizeof(advanced_section)); -// if (!sections_size){ -// section->sys_section=1; -// section->user_section=1; -// } else { -// section->sys_section=0; -// section->user_section=1; -// section->sys_section=1; -// section->user_section=0; -// } -// return section; -// } - -// void yon_advanced_section_remove_all(){ -// if (sections[0]){ -// free(sections[0]); -// sections[0]=NULL; -// } -// if (sections[1]){ -// free(sections[1]); -// sections[1]=NULL; -// } -// sections_size=0; -// } - -// void yon_advanced_section_remove_by_name(char *part){ -// int pos = yon_advanced_section_get(part); -// switch(pos){ -// case 0: -// if (sections[0]){ -// free(sections[0]); -// if (sections[1]){ -// sections[0]=sections[1]; -// sections[1]=NULL; -// } else { -// sections[0]=NULL; -// } -// sections_size--; -// } -// break; -// case 1: -// if (sections[1]){ -// free(sections[1]); -// sections[1]=NULL; -// sections_size--; -// } -// break; -// default: return; -// } -// } -// void yon_advanced_section_remove(advanced_part_widgets *part){ -// int pos = yon_advanced_section_get_by_part(part); -// switch(pos){ -// case 0: -// if (sections[0]){ -// free(sections[0]); -// if (sections[1]){ -// sections[0]=sections[1]; -// sections[1]=NULL; -// } else { -// sections[0]=NULL; -// } -// sections_size--; -// } -// break; -// case 1: -// if (sections[1]){ -// free(sections[1]); -// sections[1]=NULL; -// sections_size--; -// } -// break; -// default:return; -// } -// } - -// int yon_advanced_section_get_by_part(advanced_part_widgets *part){ -// if (!part) return -1; -// if (sections_size>0&§ions[0]->partition_widgets==part){ -// return 0; -// } else if (sections_size>1&§ions[1]->partition_widgets==part){ -// return 1; -// } -// return -1; -// } - -// int yon_advanced_section_get(char *partition){ -// if (yon_char_is_empty(partition)) return -1; -// if (sections_size>0&&!strcmp(sections[0]->part_source==PART_SOURCE_PART?sections[0]->partition:sections[0]->device,partition)){ -// return 0; -// } else if (sections_size>1&&!strcmp(sections[1]->part_source==PART_SOURCE_PART?sections[1]->partition:sections[1]->device,partition)){ -// return 1; -// } -// return -1; -// } - -// void yon_advanced_partition_set_from_section(advanced_part_widgets *part, advanced_section *section){ -// if (part&§ion){ -// gtk_label_set_text(GTK_LABEL(part->SectionLabel),section->part_source==PART_SOURCE_PART?section->partition:section->device); -// part->part = yon_char_new(section->partition); -// part->device = yon_char_new(section->device); -// if (!yon_char_is_empty(part->part)) part->part_type = ADVANCED_PART_NEW; -// else part->part_type = ADVANCED_PART_EXISTING; -// if (section->format){ -// gtk_combo_box_set_active(GTK_COMBO_BOX(part->FormatCombo),section->format); -// if (section->size){ -// gtk_spin_button_set_value(GTK_SPIN_BUTTON(part->SizeSpin),section->size); -// gtk_combo_box_set_active(GTK_COMBO_BOX(part->SizeCombo),yon_get_size_get_from_letter(section->size_letter)-1); -// } -// if (section->part_label){ -// gtk_entry_set_text(GTK_ENTRY(part->PartLabelEntry),section->part_label); -// } -// if (section->fs_label) -// gtk_entry_set_text(GTK_ENTRY(part->FileSystemLabelEntry),section->fs_label); -// if (!yon_char_is_empty(section->fs_type)){ -// gtk_combo_box_set_active_id(GTK_COMBO_BOX(part->FileSystemTypeCombo),section->fs_type); -// } -// if (!yon_char_is_empty(section->encryption)){ -// gtk_combo_box_set_active_id(GTK_COMBO_BOX(part->EncryptionCombo),section->encryption); -// gtk_entry_set_text(GTK_ENTRY(part->EncryptionEntry),section->encryption_password); -// } -// } -// } -// } - -// void yon_advanced_update(main_window *widgets){ -// yon_advanced_partition_clear(widgets); -// int virtual_found = 0; -// for (int i=0;ipartition_widgets) sections[i]->partition_widgets = NULL; -// sections[i]->partition_widgets = part; -// g_signal_connect(G_OBJECT(part->RemoveButton),"clicked",G_CALLBACK(on_advanced_part_remove),widgets); -// g_signal_connect(G_OBJECT(part->SystemSectionToggle),"clicked",G_CALLBACK(on_advanced_section_toggled),widgets); -// g_signal_connect(G_OBJECT(part->UserDataSectionToggle),"clicked",G_CALLBACK(on_advanced_section_toggled),widgets); -// // g_signal_connect(G_OBJECT(part->SizeCombo),"changed",G_CALLBACK(on_advanced_size_changed),widgets); -// if (i==0){ -// gtk_widget_set_sensitive(part->SystemSectionToggle,0); -// gtk_widget_set_sensitive(part->UserDataSectionToggle,0); -// GtkWidget *SystemImage = gtk_button_get_image(GTK_BUTTON(part->SystemSectionToggle)); -// GtkWidget *UserImage = gtk_button_get_image(GTK_BUTTON(part->UserDataSectionToggle)); -// gtk_image_set_from_icon_name(GTK_IMAGE(SystemImage),toggled_icon_name,GTK_ICON_SIZE_BUTTON); -// gtk_image_set_from_icon_name(GTK_IMAGE(UserImage),toggled_icon_name,GTK_ICON_SIZE_BUTTON); -// } -// yon_advanced_partition_set_from_section(part,sections[i]); -// // yon_advanced_set_max_size_from_partition(part,widgets); -// gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); -// g_signal_handlers_block_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); -// if (!virtual_found&>k_combo_box_set_active_id(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo),sections[i]->part_source==PART_SOURCE_PART?sections[i]->partition:sections[i]->device)){ -// virtual_found=1; -// } -// g_signal_handlers_unblock_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); - -// part->part_type = ADVANCED_PART_EXISTING; -// } -// if (!virtual_found||!sections_size) { -// g_signal_handlers_block_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); -// gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo),0); -// g_signal_handlers_unblock_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); -// } -// yon_advanced_section_update(widgets); -// GtkTreeIter itar; -// for_iter(GTK_TREE_MODEL(widgets->PartitionsList),&itar){ -// int status; -// char *target; -// gtk_tree_model_get(GTK_TREE_MODEL(widgets->PartitionsList),&itar,0,&target,7,&status,-1); -// if (!((sections_size>0&&!strcmp(target,sections[0]->part_source==PART_SOURCE_PART?sections[0]->partition:sections[0]->device))||(sections_size>1&&!strcmp(target,sections[1]->part_source==PART_SOURCE_PART?sections[1]->partition:sections[1]->device)))){ -// gtk_list_store_set(widgets->PartitionsList,&itar,7,0,-1); -// } -// } -// if (sections_size>=2){ -// gtk_widget_hide(widgets->AdvancedAddButton); -// } else { -// gtk_widget_show(widgets->AdvancedAddButton); - -// } -// } - -// void on_advanced_partition_create(GtkWidget *, main_window *widgets){ -// int found = 0; -// GtkTreeIter iter, *last_unvalid = NULL; -// GtkTreeModel *model; -// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->AdvancedDeviceTree)),&model,&iter)){ -// char *target; -// int active; -// gtk_tree_model_get(GTK_TREE_MODEL(widgets->DevicesList),&iter,0,&target,5,&active,-1); -// if (active){ -// if (!yon_advanced_section_get(target)){ -// last_unvalid = gtk_tree_iter_copy(&iter); -// } else { -// found=1; -// if (sections_size==2) return; -// advanced_section *section = yon_advanced_section_new(); -// section->part_source = PART_SOURCE_DEVICE; -// section->device = target; -// section->partition = NULL; -// sections[sections_size]=section; -// sections_size++; -// } -// } -// } -// if (!found&&last_unvalid){ -// char *target; -// int active; -// gtk_tree_model_get(GTK_TREE_MODEL(widgets->DevicesList),last_unvalid,0,&target,5,&active,-1); - -// if (sections_size==2) return; -// advanced_section *section = yon_advanced_section_new(); -// section->part_source = PART_SOURCE_DEVICE; -// section->device = target; -// section->partition = NULL; -// sections[sections_size]=section; -// sections_size++; -// } -// yon_advanced_update(widgets); -// } - -// void on_advanced_partition_add(GtkWidget *, char *path, main_window *widgets){ -// GtkTreeIter iter; -// if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->PartitionsList),&iter,path)){ -// char *target, *device; -// int status; -// gtk_tree_model_get(GTK_TREE_MODEL(widgets->PartitionsList),&iter,0,&target,7,&status,9,&device,-1); -// gtk_list_store_set(widgets->DevicesList,&iter,7,!status,-1); -// if (!status){ -// if (sections_size==2) return; -// advanced_section *section = yon_advanced_section_new(); -// section->part_source = PART_SOURCE_PART; -// section->device = NULL; -// section->partition = target = device; -// sections[sections_size]=section; -// sections_size++; -// } else { -// yon_advanced_section_remove_by_name(target); -// } -// } -// yon_advanced_update(widgets); +void on_format_changed(GtkWidget *self, advanced_part_widgets *part){ + int active = gtk_combo_box_get_active(GTK_COMBO_BOX(self)); + switch (active){ + case 0: + case 1: gtk_revealer_set_reveal_child(GTK_REVEALER(part->FormatRevealer),0); + break; + case 2: gtk_revealer_set_reveal_child(GTK_REVEALER(part->FormatRevealer),1); + } +} -// } +void on_advanced_password_clicked(GtkWidget *, advanced_part_widgets *part){ + yon_password_window *window = yon_password_open(GTK_ENTRY(part->EncryptionEntry)); + gtk_widget_hide(gtk_widget_get_parent(window->EncryptionCombo)); + gtk_widget_hide(window->HashBox); + gtk_widget_hide(window->NoEncriptionCheck); +} -// void yon_advanced_device_choose(main_window *widgets, const char *device){ -// if (yon_char_is_empty(device)) return; -// GtkTreeIter iter; -// GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList); -// for_iter(model, &iter){ -// char *target; -// gtk_tree_model_get(model,&iter,0,&target,-1); -// if (!yon_char_is_empty(target)&&strstr(device,target)){ -// char *path = gtk_tree_model_get_string_from_iter(model,&iter); -// g_signal_emit_by_name(G_OBJECT(widgets->AdvancedDeviceChosenCell),"toggled",path,NULL); -// } -// } -// } +void on_advanced_part_content_changed(GtkWidget *, GtkWidget *, main_window *widgets){ + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); + int size = g_list_length(list); + if (!size){ + return; + } else if (size == 1){ + advanced_part_widgets *part = g_object_get_data(G_OBJECT(list->data),"advanced_part_widgets"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->SystemSectionToggle),1); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->UserDataSectionToggle),1); + } else if (size == 2){ + advanced_part_widgets *part1 = g_object_get_data(G_OBJECT(list->data),"advanced_part_widgets"); + advanced_part_widgets *part2 = g_object_get_data(G_OBJECT(list->next->data),"advanced_part_widgets"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part1->SystemSectionToggle),1); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part1->UserDataSectionToggle),0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part2->SystemSectionToggle),0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part2->UserDataSectionToggle),1); + } +} -// void yon_advanced_part_choose(main_window *widgets, const char *part){ -// if (yon_char_is_empty(part)) return; -// GtkTreeIter iter; -// GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); -// for_iter(model, &iter){ -// char *target; -// gtk_tree_model_get(model,&iter,0,&target,-1); -// if (!yon_char_is_empty(target)&&strstr(part,target)){ -// char *path = gtk_tree_model_get_string_from_iter(model,&iter); -// g_signal_emit_by_name(G_OBJECT(widgets->AdvancedPartChosenCell),"toggled",path,NULL); -// } -// } -// } +advanced_part_widgets *yon_advanced_part_get_for_name(const char *part_name,main_window *widgets){ + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); + GList *iter; + for (iter=list;iter;iter=iter->next){ + advanced_part_widgets *part = g_object_get_data(G_OBJECT(iter->data),"advanced_part_widgets"); + advanced_part_data *data = g_object_get_data(G_OBJECT(iter->data),"advanced_part_data"); + if (!yon_char_is_empty(data->device)){ + if (!strcmp(data->device,part_name)) return part; + } + if (!yon_char_is_empty(data->partition)){ + if (!strcmp(data->partition,part_name)) return part; + } + } + return NULL; +} -// void yon_install_advanced_init(main_window *widgets){ -// yon_advanced_partition_clear(widgets); -// g_signal_handlers_block_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); -// gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->AdvancedVirtualDeviceCombo)); -// gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->AdvancedVirtualDeviceCombo),NO_LABEL); -// gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo),0); -// int size; -// config_str vmf_file = yon_resource_open_file(vfs_list_path,&size); -// for (int i=1;iAdvancedVirtualDeviceCombo),parsed[2],parsed[0]); -// yon_char_parsed_free(parsed,parsed_size); -// } -// yon_char_parsed_free(vmf_file,size); -// g_signal_handlers_unblock_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); -// char *device = config(device_parameter); -// char *parts = config(part_parameter); -// char *part_size = config(part_size_parameter); -// char *part_label = config(part_label_parameter); -// char *part_fs_type = config(part_fs_type_parameter); -// char *part_fs_label = config(part_fs_label_parameter); -// char *part_crypt = config(part_crypt_parameter); -// char *part_format = config(part_format_parameter); -// char *boot = config(boot_parameter); -// char *swap = config(swap_parameter); -// char *swap_size = config(swap_size_parameter); -// if (yon_char_is_empty(device)&&yon_char_is_empty(parts)) return; -// { -// int size; -// config_str device_parsed = yon_char_parse(device,&size,","); -// if (size>0&&!yon_char_is_empty(device_parsed[0])){ -// yon_advanced_device_choose(widgets,device_parsed[0]); -// while(gtk_events_pending()) gtk_main_iteration(); -// sections[0] = yon_advanced_section_new(); -// sections_size++; -// on_advanced_partition_create(NULL,widgets); -// sections[0]->device=device_parsed[0]; -// }; -// if (size>1&&!yon_char_is_empty(device_parsed[1])){ -// yon_advanced_device_choose(widgets,device_parsed[1]); -// while(gtk_events_pending()) gtk_main_iteration(); -// sections[1] = yon_advanced_section_new(); -// on_advanced_partition_create(NULL,widgets); -// sections_size++; -// sections[1]->device=device_parsed[1]; -// } -// if (size) free(device_parsed); -// } -// { -// int size; -// config_str part_parsed = yon_char_parse(parts,&size,","); -// if (size>0&&!yon_char_is_empty(part_parsed[0])){ -// yon_advanced_device_choose(widgets,part_parsed[0]); -// yon_advanced_part_choose(widgets,part_parsed[0]); -// sections[0] = yon_advanced_section_new(); -// while(gtk_events_pending()) gtk_main_iteration(); -// sections[0]->partition=part_parsed[0]; -// }; -// if (size>1&&!yon_char_is_empty(part_parsed[1])){ -// yon_advanced_device_choose(widgets,part_parsed[1]); -// yon_advanced_part_choose(widgets,part_parsed[1]); -// sections[1] = yon_advanced_section_new(); -// while(gtk_events_pending()) gtk_main_iteration(); -// sections[1]->device=part_parsed[1]; -// } -// if (size) free(part_parsed); -// } -// { -// if (!yon_char_is_empty(part_size)){ -// int size; -// config_str parsed = yon_char_parse(part_size,&size,","); -// if (size>0&&!yon_char_is_empty(parsed[0])){ -// sections[0]->size = atol(parsed[0]); -// sections[0]->size_letter = parsed[0][strlen(parsed[0])-1]; -// if (size>1&&!yon_char_is_empty(parsed[1])){ +void on_install_advanced_device_chosen(GtkCellRenderer *, gchar *path, main_window *widgets){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList); + if (gtk_tree_model_get_iter_from_string(model,&iter,path)){ + int status; + char *target; + gtk_tree_model_get(model,&iter,0,&target,5,&status,-1); + gtk_list_store_set(widgets->DevicesList,&iter,5,!status,-1); + if (status){ + for_iter (model,&iter){ + gtk_list_store_set(widgets->DevicesList,&iter,6,1,-1); + } + yon_advanced_part_remove_parts_for_device(target,widgets); + } else { + yon_advanced_part_add_parts_for_device(target,widgets); + } + } +} -// sections[1]->size = atol(parsed[1]); -// sections[1]->size_letter = parsed[1][strlen(parsed[1])-1]; -// } -// } -// free(parsed); -// } -// if (!yon_char_is_empty(part_label)){ -// int size; -// config_str parsed = yon_char_parse(part_label,&size,","); -// if (size>0&&!yon_char_is_empty(parsed[0])){ -// sections[0]->part_label = parsed[0]; -// if (size>1&&!yon_char_is_empty(parsed[1])){ -// sections[1]->part_label = parsed[1]; -// } -// } -// free(parsed); -// } -// if (!yon_char_is_empty(part_fs_type)){ -// int size; -// config_str parsed = yon_char_parse(part_fs_type,&size,","); -// if (size>0&&!yon_char_is_empty(parsed[0])){ -// sections[0]->fs_type = parsed[0]; -// if (size>1&&!yon_char_is_empty(parsed[1])){ -// sections[1]->fs_type = parsed[1]; -// } -// } -// free(parsed); -// } -// if (!yon_char_is_empty(part_fs_label)){ -// int size; -// config_str parsed = yon_char_parse(part_fs_label,&size,","); -// if (size>0&&!yon_char_is_empty(parsed[0])){ -// sections[0]->fs_label = parsed[0]; -// if (size>1&&!yon_char_is_empty(parsed[1])){ -// sections[1]->fs_label = parsed[1]; -// } -// } -// free(parsed); -// } -// if (!yon_char_is_empty(part_crypt)){ -// int size; -// config_str parsed = yon_char_parse(part_crypt,&size,","); -// if (size>0&&!yon_char_is_empty(parsed[0])){ -// sections[0]->encryption = parsed[0]; -// if (size>1&&!yon_char_is_empty(parsed[1])){ -// sections[1]->encryption = parsed[1]; -// } -// } -// free(parsed); -// } -// if (!yon_char_is_empty(part_format)){ -// int size; -// config_str parsed = yon_char_parse(part_format,&size,","); -// if (size>0&&!yon_char_is_empty(parsed[0])){ -// if (!strcmp(parsed[0],"yes")){ -// sections[0]->format = 2; -// } else if (!strcmp(parsed[0],"no")){ -// sections[0]->format = 1; -// } -// if (size>1&&!yon_char_is_empty(parsed[1])){ -// if (!strcmp(parsed[1],"yes")){ -// sections[1]->format = 2; -// } else if (!strcmp(parsed[1],"no")){ -// sections[1]->format = 1; -// } -// } -// } -// free(parsed); -// } -// if (!yon_char_is_empty(boot)){ - -// } -// if (!yon_char_is_empty(swap)){ +int yon_advanced_part_check_count(main_window *widgets){ + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); + int len = g_list_length(list); + g_list_free(list); + if (len<2) return 1; + return 0; +} -// } -// if (!yon_char_is_empty(swap_size)){ +void on_install_advanced_partition_chosen(GtkCellRenderer*, gchar *path, main_window *widgets){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); -// } + gtk_tree_model_get_iter_from_string(model,&iter,path); + int status; + char *target_part, *device; + gulong part_size; + gtk_tree_model_get(model,&iter,0,&target_part,5,&part_size,7,&status,9,&device,-1); + if (status){ + advanced_part_widgets *part = yon_advanced_part_get_for_name(target_part,widgets); + if (part){ + gtk_list_store_set(widgets->PartitionsList,&iter,7,0,-1); + gtk_widget_destroy(part->MainBox); + free(part); + } -// } -// yon_advanced_update(widgets); -// } - -// void on_install_advanced_partition_chosen(GtkCellRenderer*, gchar *path, main_window *widgets){ -// GtkTreeIter iter; -// GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); - -// int chosen = 0; -// chosen = yon_advanced_get_part_size(widgets); - -// gtk_tree_model_get_iter_from_string(model,&iter,path); -// int status; -// char *target_part, *device; -// gulong part_size; -// gtk_tree_model_get(model,&iter,0,&target_part,5,&part_size,7,&status,9,&device,-1); - -// if (!status){ -// if (chosen<2){ -// gtk_list_store_set(widgets->PartitionsList,&iter,7,1,-1); -// chosen++; -// advanced_section *section = yon_advanced_section_new(); -// section->part_source = PART_SOURCE_PART; -// section->partition = target_part; -// section->device = NULL; -// section->full_part_size = part_size; -// sections[sections_size]=section; -// sections_size++; -// } -// } else { -// yon_advanced_section_remove_by_name(target_part); -// gtk_list_store_set(widgets->PartitionsList,&iter,7,0,-1); -// } -// yon_advanced_update(widgets); -// } - -// void yon_advanced_parts_update(main_window *widgets){ -// int size; -// config_str partitions; -// partitions = yon_config_load(yon_debug_output("%s\n",get_parts_and_devices_command),&size); -// for (int i=0;iDevicesList); -// GtkTreeIter iter; -// for_iter (model,&iter){ -// char *disk_path; -// int status; -// gtk_tree_model_get(model,&iter,0,&disk_path,5,&status,-1); -// if (!status) continue; - -// for (int i=0;i2){ -// char sizemod='\0'; -// capacity_long = atol(parsed[2]); - -// char *temp = yon_char_from_double(yon_size_long_convert_automatic(capacity_long,&sizemod)); -// capacity = yon_char_append_c(temp,sizemod); -// free(temp); -// } -// if (parsed_size>7&&!yon_char_is_empty(parsed[7])){ -// char sizemod='\0'; -// free_space_long = capacity_long-atol(parsed[7]); -// char *temp = yon_char_from_double(yon_size_long_convert_automatic(free_space_long,&sizemod)); -// free_space = yon_char_append_c(temp,sizemod); -// free(temp); -// } -// if (parsed_size>3){ -// fs_type = parsed[3]; -// } -// if (parsed_size>4){ -// label = parsed[4]; -// } - -// GtkTreeIter itar; -// gtk_list_store_append(widgets->PartitionsList,&itar); -// gtk_list_store_set(widgets->PartitionsList,&itar,0,name,1,capacity,2,free_space,3,fs_type,4,label,5,capacity_long,6,free_space_long,8,1,9,disk_path,-1); -// } -// yon_char_parsed_free(parsed,parsed_size); -// } -// } -// } -// yon_char_parsed_free(partitions,size); -// } - -// void yon_advanced_set_max_size_from_partition(advanced_part_widgets *part, main_window *widgets){ -// char *cur_name = part->part_type == ADVANCED_PART_EXISTING?part->device:part->part; -// GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); -// GtkTreeIter iter; -// long selected_size; - -// for_iter(model,&iter){ -// char *target; -// gtk_tree_model_get(model,&iter,part->part_type == ADVANCED_PART_EXISTING?9:0,&target,-1); -// if (!strcmp(target,cur_name)){ -// gtk_tree_model_get(model,&iter,6,&selected_size,-1); -// if (!selected_size){ -// gtk_tree_model_get(model,&iter,5,&selected_size,-1); -// } -// if (selected_size){ -// GtkAdjustment *adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(part->SizeSpin)); -// const char *sizemod = gtk_combo_box_get_active_id(GTK_COMBO_BOX(part->SizeCombo)); -// double new_size = yon_size_long_convert_to_mod(selected_size,sizemod[0]); -// gtk_adjustment_set_upper(adj,new_size); -// gdouble old_value = gtk_adjustment_get_value(adj); -// if (old_value>new_size){ -// gtk_adjustment_set_value(adj,new_size); -// } -// } -// } -// } -// } - -// void on_advanced_size_changed(GtkWidget *,main_window *){ -// // advanced_part_widgets *part = g_object_get_data(G_OBJECT(self),"advanced_part_widgets"); -// // yon_advanced_set_max_size_from_partition(part,widgets); -// } - -// void on_install_advanced_device_chosen(GtkCellRenderer *, gchar *path, main_window *widgets){ -// gtk_list_store_clear(widgets->PartitionsList); -// yon_advanced_section_remove_all(); -// GtkTreeIter iter; -// GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList); -// // chosen = yon_advanced_get_part_size(widgets); - -// if (gtk_tree_model_get_iter_from_string(model,&iter,path)){ -// int status; -// char *target; -// gtk_tree_model_get(model,&iter,0,&target,5,&status,-1); -// if (!status){ // checks -// gtk_list_store_set(widgets->DevicesList,&iter,5,!status,-1); - -// } else { // unchecks -// gtk_list_store_set(widgets->DevicesList,&iter,5,!status,-1); -// for_iter (model,&iter){ -// gtk_list_store_set(widgets->DevicesList,&iter,6,1,-1); -// } -// } -// } -// int chosen_amount = 0; -// for_iter(model,&iter){ -// int status; -// gtk_tree_model_get(model,&iter,5,&status,-1); -// if (status)chosen_amount++; -// } -// // gtk_widget_set_sensitive(widgets->AdvancedVirtualDeviceCombo,chosen_amount>=2); -// // if (chosen) gtk_widget_set_sensitive(widgets->AdvancedAddButton,1); -// // else gtk_widget_set_sensitive(widgets->AdvancedAddButton,0); -// yon_advanced_parts_update(widgets); -// yon_advanced_update(widgets); -// } - -// void on_advanced_password_clicked(GtkWidget *, advanced_part_widgets *part){ -// yon_password_window *window = yon_password_open(GTK_ENTRY(part->EncryptionEntry)); -// gtk_widget_hide(gtk_widget_get_parent(window->EncryptionCombo)); -// gtk_widget_hide(window->HashBox); -// gtk_widget_hide(window->NoEncriptionCheck); -// } - -// void yon_advanced_partition_clear(main_window *widgets){ -// GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); -// GList *iter; -// for (iter=list;iter;iter=iter->next){ -// advanced_part_widgets *part = g_object_get_data(G_OBJECT(iter->data),"advanced_part_widgets"); -// gtk_widget_destroy(GTK_WIDGET(iter->data)); -// free(part); -// } -// } - -// int yon_advanced_get_part_size(main_window *widgets){ -// int size = 0; -// GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); -// size = g_list_length(list); -// g_list_free(list); -// return size; -// } - -// void yon_advanced_section_update_section(advanced_part_widgets *part,GtkWidget *cur_toggle,main_window *widgets){ -// int systoggle = cur_toggle == part->SystemSectionToggle; -// advanced_section *section = sections[yon_advanced_section_get_by_part(part)]; -// g_signal_handlers_block_by_func(G_OBJECT(cur_toggle),G_CALLBACK(on_advanced_section_toggled),widgets); -// gboolean active = systoggle?section->sys_section:section->user_section; -// gtk_widget_set_sensitive(cur_toggle,!active); -// gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cur_toggle),active); -// g_signal_handlers_unblock_by_func(G_OBJECT(cur_toggle),G_CALLBACK(on_advanced_section_toggled),widgets); -// GtkWidget *compare_image = gtk_button_get_image(GTK_BUTTON(cur_toggle)); -// gtk_image_set_from_icon_name(GTK_IMAGE(compare_image),!active?untoggled_icon_name:toggled_icon_name,GTK_ICON_SIZE_BUTTON); -// } - -// void yon_advanced_section_update(main_window *widgets){ -// GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); -// GList *iter; -// for (iter=list;iter;iter=iter->next){ -// advanced_part_widgets *compare_part = g_object_get_data(G_OBJECT(iter->data),"advanced_part_widgets"); -// GtkWidget *cur_toggle = compare_part->SystemSectionToggle; -// yon_advanced_section_update_section(compare_part,cur_toggle,widgets); -// cur_toggle = compare_part->UserDataSectionToggle; -// yon_advanced_section_update_section(compare_part,cur_toggle,widgets); -// } -// } - -// void on_advanced_section_toggled(GtkWidget *self, main_window *widgets){ -// advanced_part_widgets *part = g_object_get_data(G_OBJECT(self),"advanced_part_widgets"); -// int pos = yon_advanced_section_get_by_part(part); -// if (self == part->SystemSectionToggle){ -// sections[pos]->sys_section = 1; -// if (sections[!pos]&§ions[pos]->user_section){ -// sections[pos]->user_section=0; -// sections[!pos]->user_section=1; -// } -// } else { -// sections[pos]->user_section = 1; -// if (sections[!pos]&§ions[pos]->sys_section){ -// sections[pos]->sys_section=0; -// sections[!pos]->sys_section=1; -// } -// } -// GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); -// GList *iter; -// for (iter=list;iter;iter=iter->next){ -// advanced_part_widgets *compare_part = g_object_get_data(G_OBJECT(iter->data),"advanced_part_widgets"); -// if (part != compare_part) { -// if (self == part->SystemSectionToggle){ -// sections[yon_advanced_section_get_by_part(compare_part)]->sys_section = 0; -// } else { -// sections[yon_advanced_section_get_by_part(compare_part)]->user_section = 0; -// } -// } -// } -// yon_advanced_section_update(widgets); -// } - -// int yon_advanced_save(main_window *widgets){ -// yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"custom"); -// char *devices[2] = {NULL}; -// char *parts[2] = {NULL}; -// char *part_size[2] = {NULL}; -// char *part_label[2] = {NULL}; -// char *fs_type[2] = {NULL}; -// char *fs_label[2] = {NULL}; -// char *encryption[2] = {NULL}; -// char *format[2] = {NULL}; -// if (!sections_size){ -// yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// return 0; -// } -// advanced_section *cur_section = sections[0]->sys_section?sections[0]:sections[1]; -// if (cur_section->part_source == PART_SOURCE_VIRTUAL){ - -// char *device = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo)); -// int size; -// config_str vfs_file = yon_resource_open_file(vfs_list_path,&size); -// config_str cur_device = NULL; -// for (int i=0;iDevicesList); -// int active_devices=0; -// for_iter(model,&iter){ -// int status; -// gtk_tree_model_get(model,&iter,5,&status,-1); -// if (status) active_devices++; -// } -// if (atoi(cur_device[3])>active_devices){ -// yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),COUNT_INVALID_LABEL(cur_device[3]),5,BACKGROUND_IMAGE_INFO_TYPE); -// yon_ubl_status_highlight_incorrect(widgets->AdvancedVirtualDeviceCombo); -// yon_char_parsed_free(cur_device,4); -// return 0; -// } - -// if (atoi(cur_device[4])%active_devices!=0){ -// yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),PARITY_INVALID_LABEL(cur_device[4]),5,BACKGROUND_IMAGE_INFO_TYPE); -// yon_ubl_status_highlight_incorrect(widgets->AdvancedVirtualDeviceCombo); -// yon_char_parsed_free(cur_device,4); -// return 0; -// } -// } -// } - -// if (cur_section->format==2){ -// format[0]="yes"; -// } else if (cur_section->format == 1){ -// format[0]="no"; -// } else { -// format[0]=NULL; -// } -// if (!yon_char_is_empty(cur_section->partition)){ -// if (!yon_char_is_empty(cur_section->partition)){ -// parts[0]=cur_section->partition; -// } else { -// parts[0]=""; -// } -// } else { -// devices[0]=cur_section->device; -// } -// if (cur_section->user_section){ -// if (!yon_char_is_empty(cur_section->device)){ -// if (!yon_char_is_empty(cur_section->partition)){ -// parts[1]=cur_section->partition; -// } else { -// parts[1]=""; -// } -// } else { -// devices[1]=cur_section->device; -// } -// } - -// if (cur_section->format==2){ -// if (cur_section->size&&yon_size_long_convert_to_mod(cur_section->full_part_size,cur_section->size_letter)>cur_section->size){ - -// char *size_str = yon_char_from_long(cur_section->size); -// char *sz_str = yon_char_append_c(size_str,cur_section->size_letter); -// part_size[0]=sz_str; -// } else { -// yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NOT_ENOUGH_SPACE_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// return 0; -// } -// if (!yon_char_is_empty(cur_section->part_label)){ -// part_label[0]=cur_section->part_label; -// } -// if (!yon_char_is_empty(cur_section->fs_type)){ -// fs_type[0]=cur_section->fs_type; -// } -// if (!yon_char_is_empty(cur_section->fs_label)){ -// fs_label[0]=cur_section->fs_label; -// } -// } -// if (sections_size>1){ -// cur_section = sections[0]->sys_section?sections[1]:sections[0]; - -// if (cur_section->format==2){ -// format[1]="yes"; -// } else if (cur_section->format==1){ -// format[1]="no"; -// } else { -// format[1] = NULL; -// } - -// devices[1]=cur_section->device; -// if (!yon_char_is_empty(cur_section->partition)){ -// parts[1]=cur_section->partition; -// } else { -// parts[1]=""; -// } - -// if (cur_section->format==2){ -// if (cur_section->size){ -// char *size_str = yon_char_from_long(cur_section->size); -// char *sz_str = yon_char_append_c(size_str,cur_section->size_letter); -// part_size[1]=sz_str; -// } -// if (!yon_char_is_empty(cur_section->part_label)){ -// part_label[1]=cur_section->part_label; -// } -// if (!yon_char_is_empty(cur_section->fs_type)){ -// fs_type[1]=cur_section->fs_type; -// } -// if (!yon_char_is_empty(cur_section->fs_label)){ -// fs_label[1]=cur_section->fs_label; -// } -// if (!yon_char_is_empty(cur_section->encryption)){ -// char *encrypt_str = yon_char_unite(cur_section->encryption,":",cur_section->encryption_password,NULL); -// encryption[1]=encrypt_str; -// } -// } -// } - -// if (devices[0]||devices[1]){ -// char *devices_str = yon_char_parsed_to_string_full(devices,2,","); -// yon_config_register(device_parameter,device_parameter_command,devices_str); -// } -// if (!yon_char_is_empty(parts[0])||!yon_char_is_empty(parts[1])){ -// char *parts_str = yon_char_parsed_to_string_full(parts,2,","); -// yon_config_register(part_parameter,part_parameter_command,parts_str); -// } else { -// yon_config_remove_by_key(part_parameter); -// } -// if (part_size[0]||part_size[1]){ -// char *part_size_str = yon_char_parsed_to_string_full(part_size,2,","); -// yon_config_register(part_size_parameter,part_size_parameter_command,part_size_str); -// } else { -// yon_config_remove_by_key(part_size_parameter); -// } -// if (part_label[0]||part_label[1]){ -// char *part_label_str = yon_char_parsed_to_string_full(part_label,2,","); -// yon_config_register(part_label_parameter,part_label_parameter_command,part_label_str); - -// } else { -// yon_config_remove_by_key(part_label_parameter); -// } -// if (fs_type[0]||fs_type[1]){ -// char *fs_type_str = yon_char_parsed_to_string_full(fs_type,2,","); -// yon_config_register(part_fs_type_parameter,part_fs_type_parameter_command,fs_type_str); - -// } else { -// yon_config_remove_by_key(part_fs_type_parameter); -// } -// if (fs_label[0]||fs_label[1]){ -// char *fs_label_str = yon_char_parsed_to_string_full(fs_label,2,","); -// yon_config_register(part_fs_label_parameter,part_fs_label_parameter_command,fs_label_str); - -// } else { -// yon_config_remove_by_key(part_fs_label_parameter); -// } -// if (encryption[0]||encryption[1]){ -// char *encryption_str = yon_char_parsed_to_string_full(encryption,2,","); -// yon_config_register(part_crypt_parameter,part_crypt_parameter_command,encryption_str); - -// } else { -// yon_config_remove_by_key(part_crypt_parameter); -// } -// if (format[0]||format[1]){ -// char *format_str = yon_char_parsed_to_string_full(format,2,","); -// yon_config_register(part_format_parameter,part_format_parameter_command,format_str); - -// } else { -// yon_config_remove_by_key(part_format_parameter); -// } -// if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedLoadTypeSwitch))){ -// char *boot = NULL; -// if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedBiosSectorSwitch))){ -// yon_char_append_element(boot,"bios","+"); -// } -// if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedEFISwitch))){ -// yon_char_append_element(boot,"efi","+"); + } else if (yon_advanced_part_check_count(widgets)){ -// } -// if (!yon_char_is_empty(boot)){ -// yon_config_register(boot_parameter,boot_parameter_command,boot); -// } else { -// yon_config_remove_by_key(boot_parameter); -// } -// } else { -// yon_config_remove_by_key(boot_parameter); -// } -// if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapSwitch))){ -// if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapAutoSwitch))){ -// yon_config_register(swap_parameter,swap_parameter_command,"auto"); + gtk_list_store_set(widgets->PartitionsList,&iter,7,1,-1); + yon_advanced_part_create_for_part(&iter,widgets); -// } else if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapRamSwitch))){ -// yon_config_register(swap_parameter,swap_parameter_command,"yes"); -// yon_config_register(swap_size_parameter,swap_parameter_command,"ram"); - -// } else if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapFixedSwitch))){ -// yon_config_register(swap_parameter,swap_parameter_command,"yes"); -// long swap_size = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widgets->AdvancedSwapFixedSpin)); -// int size_letter = gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapFixedSizeSwitch)); -// char *swap_str = yon_char_from_long(swap_size); -// char *size_final = yon_char_unite(swap_str,size_letter?"G":"M",NULL); -// yon_config_register(swap_size_parameter,swap_parameter_command,size_final); -// } else { -// yon_config_remove_by_key(swap_parameter); -// yon_config_remove_by_key(swap_size_parameter); -// } -// } -// char *parameters = yon_config_get_all_info(); -// yon_debug_output("%s\n",parameters); -// return 1; -// } - - -// void yon_advanced_part_parameter_changed(GtkWidget *self, advanced_part_widgets *part){ -// advanced_section *section = sections[yon_advanced_section_get_by_part(part)]; -// if (self == part->SizeCombo||self == part->SizeSpin){ -// section->size = gtk_spin_button_get_value(GTK_SPIN_BUTTON(part->SizeSpin)); -// int size_id = gtk_combo_box_get_active(GTK_COMBO_BOX(part->SizeCombo)); -// section->size_letter = *yon_size_get_mod(size_id>-1?size_id:0); -// } else if (self == part->PartLabelEntry){ -// section->part_label = yon_char_new(gtk_entry_get_text(GTK_ENTRY(part->PartLabelEntry))); -// } else if (self == part->FileSystemTypeCombo){ -// if (!gtk_combo_box_get_active(GTK_COMBO_BOX(part->FileSystemTypeCombo))){ -// section->fs_type = NULL; -// } else { -// GList *list = gtk_container_get_children(GTK_CONTAINER(part->FileSystemTypeCombo)); -// section->fs_type = yon_char_new(gtk_entry_get_text(GTK_ENTRY(list->data))); -// g_list_free(list); -// } -// } else if (self == part->FileSystemLabelEntry){ -// section->fs_label = yon_char_new(gtk_entry_get_text(GTK_ENTRY(part->FileSystemLabelEntry))); -// } else if (self == part->EncryptionCombo||self == part->EncryptionEntry){ -// section->encryption = yon_char_new(gtk_combo_box_get_active_id(GTK_COMBO_BOX(part->EncryptionCombo))); -// section->encryption_password = yon_char_new(gtk_entry_get_text(GTK_ENTRY(part->EncryptionEntry))); -// } else if (self == part->FormatCombo){ -// section->format = gtk_combo_box_get_active(GTK_COMBO_BOX(part->FormatCombo)); -// } -// } - -// void on_format_changed(GtkWidget *self, advanced_part_widgets *part){ -// int active = gtk_combo_box_get_active(GTK_COMBO_BOX(self)); -// switch (active){ -// case 0: -// case 1: gtk_revealer_set_reveal_child(GTK_REVEALER(part->FormatRevealer),0); -// break; -// case 2: gtk_revealer_set_reveal_child(GTK_REVEALER(part->FormatRevealer),1); -// } -// yon_advanced_part_parameter_changed(self, part); -// } - -// advanced_part_widgets *yon_advanced_partition_new(){ -// advanced_part_widgets *part = new(advanced_part_widgets); -// GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_advanced_part); -// yon_scroll_block_for_builder(builder); -// part->MainBox = yon_gtk_builder_get_widget(builder,"MainBox"); -// part->SectionLabel = yon_gtk_builder_get_widget(builder,"SectionLabel"); -// part->SystemSectionToggle = yon_gtk_builder_get_widget(builder,"SystemSectionToggle"); -// part->UserDataSectionToggle = yon_gtk_builder_get_widget(builder,"UserDataSectionToggle"); -// part->RemoveButton = yon_gtk_builder_get_widget(builder,"RemoveButton"); -// part->FormatCombo = yon_gtk_builder_get_widget(builder,"FormatCombo"); -// part->SizeSpin = yon_gtk_builder_get_widget(builder,"SizeSpin"); -// part->SizeCombo = yon_gtk_builder_get_widget(builder,"SizeCombo"); -// part->PartLabelEntry = yon_gtk_builder_get_widget(builder,"PartLabelEntry"); -// part->FileSystemTypeCombo = yon_gtk_builder_get_widget(builder,"FileSystemTypeCombo"); -// part->FileSystemLabelEntry = yon_gtk_builder_get_widget(builder,"FileSystemLabelEntry"); -// part->EncryptionCombo = yon_gtk_builder_get_widget(builder,"EncryptionCombo"); -// part->EncryptionEntry = yon_gtk_builder_get_widget(builder,"EncryptionEntry"); -// part->EncryptionButton = yon_gtk_builder_get_widget(builder,"EncryptionButton"); -// part->FormatRevealer = yon_gtk_builder_get_widget(builder,"FormatRevealer"); -// part->order_iter = NULL; -// part->part = NULL; -// part->device = NULL; - -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"K",_("Kb")); -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"M",_("Mb")); -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"G",_("Gb")); -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"T",_("Tb")); -// gtk_combo_box_set_active(GTK_COMBO_BOX(part->SizeCombo),0); - -// gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(part->FormatCombo),DEFAULT_LABEL); -// gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(part->FormatCombo),DO_NOT_FORMAT_LABEL); -// gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(part->FormatCombo),FORMAT_LABEL); -// gtk_combo_box_set_active(GTK_COMBO_BOX(part->FormatCombo),0); - -// g_signal_connect(G_OBJECT(part->EncryptionButton),"clicked",G_CALLBACK(on_advanced_password_clicked),part); -// g_signal_connect(G_OBJECT(part->EncryptionCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),part->EncryptionButton); -// g_signal_connect(G_OBJECT(part->EncryptionCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),part->EncryptionEntry); -// g_signal_connect(G_OBJECT(part->EncryptionEntry),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); -// g_signal_connect(G_OBJECT(part->FormatCombo),"changed",G_CALLBACK(on_format_changed),part); -// g_signal_connect(G_OBJECT(part->SizeCombo),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); -// g_signal_connect(G_OBJECT(part->SizeSpin),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); -// g_signal_connect(G_OBJECT(part->PartLabelEntry),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); -// g_signal_connect(G_OBJECT(part->FileSystemTypeCombo),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); -// g_signal_connect(G_OBJECT(part->FileSystemLabelEntry),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); -// g_signal_connect(G_OBJECT(part->EncryptionCombo),"changed",G_CALLBACK(yon_advanced_part_parameter_changed),part); - -// yon_fs_type_setup(GTK_COMBO_BOX_TEXT(part->FileSystemTypeCombo)); - -// g_object_set_data(G_OBJECT(part->MainBox),"advanced_part_widgets",part); -// g_object_set_data(G_OBJECT(part->SizeCombo),"advanced_part_widgets",part); -// g_object_set_data(G_OBJECT(part->RemoveButton),"advanced_part_widgets",part); -// g_object_set_data(G_OBJECT(part->SystemSectionToggle),"advanced_part_widgets",part); -// g_object_set_data(G_OBJECT(part->UserDataSectionToggle),"advanced_part_widgets",part); - -// int size; -// config_str encryptions = yon_char_parsed_new(&size,encryptions_list,NULL); -// for (int i=0;iEncryptionCombo),encryptions[i],encryptions[i]); -// } -// yon_char_parsed_free(encryptions,size); -// return part; -// } - -// void on_advanced_part_remove(GtkWidget *self, main_window *widgets){ -// advanced_part_widgets *part = g_object_get_data(G_OBJECT(self),"advanced_part_widgets"); -// yon_advanced_section_remove(part); -// if (sections_size){ -// sections[0]->sys_section=1; -// sections[0]->user_section=1; -// } -// yon_advanced_update(widgets); - -// } - -// int yon_advanced_section_append(advanced_section *section){ -// if (sections_size==2) return -1; -// sections[sections_size] = section; -// sections_size++; -// return sections_size-1; -// } + } +} void on_advanced_virtual_device_changed(GtkWidget *, main_window *widgets){ - char *device = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo)); + const char *device = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo)); int size; config_str vfs_file = yon_resource_open_file(vfs_list_path,&size); for (int i=0;iDevicesList); - int active_devices=0; - for_iter(model,&iter){ - int status; - gtk_tree_model_get(model,&iter,5,&status,-1); - if (status) active_devices++; + + advanced_part_widgets *part = NULL; + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); + GList *iter; + for (iter = list; iter; iter=iter->next){ + advanced_part_data *data = g_object_get_data(G_OBJECT(iter->data),"advanced_part_data"); + if (data->part_source == PART_SOURCE_VIRTUAL){ + part = g_object_get_data(G_OBJECT(iter->data),"advanced_part_widgets"); + break; } + } - advanced_part_data *data = yon_advanced_part_data_new(); - advanced_part_widgets *part = yon_advanced_part_create(data); - data->part_source = PART_SOURCE_VIRTUAL; - data->partition = device; - data->device = device; - gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); + if (!yon_char_is_empty(device)){ + + if (part){ + advanced_part_data *data = g_object_get_data(G_OBJECT(part->MainBox),"advanced_part_data"); + free(data->device); + data->device = yon_char_new(device); + // yon_advanced_part_update_from_data(part, data); + } else { + if (yon_advanced_part_check_count(widgets)){ + advanced_part_data *data = yon_advanced_part_data_new(); + data->part_source = PART_SOURCE_VIRTUAL; + data->device = yon_char_new(device); + advanced_part_widgets *part = yon_advanced_part_create(data); + gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); + // yon_advanced_part_update_from_data(part, data); + + } else { + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo),0); + yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + } + } else { + if (part){ + gtk_widget_destroy(part->MainBox); + advanced_part_data *data = g_object_get_data(G_OBJECT(part->MainBox),"advanced_part_data"); + yon_advanced_part_data_unref(data); + free(part); + } } yon_char_parsed_free(vfs_file,size); // yon_advanced_update(widgets); } +int yon_advanced_part_get_size(advanced_part_widgets *part, main_window *widgets){ + GList *list = NULL; + if (widgets){ + list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); + } else if (part){ + list = gtk_container_get_children(GTK_CONTAINER(gtk_widget_get_parent(part->MainBox))); + } + int size = g_list_length(list); + g_list_free(list); + return size; +} + +int yon_advanced_part_get_pos(advanced_part_widgets *part, main_window *widgets){ + if (!part) return -1; + GList *list = NULL; + if (widgets){ + list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); + } else { + list = gtk_container_get_children(GTK_CONTAINER(gtk_widget_get_parent(part->MainBox))); + } + int pos = g_list_index(list,part->MainBox); + g_list_free(list); + return pos; +} advanced_part_data *yon_advanced_part_data_new(){ advanced_part_data *data = malloc(sizeof(advanced_part_data)); @@ -1081,6 +201,20 @@ advanced_part_data *yon_advanced_part_data_new(){ return data; } +void yon_advanced_part_data_unref(advanced_part_data *data){ + if (!data) return; + if (!yon_char_is_empty(data->device)) free(data->device); + if (!yon_char_is_empty(data->part_label)) free(data->part_label); + if (!yon_char_is_empty(data->encryption)) free(data->encryption); + if (!yon_char_is_empty(data->encryption_password)) free(data->encryption_password); + if (!yon_char_is_empty(data->format)) free(data->format); + if (!yon_char_is_empty(data->fs_label)) free(data->fs_label); + if (!yon_char_is_empty(data->fs_type)) free(data->fs_type); + if (!yon_char_is_empty(data->part_label)) free(data->part_label); + if (!yon_char_is_empty(data->partition)) free(data->partition); + free(data); +} + char *yon_advanced_part_data_get_parameter(const char *config_param, int pos){ char *final = NULL; char *parameter = (char*)config((char*)config_param); @@ -1112,12 +246,82 @@ advanced_part_data *yon_advanced_get_config_data(int pos){ return data; } -void yon_advanced_part_create_for_device(advanced_part_data *data, main_window *widgets){ - advanced_part_widgets *part = yon_advanced_part_create(data); - gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); +void yon_advanced_part_update_from_data(advanced_part_widgets *part, advanced_part_data *data){ + if (!part||!data) return; + char *source_string = NULL; + if (!yon_char_is_empty(data->partition)){ + source_string = data->partition; + } else if (!yon_char_is_empty(data->device)) { + source_string = data->device; + } + gtk_label_set_text(GTK_LABEL(part->SectionLabel),source_string); + + //toggle buttons + int pos = yon_advanced_part_get_pos(part,NULL); + int size = yon_advanced_part_get_size(part,NULL); + if (size == 1){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->SystemSectionToggle),1); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->UserDataSectionToggle),1); + } else if (pos == 0){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->SystemSectionToggle),1); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->UserDataSectionToggle),0); + } else if (pos == 1){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->SystemSectionToggle),0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->UserDataSectionToggle),1); + } + + // format + int format = 0; + if (yon_char_is_empty(data->format)) return; + if (!strcmp(data->format,"yes")){ + format = 2; + } else if (!strcmp(data->format,"no")){ + format = 1; + } + gtk_combo_box_set_active(GTK_COMBO_BOX(part->FormatCombo),format); + + //size + char *mod = yon_char_new("\n"); + double size_convert = yon_size_long_convert_automatic(data->size,mod); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(part->SizeSpin),size_convert); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(part->SizeCombo),mod); + free(mod); + + // other + gtk_entry_set_text(GTK_ENTRY(part->PartLabelEntry),data->part_label); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(part->EncryptionCombo),data->encryption); + gtk_entry_set_text(GTK_ENTRY(part->EncryptionEntry),data->encryption_password); + gtk_entry_set_text(GTK_ENTRY(part->FileSystemLabelEntry),data->fs_label); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(part->FileSystemTypeCombo),data->fs_type); } +void yon_advanced_part_create_for_device(GtkTreeIter *iter, main_window *widgets){ + GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList); + int status; + char *target; + gtk_tree_model_get(model,iter,0,&target,5,&status,-1); + if (status&&yon_advanced_part_check_count(widgets)){ + advanced_part_data *data = yon_advanced_part_data_new(); + data->device = target; + advanced_part_widgets *part = yon_advanced_part_create(data); + gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); + // yon_advanced_part_update_from_data(part,data); + } +} + +void yon_advanced_part_create_for_part(GtkTreeIter *iter, main_window *widgets){ + if (yon_advanced_part_check_count(widgets)){ + char *target; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->PartitionsList),iter,0,&target,-1); + advanced_part_data *data = yon_advanced_part_data_new(); + data->partition = target; + advanced_part_widgets *part = yon_advanced_part_create(data); + gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); + // yon_advanced_part_update_from_data(part,data); + } +} + void yon_advanced_part_add_parts_for_device(const char *device_name, main_window *widgets){ for (int i=0;iPartitionsList,&iter); - gtk_list_store_set(widgets->PartitionsList,&iter, - 0,parsed[1], 1,capacity_string, - 2,free_space_string, 3,parsed[4], - 4,parsed[5], 5,capacity, - 6,free_space, 8,1, - 9,parsed[7], 10,parsed[0], - 11,parsed[10],-1); + gtk_list_store_set(widgets->PartitionsList,&iter, + 0,yon_char_return_if_exist(parsed[2],""), 1,capacity_string, + 2,free_space_string, 3,yon_char_return_if_exist(parsed[4],""), + 4,yon_char_return_if_exist(parsed[5],""), 5,capacity, + 6,free_space, 8,1, + 9,yon_char_return_if_exist(parsed[7],""), 10,yon_char_return_if_exist(parsed[0],""), + 11,yon_char_return_if_exist(parsed[10],""),-1); + // } else { + // gtk_list_store_set(widgets->PartitionsList,&iter, ); + + } } } } @@ -1150,27 +359,28 @@ void yon_advanced_part_remove_parts_for_device(const char *device_name, main_win GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); for_iter(model, &iter){ - char *target; - gtk_tree_model_get(model,&iter,0,&target,-1); - for (int i=0;iPartitionsList,&iter); - } - yon_char_parsed_free(parsed,size); + char *target, *name; + gtk_tree_model_get(model,&iter,0,&name,10,&target,-1); + printf("%s\n",name); + if (strstr(device_name,target)){ + gtk_list_store_remove(widgets->PartitionsList,&iter); + if (!gtk_tree_model_get_iter_first(model,&iter)) break; } } + if (gtk_tree_model_get_iter_first(model,&iter)) { + char *target, *name; + gtk_tree_model_get(model,&iter,0,&name,10,&target,-1); + if (strstr(device_name,target)){ + gtk_list_store_remove(widgets->PartitionsList,&iter); + } + } } void on_advanced_part_create(GtkWidget *, main_window *widgets){ GtkTreeIter iter; GtkTreeModel *model; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->AdvancedDeviceTree)),&model,&iter)){ - char *target; - gtk_tree_model_get(model,&iter,0,&target,-1); - advanced_part_data *data = yon_advanced_part_data_new(); - yon_advanced_part_create_for_device(data,widgets); + yon_advanced_part_create_for_device(&iter,widgets); } } @@ -1180,11 +390,11 @@ int yon_advanced_part_select_for_data(advanced_part_data *data, main_window *wid for_iter(device_model, &device_iter){ char *device_name; gtk_tree_model_get(device_model,&device_iter,0,&device_name,-1); - if (!strcmp(device_name,data->device)){ + if (!yon_char_is_empty(data->device)&&!strcmp(device_name,data->device)){ gtk_list_store_set(widgets->DevicesList,&device_iter, 5,1,-1); yon_advanced_part_add_parts_for_device(device_name,widgets); if (yon_char_is_empty(data->partition)){ - yon_advanced_part_create_for_device(data,widgets); + yon_advanced_part_create_for_device(&device_iter,widgets); } } } @@ -1204,6 +414,22 @@ int yon_advanced_part_select_for_data(advanced_part_data *data, main_window *wid } void yon_advanced_init(main_window *widgets){ + yon_devices_setup(widgets); + g_signal_handlers_block_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->AdvancedVirtualDeviceCombo)); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->AdvancedVirtualDeviceCombo),NO_LABEL); + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo),0); + int size; + config_str vmf_file = yon_resource_open_file(vfs_list_path,&size); + for (int i=1;iAdvancedVirtualDeviceCombo),parsed[2],parsed[0]); + yon_char_parsed_free(parsed,parsed_size); + } + yon_char_parsed_free(vmf_file,size); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); + advanced_part_data *data1 = yon_advanced_get_config_data(0); advanced_part_data *data2 = yon_advanced_get_config_data(1); yon_advanced_part_select_for_data(data1,widgets); @@ -1231,9 +457,6 @@ advanced_part_widgets *yon_advanced_part_create(advanced_part_data *part_data){ part->EncryptionEntry = yon_gtk_builder_get_widget(builder,"EncryptionEntry"); part->EncryptionButton = yon_gtk_builder_get_widget(builder,"EncryptionButton"); part->FormatRevealer = yon_gtk_builder_get_widget(builder,"FormatRevealer"); - part->order_iter = NULL; - part->part = NULL; - part->device = NULL; gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"K",KB_LABEL); gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"M",MB_LABEL); @@ -1246,10 +469,10 @@ advanced_part_widgets *yon_advanced_part_create(advanced_part_data *part_data){ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(part->FormatCombo),FORMAT_LABEL); gtk_combo_box_set_active(GTK_COMBO_BOX(part->FormatCombo),0); - // g_signal_connect(G_OBJECT(part->EncryptionButton),"clicked",G_CALLBACK(on_advanced_password_clicked),part); + g_signal_connect(G_OBJECT(part->EncryptionButton),"clicked",G_CALLBACK(on_advanced_password_clicked),part); g_signal_connect(G_OBJECT(part->EncryptionCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),part->EncryptionButton); g_signal_connect(G_OBJECT(part->EncryptionCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),part->EncryptionEntry); - // g_signal_connect(G_OBJECT(part->FormatCombo),"changed",G_CALLBACK(on_format_changed),part); + g_signal_connect(G_OBJECT(part->FormatCombo),"changed",G_CALLBACK(on_format_changed),part); yon_fs_type_setup(GTK_COMBO_BOX_TEXT(part->FileSystemTypeCombo)); diff --git a/source/ubinstall-gtk-config-hub.c b/source/ubinstall-gtk-config-hub.c index 5c2523c..0c8d4bc 100644 --- a/source/ubinstall-gtk-config-hub.c +++ b/source/ubinstall-gtk-config-hub.c @@ -240,11 +240,10 @@ void yon_configuration_hub_add(GtkFlowBox *target, char *name, char *icon, enum config_hub_icon *cur_icon = malloc(sizeof(config_hub_icon)); memset(cur_icon,0,sizeof(config_hub_icon)); - GtkIconInfo *info = gtk_icon_theme_lookup_icon_for_scale(gtk_icon_theme_get_default(),icon,54,1,GTK_ICON_LOOKUP_FORCE_SIZE); - cur_icon->MainBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); cur_icon->Label = gtk_label_new(name); - cur_icon->Image = gtk_image_new_from_pixbuf(gtk_icon_info_load_icon(info,NULL)); + cur_icon->Image = gtk_image_new_from_icon_name(icon,GTK_ICON_SIZE_BUTTON); + gtk_image_set_pixel_size(GTK_IMAGE(cur_icon->Image),54); cur_icon->page = page; GtkWidget *flow = gtk_flow_box_child_new(); gtk_style_context_add_class(gtk_widget_get_style_context(flow),"bggrey"); diff --git a/source/ubinstall-gtk-decorations.c b/source/ubinstall-gtk-decorations.c index 4fd5410..463a537 100644 --- a/source/ubinstall-gtk-decorations.c +++ b/source/ubinstall-gtk-decorations.c @@ -50,11 +50,11 @@ void yon_install_slider_update(main_window *widgets){ GtkWidget *Image = NULL; int chosen = iter==main_config.chosen_slide||(main_config.chosen_slide->next&&iter==main_config.chosen_slide->next)||(!main_config.chosen_slide->next&&iter==g_list_first(main_config.chosen_slide)); if (chosen){ - GtkIconInfo *info = gtk_icon_theme_lookup_icon_for_scale(gtk_icon_theme_get_default(),toggled_icon_path,8,1,GTK_ICON_LOOKUP_FORCE_SIZE); - Image = gtk_image_new_from_pixbuf(gtk_icon_info_load_icon(info,NULL)); + Image = gtk_image_new_from_icon_name(toggled_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_pixel_size(GTK_IMAGE(Image),8); } else { - GtkIconInfo *info = gtk_icon_theme_lookup_icon_for_scale(gtk_icon_theme_get_default(),untoggled_icon_path,8,1,GTK_ICON_LOOKUP_FORCE_SIZE); - Image = gtk_image_new_from_pixbuf(gtk_icon_info_load_icon(info,NULL)); + Image = gtk_image_new_from_icon_name(untoggled_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_pixel_size(GTK_IMAGE(Image),8); } gtk_box_pack_start(GTK_BOX(widgets->SliderProgressBox),Image,0,0,0); gtk_widget_show(Image); diff --git a/source/ubinstall-gtk-installation.c b/source/ubinstall-gtk-installation.c index 6990577..91d3466 100644 --- a/source/ubinstall-gtk-installation.c +++ b/source/ubinstall-gtk-installation.c @@ -183,61 +183,61 @@ int yon_install_same_partition_save(main_window *widgets){ return 1; } -int yon_advanced_sections_save(dictionary *dict){ - if (!dict) return 0; - advanced_part_widgets *first_section = yon_dictionary_get_data(dict->first,advanced_part_widgets*); - advanced_part_widgets *last_section = NULL; - if (dict->first->next){ - last_section = yon_dictionary_get_data(dict->first->next,advanced_part_widgets*); - } - - char *part_first = first_section->part; - char *part_last = last_section?last_section->part:NULL; - char *part = yon_char_unite(part_first,last_section?",":NULL,part_last,NULL); - yon_config_register(part_parameter,part_parameter_command,part); - - int format_first_active = gtk_switch_get_active(GTK_SWITCH(first_section->FormatCombo)); - int format_last_active = gtk_switch_get_active(GTK_SWITCH(last_section->FormatCombo)); - char * format_first = format_first_active==1?"yes":format_first_active==2?"no":NULL; - char * format_last = format_last_active==1?"yes":format_last_active==2?"no":NULL; - char *format = yon_char_unite(format_first,part_last?",":NULL,format_last,NULL); - yon_config_register(part_format_parameter,part_format_parameter_command,format); - - if (!yon_char_is_empty(format)){ - char *size_first = g_strdup_printf("%d%s",gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(first_section->SizeSpin)),yon_size_get_mod(gtk_combo_box_get_active(GTK_COMBO_BOX(first_section->SizeCombo)))); - char *size_last = last_section&&!strcmp(format_last,"yes")?g_strdup_printf("%d%s",gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(last_section->SizeSpin)),yon_size_get_mod(gtk_combo_box_get_active(GTK_COMBO_BOX(last_section->SizeCombo)))):NULL; - char *size = yon_char_unite(size_first,size_last?",":NULL,size_last,NULL); - yon_config_register(part_size_parameter,part_size_parameter_command,size); +// int yon_advanced_sections_save(dictionary *dict){ +// if (!dict) return 0; +// advanced_part_widgets *first_section = yon_dictionary_get_data(dict->first,advanced_part_widgets*); +// advanced_part_widgets *last_section = NULL; +// if (dict->first->next){ +// last_section = yon_dictionary_get_data(dict->first->next,advanced_part_widgets*); +// } + +// char *part_first = first_section->part; +// char *part_last = last_section?last_section->part:NULL; +// char *part = yon_char_unite(part_first,last_section?",":NULL,part_last,NULL); +// yon_config_register(part_parameter,part_parameter_command,part); + +// int format_first_active = gtk_switch_get_active(GTK_SWITCH(first_section->FormatCombo)); +// int format_last_active = gtk_switch_get_active(GTK_SWITCH(last_section->FormatCombo)); +// char * format_first = format_first_active==1?"yes":format_first_active==2?"no":NULL; +// char * format_last = format_last_active==1?"yes":format_last_active==2?"no":NULL; +// char *format = yon_char_unite(format_first,part_last?",":NULL,format_last,NULL); +// yon_config_register(part_format_parameter,part_format_parameter_command,format); + +// if (!yon_char_is_empty(format)){ +// char *size_first = g_strdup_printf("%d%s",gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(first_section->SizeSpin)),yon_size_get_mod(gtk_combo_box_get_active(GTK_COMBO_BOX(first_section->SizeCombo)))); +// char *size_last = last_section&&!strcmp(format_last,"yes")?g_strdup_printf("%d%s",gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(last_section->SizeSpin)),yon_size_get_mod(gtk_combo_box_get_active(GTK_COMBO_BOX(last_section->SizeCombo)))):NULL; +// char *size = yon_char_unite(size_first,size_last?",":NULL,size_last,NULL); +// yon_config_register(part_size_parameter,part_size_parameter_command,size); - char *part_label_first = (char*)gtk_entry_get_text(GTK_ENTRY(first_section->PartLabelEntry)); - char *part_label_last = last_section&&!strcmp(format_last,"yes")?(char*)gtk_entry_get_text(GTK_ENTRY(last_section->PartLabelEntry)):NULL; - char *part_label = yon_char_unite(part_label_first,part_label_last?",":NULL,part_label_last,NULL); - yon_config_register(part_label_parameter,part_label_parameter_command,part_label); - - char *fs_label_first = (char*)gtk_entry_get_text(GTK_ENTRY(first_section->FileSystemLabelEntry)); - char *fs_label_last = last_section&&!strcmp(format_last,"yes")?(char*)gtk_entry_get_text(GTK_ENTRY(last_section->FileSystemLabelEntry)):NULL; - char *fs_label = yon_char_unite(fs_label_first,fs_label_last?",":NULL,fs_label_last,NULL); - yon_config_register(part_fs_label_parameter,part_fs_label_parameter_command,fs_label); - - char *fs_type_first = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(first_section->FileSystemTypeCombo)); - char *fs_type_last = last_section&&!strcmp(format_last,"yes")?(char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(last_section->FileSystemTypeCombo)):NULL; - char *fs_type = yon_char_unite(fs_type_first,fs_type_last?",":NULL,fs_type_last,NULL); - yon_config_register(part_fs_type_parameter,part_fs_type_parameter_command,fs_type); - - char *part_crypt_first = gtk_combo_box_get_active(GTK_COMBO_BOX(first_section->EncryptionCombo))?(char*)gtk_entry_get_text(GTK_ENTRY(first_section->EncryptionEntry)):NULL; - char *part_crypt_last = last_section&&!strcmp(format_last,"yes")&>k_combo_box_get_active(GTK_COMBO_BOX(last_section->EncryptionCombo))?(char*)gtk_entry_get_text(GTK_ENTRY(first_section->EncryptionEntry)):NULL; - char *part_crypt = NULL; - if (part_crypt_first||part_crypt_last){ - part_crypt = yon_char_unite(part_crypt_first,part_crypt_last?",":NULL,part_crypt_last,NULL); - } - if (part_crypt){ - yon_config_register(part_crypt_parameter,part_crypt_parameter_command,part_crypt); - } else { - yon_config_remove_by_key(part_crypt_parameter); - } - } - return 1; -} +// char *part_label_first = (char*)gtk_entry_get_text(GTK_ENTRY(first_section->PartLabelEntry)); +// char *part_label_last = last_section&&!strcmp(format_last,"yes")?(char*)gtk_entry_get_text(GTK_ENTRY(last_section->PartLabelEntry)):NULL; +// char *part_label = yon_char_unite(part_label_first,part_label_last?",":NULL,part_label_last,NULL); +// yon_config_register(part_label_parameter,part_label_parameter_command,part_label); + +// char *fs_label_first = (char*)gtk_entry_get_text(GTK_ENTRY(first_section->FileSystemLabelEntry)); +// char *fs_label_last = last_section&&!strcmp(format_last,"yes")?(char*)gtk_entry_get_text(GTK_ENTRY(last_section->FileSystemLabelEntry)):NULL; +// char *fs_label = yon_char_unite(fs_label_first,fs_label_last?",":NULL,fs_label_last,NULL); +// yon_config_register(part_fs_label_parameter,part_fs_label_parameter_command,fs_label); + +// char *fs_type_first = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(first_section->FileSystemTypeCombo)); +// char *fs_type_last = last_section&&!strcmp(format_last,"yes")?(char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(last_section->FileSystemTypeCombo)):NULL; +// char *fs_type = yon_char_unite(fs_type_first,fs_type_last?",":NULL,fs_type_last,NULL); +// yon_config_register(part_fs_type_parameter,part_fs_type_parameter_command,fs_type); + +// char *part_crypt_first = gtk_combo_box_get_active(GTK_COMBO_BOX(first_section->EncryptionCombo))?(char*)gtk_entry_get_text(GTK_ENTRY(first_section->EncryptionEntry)):NULL; +// char *part_crypt_last = last_section&&!strcmp(format_last,"yes")&>k_combo_box_get_active(GTK_COMBO_BOX(last_section->EncryptionCombo))?(char*)gtk_entry_get_text(GTK_ENTRY(first_section->EncryptionEntry)):NULL; +// char *part_crypt = NULL; +// if (part_crypt_first||part_crypt_last){ +// part_crypt = yon_char_unite(part_crypt_first,part_crypt_last?",":NULL,part_crypt_last,NULL); +// } +// if (part_crypt){ +// yon_config_register(part_crypt_parameter,part_crypt_parameter_command,part_crypt); +// } else { +// yon_config_remove_by_key(part_crypt_parameter); +// } +// } +// return 1; +// } void yon_size_changed(GtkSpinButton *self, main_window *widgets){ int cur_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook)); @@ -276,6 +276,9 @@ void yon_size_changed(GtkSpinButton *self, main_window *widgets){ void *yon_partitions_list_load(main_window *){ main_config.partitions = yon_config_load(yon_debug_output("%s\n",get_parts_for_device_command),&main_config.part_size); + for (int i=0;iTimeZoneMapOverlayInfoLabel),title_info); if (!yon_char_is_empty(icon_name)){ gtk_widget_show(widgets->TimeZoneMapOverlayImage); - GtkIconInfo *info = gtk_icon_theme_lookup_icon_for_scale(gtk_icon_theme_get_default(), icon_path, 48,1,GTK_ICON_LOOKUP_FORCE_SIZE); - gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->TimeZoneMapOverlayImage),gtk_icon_info_load_icon(info,NULL)); + widgets->TimeZoneMapOverlayImage = gtk_image_new_from_icon_name(icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_pixel_size(GTK_IMAGE(widgets->TimeZoneMapOverlayImage),48); } else { gtk_widget_hide(widgets->TimeZoneMapOverlayImage); } diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index bb562b6..9440563 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -773,11 +773,13 @@ void yon_main_window_create(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->AdvancedSwapFixedSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch),widgets->AdvancedSwapFixedSpin); g_signal_connect(G_OBJECT(widgets->AdvancedSwapFixedSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch),widgets->AdvancedSwapFixedSizeSwitch); - // g_signal_connect(G_OBJECT(widgets->AdvancedDeviceChosenCell),"toggled",G_CALLBACK(on_install_advanced_device_chosen),widgets); + g_signal_connect(G_OBJECT(widgets->AdvancedPartitionAddBox),"add",G_CALLBACK(on_advanced_part_content_changed),widgets); + g_signal_connect(G_OBJECT(widgets->AdvancedPartitionAddBox),"remove",G_CALLBACK(on_advanced_part_content_changed),widgets); + g_signal_connect(G_OBJECT(widgets->AdvancedDeviceChosenCell),"toggled",G_CALLBACK(on_install_advanced_device_chosen),widgets); g_signal_connect(G_OBJECT(widgets->StartScenarioButton),"clicked",G_CALLBACK(yon_quick_install),widgets); g_signal_connect(G_OBJECT(widgets->SourceButton),"clicked",G_CALLBACK(on_source_clicked),widgets); g_signal_connect(G_OBJECT(widgets->AdvancedAddButton),"clicked",G_CALLBACK(on_advanced_part_create),widgets); - // g_signal_connect(G_OBJECT(widgets->AdvancedPartChosenCell),"toggled",G_CALLBACK(on_install_advanced_partition_chosen),widgets); + g_signal_connect(G_OBJECT(widgets->AdvancedPartChosenCell),"toggled",G_CALLBACK(on_install_advanced_partition_chosen),widgets); g_signal_connect(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),"changed",G_CALLBACK(on_advanced_virtual_device_changed),widgets); g_signal_connect(G_OBJECT(widgets->PackagesTree),"cursor-changed",G_CALLBACK(yon_on_packages_selected),widgets); g_signal_connect(G_OBJECT(widgets->PackagesTree),"row-activated",G_CALLBACK(yon_on_packages_activated),widgets); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 7b26eb9..7a43841 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -823,11 +823,6 @@ typedef struct GtkWidget *EncryptionEntry; GtkWidget *EncryptionButton; GtkWidget *SectionPartitionLabel; - GSequenceIter *order_iter; - - enum ADVANCED_PART_TYPE part_type; - char *part; - char *device; } advanced_part_widgets; typedef struct @@ -1100,7 +1095,7 @@ typedef struct char *format; gulong full_part_size; unsigned long size; - char size_letter; + // char size_letter; char *part_label; char *fs_type; char *fs_label; @@ -1295,7 +1290,7 @@ int yon_install_advanced_save(main_window *widgets); int yon_network_save(main_window *widgets); void on_connection_add(GtkWidget *, main_window *widgets); void on_ntp_sync(GtkWidget *, main_window *widgets); -int yon_advanced_sections_save(dictionary *dict); +// int yon_advanced_sections_save(dictionary *dict); void yon_configuration_mode_check(main_window *widgets); void on_configuration_mode_switch(GtkWidget *self, main_window *widgets); void *_yon_installation_start(main_window *widgets); @@ -1537,11 +1532,19 @@ void yon_advanced_part_choose(main_window *widgets, const char *part); advanced_part_data *yon_advanced_part_data_new(); char *yon_advanced_part_data_get_parameter(const char *config_param, int pos); advanced_part_data *yon_advanced_get_config_data(int pos); -void yon_advanced_part_create_for_device(advanced_part_data *data, main_window *widgets); +void yon_advanced_part_create_for_device(GtkTreeIter *iter, main_window *widgets); void yon_advanced_part_add_parts_for_device(const char *device_name, main_window *widgets); void yon_advanced_part_remove_parts_for_device(const char *device_name, main_window *widgets); void yon_advanced_init(main_window *widgets); advanced_part_widgets *yon_advanced_part_create(advanced_part_data *part_data); void on_advanced_virtual_device_changed(GtkWidget *, main_window *widgets); void on_advanced_part_create(GtkWidget *self, main_window *widgets); -int yon_advanced_part_select_for_data(advanced_part_data *data, main_window *widgets); \ No newline at end of file +int yon_advanced_part_select_for_data(advanced_part_data *data, main_window *widgets); +int yon_advanced_part_check_count(main_window *widgets); +advanced_part_widgets *yon_advanced_part_get_for_name(const char *part_name,main_window *widgets); +void yon_advanced_part_create_for_part(GtkTreeIter *iter, main_window *widgets); +int yon_advanced_part_get_pos(advanced_part_widgets *part, main_window *widgets); +int yon_advanced_part_get_size(advanced_part_widgets *part, main_window *widgets); +void yon_advanced_part_update_from_data(advanced_part_widgets *part, advanced_part_data *data); +void yon_advanced_part_data_unref(advanced_part_data *data); +void on_advanced_part_content_changed(GtkWidget *, GtkWidget *, main_window *widgets); \ No newline at end of file -- 2.35.1