commit
fc4217c4a7
@ -0,0 +1,185 @@
|
||||
#include "ubl-settings-keyboard.h"
|
||||
|
||||
void on_layouts_accept(GtkWidget *self, layouts_window *window){
|
||||
main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets");
|
||||
gtk_list_store_clear(widgets->LayoutsList);
|
||||
GtkTreeModel *model = GTK_TREE_MODEL(window->list);
|
||||
GtkTreeIter window_iter;
|
||||
char *save_string = NULL;
|
||||
for_iter(window->list,&window_iter){
|
||||
char *id, *variant, *name;
|
||||
int status;
|
||||
gtk_tree_model_get(model,&window_iter,0,&id,2,&name,3,&status,-1);
|
||||
if (status){
|
||||
char *temp = yon_char_append_element(save_string,id,",");
|
||||
if (!yon_char_is_empty(save_string)) free(save_string);
|
||||
save_string = temp;
|
||||
}
|
||||
GtkTreeIter child_iter;
|
||||
if (gtk_tree_model_iter_children(model,&child_iter,&window_iter)){
|
||||
for (int valid2=1;valid2;valid2=gtk_tree_model_iter_next(model,&child_iter)){
|
||||
gtk_tree_model_get(model,&child_iter,0,&id,1,&variant,2,&name,3,&status,-1);
|
||||
if (status){
|
||||
char *full_id = yon_char_unite(id,"_",variant,NULL);
|
||||
char *temp = yon_char_append_element(save_string,full_id,",");
|
||||
if (!yon_char_is_empty(save_string)) free(save_string);
|
||||
save_string = temp;
|
||||
free(full_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!yon_char_is_empty(save_string)){
|
||||
yon_config_register(keyboard_layout_parameter,keyboard_layout_parameter_command,save_string);
|
||||
} else {
|
||||
yon_config_remove_by_key(keyboard_layout_parameter);
|
||||
}
|
||||
on_subwindow_close(self);
|
||||
yon_interface_update(widgets);
|
||||
}
|
||||
|
||||
void on_layouts_chosen(GtkCellRenderer *, gchar *path, layouts_window *window){
|
||||
GtkTreeIter iter;
|
||||
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->list),&iter,path);
|
||||
int chosen;
|
||||
gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,3,&chosen,-1);
|
||||
gtk_tree_store_set(GTK_TREE_STORE(window->list),&iter,3,!chosen,-1);
|
||||
}
|
||||
|
||||
void on_system_layouts_add(GtkWidget *, main_window *widgets){
|
||||
yon_layouts_add(GTK_TREE_VIEW(widgets->LayoutTree),widgets->LayoutsList,widgets);
|
||||
}
|
||||
|
||||
layouts_window *yon_layouts_window_new(){
|
||||
GtkBuilder *builder = gtk_builder_new_from_resource(glade_layouts_path);
|
||||
layouts_window *window = malloc(sizeof(layouts_window));
|
||||
memset(window,0,sizeof(layouts_window));
|
||||
window->Window = yon_gtk_builder_get_widget(builder,"Window");
|
||||
window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
|
||||
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
|
||||
window->ChosenCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ChosenCell"));
|
||||
window->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree");
|
||||
|
||||
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
|
||||
g_signal_connect(G_OBJECT(window->ChosenCell),"toggled",G_CALLBACK(on_layouts_chosen),window);
|
||||
return window;
|
||||
}
|
||||
|
||||
void yon_layouts_add(GtkTreeView *, GtkListStore *, main_window *widgets){
|
||||
layouts_window *window = yon_layouts_window_new();
|
||||
yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),TITLE_LABEL,icon_path,"layout_window");
|
||||
|
||||
window->list = main_config.layouts_store;
|
||||
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree), GTK_TREE_MODEL(main_config.layouts_store));
|
||||
gtk_tree_view_column_clicked(GTK_TREE_VIEW_COLUMN(gtk_tree_view_get_column(GTK_TREE_VIEW(window->MainTree),0)));
|
||||
yon_layout_build(window);
|
||||
g_object_set_data(G_OBJECT(window->Window),"widgets",widgets);
|
||||
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_layouts_accept),window);
|
||||
|
||||
char *languages = config(keyboard_layout_parameter);
|
||||
int size;
|
||||
config_str parsed = yon_char_parse(languages,&size,",");
|
||||
GtkTreeIter iter;
|
||||
for_iter(window->list,&iter){
|
||||
int found = 0;
|
||||
char *id;
|
||||
gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&id,-1);
|
||||
for (int i=0;i<size;i++){
|
||||
if (!strcmp(id,parsed[i])){
|
||||
gtk_tree_store_set(GTK_TREE_STORE(window->list),&iter,3,1,-1);
|
||||
found=1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
gtk_tree_store_set(GTK_TREE_STORE(window->list),&iter,3,0,-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void yon_layouts_remove(GtkTreeView *tree, GtkListStore *cur_list, main_window *widgets){
|
||||
GtkTreeModel *model = GTK_TREE_MODEL(cur_list);
|
||||
GtkTreeIter iter;
|
||||
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(tree),&model,&iter)){
|
||||
GtkTreeIter iter_converted;
|
||||
char *target;
|
||||
gtk_tree_model_get(model,&iter,1,&target,-1);
|
||||
gtk_tree_model_filter_convert_iter_to_child_iter(widgets->layoutsFilter,&iter_converted,&iter);
|
||||
gtk_list_store_remove(cur_list,&iter_converted);
|
||||
yon_config_remove_element(keyboard_layout_parameter,target,",");
|
||||
}
|
||||
}
|
||||
|
||||
void on_system_layouts_remove(GtkWidget *, main_window *widgets){
|
||||
yon_layouts_remove(GTK_TREE_VIEW(widgets->LayoutTree),widgets->LayoutsList,widgets);
|
||||
}
|
||||
|
||||
// standard functions
|
||||
|
||||
config_str yon_layout_get_children(char *layout_id, int *size){
|
||||
(*size)=0;
|
||||
config_str final = NULL;
|
||||
for (int i=0;i<main_config.variants_size;i++){
|
||||
int parsed_size;
|
||||
config_str parsed = yon_char_parse(main_config.variants_list[i],&parsed_size,"|");
|
||||
if (!strcmp(parsed[0],layout_id)){
|
||||
yon_char_parsed_add_or_create_if_exists(final,size,main_config.variants_list[i]);
|
||||
}
|
||||
}
|
||||
return final;
|
||||
}
|
||||
|
||||
void yon_layout_load(char *layout,main_window *widgets){
|
||||
GtkTreeIter iter;
|
||||
if (strstr(layout,"_")){
|
||||
char *cur_variant = yon_char_new(layout);
|
||||
char *cur_layout = yon_char_divide_search(cur_variant,"_",-1);
|
||||
for (int i=0;i<main_config.variants_size;i++){
|
||||
int parsed_size;
|
||||
config_str parsed = yon_char_parse(main_config.variants_list[i],&parsed_size,"|");
|
||||
if (!strcmp(parsed[0],cur_layout)&&!strcmp(parsed[1],cur_variant)){
|
||||
gtk_list_store_append(widgets->LayoutsList,&iter);
|
||||
gtk_list_store_set(widgets->LayoutsList,&iter,0,parsed[0],1,parsed[1],2,_(parsed[2]),-1);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
for (int i=0;i<main_config.layouts_size;i++){
|
||||
int parsed_size;
|
||||
config_str parsed = yon_char_parse(main_config.layouts_list[i],&parsed_size,"|");
|
||||
if (!strcmp(parsed[0],layout)){
|
||||
gtk_list_store_append(widgets->LayoutsList,&iter);
|
||||
gtk_list_store_set(widgets->LayoutsList,&iter,0,parsed[0],2,_(parsed[1]),-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void yon_layout_build(layouts_window *window){
|
||||
gtk_tree_store_clear(window->list);
|
||||
GtkTreeIter parent;
|
||||
GtkTreeIter iter;
|
||||
int size;
|
||||
config_str layouts = yon_config_load(layouts_command,&size);
|
||||
for (int i=0;i<size;i++){
|
||||
yon_char_remove_last_symbol(layouts[i],'\n');
|
||||
int parsed_size;
|
||||
config_str parsed = yon_char_parse(layouts[i],&parsed_size,"|");
|
||||
gtk_tree_store_append(window->list,&parent,NULL);
|
||||
gtk_tree_store_set(window->list,&parent,0,parsed[0],2,_(parsed[1]),-1);
|
||||
int variants_size;
|
||||
config_str variants = yon_layout_get_children(parsed[0],&variants_size);
|
||||
yon_char_parsed_free(parsed,parsed_size);
|
||||
for (int k=0;k<variants_size;k++){
|
||||
parsed = yon_char_parse(variants[k],&parsed_size,"|");
|
||||
gtk_tree_store_append(window->list,&iter,&parent);
|
||||
gtk_tree_store_set(window->list,&iter,0,parsed[0],1,parsed[1],2,_(parsed[2]),-1);
|
||||
yon_char_parsed_free(parsed,parsed_size);
|
||||
}
|
||||
yon_char_parsed_free(variants,variants_size);
|
||||
|
||||
}
|
||||
yon_char_parsed_free(layouts,size);
|
||||
|
||||
}
|
||||
@ -0,0 +1,84 @@
|
||||
#include "ubl-settings-keyboard.h"
|
||||
|
||||
|
||||
|
||||
// void on_options_accept(GtkWidget *self, dictionary *dict){
|
||||
// main_window *widgets = yon_dictionary_get_data(dict->first,main_window*);
|
||||
// layouts_window *window = yon_dictionary_get_data(dict->first->next,layouts_window*);
|
||||
// GtkTreeModel *model = GTK_TREE_MODEL(window->list);
|
||||
// GtkTreeIter iter;
|
||||
// char *name, *id;
|
||||
// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model,&iter)){
|
||||
// gtk_tree_model_get(model,&iter,0,&id,1,&name,-1);
|
||||
// gtk_entry_set_text(GTK_ENTRY(widgets->OptionsEntry),name);
|
||||
// yon_config_register(options_parameter,options_parameter_command,id);
|
||||
|
||||
// }
|
||||
// on_subwindow_close(self);
|
||||
// }
|
||||
|
||||
// void on_options_open(GtkWidget *, main_window *widgets){
|
||||
// GtkBuilder *builder = gtk_builder_new_from_resource(glade_layouts_path);
|
||||
// layouts_window *window = malloc(sizeof(layouts_window));
|
||||
// window->Window = yon_gtk_builder_get_widget(builder,"Window");
|
||||
// window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
|
||||
// window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
|
||||
// window->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree");
|
||||
// window->list = main_config.options_list;
|
||||
// gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree),GTK_TREE_MODEL(window->list));
|
||||
// dictionary *dict = NULL;
|
||||
// gtk_tree_view_remove_column(GTK_TREE_VIEW(window->MainTree),gtk_tree_view_get_column(GTK_TREE_VIEW(window->MainTree),0));
|
||||
// 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->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
|
||||
// g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_options_accept),dict);
|
||||
// }
|
||||
|
||||
// GList *yon_get_all_selected(GtkTreeView *tree, int column){
|
||||
// GtkTreeIter iter;
|
||||
// GList *list = NULL;
|
||||
// GtkTreeModel *model = gtk_tree_view_get_model(tree);
|
||||
// for_iter(model,&iter){
|
||||
// int status;
|
||||
// gtk_tree_model_get(model,&iter,column,&status,-1);
|
||||
// if (status){
|
||||
// GtkTreePath *path = gtk_tree_model_get_path(model,&iter);
|
||||
// list = g_list_append(list,path);
|
||||
// }
|
||||
// }
|
||||
// return list;
|
||||
// }
|
||||
|
||||
|
||||
|
||||
void on_options_accept(GtkWidget *self, dictionary *dict){
|
||||
main_window *widgets = yon_dictionary_get_data(dict->first,main_window*);
|
||||
layouts_window *window = yon_dictionary_get_data(dict->first->next,layouts_window*);
|
||||
GtkTreeModel *model = GTK_TREE_MODEL(window->list);
|
||||
GtkTreeIter iter;
|
||||
char *name, *id;
|
||||
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model,&iter)){
|
||||
gtk_tree_model_get(model,&iter,0,&id,1,&name,-1);
|
||||
gtk_entry_set_text(GTK_ENTRY(widgets->OptionsTree),name);
|
||||
yon_config_register(options_parameter,options_parameter_command,id);
|
||||
|
||||
}
|
||||
on_subwindow_close(self);
|
||||
}
|
||||
|
||||
void on_options_open(GtkWidget *, main_window *widgets){
|
||||
GtkBuilder *builder = gtk_builder_new_from_resource(glade_options_path);
|
||||
layouts_window *window = malloc(sizeof(layouts_window));
|
||||
window->Window = yon_gtk_builder_get_widget(builder,"Window");
|
||||
window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
|
||||
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
|
||||
window->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree");
|
||||
// window->list = main_config.options_list;
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree),GTK_TREE_MODEL(window->list));
|
||||
dictionary *dict = NULL;
|
||||
gtk_tree_view_remove_column(GTK_TREE_VIEW(window->MainTree),gtk_tree_view_get_column(GTK_TREE_VIEW(window->MainTree),0));
|
||||
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->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
|
||||
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_options_accept),dict);
|
||||
}
|
||||
@ -0,0 +1,104 @@
|
||||
#include "ubl-settings-keyboard.h"
|
||||
|
||||
void on_save_done(main_window *, config_str output, int size){
|
||||
char *final_output = yon_char_parsed_to_string(output,size,"");
|
||||
if (final_output){
|
||||
printf("%s\n",final_output);
|
||||
free(final_output);
|
||||
}
|
||||
yon_char_parsed_free(output,size);
|
||||
switch (main_config.save_config){
|
||||
case YON_CONFIG_GLOBAL:
|
||||
yon_ubl_status_box_render(yon_char_get_localised_from_lib(GLOBAL_SAVE_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
|
||||
break;
|
||||
case YON_CONFIG_LOCAL:
|
||||
yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_SAVE_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
|
||||
break;
|
||||
case YON_CONFIG_BOTH:
|
||||
yon_ubl_status_box_render(yon_char_get_localised_from_lib(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void on_config_global_local_save(GtkWidget *, main_window *){
|
||||
main_config.save_config=YON_CONFIG_BOTH;
|
||||
yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL);
|
||||
}
|
||||
|
||||
void on_config_local_save(GtkWidget *, main_window *){
|
||||
main_config.save_config=YON_CONFIG_LOCAL;
|
||||
yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_local_command,NULL);
|
||||
|
||||
}
|
||||
|
||||
void on_config_global_save(GtkWidget *, main_window *){
|
||||
main_config.save_config=YON_CONFIG_GLOBAL;
|
||||
yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL);
|
||||
|
||||
}
|
||||
|
||||
void on_config_custom_save(GtkWidget *, main_window *){
|
||||
main_config.save_config=YON_CONFIG_LOCAL;
|
||||
template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,yon_config_get_custom_command("system"),NULL);
|
||||
if (window){};
|
||||
}
|
||||
|
||||
void on_config_local_load(GtkWidget *,main_window *widgets){
|
||||
yon_load_proceed(YON_CONFIG_LOCAL);
|
||||
yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
|
||||
yon_interface_update(widgets);
|
||||
main_config.load_mode=1;
|
||||
}
|
||||
|
||||
void on_config_global_load(GtkWidget *,main_window *widgets){
|
||||
yon_load_proceed(YON_CONFIG_GLOBAL);
|
||||
yon_ubl_status_box_render(yon_char_get_localised_from_lib(GLOBAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
|
||||
yon_interface_update(widgets);
|
||||
main_config.load_mode=0;
|
||||
|
||||
}
|
||||
|
||||
void on_config_custom_load(GtkWidget *,main_window *widgets){
|
||||
yon_load_proceed(YON_CONFIG_CUSTOM);
|
||||
textdomain(template_ui_LocaleName);
|
||||
yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
|
||||
textdomain(LocaleName);
|
||||
main_config.load_mode=3;
|
||||
yon_interface_update(widgets);
|
||||
}
|
||||
|
||||
void yon_load_proceed(YON_CONFIG_TYPE type){
|
||||
yon_config_clean();
|
||||
if (!yon_char_is_empty(config_get_default_command))
|
||||
yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL);
|
||||
if (type==YON_CONFIG_GLOBAL){
|
||||
yon_config_load_config(type,yon_debug_output("%s\n",config_get_global_command),NULL);
|
||||
} else if (type==YON_CONFIG_LOCAL){
|
||||
yon_config_load_config(type,config_get_local_command,NULL);
|
||||
} else if (type==YON_CONFIG_CUSTOM){
|
||||
char *path="";
|
||||
textdomain(template_ui_LocaleName);
|
||||
GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL);
|
||||
textdomain(LocaleName);
|
||||
gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-services");
|
||||
gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL);
|
||||
GtkFileFilter *filter = gtk_file_filter_new();
|
||||
gtk_file_filter_add_pattern(filter,"*.ini");
|
||||
gtk_file_filter_set_name(filter, "*.ini");
|
||||
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter);
|
||||
gtk_widget_show(dialog);
|
||||
int response = gtk_dialog_run(GTK_DIALOG(dialog));
|
||||
if (response == GTK_RESPONSE_ACCEPT){
|
||||
char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
|
||||
if (!yon_char_is_empty(file)){
|
||||
path=file;
|
||||
}
|
||||
gtk_widget_destroy(dialog);
|
||||
} else {
|
||||
gtk_widget_destroy(dialog);
|
||||
}
|
||||
char *command = yon_config_get_custom_command(path);
|
||||
yon_config_load_config(type,command,NULL);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue