WIP Advanced install

pull/102/head
parent df34f7f48b
commit e482336d47
No known key found for this signature in database
GPG Key ID: FF1D842BF4DDE92B

@ -125,6 +125,7 @@ endif()
set(SOURCE_FILES
ubinstall-gtk.c
ubinstall-gtk-advanced.c
ubinstall-gtk-page-switch.c
ubinstall-gtk-keyboard.c
ubinstall-gtk-region.c

@ -0,0 +1,256 @@
#include "ubinstall-gtk.h"
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));
return section;
}
void yon_advanced_section_remove(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;
}
}
int yon_advanced_section_get(char *partition){
if (yon_char_is_empty(partition)) return -1;
if (sections_size>0&&!strcmp(sections[0]->part_label,partition)){
return 0;
} else if (sections_size>1&&!strcmp(sections[1]->part_label,partition)){
return 1;
}
return -1;
}
void yon_advanced_partition_set_from_section(advanced_partition *part, advanced_section *section){
gtk_label_set_text(GTK_LABEL(part->SectionLabel),section->part_label);
if (section->format){
gtk_switch_set_active(GTK_SWITCH(part->FormatSwitch),1);
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));
gtk_entry_set_text(GTK_ENTRY(part->PartLabelEntry),section->part_label);
gtk_entry_set_text(GTK_ENTRY(part->FileSystemLabelEntry),section->fs_label);
gtk_combo_box_set_active_id(GTK_COMBO_BOX(part->FileSystemTypeCombo),section->fs_type);
gtk_combo_box_set_active_id(GTK_COMBO_BOX(part->EncryptionCombo),section->encryption);
gtk_entry_set_text(GTK_ENTRY(part->EncryptionEntry),section->encryption_password);
}
}
void yon_advanced_update(main_window *widgets){
GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox));
GList *iter;
for (iter = list; iter; iter=iter->next){
gtk_widget_destroy(GTK_WIDGET(iter->data));
}
for (int i=0;i<sections_size;i++){
advanced_partition *part = yon_advanced_partition_new();
yon_advanced_partition_set_from_section(part,sections[i]);
gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0);
}
}
void on_advanced_partition_create(GtkWidget *, main_window *widgets){
GtkTreeIter iter;
for_iter(GTK_TREE_MODEL(widgets->DevicesList),&iter){
char *target;
int active;
gtk_tree_model_get(GTK_TREE_MODEL(widgets->DevicesList),&iter,0,&target,3,&active,-1);
gtk_list_store_set(widgets->DevicesList,&iter,3,!active,-1);
if (!active){
if (sections_size==2) return;
advanced_section *section = yon_advanced_section_new();
sections[sections_size]=section;
sections_size++;
}
}
yon_advanced_update(widgets);
}
void on_advanced_partition_add(GtkWidget *, char *path, main_window *widgets){
GtkTreeIter iter;
if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->PartitionsList),&iter,path)){
char *target;
int status;
gtk_tree_model_get(GTK_TREE_MODEL(widgets->PartitionsList),&iter,0,&target,5,&status,-1);
gtk_list_store_set(widgets->DevicesList,&iter,3,!status,-1);
if (!status){
if (sections_size==2) return;
advanced_section *section = yon_advanced_section_new();
sections[sections_size]=section;
sections_size++;
} else {
yon_advanced_section_remove(target);
}
}
yon_advanced_update(widgets);
}
void yon_install_advanced_init(main_window *){
}
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;
gtk_tree_model_get(model,&iter,0,&target_part,7,&status,-1);
if (!status){
if (chosen<2){
gtk_list_store_set(widgets->PartitionsList,&iter,7,!status,-1);
chosen++;
advanced_partition *part = yon_advanced_partition_new();
part->part_type = ADVANCED_PART_EXISTING;
part->order_iter = g_sequence_append(widgets->advanced_partition_order,part);
part->part = target_part;
gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0);
gtk_widget_show(part->MainBox);
yon_advanced_partition_setup(part,widgets);
on_advanced_parts_added(NULL,NULL,widgets);
}
} else {
gtk_list_store_set(widgets->PartitionsList,&iter,7,!status,-1);
advanced_partition *part = g_object_get_data(G_OBJECT(widgets->AdvancedPartitionAddBox),target_part);
if (part){
on_advanced_part_remove(part->RemoveButton,widgets);
}
}
}
void yon_advanced_parts_update(main_window *widgets){
int size;
config_str partitions;
partitions = yon_config_load(yon_debug_output("%s\n",get_parts_and_devices_command),&size);
for (int i=0;i<size;i++){
yon_char_remove_last_symbol(partitions[i],'\n');
}
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;i<size;i++){
int parsed_size;
config_str parsed = yon_char_parse(partitions[i],&parsed_size,";");
if (!strcmp(parsed[0],"part")){
char *name = parsed[1];
if (strstr(name,disk_path)){
char *capacity = NULL;
long capacity_long = 0;
char *free_space = NULL;
long free_space_long = 0;
char *fs_type = NULL;
char *label = NULL;
if (parsed_size>2){
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,-1);
}
yon_char_parsed_free(parsed,parsed_size);
}
}
}
yon_char_parsed_free(partitions,size);
}
void on_install_advanced_device_chosen(GtkCellRenderer *, gchar *path, main_window *widgets){
gtk_list_store_clear(widgets->PartitionsList);
yon_advanced_partition_clear(widgets);
GtkTreeIter iter;
GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList);
int chosen = 0;
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
if (chosen <2){
gtk_list_store_set(widgets->DevicesList,&iter,5,!status,-1);
chosen++;
} else {
for_iter (model,&iter){
gtk_tree_model_get(model,&iter,5,&status,-1);
if (!status){
gtk_list_store_set(widgets->DevicesList,&iter,6,0,-1);
}
}
}
} else { // unchecks
gtk_list_store_set(widgets->DevicesList,&iter,5,!status,-1);
if (chosen == 2){
for_iter (model,&iter){
gtk_list_store_set(widgets->DevicesList,&iter,6,1,-1);
}
}
chosen--;
}
}
if (chosen) gtk_widget_set_sensitive(widgets->AdvancedAddButton,1);
else gtk_widget_set_sensitive(widgets->AdvancedAddButton,0);
yon_advanced_parts_update(widgets);
}

