WIP advanced install saving

pull/102/head
parent 0275a402e0
commit 2abd3a7b86
No known key found for this signature in database
GPG Key ID: FF1D842BF4DDE92B

@ -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;i<size;i++){
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->EncryptionCombo),encryptions[i],encryptions[i]);
}
yon_char_parsed_free(encryptions,size);
return part;
}

@ -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){
}
}

@ -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);

@ -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;
@ -1165,3 +1169,6 @@ 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);

@ -364,6 +364,7 @@
<child>
<object class="GtkEntry" id="EncryptionEntry">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
</object>
<packing>
@ -375,6 +376,7 @@
<child>
<object class="GtkButton" id="EncryptionButton">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image4</property>

Loading…
Cancel
Save