You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
4.7 KiB
109 lines
4.7 KiB
#include "ubl-settings-system.h"
|
|
|
|
void on_locale_toggle(GtkCellRenderer *, gchar *path,language_window *window){
|
|
GtkTreeIter iter;
|
|
GtkTreeModel *model = GTK_TREE_MODEL(window->LanguagesList);
|
|
gtk_tree_model_get_iter_from_string(model,&iter,path);
|
|
gboolean is_active;
|
|
char *target;
|
|
gtk_tree_model_get(model,&iter,0,&is_active,1,&target,-1);
|
|
gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,!is_active,-1);
|
|
|
|
char *locales = (char*)gtk_entry_get_text(GTK_ENTRY(window->ManualEntry));
|
|
if (!is_active){
|
|
if (!yon_char_check_element(locales,target,",")){
|
|
char *temp = yon_char_append_element(locales,target,",");
|
|
gtk_entry_set_text(GTK_ENTRY(window->ManualEntry),temp);
|
|
free(temp);
|
|
}
|
|
} else {
|
|
char *temp = yon_char_remove_element(locales,target,",");
|
|
gtk_entry_set_text(GTK_ENTRY(window->ManualEntry),temp);
|
|
if (!yon_char_is_empty(temp)) free(temp);
|
|
}
|
|
}
|
|
|
|
void on_locale_accept(GtkWidget *self, language_window *window){
|
|
main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets");
|
|
|
|
char *final = (char*)gtk_entry_get_text(GTK_ENTRY(window->ManualEntry));
|
|
if (yon_char_is_empty(final)) {
|
|
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(NOTHING_CHOSEN_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
|
|
return;
|
|
}
|
|
yon_config_register(locale_parameter,locale_parameter_command,final);
|
|
on_subwindow_close(self);
|
|
yon_interface_update(widgets);
|
|
}
|
|
|
|
language_window *yon_language_window_new(){
|
|
language_window *window = malloc(sizeof(language_window));
|
|
GtkBuilder *builder = gtk_builder_new_from_resource(glade_locales_path);
|
|
window->Window = yon_gtk_builder_get_widget(builder,"Window");
|
|
window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
|
|
window->LanguagesTree = yon_gtk_builder_get_widget(builder,"LanguagesTree");
|
|
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
|
|
window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
|
|
window->ManualEntry = yon_gtk_builder_get_widget(builder,"ManualEntry");
|
|
window->ToggleCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ToggleCell"));
|
|
window->LanguagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LanguagesList"));
|
|
|
|
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
|
|
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_locale_accept),window);
|
|
g_signal_connect(G_OBJECT(window->ToggleCell),"toggled",G_CALLBACK(on_locale_toggle),window);
|
|
|
|
char *config_value = config(locale_parameter);
|
|
int config_parsed_size;
|
|
config_str config_parsed = NULL;
|
|
if (config_value){
|
|
gtk_entry_set_text(GTK_ENTRY(window->ManualEntry),config_value);
|
|
config_parsed = yon_char_parse(config_value,&config_parsed_size,",");
|
|
}
|
|
|
|
int size;
|
|
GtkTreeIter iter;
|
|
config_str languages = yon_config_load(languages_command,&size);
|
|
for (int i=0;i<size;i++){
|
|
yon_char_remove_last_symbol(languages[i],'\n');
|
|
int parsed_size;
|
|
config_str parsed = yon_char_parse(languages[i],&parsed_size,"|");
|
|
gtk_list_store_append(window->LanguagesList,&iter);
|
|
gtk_list_store_set(window->LanguagesList,&iter,1,parsed[0],2,parsed[1],3,parsed[2],-1);
|
|
if (config_parsed_size&&yon_char_parsed_check_exist(config_parsed,config_parsed_size,parsed[2])>-1){
|
|
gtk_list_store_set(window->LanguagesList,&iter,0,1,-1);
|
|
}
|
|
}
|
|
yon_char_parsed_free(config_parsed,config_parsed_size);
|
|
return window;
|
|
}
|
|
|
|
void on_language_open(GtkWidget *, main_window *widgets){
|
|
language_window *window = yon_language_window_new();
|
|
|
|
g_object_set_data(G_OBJECT(window->Window),"widgets",widgets);
|
|
|
|
yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),TITLE_LABEL,main_icon,"LocalesWindow");
|
|
|
|
gtk_widget_show(window->Window);
|
|
|
|
}
|
|
|
|
void on_language_remove(GtkWidget *, main_window *widgets){
|
|
GtkTreeIter iter;
|
|
GtkTreeModel *model;
|
|
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LocaleTree)),&model,&iter)){
|
|
char *target;
|
|
gtk_tree_model_get(model,&iter,3,&target,-1);
|
|
char *locale_param = config(locale_parameter);
|
|
char *temp = yon_char_remove_element(locale_param,target,",");
|
|
if (!yon_char_is_empty(temp)){
|
|
yon_config_register(locale_parameter,locale_parameter_command,temp);
|
|
free(temp);
|
|
}
|
|
locale_param = config(language_parameter);
|
|
if (!strcmp(locale_param,target)){
|
|
yon_config_remove_by_key(language_parameter);
|
|
}
|
|
yon_interface_update(widgets);
|
|
}
|
|
} |