@ -195,13 +195,13 @@ int yon_advanced_sections_save(dictionary *dict){
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->SectionMarkEntry));
char *part_label_last = last_section&&!strcmp(format_last,"yes")?(char*)gtk_entry_get_text(GTK_ENTRY(last_section->SectionMarkEntry)):NULL;
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->FileSystemMarkentry));
char *fs_label_last = last_section&&!strcmp(format_last,"yes")?(char*)gtk_entry_get_text(GTK_ENTRY(last_section->FileSystemMarkentry)):NULL;
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);
@ -279,11 +279,6 @@ int yon_install_advanced_save(main_window *widgets){
return 1;
}
void yon_install_advanced_init(main_window *){
// char *boot = config(boot_parameter);
// char *swap = config(swap_parameter);
}
void yon_set_max_size_from_partition(GtkTreeView *table, GtkSpinButton *spin_button, GtkComboBox *spin_combo){
GtkTreeModel *model;
GtkTreeIter iter;
@ -641,9 +636,9 @@ advanced_partition *yon_advanced_partition_new(){
part->FormatSwitch = yon_gtk_builder_get_widget(builder,"FormatSwitch");
part->SizeSpin = yon_gtk_builder_get_widget(builder,"SizeSpin");
part->SizeCombo = yon_gtk_builder_get_widget(builder,"SizeCombo");
part->SectionMarkEntry = yon_gtk_builder_get_widget(builder,"SectionMarkEntry");
part->PartLabelEntry = yon_gtk_builder_get_widget(builder,"PartLabelEntry");
part->FileSystemTypeCombo = yon_gtk_builder_get_widget(builder,"FileSystemTypeCombo");
part->FileSystemMarkentry = yon_gtk_builder_get_widget(builder,"FileSystemMarkentry");
part->FileSystemLabelEntry = yon_gtk_builder_get_widget(builder,"FileSystemLabelEntry");
part->EncryptionCombo = yon_gtk_builder_get_widget(builder,"EncryptionCombo");
part->EncryptionEntry = yon_gtk_builder_get_widget(builder,"EncryptionEntry");
part->EncryptionButton = yon_gtk_builder_get_widget(builder,"EncryptionButton");
@ -719,136 +714,3 @@ void on_install_advanced_add_new(GtkWidget *, main_window *widgets){
yon_advanced_partition_setup(part,widgets);
on_advanced_parts_added(NULL,NULL,widgets);
}
void on_install_advanced_device_chosen(GtkCellRenderer *, gchar *path, main_window *widgets){
gtk_list_store_clear(widgets->PartitionsList);
yon_advanced_partition_clear(widgets);
int size;
config_str partitions;
partitions = yon_config_load(yon_debug_output("%s\n",get_parts_and_devices_command),&size);
for (int i=0;i<size;i++){
yon_char_remove_last_symbol(partitions[i],'\n');
}
GtkTreeIter iter;
GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList);
int chosen = 0;
chosen = yon_advanced_get_part_size(widgets);
if (gtk_tree_model_get_iter_from_string(model,&iter,path)){
int status;
gtk_tree_model_get(model,&iter,5,&status,-1);
if (!status){
if (chosen <2){
gtk_list_store_set(widgets->DevicesList,&iter,5,!status,-1);
chosen++;
} else {
for_iter (model,&iter){
gtk_tree_model_get(model,&iter,5,&status,-1);
if (!status){
gtk_list_store_set(widgets->DevicesList,&iter,6,0,-1);
}
}
}
} else {
gtk_list_store_set(widgets->DevicesList,&iter,5,!status,-1);
if (chosen == 2){
for_iter (model,&iter){
gtk_list_store_set(widgets->DevicesList,&iter,6,1,-1);
}
}
chosen--;
}
}
if (chosen) gtk_widget_set_sensitive(widgets->AdvancedAddButton,1);
else gtk_widget_set_sensitive(widgets->AdvancedAddButton,0);
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;i<size;i++){
int parsed_size;
config_str parsed = yon_char_parse(partitions[i],&parsed_size,";");
if (!strcmp(parsed[0],"part")){
char *name = parsed[1];
if (strstr(name,disk_path)){
char *capacity = NULL;
long capacity_long = 0;
char *free_space = NULL;
long free_space_long = 0;
char *fs_type = NULL;
char *label = NULL;
if (parsed_size>2){
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,-1);
}
yon_char_parsed_free(parsed,parsed_size);
}
}
}
}
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;
gtk_tree_model_get(model,&iter,0,&target_part,7,&status,-1);
if (!status){
if (chosen<2){
gtk_list_store_set(widgets->PartitionsList,&iter,7,!status,-1);
chosen++;
advanced_partition *part = yon_advanced_partition_new();
part->part_type = ADVANCED_PART_EXISTING;
part->order_iter = g_sequence_append(widgets->advanced_partition_order,part);
part->part = target_part;
gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0);
gtk_widget_show(part->MainBox);
yon_advanced_partition_setup(part,widgets);
on_advanced_parts_added(NULL,NULL,widgets);
}
} else {
gtk_list_store_set(widgets->PartitionsList,&iter,7,!status,-1);
advanced_partition *part = g_object_get_data(G_OBJECT(widgets->AdvancedPartitionAddBox),target_part);
if (part){
on_advanced_part_remove(part->RemoveButton,widgets);
}
}
}

