diff --git a/gresource.xml b/gresource.xml
index 5a3a1a3..476ac68 100644
--- a/gresource.xml
+++ b/gresource.xml
@@ -6,6 +6,7 @@
libublsettingsui-gtk3-documentation.glade
libublsettingsui-gtk3-saving.glade
libublsettingsui-gtk3-debugger.glade
+ libublsettingsui-gtk3-config-window.glade
libublsettingsui-gtk3.css
diff --git a/libublsettingsui-gtk3-config-window.glade b/libublsettingsui-gtk3-config-window.glade
new file mode 100644
index 0000000..0d8f160
--- /dev/null
+++ b/libublsettingsui-gtk3-config-window.glade
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index d87dbcd..294004a 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -42,6 +42,7 @@ set(DEPENDFILES
../libublsettingsui-gtk3-documentation.glade
../libublsettingsui-gtk3-saving.glade
../libublsettingsui-gtk3-debugger.glade
+ ../libublsettingsui-gtk3-config-window.glade
../gresource.xml
../libublsettingsui-gtk3-banner.png
../libublsettingsui-gtk3.css
@@ -77,6 +78,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin
add_library(${PROJECT_NAME} SHARED
libublsettingsui-gtk3.c
libublsettingsui-gtk3-save.c
+ libublsettingsui-gtk3-config-window.c
libublsettingsui-gtk3.h
${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C})
diff --git a/source/libublsettingsui-gtk3-config-window.c b/source/libublsettingsui-gtk3-config-window.c
index dbfcef1..5ba92a4 100644
--- a/source/libublsettingsui-gtk3-config-window.c
+++ b/source/libublsettingsui-gtk3-config-window.c
@@ -1,32 +1,215 @@
#include "libublsettingsui-gtk3.h"
typedef struct {
- dictionary_fields
-
+ char *id;
+ GtkWidget *Box;
+ GtkWidget *CheckButton;
+} yon_configuration_boolean_parameter;
+
+typedef struct {
+ char *id;
+ GtkWidget *Box;
+ GtkWidget *Label;
+ GtkWidget *Entry;
+} yon_configuration_entry_parameter;
+
+typedef struct {
+ char *id;
+ GtkWidget *Box;
+ GtkWidget *Label;
+ GtkWidget *ComboBox;
+} yon_configuration_combo_parameter;
+
+// typedef struct {
+// char *id;
+// GtkWidget *Label;
+// GtkWidget *GtkTreeView;
+// GtkListStore *list;
+// } yon_configuration_list_parameter;
+
+yon_configuration_entry_parameter *yon_configuration_entry_parameter_new(char *id, char *label_text){
+ yon_configuration_entry_parameter *parameter = malloc(sizeof(yon_configuration_entry_parameter));
+ parameter->Box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);
+ parameter->Label = gtk_label_new(label_text);
+ parameter->Entry = gtk_entry_new();
+ parameter->id = yon_char_new(id);
+ gtk_box_pack_start(GTK_BOX(parameter->Box),parameter->Label,1,1,0);
+ gtk_box_pack_start(GTK_BOX(parameter->Box),parameter->Entry,1,1,0);
+ gtk_widget_show_all(parameter->Box);
+ return parameter;
+}
+
+yon_configuration_combo_parameter *yon_configuration_combo_box_parameter_new(char *id, char *label_text, config_str parameters){
+ yon_configuration_combo_parameter *parameter = malloc(sizeof(yon_configuration_combo_parameter));
+ parameter->Box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);
+ parameter->Label = gtk_label_new(label_text);
+ parameter->ComboBox = gtk_combo_box_text_new();
+ parameter->id = yon_char_new(id);
+ gtk_box_pack_start(GTK_BOX(parameter->Box),parameter->Label,0,0,0);
+ gtk_box_pack_start(GTK_BOX(parameter->Box),parameter->ComboBox,0,0,0);
+ for (int i=0;parameters[i]&¶meters[i+1];i+=2){
+ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(parameter->ComboBox),parameters[i],parameters[i+1]);
+ }
+ gtk_combo_box_set_active(GTK_COMBO_BOX(parameter->ComboBox),0);
+ gtk_widget_show_all(parameter->Box);
+ return parameter;
+}
+
+typedef struct yon_configuration_parameters {
+ dictionary_fields(yon_configuration_parameters);
+ char *label;
+ enum CONFIGURATION_PARAMETER_TYPE type;
} yon_configuration_parameters;
ubl_settings_window *yon_ubl_settings_window_new(){
ubl_settings_window *window = malloc(sizeof(ubl_settings_window));
- GtkBuilder *builder = gtk_builder_new_from_resource("/com/ublinux/libublsettingsui-gtk3-config-window.glade");
+ GtkBuilder *builder = gtk_builder_new_from_resource("/com/ublinux/ui/libublsettingsui-gtk3-config-window.glade");
window->window = yon_gtk_builder_get_widget(builder,"Window");
window->WorkZoneBox = yon_gtk_builder_get_widget(builder,"WorkZoneBox");
+ window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
+ window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
+ g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
return window;
}
yon_configuration_parameters *__yon_settings_parameters = NULL;
+void __yon_on_boolean_parameter_toggled(GtkToggleButton *self ,char *id){
+ yon_configuration_parameters *current = (yon_configuration_parameters*)yon_dictionary_get((dictionary**)&__yon_settings_parameters,id);
+ if (current){
+ current->data= gtk_toggle_button_get_active(self)?(void*)1:(void*)0;
+ }
+}
+
+yon_configuration_boolean_parameter *__yon_configuration_boolean_parameter_new(char *id, char *label_text){
+ yon_configuration_boolean_parameter *parameter = malloc(sizeof(yon_configuration_boolean_parameter));
+ parameter->Box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);
+ parameter->CheckButton = gtk_check_button_new_with_label(label_text);
+ parameter->id = yon_char_new(id);
+
+ g_signal_connect(G_OBJECT(parameter->CheckButton),"toggled",G_CALLBACK(__yon_on_boolean_parameter_toggled),parameter->id);
+ gtk_box_pack_start(GTK_BOX(parameter->Box),parameter->CheckButton,0,0,0);
+ return parameter;
+}
+
void __yon_on_ubl_settings_window_open(){
+ if (!__yon_settings_parameters) return;
+ ubl_settings_window *window = yon_ubl_settings_window_new();
+ dictionary *current = NULL;
+ for_dictionaries(current,(dictionary*)__yon_settings_parameters){
+ switch(((yon_configuration_parameters*)current)->type){
+ case CONFIGURATION_PARAMETER_BOOL:{
+ yon_configuration_boolean_parameter *cur = __yon_configuration_boolean_parameter_new(((yon_configuration_parameters*)current)->key,((yon_configuration_parameters*)current)->label);
+ gtk_box_pack_start(GTK_BOX(window->WorkZoneBox),cur->Box,0,0,0);
+ gtk_widget_show_all(window->WorkZoneBox);
+ } break;
+ case CONFIGURATION_PARAMETER_ENTRY:{
+ // yon_configuration_entry_parameter *cur = __yon_configuration_entry_parameter_new(current->key,current->label);
+ // gtk_box_pack_start(GTK_BOX(window->WorkZoneBox),cur->Box,0,0,0);
+
+ } break;
+ case CONFIGURATION_PARAMETER_COMBO_BOX:{
+ yon_configuration_combo_parameter *cur = yon_configuration_combo_box_parameter_new(((yon_configuration_parameters*)current)->key,((yon_configuration_parameters*)current)->label,(config_str)((yon_configuration_parameters*)current)->data);
+ gtk_box_pack_start(GTK_BOX(window->WorkZoneBox),cur->Box,0,0,0);
+ gtk_widget_show_all(window->WorkZoneBox);
+ } break;
+ case CONFIGURATION_PARAMETER_LIST_MULTIPLE:{
+ } break;
+ }
+ }
+ gtk_widget_show(window->window);
}
-void yon_ubl_settings_window_init(){
- GtkMenuItem *menu_item = gtk_menu_item_new();
+void yon_ubl_settings_window_init(GtkMenu *menu){
+ GtkWidget *menu_item = gtk_menu_item_new();
GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);
GtkWidget *label = gtk_label_new(CONFIG_WINDOW_MENU_LABEL);
GtkWidget *image = gtk_image_new_from_icon_name("com.ublinux.libublsettingsui-gtk3.settings-symbolic",GTK_ICON_SIZE_BUTTON);
+ gtk_menu_shell_prepend(GTK_MENU_SHELL(menu),menu_item);
gtk_container_add(GTK_CONTAINER(menu_item),box);
gtk_box_pack_start(GTK_BOX(box),image,0,0,0);
gtk_box_pack_start(GTK_BOX(box),label,0,0,0);
gtk_widget_show_all(menu_item);
g_signal_connect(G_OBJECT(menu_item),"activate",G_CALLBACK(__yon_on_ubl_settings_window_open),NULL);
+}
+
+void *yon_ubl_settings_window_get(char *id){
+ yon_configuration_parameters *current = (yon_configuration_parameters*)yon_dictionary_get((dictionary**)&__yon_settings_parameters,id);
+ if (current){
+ return current->data;
+ } else {
+ return NULL;
+ }
+}
+
+yon_configuration_parameters *yon_configuration_parameter_new()
+{
+ yon_configuration_parameters *dict = malloc(sizeof(yon_configuration_parameters));
+ dict->data = NULL;
+ dict->key = NULL;
+ dict->next = NULL;
+ dict->prev = NULL;
+ dict->first = (struct yon_configuration_parameters*)dict;
+ dict->data_type = DICTIONARY_OTHER_TYPE;
+ return dict;
+}
+
+yon_configuration_parameters *yon_configuration_parameter_append(yon_configuration_parameters *targetdict)
+{
+ targetdict = (yon_configuration_parameters*)yon_dictionary_get_last((dictionary*)targetdict);
+ targetdict->next = (struct yon_configuration_parameters*)yon_configuration_parameter_new();
+ targetdict->next->prev = (struct yon_configuration_parameters*)targetdict;
+ targetdict->next->first = targetdict->first;
+ targetdict->next->data_type = DICTIONARY_OTHER_TYPE;
+ return targetdict->next;
+}
+
+yon_configuration_parameters *yon_configuration_parameter_new_with_label(char *key, void *data)
+{
+ yon_configuration_parameters *dct = yon_configuration_parameter_new();
+ dct->key = yon_char_new(key);
+ dct->label = data;
+ dct->data_type = DICTIONARY_OTHER_TYPE;
+ return dct;
+}
+
+yon_configuration_parameters *yon_configuration_parameter_append_with_label(yon_configuration_parameters *dict, char *key, void *data)
+{
+ yon_configuration_parameters *dct = yon_configuration_parameter_append(dict);
+ dct->key = yon_char_new(key);
+ dct->label = data;
+ dct->data_type = DICTIONARY_OTHER_TYPE;
+ return dct;
+}
+
+#define yon_configuration_parameter_add_or_create_if_exists_with_data(dict,key,data) {if (!dict) dict=yon_configuration_parameter_new_with_label(key,data); \
+ else dict=yon_configuration_parameter_append_with_label(dict,key,data);}
+
+void yon_configuration_window_add_boolean_parameter(enum CONFIGURATION_PARAMETER_TYPE type, char *id, char *label){
+ yon_configuration_parameter_add_or_create_if_exists_with_data(__yon_settings_parameters,id,label);
+ yon_configuration_parameters *parameter = (yon_configuration_parameters*)yon_dictionary_get_last((dictionary*)__yon_settings_parameters);
+ if (parameter){
+ parameter->type = CONFIGURATION_PARAMETER_BOOL;
+ }
+}
+
+void yon_configuration_window_add_combo_box_parameter(enum CONFIGURATION_PARAMETER_TYPE type, char *id, char *label,...){
+ yon_configuration_parameter_add_or_create_if_exists_with_data(__yon_settings_parameters,id,label);
+ va_list args;
+ va_start(args,label);
+ char *cur=NULL;
+ int size=0;
+ config_str variants = NULL;
+ while ((cur=va_arg(args,char*))){
+ yon_char_parsed_add_or_create_if_exists(variants,&size,cur);
+ }
+ yon_char_parsed_add_or_create_if_exists(variants,&size,NULL);
+ yon_configuration_parameters *parameter = (yon_configuration_parameters*)yon_dictionary_get_last((dictionary*)__yon_settings_parameters);
+ if (parameter){
+
+ parameter->data = (void*)variants;
+ parameter->type = CONFIGURATION_PARAMETER_COMBO_BOX;
+ }
+
}
\ No newline at end of file
diff --git a/source/libublsettingsui-gtk3.h b/source/libublsettingsui-gtk3.h
index 806592a..3e978e3 100644
--- a/source/libublsettingsui-gtk3.h
+++ b/source/libublsettingsui-gtk3.h
@@ -250,9 +250,23 @@ char *yon_get_default_label_with_parameter(char *section, char *parameter);
template_saving_window *yon_save_proceed(char *path,YON_CONFIG_TYPE type, ...);
+enum CONFIGURATION_PARAMETER_TYPE{
+ CONFIGURATION_PARAMETER_BOOL,
+ CONFIGURATION_PARAMETER_ENTRY,
+ CONFIGURATION_PARAMETER_COMBO_BOX,
+ CONFIGURATION_PARAMETER_LIST_MULTIPLE
+};
+
+void yon_ubl_settings_window_init(GtkMenu *menu);
+void *yon_ubl_settings_window_get(char *id);
+void yon_configuration_window_add_boolean_parameter(enum CONFIGURATION_PARAMETER_TYPE type, char *id, char *label);
+void yon_configuration_window_add_combo_box_parameter(enum CONFIGURATION_PARAMETER_TYPE type, char *id, char *label,...);
+
typedef struct {
GtkWidget *window;
GtkWidget *WorkZoneBox;
+ GtkWidget *AcceptButton;
+ GtkWidget *CancelButton;
} ubl_settings_window;
#define VERSION_LABEL yon_char_unite(_("Version:")," ",!yon_char_is_empty(template_app_information.app_version)?template_app_information.app_version:"","\n",NULL)