From fc408d0c4fa1247bc0d1d3bdc6ddb9c8c5e30e1b Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 14 May 2025 11:15:49 +0600 Subject: [PATCH 01/14] Localisation fixes --- source/ubl-strings.h | 2 +- ubl-settings-bootloader_ru.po | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 2909e66..41f9dba 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -55,7 +55,7 @@ #define ADMINISTRATOR_LABEL _("Administrator") #define USER_NAME_LABEL _("User name:") #define USER_PASSWORD_LABEL _("User password:") - #define USER_REMOVE_CONFIRM_LABEL(target) yon_char_unite(_("Are you sure you want to remove user")," ",target," ",_("from boot menu users"),"?",NULL) + #define USER_REMOVE_CONFIRM_LABEL(target) yon_char_unite(_("Are you sure you want to remove user")," ",target," ",_("from boot menu users"),"?",NULL) #define RINGTONE_ADD_TITLE_LABEL _("Add ringtone") #define RINGTONE_EDIT_TITLE_LABEL(target) yon_char_unite(_("Edit ringtone")," - ", target,NULL) diff --git a/ubl-settings-bootloader_ru.po b/ubl-settings-bootloader_ru.po index ff51b77..3da0ac8 100644 --- a/ubl-settings-bootloader_ru.po +++ b/ubl-settings-bootloader_ru.po @@ -27,7 +27,7 @@ msgstr "Настройка параметров загрузки системы" #: source/ubl-strings.h:5 msgid "Boot menu" -msgstr "Менб загрузки" +msgstr "Меню загрузки" #: source/ubl-strings.h:6 msgid "Boot selection menu timer:" @@ -39,11 +39,11 @@ msgstr "секунд" #: source/ubl-strings.h:8 msgid "Default" -msgstr "По умлочанию" +msgstr "По умолчанию" #: source/ubl-strings.h:9 msgid "Default OS:" -msgstr "Загрузка по умлочанию:" +msgstr "Загрузка по умолчанию:" #: source/ubl-strings.h:10 msgid "Load screen display mode:" @@ -135,7 +135,7 @@ msgstr "Отсутствие анимации загрузки с выводом #: source/ubl-strings.h:36 msgid "No boot animation with shortened log" -msgstr "Отсутствие анимации загрузки б выводом сокращённого журнала" +msgstr "Отсутствие анимации загрузки с выводом сокращённого журнала" #: source/ubl-strings.h:37 msgid "Back" From 37aab4be18b3a38523582a4f37671c4a7a79ddc9 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 19 May 2025 11:56:25 +0600 Subject: [PATCH 02/14] Load mode flag changes --- source/ubl-settings-bootloader-password.c | 2 +- source/ubl-settings-bootloader.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/ubl-settings-bootloader-password.c b/source/ubl-settings-bootloader-password.c index 46fe71c..8468721 100644 --- a/source/ubl-settings-bootloader-password.c +++ b/source/ubl-settings-bootloader-password.c @@ -6,7 +6,7 @@ void yon_password_change(GtkWidget *, GtkEntry *entry){ dictionary *dict = NULL; char *password = (char*)gtk_entry_get_text(output_target); if (!yon_char_is_empty(password)){ - if (main_config.load_mode==0){ + if (main_config.load_mode==YON_CONFIG_LOCAL){ password = yon_char_new(password); if (!check_is_password_hash(password)){ gtk_entry_set_text(GTK_ENTRY(window->PasswordHashEntry),password); diff --git a/source/ubl-settings-bootloader.c b/source/ubl-settings-bootloader.c index cbc4d36..1c59fc1 100644 --- a/source/ubl-settings-bootloader.c +++ b/source/ubl-settings-bootloader.c @@ -80,13 +80,13 @@ void on_config_custom_save(GtkWidget *, main_window *){ void on_config_local_load(GtkWidget *,main_window *widgets){ yon_load_proceed(YON_CONFIG_LOCAL); yon_interface_update(widgets); - main_config.load_mode=1; + main_config.load_mode=YON_CONFIG_LOCAL; } void on_config_global_load(GtkWidget *,main_window *widgets){ yon_load_proceed(YON_CONFIG_GLOBAL); yon_interface_update(widgets); - main_config.load_mode=0; + main_config.load_mode=YON_CONFIG_GLOBAL; } @@ -94,7 +94,7 @@ void on_config_custom_load(GtkWidget *,main_window *widgets){ yon_load_proceed(YON_CONFIG_CUSTOM); textdomain(template_ui_LocaleName); textdomain(LocaleName); - main_config.load_mode=3; + main_config.load_mode=YON_CONFIG_CUSTOM; yon_interface_update(widgets); } @@ -457,7 +457,7 @@ void config_init(){ main_config.lock_load_global=0; main_config.lock_save_global=0; main_config.lock_save_local=0; - main_config.load_mode=1; + main_config.load_mode=YON_CONFIG_LOCAL; main_config.password_min_length = yon_password_get_min_len(); main_config.kernel_parameters = yon_resource_open_file(kernel_options_path,&main_config.kernel_size); main_config.input_parameters = yon_resource_open_file(terminal_input_path,&main_config.input_size); From f16d70d90ccdaae85a9aefcd1ba86ade3d8d1962 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 20 May 2025 10:23:56 +0600 Subject: [PATCH 03/14] Fixed kernel options getting --- source/ubl-settings-bootloader.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/ubl-settings-bootloader.c b/source/ubl-settings-bootloader.c index 1c59fc1..eff6fc9 100644 --- a/source/ubl-settings-bootloader.c +++ b/source/ubl-settings-bootloader.c @@ -184,7 +184,7 @@ void yon_interface_update(main_window *widgets){ free(yon_char_divide_search(username,"[",-1)); yon_char_remove_last_symbol(username,']'); gtk_list_store_append(widgets->BootUsersList,&iter); - gtk_list_store_set(widgets->BootUsersList,&iter,0,yon_char_parsed_check_exist(admins_parsed,admins_size,username),1,username,2,"******",-1); + gtk_list_store_set(widgets->BootUsersList,&iter,0,yon_char_parsed_check_exist(admins_parsed,admins_size,username)>-1,1,username,2,"******",-1); } } @@ -293,6 +293,9 @@ void on_kernel_parameter_switch(GtkCellRenderer *, char *path, main_window *widg gtk_entry_set_text(GTK_ENTRY(widgets->CommandLineParametersEntry),final); free(final); } else { + yon_char_parsed_free(parsed,size); + size=0; + parsed=NULL; gtk_entry_set_text(GTK_ENTRY(widgets->CommandLineParametersEntry),""); yon_config_remove_by_key(GRUB_CMDLINE_LINUX_parameter); } From 8135cb094babf51e19cfc648be7c98cb66b013d0 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 20 May 2025 10:24:36 +0600 Subject: [PATCH 04/14] Edit buttons fix --- source/ubl-settings-bootloader-melody.c | 14 ++++++------- source/ubl-settings-bootloader-user.c | 26 ++++++++++++++++++------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/source/ubl-settings-bootloader-melody.c b/source/ubl-settings-bootloader-melody.c index 04ce4ce..931ad51 100644 --- a/source/ubl-settings-bootloader-melody.c +++ b/source/ubl-settings-bootloader-melody.c @@ -48,12 +48,12 @@ void on_ringtone_add_clicked(GtkWidget *,main_window *widgets){ } void on_ringtone_edit_clicked(GtkWidget *,main_window *widgets){ - yon_ringtone_window *window = yon_ringtone_window_new(); GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->BootRingtoneList); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->BootRingtoneTree)),&model,&iter)){ + yon_ringtone_window *window = yon_ringtone_window_new(); int is_chosen; char *name, *code; gtk_tree_model_get(model,&iter,0,&is_chosen,1,&name,2,&code,-1); @@ -62,14 +62,14 @@ void on_ringtone_edit_clicked(GtkWidget *,main_window *widgets){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->ChooseCheck),is_chosen); gtk_entry_set_text(GTK_ENTRY(window->NameEntry),name); gtk_entry_set_text(GTK_ENTRY(window->CodeEntry),code); - } + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); - dictionary *dict = NULL; - yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_ringtone_accept),dict); + gtk_widget_show(window->Window); + } - g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_ringtone_accept),dict); - gtk_widget_show(window->Window); } diff --git a/source/ubl-settings-bootloader-user.c b/source/ubl-settings-bootloader-user.c index 554ac40..524f2b9 100644 --- a/source/ubl-settings-bootloader-user.c +++ b/source/ubl-settings-bootloader-user.c @@ -42,6 +42,18 @@ void on_user_accept(GtkWidget *,dictionary *dict){ char *superusers = yon_char_parsed_to_string(parsed,size,","); yon_config_register(GRUB_SUPERUSERS_parameter,GRUB_SUPERUSERS_command,superusers); } + } else { + int size; + char *superusers = config(GRUB_SUPERUSERS_parameter); + config_str parsed = yon_char_parse(superusers,&size,","); + int pos = yon_char_parsed_check_exist(parsed,size,(char*)username); + if (pos!=-1){ + parsed = yon_char_parsed_rip(parsed,&size,pos); + + char *superusers = yon_char_parsed_to_string(parsed,size,","); + yon_config_register(GRUB_SUPERUSERS_parameter,GRUB_SUPERUSERS_command,superusers); + } + } gtk_widget_destroy(window->Window); yon_interface_update(widgets); @@ -60,12 +72,12 @@ void on_user_add_clicked(GtkWidget *,main_window *widgets){ } void on_user_edit_clicked(GtkWidget *,main_window *widgets){ - yon_user_window *window = yon_user_window_new(); GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->BootUsersList); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->BootUsersTree)),&model,&iter)){ + yon_user_window *window = yon_user_window_new(); int is_admin; char *name; gtk_tree_model_get(model,&iter,0,&is_admin,1,&name,-1); @@ -76,14 +88,14 @@ void on_user_edit_clicked(GtkWidget *,main_window *widgets){ if (password){ gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),password); } - } + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); - dictionary *dict = NULL; - yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_user_accept),dict); + gtk_widget_show(window->Window); + } - g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_user_accept),dict); - gtk_widget_show(window->Window); } From 48b70fb02bc7636cc9bcd1801e58bfe71992c5c5 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 20 May 2025 14:14:16 +0600 Subject: [PATCH 05/14] Added standard melody csv; Window titles fixes; QOL improvements --- gresource.xml | 1 + grub-melody.csv | 2 + source/CMakeLists.txt | 1 + source/ubl-settings-bootloader-melody.c | 41 ++++- source/ubl-settings-bootloader-user.c | 24 ++- source/ubl-settings-bootloader.c | 83 ++++++++- source/ubl-settings-bootloader.h | 7 +- source/ubl-strings.h | 6 +- ubl-settings-bootloader-ringtone.glade | 34 +--- ubl-settings-bootloader.glade | 8 +- ubl-settings-bootloader.pot | 231 +++++++++++++++++++----- ubl-settings-bootloader_ru.po | 70 ++++--- 12 files changed, 379 insertions(+), 129 deletions(-) create mode 100644 grub-melody.csv diff --git a/gresource.xml b/gresource.xml index a1da154..ef6c431 100644 --- a/gresource.xml +++ b/gresource.xml @@ -18,5 +18,6 @@ grub-parameters.csv grub-terminal-input.csv grub-terminal-output.csv + grub-melody.csv \ No newline at end of file diff --git a/grub-melody.csv b/grub-melody.csv new file mode 100644 index 0000000..070f201 --- /dev/null +++ b/grub-melody.csv @@ -0,0 +1,2 @@ +Option|Tone code +ubbeep|480 900 2 1000 2 800 2 400 2 600 3 \ No newline at end of file diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 594b711..37dad89 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -40,6 +40,7 @@ set(DEPENDFILES ../grub-parameters.csv ../grub-terminal-input.csv ../grub-terminal-output.csv + ../grub-melody.csv ../gresource.xml ../ubl-settings-bootloader-banner.png ../ubl-settings-bootloader.css diff --git a/source/ubl-settings-bootloader-melody.c b/source/ubl-settings-bootloader-melody.c index 931ad51..24c4704 100644 --- a/source/ubl-settings-bootloader-melody.c +++ b/source/ubl-settings-bootloader-melody.c @@ -5,6 +5,29 @@ void on_ringtone_accept(GtkWidget *,dictionary *dict){ yon_ringtone_window *window = yon_dictionary_get_data(dict->first->next,yon_ringtone_window*); const char *username = gtk_entry_get_text(GTK_ENTRY(window->NameEntry)); const char *password = gtk_entry_get_text(GTK_ENTRY(window->CodeEntry)); + if (!yon_char_is_empty(window->prev_name)){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->BootUsersList); + for_iter(model,&iter){ + char *name; + int user_created; + gtk_tree_model_get(model,&iter,1,&name,3,&user_created,-1); + if (user_created){ + if (!strcmp(name,username)){ + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); + data->action_text = USER_EXIST_LABEL(username); + if (yon_confirmation_dialog_call(window->Window,data)!=GTK_RESPONSE_ACCEPT){ + return; + } + break; + } + } else { + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NAME_OCCUPIED_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->NameEntry); + return; + } + } + } // if (yon_char_is_empty(username)){ // yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); // yon_ubl_status_highlight_incorrect(window->NameEntry); @@ -23,20 +46,15 @@ void on_ringtone_accept(GtkWidget *,dictionary *dict){ } } yon_window_config_add_instant_parameter((char*)username,"melodies",(char*)password,YON_TYPE_STRING); - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->ChooseCheck))){ - yon_config_register(GRUB_PLAY_parameter,GRUB_PLAY_command,(char*)password); - } else { - char *config_melody = config(GRUB_PLAY_parameter); - if (!yon_char_is_empty(config_melody)&&!strcmp(config_melody,password)){ - yon_config_remove_by_key(GRUB_PLAY_parameter); - } - } gtk_widget_destroy(window->Window); yon_interface_update(widgets); } void on_ringtone_add_clicked(GtkWidget *,main_window *widgets){ yon_ringtone_window *window = yon_ringtone_window_new(); + char *title = RINGTONE_ADD_TITLE_LABEL; + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),title,icon_path,"ringtone_add_window"); + gtk_label_set_text(GTK_LABEL(window->TitleLabel),title); dictionary *dict = NULL; yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); @@ -57,9 +75,12 @@ void on_ringtone_edit_clicked(GtkWidget *,main_window *widgets){ int is_chosen; char *name, *code; gtk_tree_model_get(model,&iter,0,&is_chosen,1,&name,2,&code,-1); + char *title = RINGTONE_EDIT_TITLE_LABEL(name); + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),title,icon_path,"ringtone_add_window"); + gtk_label_set_text(GTK_LABEL(window->TitleLabel),title); + free(title); window->prev_name = yon_char_new(name); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->ChooseCheck),is_chosen); gtk_entry_set_text(GTK_ENTRY(window->NameEntry),name); gtk_entry_set_text(GTK_ENTRY(window->CodeEntry),code); dictionary *dict = NULL; @@ -83,6 +104,7 @@ void on_ringtone_remove_clicked(GtkWidget *,main_window *widgets){ data->data=NULL; data->function=NULL; data->action_text = RINGTONE_REMOVE_CONFIRM_LABEL(name); + data->title = RINGTONE_DELETE_TITLE_LABEL(name); if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ char *config_code = config(GRUB_PLAY_parameter); yon_window_config_erase_instant_parameter(name,"melodies"); @@ -101,7 +123,6 @@ yon_ringtone_window *yon_ringtone_window_new(){ window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); window->TitleLabel = yon_gtk_builder_get_widget(builder,"TitleLabel"); - window->ChooseCheck = yon_gtk_builder_get_widget(builder,"ChooseCheck"); window->NameEntry = yon_gtk_builder_get_widget(builder,"NameEntry"); window->CodeEntry = yon_gtk_builder_get_widget(builder,"CodeEntry"); window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); diff --git a/source/ubl-settings-bootloader-user.c b/source/ubl-settings-bootloader-user.c index 524f2b9..71f8a40 100644 --- a/source/ubl-settings-bootloader-user.c +++ b/source/ubl-settings-bootloader-user.c @@ -4,6 +4,22 @@ void on_user_accept(GtkWidget *,dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); yon_user_window *window = yon_dictionary_get_data(dict->first->next,yon_user_window*); const char *username = gtk_entry_get_text(GTK_ENTRY(window->UsernameEntry)); + + if (!yon_char_is_empty(window->prev_name)){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->BootUsersList); + for_iter(model,&iter){ + char *name; + gtk_tree_model_get(model,&iter,1,&name,-1); + if (!strcmp(name,username)){ + dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); + data->action_text = USER_EXIST_LABEL(username); + if (yon_confirmation_dialog_call(window->Window,data)!=GTK_RESPONSE_ACCEPT){ + return; + } + } + } + } const char *password = gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); if (yon_char_is_empty(username)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); @@ -61,7 +77,9 @@ void on_user_accept(GtkWidget *,dictionary *dict){ void on_user_add_clicked(GtkWidget *,main_window *widgets){ yon_user_window *window = yon_user_window_new(); - + char *title = USER_ADD_TITLE_LABEL; + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),title,icon_path,"ringtone_add_window"); + gtk_label_set_text(GTK_LABEL(window->TitleLabel),title); dictionary *dict = NULL; yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); @@ -81,6 +99,9 @@ void on_user_edit_clicked(GtkWidget *,main_window *widgets){ int is_admin; char *name; gtk_tree_model_get(model,&iter,0,&is_admin,1,&name,-1); + char *title = USER_EDIT_TITLE_LABEL(name); + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),title,icon_path,"ringtone_add_window"); + gtk_label_set_text(GTK_LABEL(window->TitleLabel),title); window->prev_name = yon_char_new(name); char *password = config(GRUB_PASSWORD(name)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->AdminCheck),is_admin); @@ -107,6 +128,7 @@ void on_user_remove_clicked(GtkWidget *,main_window *widgets){ gtk_tree_model_get(model,&iter,1,&name,-1); dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); data->action_text = USER_REMOVE_CONFIRM_LABEL(name); + data->title = USER_DELETE_TITLE_LABEL(name); if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ yon_config_remove_by_key(GRUB_PASSWORD(name)); yon_interface_update(widgets); diff --git a/source/ubl-settings-bootloader.c b/source/ubl-settings-bootloader.c index eff6fc9..d4d7786 100644 --- a/source/ubl-settings-bootloader.c +++ b/source/ubl-settings-bootloader.c @@ -189,17 +189,37 @@ void yon_interface_update(main_window *widgets){ } } { + GtkTreeIter iter; + int ringtones_size; + config_str standard_ringtones = yon_resource_open_file(melody_path,&ringtones_size); + for (int i=1;iBootRingtoneList,&iter); + gtk_list_store_set(widgets->BootRingtoneList,&iter,0,0,1,key,2,code,-1); + } char *ringtone = config(GRUB_PLAY_parameter); gsize size=0; config_str codes = yon_window_config_get_section("melodies",&size); - GtkTreeIter iter; for (gsize i=0;iBootRingtoneList,&iter); - gtk_list_store_set(widgets->BootRingtoneList,&iter,0,!yon_char_is_empty(ringtone)&&!strcmp(ringtone,cur_code),1,name,2,cur_code,-1); + int found = 0; + for_iter(GTK_TREE_MODEL(widgets->BootRingtoneList),&iter){ + char *key; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->BootRingtoneList),&iter,1,&key,-1); + if (!strcmp(key,name)){ + found = 1; + break; + } + } + if (!found){ + gtk_list_store_append(widgets->BootRingtoneList,&iter); + } + gtk_list_store_set(widgets->BootRingtoneList,&iter,0,!yon_char_is_empty(ringtone)&&!strcmp(ringtone,cur_code),1,name,2,cur_code,3,1,-1); free(cur_code); free(name); } @@ -442,6 +462,56 @@ void on_output_option_switch(GtkCellRenderer *,char *path, main_window *widgets) } } + +void on_tree_view_selection_changed(GtkWidget *self, main_window *widgets){ + GtkTreeIter iter; + GtkTreeModel *model; + if (self == widgets->BootUsersTree){ + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->BootUsersTree)),&model,&iter)) { + gtk_widget_set_sensitive(widgets->BootUsersEditButton,1); + gtk_widget_set_sensitive(widgets->BootUsersRemoveButton,1); + } else { + gtk_widget_set_sensitive(widgets->BootUsersEditButton,0); + gtk_widget_set_sensitive(widgets->BootUsersRemoveButton,0); + } + } else if (self == widgets->BootRingtoneTree){ + + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->BootRingtoneTree)),&model,&iter)) { + int user_created; + gtk_tree_model_get(model,&iter,3,&user_created,-1); + if (user_created){ + gtk_widget_set_sensitive(widgets->BootRingtoneEditButton,1); + gtk_widget_set_sensitive(widgets->BootRingtoneRemoveButton,1); + } else { + gtk_widget_set_sensitive(widgets->BootRingtoneEditButton,0); + gtk_widget_set_sensitive(widgets->BootRingtoneRemoveButton,0); + } + } else { + gtk_widget_set_sensitive(widgets->BootRingtoneEditButton,0); + gtk_widget_set_sensitive(widgets->BootRingtoneRemoveButton,0); + } + } +} + +void on_melody_toggled(GtkCellRenderer *, char *path, main_window *widgets){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->BootRingtoneList); + GtkTreePath *cur_path = gtk_tree_path_new_from_string(path); + + for_iter(model,&iter){ + GtkTreePath *compare_path = gtk_tree_model_get_path(model,&iter); + if (gtk_tree_path_compare(cur_path,compare_path)){ + gtk_list_store_set(widgets->BootRingtoneList,&iter,0,0,-1); + } else { + gtk_list_store_set(widgets->BootRingtoneList,&iter,0,1,-1); + char *code; + gtk_tree_model_get(model,&iter,2,&code,-1); + yon_config_register(GRUB_PLAY_parameter,GRUB_PLAY_command,(char*)code); + } + gtk_tree_path_free(compare_path); + } + gtk_tree_path_free(cur_path); +} // standard functions /**config_init() @@ -534,6 +604,7 @@ void yon_main_window_complete(main_window *widgets){ widgets->KernelParametersList = GTK_LIST_STORE(gtk_builder_get_object(builder,"KernelParametersList")); widgets->InputTerminalList = GTK_LIST_STORE(gtk_builder_get_object(builder,"InputTerminalList")); widgets->OutputTerminalList = GTK_LIST_STORE(gtk_builder_get_object(builder,"OutputTerminalList")); + widgets->MelodyChosenCellRenderer = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"MelodyChosenCellRenderer")); } @@ -545,6 +616,7 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->BootRingtoneEditButton),"clicked",G_CALLBACK(on_ringtone_edit_clicked),widgets); g_signal_connect(G_OBJECT(widgets->BootRingtoneRemoveButton),"clicked",G_CALLBACK(on_ringtone_remove_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->MelodyChosenCellRenderer),"toggled",G_CALLBACK(on_melody_toggled),widgets); g_signal_connect(G_OBJECT(widgets->KernelChooseCell),"toggled",G_CALLBACK(on_kernel_parameter_switch),widgets); g_signal_connect(G_OBJECT(widgets->InputChosenCell),"toggled",G_CALLBACK(on_input_option_switch),widgets); g_signal_connect(G_OBJECT(widgets->OutputChosenCell),"toggled",G_CALLBACK(on_output_option_switch),widgets); @@ -567,6 +639,9 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),NULL); g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),NULL); g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),NULL); + + g_signal_connect(G_OBJECT(widgets->BootUsersTree),"cursor-changed",G_CALLBACK(on_tree_view_selection_changed),widgets); + g_signal_connect(G_OBJECT(widgets->BootRingtoneTree),"cursor-changed",G_CALLBACK(on_tree_view_selection_changed),widgets); yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size); yon_save_window_set_postsave_function(on_save_done,widgets); @@ -586,9 +661,9 @@ int main(int argc, char *argv[]){ yon_ubl_setup_arguments(argc,argv,&unfound,&size,NULL); gtk_init(&argc,&argv); template_main_window *widgets = yon_ubl_window_setup(); - yon_main_window_complete((main_window*)widgets); char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); yon_window_config_load(path); + yon_main_window_complete((main_window*)widgets); main_config.launch_arguments=yon_char_parsed_copy(argv,argc); main_config.launch_size=argc; if (getuid()!=0){ diff --git a/source/ubl-settings-bootloader.h b/source/ubl-settings-bootloader.h index 2ff40b0..b435921 100644 --- a/source/ubl-settings-bootloader.h +++ b/source/ubl-settings-bootloader.h @@ -32,6 +32,7 @@ #define kernel_options_path "resource:///com/ublinux/csv/grub-parameters.csv" #define terminal_input_path "resource:///com/ublinux/csv/grub-terminal-input.csv" #define terminal_output_path "resource:///com/ublinux/csv/grub-terminal-output.csv" +#define melody_path "resource:///com/ublinux/csv/grub-melody.csv" #define LocaleName "ubl-settings-bootloader" @@ -126,6 +127,7 @@ typedef struct { GtkWidget *OutputTerminalEntry; GtkWidget *OutputTerminalTree; + GtkCellRenderer *MelodyChosenCellRenderer; GtkCellRenderer *KernelChooseCell; GtkCellRenderer *OutputChosenCell; GtkCellRenderer *InputChosenCell; @@ -174,7 +176,6 @@ typedef struct { GtkWidget *StatusBox; GtkWidget *TitleLabel; - GtkWidget *ChooseCheck; GtkWidget *NameEntry; GtkWidget *CodeEntry; @@ -272,4 +273,6 @@ void on_menu_chosen(GtkWidget *, yon_menu_item *item); void on_submenu_open(GtkWidget *,yon_menu_item *item); void on_children_clean(GtkWidget*, yon_menu_window *window); gboolean yon_on_revealer_switched (yon_menu_window *window); -void yon_save_window_hide_passwords(template_saving_window *window); \ No newline at end of file +void yon_save_window_hide_passwords(template_saving_window *window); +void on_tree_view_selection_changed(GtkWidget *self, main_window *widgets); +void on_melody_toggled(GtkCellRenderer *self, char *path, main_window *widgets); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 41f9dba..97ec6fb 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -52,14 +52,18 @@ #define USER_ADD_TITLE_LABEL _("Add user") #define USER_EDIT_TITLE_LABEL(target) yon_char_unite(_("Edit user")," - ", target,NULL) +#define USER_DELETE_TITLE_LABEL(target) yon_char_unite(_("Delete user")," - ",target,NULL) #define ADMINISTRATOR_LABEL _("Administrator") #define USER_NAME_LABEL _("User name:") #define USER_PASSWORD_LABEL _("User password:") #define USER_REMOVE_CONFIRM_LABEL(target) yon_char_unite(_("Are you sure you want to remove user")," ",target," ",_("from boot menu users"),"?",NULL) + #define USER_EXIST_LABEL(target) yon_char_unite("User"," ", target," ", _("is already exists. Do you really want to save user")," ",target,"?",NULL) #define RINGTONE_ADD_TITLE_LABEL _("Add ringtone") #define RINGTONE_EDIT_TITLE_LABEL(target) yon_char_unite(_("Edit ringtone")," - ", target,NULL) +#define RINGTONE_DELETE_TITLE_LABEL(target) yon_char_unite(_("Delete ringtone")," - ",target,NULL) #define CHOSEN_LABEL _("Chosen") #define NAME_TEXT_LABEL _("Name:") #define MELODY_CODE_TEXT_LABEL _("Melody code:") - #define RINGTONE_REMOVE_CONFIRM_LABEL(target) yon_char_unite(_("Are you sure you want to remove ringtone")," ",target,"?",NULL) \ No newline at end of file + #define RINGTONE_REMOVE_CONFIRM_LABEL(target) yon_char_unite(_("Are you sure you want to remove ringtone")," ",target,"?",NULL) + #define NAME_OCCUPIED_LABEL _("This ringtone name is already used by standard ringtone") \ No newline at end of file diff --git a/ubl-settings-bootloader-ringtone.glade b/ubl-settings-bootloader-ringtone.glade index 49d1026..3dabd79 100644 --- a/ubl-settings-bootloader-ringtone.glade +++ b/ubl-settings-bootloader-ringtone.glade @@ -3,6 +3,16 @@ + + True + False + com.ublinux.ubl-settings-usergroups.cancel-symbolic + + + True + False + com.ublinux.ubl-settings-usergroups.accept-symbolic + 450 250 @@ -41,20 +51,6 @@ 5 vertical 5 - - - Chosen - True - True - False - True - - - False - True - 0 - - True @@ -190,14 +186,4 @@ - - True - False - com.ublinux.ubl-settings-usergroups.cancel-symbolic - - - True - False - com.ublinux.ubl-settings-usergroups.accept-symbolic - diff --git a/ubl-settings-bootloader.glade b/ubl-settings-bootloader.glade index 67b2691..79ecf1d 100644 --- a/ubl-settings-bootloader.glade +++ b/ubl-settings-bootloader.glade @@ -11,6 +11,8 @@ + + @@ -396,6 +398,7 @@ True + False False document-edit-symbolic