@ -886,7 +886,7 @@ 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->AdvancedAddButton),"clicked",G_CALLBACK(on_install_advanced_add_new),widgets);
// g_signal_connect(G_OBJECT(widgets->AdvancedAddButton),"clicked",G_CALLBACK(on_install_advanced_add_new),widgets);
g_signal_connect(G_OBJECT(widgets->AdvancedDeviceChosenCell),"toggled",G_CALLBACK(on_install_advanced_device_chosen),widgets);
g_signal_connect(G_OBJECT(widgets->AdvancedPartChosenCell),"toggled",G_CALLBACK(on_install_advanced_partition_chosen),widgets);
g_signal_connect(G_OBJECT(widgets->KeyboardLayoutChosenCell),"toggled",G_CALLBACK(on_keyboard_layout_chosen),widgets);
@ -895,6 +895,8 @@ void yon_main_window_create(main_window *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->SkipInstallationButton),"clicked",G_CALLBACK(on_system_setup_pass),widgets);
// g_signal_connect(G_OBJECT(widgets->AdvancedAddButton),"clicked",G_CALLBACK(on_advanced_new),widgets);
// g_signal_connect(G_OBJECT(widgets->AdvancedPartChosenCell),"toggled",G_CALLBACK(on_advanced_added),widgets);
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter),(GtkTreeModelFilterVisibleFunc)on_country_filter,widgets,NULL);
{

@ -701,9 +701,9 @@ typedef struct {
GtkWidget *FormatRevealer;
GtkWidget *SizeSpin;
GtkWidget *SizeCombo;
GtkWidget *SectionMarkEntry;
GtkWidget *PartLabelEntry;
GtkWidget *FileSystemTypeCombo;
GtkWidget *FileSystemMarkentry;
GtkWidget *FileSystemLabelEntry;
GtkWidget *EncryptionCombo;
GtkWidget *EncryptionEntry;
GtkWidget *EncryptionButton;
@ -930,6 +930,20 @@ typedef struct {
} source_element;
typedef struct {
char *partition;
char *device_source;
gboolean format;
unsigned long size;
char size_letter;
char *part_label;
char *fs_type;
char *fs_label;
char *encryption;
char *encryption_password;
} advanced_section;
void config_init();
main_window *yon_main_window_complete();
ubinstall_language_window *yon_ubinstall_language_new();
@ -1140,3 +1154,11 @@ int yon_char_parsed_compare(const void *a, const void *b);
gboolean yon_os_component_insert(os_row *row);
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);

@ -1,64 +0,0 @@
#include "ubinstall-gtk.h"
typedef struct {
char *section;
int sys_section;
int user_section;
int format;
int size;
char size_letter;
char *part_label;
char *fs_type;
char *fs_label;
char *encryption;
char *encryption_password;
} advanced_section;
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));
sections[sections_size] = section;
sections_size++;
return section;
}
void yon_advanced_section_remove(int pos){
switch(pos){
case 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;
}
}
// add section from tree view
void yon_advanced_add(main_window *widgets){
}
//new section from button
void yon_advanced_new(main_window *widgets){
}
Loading…
Cancel
Save