From 2abd3a7b86b7f06944c548aeea1657cde71cf499 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 3 Oct 2025 18:09:31 +0600 Subject: [PATCH] WIP advanced install saving --- source/ubinstall-gtk-advanced.c | 141 +++++++++++++++++++++++++++- source/ubinstall-gtk-installation.c | 109 +++++++++++---------- source/ubinstall-gtk-page-switch.c | 2 +- source/ubinstall-gtk.h | 11 ++- ubinstall-gtk-advanced-box.glade | 2 + 5 files changed, 204 insertions(+), 61 deletions(-) diff --git a/source/ubinstall-gtk-advanced.c b/source/ubinstall-gtk-advanced.c index 396e0d6..7182df4 100644 --- a/source/ubinstall-gtk-advanced.c +++ b/source/ubinstall-gtk-advanced.c @@ -89,6 +89,7 @@ void yon_advanced_update(main_window *widgets){ 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); @@ -100,6 +101,7 @@ void yon_advanced_update(main_window *widgets){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->UserDataSectionToggle),1); } 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); part->part_type = ADVANCED_PART_EXISTING; @@ -265,6 +267,39 @@ void yon_advanced_parts_update(main_window *widgets){ 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; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); + GtkTreeIter iter; + long selected_size; + + for_iter(model,&iter){ + char *target; + gtk_tree_model_get(model,&iter,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 *self,main_window *widgets){ + 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(); @@ -295,7 +330,10 @@ void on_install_advanced_device_chosen(GtkCellRenderer *, gchar *path, main_wind } void on_advanced_password_clicked(GtkWidget *, advanced_partition *part){ - yon_password_open(GTK_ENTRY(part->EncryptionEntry)); + 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){ @@ -338,6 +376,96 @@ void on_advanced_section_toggled(GtkWidget *self, main_window *widgets){ } } +int yon_advanced_save(main_window *){ + int devices_size; + config_str devices = NULL; + int parts_size; + config_str parts = NULL; + int part_size_size; + config_str part_size = NULL; + int part_label_size; + config_str part_label = NULL; + int fs_type_size; + config_str fs_type = NULL; + int fs_label_size; + config_str fs_label = NULL; + int encryption_size; + config_str encryption = NULL; + int format_size; + config_str format = NULL; + if (!sections_size){ + + return 0; + } + advanced_section *cur_section = sections[0]->sys_section?sections[0]:sections[1]; + yon_char_parsed_add_or_create_if_exists(devices,&devices_size,cur_section->device); + if (cur_section->user_section){ + yon_char_parsed_add_or_create_if_exists(devices,&devices_size,cur_section->device); + } + if (!yon_char_is_empty(cur_section->partition)){ + yon_char_parsed_add_or_create_if_exists(parts,&parts_size,cur_section->partition); + } else { + yon_char_parsed_add_or_create_if_exists(parts,&parts_size,""); + } + 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); + yon_char_parsed_add_or_create_if_exists(part_size,&part_size_size,sz_str); + } + if (!yon_char_is_empty(cur_section->part_label)){ + yon_char_parsed_add_or_create_if_exists(part_label,&part_label_size,cur_section->part_label); + } + if (!yon_char_is_empty(cur_section->fs_type)){ + yon_char_parsed_add_or_create_if_exists(fs_type,&fs_type_size,cur_section->fs_type); + } + if (!yon_char_is_empty(cur_section->fs_label)){ + yon_char_parsed_add_or_create_if_exists(fs_label,&fs_label_size,cur_section->fs_label); + } + if (cur_section->format){ + yon_char_parsed_add_or_create_if_exists(format,&format_size,"yes"); + } else { + yon_char_parsed_add_or_create_if_exists(format,&format_size,"no"); + } + if (!yon_char_is_empty(cur_section->encryption)){ + char *encrypt_str = yon_char_unite(cur_section->encryption,":",cur_section->encryption_password,NULL); + yon_char_parsed_add_or_create_if_exists(encryption,&encryption_size,encrypt_str); + } + if (sections_size>1){ + cur_section = sections[0]->sys_section?sections[1]:sections[0]; + + yon_char_parsed_add_or_create_if_exists(devices,&devices_size,cur_section->device); + if (!yon_char_is_empty(cur_section->partition)){ + yon_char_parsed_add_or_create_if_exists(parts,&parts_size,cur_section->partition); + } else { + yon_char_parsed_add_or_create_if_exists(parts,&parts_size,""); + } + 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); + yon_char_parsed_add_or_create_if_exists(part_size,&part_size_size,sz_str); + } + if (!yon_char_is_empty(cur_section->part_label)){ + yon_char_parsed_add_or_create_if_exists(part_label,&part_label_size,cur_section->part_label); + } + if (!yon_char_is_empty(cur_section->fs_type)){ + yon_char_parsed_add_or_create_if_exists(fs_type,&fs_type_size,cur_section->fs_type); + } + if (!yon_char_is_empty(cur_section->fs_label)){ + yon_char_parsed_add_or_create_if_exists(fs_label,&fs_label_size,cur_section->fs_label); + } + if (cur_section->format){ + yon_char_parsed_add_or_create_if_exists(format,&format_size,"yes"); + } else { + yon_char_parsed_add_or_create_if_exists(format,&format_size,"no"); + } + if (!yon_char_is_empty(cur_section->encryption)){ + char *encrypt_str = yon_char_unite(cur_section->encryption,":",cur_section->encryption_password,NULL); + yon_char_parsed_add_or_create_if_exists(encryption,&encryption_size,encrypt_str); + } + } + return 1; +} + advanced_partition *yon_advanced_partition_new(){ advanced_partition *part = new(advanced_partition); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_advanced_part); @@ -361,14 +489,23 @@ advanced_partition *yon_advanced_partition_new(){ yon_gtk_revealer_set_from_switch(GTK_REVEALER(part->FormatRevealer),GTK_SWITCH(part->FormatSwitch)); 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); + 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); + 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; } diff --git a/source/ubinstall-gtk-installation.c b/source/ubinstall-gtk-installation.c index 1ee56ae..91062f9 100644 --- a/source/ubinstall-gtk-installation.c +++ b/source/ubinstall-gtk-installation.c @@ -225,59 +225,59 @@ int yon_advanced_sections_save(dictionary *dict){ return 1; } -int yon_install_advanced_save(main_window *widgets){ - - GtkTreeModel *model; - GtkTreeIter iter; - if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->AdvancedDeviceTree)),&model,&iter)){ - yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NO_DEVICE_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(gtk_widget_get_parent(widgets->AdvancedDeviceTree)); - return 0; - } - char *device; - gtk_tree_model_get(model,&iter,0,&device,-1); - if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->AdvancedPartitionTree)),&model,&iter)){ - yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NO_DEVICE_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(gtk_widget_get_parent(widgets->AdvancedPartitionTree)); - return 0; - } - yon_config_remove_by_key(part_size_parameter); - char *part; - gtk_tree_model_get(model,&iter,0,&part,-1); - - if (!yon_advanced_sections_save(widgets->advanced_sections)){ - return 0; - } - - 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_size_parameter_command,"ram"); - } else { - yon_config_register(swap_parameter,swap_parameter_command,"yes"); - char *swap = g_strdup_printf("%d%s",gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->AdvancedSwapFixedSpin)),yon_size_get_mod(gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->AdvancedSwapFixedSizeSwitch))+1)); - yon_config_register(swap_size_parameter,swap_size_parameter_command,swap); - } - } - const char *device_typevfs = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo)); - if (!yon_char_is_empty(device_typevfs)){ - yon_config_register(device_typevfs_parameter,device_typevfs_parameter_command,(char*)device_typevfs); - } else { - yon_config_remove_by_key(device_typevfs_parameter); - } - if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedLoadTypeSwitch))){ - char *bios = gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedBiosSectorSwitch))?"bios":""; - char *efi = gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedEFISwitch))?"efi":NULL; - char *boot = yon_char_unite(bios,!yon_char_is_empty(bios)&&!yon_char_is_empty(efi)?"+":"",efi,NULL); - yon_config_register(boot_parameter,boot_parameter_command,boot); - } else { - yon_config_register(boot_parameter,boot_parameter_command,"none"); - } - - return 1; -} +// int yon_install_advanced_save(main_window *widgets){ + +// GtkTreeModel *model; +// GtkTreeIter iter; +// if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->AdvancedDeviceTree)),&model,&iter)){ +// yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NO_DEVICE_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// yon_ubl_status_highlight_incorrect(gtk_widget_get_parent(widgets->AdvancedDeviceTree)); +// return 0; +// } +// char *device; +// gtk_tree_model_get(model,&iter,0,&device,-1); +// if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->AdvancedPartitionTree)),&model,&iter)){ +// yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),NO_DEVICE_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); +// yon_ubl_status_highlight_incorrect(gtk_widget_get_parent(widgets->AdvancedPartitionTree)); +// return 0; +// } +// yon_config_remove_by_key(part_size_parameter); +// char *part; +// gtk_tree_model_get(model,&iter,0,&part,-1); + +// if (!yon_advanced_sections_save(widgets->advanced_sections)){ +// return 0; +// } + +// 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_size_parameter_command,"ram"); +// } else { +// yon_config_register(swap_parameter,swap_parameter_command,"yes"); +// char *swap = g_strdup_printf("%d%s",gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->AdvancedSwapFixedSpin)),yon_size_get_mod(gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->AdvancedSwapFixedSizeSwitch))+1)); +// yon_config_register(swap_size_parameter,swap_size_parameter_command,swap); +// } +// } +// const char *device_typevfs = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo)); +// if (!yon_char_is_empty(device_typevfs)){ +// yon_config_register(device_typevfs_parameter,device_typevfs_parameter_command,(char*)device_typevfs); +// } else { +// yon_config_remove_by_key(device_typevfs_parameter); +// } +// if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedLoadTypeSwitch))){ +// char *bios = gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedBiosSectorSwitch))?"bios":""; +// char *efi = gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedEFISwitch))?"efi":NULL; +// char *boot = yon_char_unite(bios,!yon_char_is_empty(bios)&&!yon_char_is_empty(efi)?"+":"",efi,NULL); +// yon_config_register(boot_parameter,boot_parameter_command,boot); +// } else { +// yon_config_register(boot_parameter,boot_parameter_command,"none"); +// } + +// return 1; +// } void yon_set_max_size_from_partition(GtkTreeView *table, GtkSpinButton *spin_button, GtkComboBox *spin_combo){ GtkTreeModel *model; @@ -305,9 +305,6 @@ void on_partition_changed(GtkWidget *self, main_window *widgets){ if (self==widgets->NextInstallationSysSectionTree||self == widgets->NextInstallationSizeTypeSpin){ yon_set_max_size_from_partition(GTK_TREE_VIEW(widgets->NextInstallationSysSectionTree),GTK_SPIN_BUTTON(widgets->NextInstallationSizeSpin),GTK_COMBO_BOX(widgets->NextInstallationSizeTypeSpin)); } - if (self==widgets->AdvancedPartitionTree){ - - } } diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index b13fbd6..ebd9902 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -191,7 +191,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_install_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.h b/source/ubinstall-gtk.h index aed12c2..928ca8a 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -72,6 +72,8 @@ #define network_path "resource:///com/ublinux/csv/network-list.csv" #define fs_types_path "resource:///com/ublinux/csv/filesystems-format-list.csv" +#define encryptions_list "luks1","luks2" + #define locales_list_command "/usr/share/i18n/locales/" #define slide_0_path "/com/ublinux/images/slide-0.png" @@ -937,7 +939,9 @@ enum PART_SOURCE { typedef struct { char *partition; - char *device_source; + char *device; + int sys_section; + int user_section; gboolean format; unsigned long size; char size_letter; @@ -1164,4 +1168,7 @@ 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); \ No newline at end of file +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); \ No newline at end of file diff --git a/ubinstall-gtk-advanced-box.glade b/ubinstall-gtk-advanced-box.glade index 137b215..648d669 100644 --- a/ubinstall-gtk-advanced-box.glade +++ b/ubinstall-gtk-advanced-box.glade @@ -364,6 +364,7 @@ True + False True @@ -375,6 +376,7 @@ True + False True True image4