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.
173 lines
6.4 KiB
173 lines
6.4 KiB
#include "libublsettings-gtk3.h"
|
|
|
|
|
|
#ifdef __GTK_H__
|
|
|
|
// GtkEntry section
|
|
// struct entry_pattern_data {
|
|
// GtkEntry *entry;
|
|
// char *pattern; // %d %s
|
|
// };
|
|
|
|
// char *yon_gtk_entry_pattern_format(GtkWidget *target, struct entry_pattern_data *data){
|
|
// if (target){
|
|
// const char *entry_data = gtk_entry_get_text(target);
|
|
// int next_track=0;
|
|
// for (int i=0; i<strlen(data->pattern);i++){
|
|
// char target_letter=-1;
|
|
// target_letter = ;
|
|
// switch (data->pattern[i]){
|
|
// case '%':next_track=1;
|
|
// break;
|
|
// case 'd':if (next_track){
|
|
|
|
// }
|
|
// break;
|
|
// case 's':
|
|
// break;
|
|
// default:
|
|
|
|
// }
|
|
// }
|
|
|
|
// };
|
|
// }
|
|
|
|
// void yon_gtk_entry_set_pattern(GtkEntry *entry, char *pattern){
|
|
// struct entry_pattern_data *data = malloc(sizeof(struct entry_pattern_data));
|
|
// data->entry=entry;
|
|
// data->pattern=pattern;
|
|
// char *current_text = gtk_entry_get_text(entry);
|
|
|
|
// }
|
|
|
|
|
|
config_str yon_resource_open_file(const char *path, int *size){
|
|
config_str parsed = NULL;
|
|
char *modules = NULL;
|
|
gsize sz=0;
|
|
GFile *file = g_file_new_for_uri(path);
|
|
g_file_load_contents(file,NULL,&modules,&sz,NULL,NULL);
|
|
g_object_unref(G_OBJECT(file));
|
|
parsed = yon_char_parse(modules,size,"\n");
|
|
return parsed;
|
|
}
|
|
|
|
|
|
struct yon_combo_default_struct {
|
|
char *command;
|
|
GtkComboBoxText *target;
|
|
void *result_callback; // char*(*)(char*)
|
|
char *default_value;
|
|
char *command_value;
|
|
};
|
|
|
|
void _yon_combo_box_set_default_value(struct yon_combo_default_struct *target){
|
|
gtk_combo_box_text_prepend(target->target," ",target->default_value);
|
|
if (!yon_char_is_empty(target->default_value)) free(target->command);
|
|
if (!yon_char_is_empty(target->default_value)) free(target->command_value);
|
|
}
|
|
|
|
void *__yon_combo_set_default(struct yon_combo_default_struct *target){
|
|
int size;
|
|
config_str parameter = yon_config_load(yon_config_parameter_prepare_command(target->command,"default",NULL,NULL),&size);
|
|
if (size&&!yon_char_is_empty(parameter[0])&&strcmp(parameter[0],"(null)\n")){
|
|
yon_char_remove_last_symbol(parameter[0],'\n');
|
|
target->command_value = yon_char_new(parameter[0]);
|
|
target->default_value = ((char*(*)(char*))(target->result_callback))(parameter[0]);
|
|
} else {
|
|
target->default_value = ((char*(*)(char*))(target->result_callback))(NULL);
|
|
}
|
|
g_idle_add_once((GSourceOnceFunc)_yon_combo_box_set_default_value,target);
|
|
|
|
}
|
|
|
|
void yon_combo_box_set_default(GtkComboBoxText *target, char *command, char*(result_callback)(char*)){
|
|
struct yon_combo_default_struct *target_struct = malloc(sizeof(struct yon_combo_default_struct));
|
|
target_struct->result_callback = result_callback;
|
|
target_struct->target = target;
|
|
target_struct->command = yon_char_new(command);
|
|
target_struct->command_value=NULL;
|
|
target_struct->default_value = NULL;
|
|
g_thread_new("combo_get_default",(GThreadFunc)__yon_combo_set_default,target_struct);
|
|
}
|
|
|
|
void on_widget_changed(GObject* target, GdkEvent*, gpointer user_data){
|
|
char *config_parameter = g_object_get_data(target,"config_parameter");
|
|
char *get_command = g_object_get_data(target,"get_command");
|
|
char *object_property = g_object_get_data(target,"object_property");
|
|
GValue value = G_VALUE_INIT;
|
|
g_object_get_property(target,object_property,&value);
|
|
char *value_str = g_strdup_value_contents(&value);
|
|
if (!yon_char_is_empty(value_str)||strcmp(value_str,"[invalid GValue]")){
|
|
yon_config_register(config_parameter,get_command,value_str);
|
|
}
|
|
if (!yon_char_is_empty(value_str)) free(value_str);
|
|
}
|
|
|
|
void yon_gtk_widget_register_parameter(GtkWidget *target, char *config_parameter, char *get_command, char *object_property){
|
|
g_return_if_fail(G_IS_OBJECT(target));
|
|
char *signal_name = yon_char_unite("notify::",object_property,NULL);
|
|
g_object_set_data(G_OBJECT(target),"config_parameter",yon_char_new(config_parameter));
|
|
g_object_set_data(G_OBJECT(target),"get_command",yon_char_new(get_command));
|
|
g_object_set_data(G_OBJECT(target),"object_property",yon_char_new(object_property));
|
|
g_signal_connect(G_OBJECT(target),signal_name,G_CALLBACK(on_widget_changed),NULL);
|
|
}
|
|
|
|
dictionary *__register_widgets = NULL;
|
|
|
|
void yon_gtk_widget_register_parameter_manual(GtkWidget *target, char *config_parameter, char *get_command, char *object_property){
|
|
yon_dictionary_add_or_create_if_exists_with_data(__register_widgets,NULL,target);
|
|
g_object_set_data(G_OBJECT(target),"config_parameter",yon_char_new(config_parameter));
|
|
g_object_set_data(G_OBJECT(target),"get_command",yon_char_new(get_command));
|
|
g_object_set_data(G_OBJECT(target),"object_property",yon_char_new(object_property));
|
|
}
|
|
|
|
void yon_gtk_widget_register_parameter_activate(){
|
|
dictionary *cur;
|
|
for_dictionaries(cur,__register_widgets){
|
|
on_widget_changed(yon_dictionary_get_data(cur,GObject*),NULL,NULL);
|
|
}
|
|
}
|
|
|
|
// dictionary *__yon_config_listeners = NULL;
|
|
// typedef struct {
|
|
// GtkWidget *target;
|
|
// char *widget_parameter;
|
|
// void *check_function;
|
|
// char *parameter;
|
|
// char *save_command;
|
|
// } config_listener;
|
|
|
|
// void __yon_gtk_config_activated(GtkWidget *, config_listener *current){
|
|
// char *parameter;
|
|
|
|
// if (((int (*)(char*, GtkWidget*, char*))(current->check_function))(parameter,current->target, current->parameter)) {
|
|
// }
|
|
|
|
// }
|
|
|
|
// int yon_gtk_config_add_listener (GtkWidget *target, char *parameter, char *save_command,int(check_function)(char*,GtkWidget*,char*)){
|
|
// if (__yon_config_listeners){
|
|
// dictionary *dict;
|
|
// for_dictionaries(dict,__yon_config_listeners){
|
|
// if (target==((config_listener*)dict->data)->target){
|
|
// return 0;
|
|
// }
|
|
// }
|
|
// }
|
|
// config_listener *current = malloc(sizeof(config_listener));
|
|
// current->target=target;
|
|
// current->parameter = parameter;
|
|
// current->save_command = save_command;
|
|
// current->check_function = (void*)check_function;
|
|
// if (GTK_IS_TOGGLE_BUTTON(target)){
|
|
// g_signal_connect(G_OBJECT(target),"toggled",C_CALLBACK(__yon_gtk_config_activated),current);
|
|
|
|
// }
|
|
|
|
// yon_dictionary_add_or_create_if_exists_with_data(__yon_config_listeners,NULL,current);
|
|
// return 0;
|
|
// }
|
|
|
|
#endif |