diff --git a/source/ubinstall-gtk-advanced.c b/source/ubinstall-gtk-advanced.c index ee838ac..91f9a83 100644 --- a/source/ubinstall-gtk-advanced.c +++ b/source/ubinstall-gtk-advanced.c @@ -3,790 +3,443 @@ #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){ +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: - 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_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; + 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); } - 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 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_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); - } - } +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_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); +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 (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 (!yon_char_is_empty(data->partition)){ + if (!strcmp(data->partition,part_name)) return part; } - - } - 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); + return NULL; } -void on_advanced_partition_add(GtkWidget *, char *path, main_window *widgets){ +void on_install_advanced_device_chosen(GtkCellRenderer *, gchar *path, main_window *widgets){ GtkTreeIter iter; - if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->PartitionsList),&iter,path)){ - char *target, *device; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList); + if (gtk_tree_model_get_iter_from_string(model,&iter,path)){ 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++; + 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_section_remove_by_name(target); + yon_advanced_part_add_parts_for_device(target,widgets); } } - yon_advanced_update(widgets); - } -void yon_install_advanced_init(main_window *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); +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; } 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; + 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++; + 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); } - } else { - yon_advanced_section_remove_by_name(target_part); - gtk_list_store_set(widgets->PartitionsList,&iter,7,0,-1); + + } else if (yon_advanced_part_check_count(widgets)){ + + gtk_list_store_set(widgets->PartitionsList,&iter,7,1,-1); + yon_advanced_part_create_for_part(&iter,widgets); + } - yon_advanced_update(widgets); } -void yon_advanced_parts_update(main_window *widgets){ +void on_advanced_virtual_device_changed(GtkWidget *, main_window *widgets){ + const char *device = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo)); int size; - config_str partitions; - partitions = yon_config_load(yon_debug_output("%s\n",get_parts_and_devices_command),&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); + } } - GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList); - 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); - } + 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; } } - 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; + if (!yon_char_is_empty(device)){ - 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); - } + 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); } -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); +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; } -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++; +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))); } - // 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); + int pos = g_list_index(list,part->MainBox); + g_list_free(list); + return pos; } -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); +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 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); - } +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); } -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; +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&&posSystemSectionToggle; - 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); +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_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 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 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; - } - } +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); } - 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; +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); } - 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)); +void yon_advanced_part_add_parts_for_device(const char *device_name, main_window *widgets){ + 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; + long capacity = 0; + if (size>3&&!yon_char_is_empty(parsed[3])){ + capacity = atol(parsed[3]); } - - 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]=""; + 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]); } - } 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]=""; - } + char *free_space_string = free_space ? yon_size_long_convert_automatic_to_string(free_space) : yon_char_new(""); + if (!strcmp(parsed[1],"part")&&strcmp(parsed[1],"free")){ + gtk_list_store_append(widgets->PartitionsList,&iter); + 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, ); - 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(AUTOINSTALL_DEVICE,AUTOINSTALL_DEVICE_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); +void yon_advanced_part_remove_parts_for_device(const char *device_name, main_window *widgets){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); + for_iter(model, &iter){ + 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); + } + } +} - } else { - yon_config_remove_by_key(part_format_parameter); +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)){ + yon_advanced_part_create_for_device(&iter,widgets); } - 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","+"); +} +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 (!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(&device_iter,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"); - - } 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); + 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); + + } } } - char *parameters = yon_config_get_all_info(); - yon_debug_output("%s\n",parameters); return 1; } - -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 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); -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_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); + + } -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"); @@ -804,14 +457,11 @@ advanced_partition *yon_advanced_partition_new(){ 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_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); @@ -822,22 +472,16 @@ advanced_partition *yon_advanced_partition_new(){ 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_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); @@ -846,61 +490,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-config-hub.c b/source/ubinstall-gtk-config-hub.c index 9920f73..0c8d4bc 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; @@ -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-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..91d3466 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); @@ -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_partition *first_section = yon_dictionary_get_data(dict->first,advanced_partition*); - advanced_partition *last_section = NULL; - if (dict->first->next){ - last_section = yon_dictionary_get_data(dict->first->next,advanced_partition*); - } - - 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;iDevicesList); + 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); @@ -434,7 +438,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: @@ -475,7 +479,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..39a7aef 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); @@ -467,9 +467,9 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){ case YON_PAGE_PACKAGES: yon_packages_tab_init(widgets); break; - case YON_PAGE_INSTALL_ADVANCED: - yon_install_advanced_init(widgets); - __attribute__((fallthrough)); + case YON_PAGE_INSTALL_ADVANCED: + yon_advanced_init(widgets); + break; case YON_PAGE_INSTALL_COMMON: case YON_PAGE_INSTALL_SEPARATE: case YON_PAGE_INSTALL_SAME_PARTITION: diff --git a/source/ubinstall-gtk-region.c b/source/ubinstall-gtk-region.c index 246c937..5b49075 100644 --- a/source/ubinstall-gtk-region.c +++ b/source/ubinstall-gtk-region.c @@ -79,8 +79,8 @@ void yon_map_status_show(main_window *widgets, char *icon_name, char *title, cha gtk_label_set_text(GTK_LABEL(widgets->TimeZoneMapOverlayInfoLabel),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-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.c b/source/ubinstall-gtk.c index d731b25..9440563 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -773,10 +773,12 @@ 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->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_partition_create),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); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 8c229be..7a43841 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, \ @@ -823,12 +823,7 @@ typedef struct GtkWidget *EncryptionEntry; GtkWidget *EncryptionButton; GtkWidget *SectionPartitionLabel; - GSequenceIter *order_iter; - - enum ADVANCED_PART_TYPE part_type; - char *part; - char *device; -} advanced_partition; +} advanced_part_widgets; typedef struct { @@ -1097,18 +1092,18 @@ typedef struct char *device; int sys_section; int user_section; - int format; + char *format; gulong full_part_size; unsigned long size; - char size_letter; + // char size_letter; char *part_label; char *fs_type; char *fs_label; 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 { @@ -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); @@ -1361,8 +1356,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 +1387,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); @@ -1531,4 +1526,25 @@ 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); +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(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); +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 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