diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 55621b9..0ebfec0 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -10,17 +10,34 @@ void yon_load_proceed(YON_CONFIG_TYPE type){ yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); if (type==YON_CONFIG_GLOBAL){ yon_config_load_config(type,config_get_global_command,NULL); - } - if (type==YON_CONFIG_LOCAL){ + } else if (type==YON_CONFIG_LOCAL){ yon_config_load_config(type,config_get_local_command,NULL); - } - + } else if (type==YON_CONFIG_CUSTOM){ + char *path=""; + 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); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(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); + } } void on_config_local_load(GtkWidget *self,main_window *widgets){ + if (self){} if (!main_config.update_thread_active){ main_config.update_thread_active=1; - if (self){}; yon_load_proceed(YON_CONFIG_LOCAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets); @@ -29,9 +46,9 @@ void on_config_local_load(GtkWidget *self,main_window *widgets){ } void on_config_global_load(GtkWidget *self,main_window *widgets){ + if (self){} if (!main_config.update_thread_active){ main_config.update_thread_active=1; - if (self){}; yon_load_proceed(YON_CONFIG_GLOBAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); gdk_threads_add_idle((GSourceFunc)((gboolean*)(void*)yon_interface_update),widgets); @@ -40,6 +57,16 @@ void on_config_global_load(GtkWidget *self,main_window *widgets){ } +void on_config_custom_load(GtkWidget *self,main_window *widgets){ + if (self){} + yon_load_proceed(YON_CONFIG_CUSTOM); + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + textdomain(LocaleName); + main_config.load_mode=3; + yon_interface_update(widgets); +} + // functions void on_service_constant_update(){ @@ -60,6 +87,12 @@ void on_config_global_save(){ } +void on_config_custom_save(GtkWidget *self, main_window *widgets){ + if (self&&widgets){} + template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,config_get_command("system"),NULL); + if (window){}; +} + void on_activate(GtkTreeView *self, main_window *widgets){ if (self&&widgets){}; } @@ -781,6 +814,11 @@ gboolean yon_interface_update(main_window *widgets){ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),NULL); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),NULL); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),NULL); + gtk_list_store_clear(widgets->SystemList); + gtk_list_store_clear(widgets->UserList); + gtk_list_store_clear(widgets->ConfigList); + gtk_list_store_clear(widgets->SessionsList); + gtk_list_store_clear(widgets->TimersList); int system_size; config_str system_services = yon_config_load(load_services_command,&system_size); int user_size; @@ -790,7 +828,7 @@ gboolean yon_interface_update(main_window *widgets){ int sessions_size; config_str sessions = yon_config_load(list_of_session_command,&sessions_size); int timers_size; - config_str timers = yon_config_load(get_timers_command,&timers_size); + config_str timers = yon_config_load(get_timers_command,&timers_size); struct json_object *jsobject = json_tokener_parse(timers[0]); for (int i=0; iConfigMainTree),GTK_TREE_MODEL(widgets->ConfigList)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),GTK_TREE_MODEL(widgets->SessionsList)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),GTK_TREE_MODEL(widgets->TimersList)); + main_config.update_thread_active=0; return 0; } @@ -1186,8 +1225,14 @@ void yon_main_window_complete(main_window *widgets){ END_SESSION_LABEL,stop_icon_path,on_session_end,NULL, BLOCK_SESSION_LABEL,block_icon_path,on_session_block,NULL, NULL); - - widgets->SystemServiceLabel=yon_gtk_builder_get_widget(builder,"SystemServiceLabel"); + { + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->SystemMenu->menu)); + gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,3)),"separatorBottom"); + gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,8)),"separatorTop"); + gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,6)),"separatorBottom"); + g_list_free(list); + } + widgets->SystemServiceLabel=yon_gtk_builder_get_widget(builder,"SystemServiceLabel"); widgets->SystemDescriptionLabel=yon_gtk_builder_get_widget(builder,"SystemDescriptionLabel"); } widgets->TimersMainTree=yon_gtk_builder_get_widget(builder,"TimersMainTree"); @@ -1230,57 +1275,36 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->TimersStatusListMenuItem),"activate",G_CALLBACK(on_timers_list_status),widgets); // g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"button-press-event",G_CALLBACK(on_context_menu_open),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,3)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,5)),"notify::width",G_CALLBACK(on_column_resize),widgets); for (unsigned int i=0;iUserUnitsTree)); - g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,3)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,5)),"notify::width",G_CALLBACK(on_column_resize),widgets); for (unsigned int i=0;iConfigMainTree)); - g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); for (unsigned int i=0;iSessionMainTree)); - g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,3)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets); for (unsigned int i=0;iTimersMainTree)); - g_signal_connect(G_OBJECT(g_list_nth_data(list,0)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,1)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,2)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,3)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,4)),"notify::width",G_CALLBACK(on_column_resize),widgets); - g_signal_connect(G_OBJECT(g_list_nth_data(list,5)),"notify::width",G_CALLBACK(on_column_resize),widgets); for (unsigned int i=0;iLoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); + g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets); g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_global_local_save),NULL); 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->SystemUnitsTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); gtk_tree_view_set_search_entry(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_ENTRY(widgets->SystemSearchEntry)); yon_load_proceed(YON_CONFIG_LOCAL); diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index a7a710a..84b1c04 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -73,6 +73,7 @@ #define config_get_command(target) yon_char_append("cat ",target) +#define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK",NULL) #define config_get_local_command "ubconfig --source system get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK" #define config_get_global_command yon_char_new("ubconfig --source global get system SERVICES_ENABLE SERVICES_DISABLE SERVICES_MASK") #define config_get_default_command "" @@ -234,12 +235,16 @@ void on_config_local_load(GtkWidget *self,main_window *widgets); void on_config_global_load(GtkWidget *self,main_window *widgets); +void on_config_custom_load(GtkWidget *self,main_window *widgets); + void on_config_global_local_save(); void on_config_local_save(); void on_config_global_save(); +void on_config_custom_save(GtkWidget *self, main_window *widgets); + void on_service_constant_update(); log_window *yon_log_window_new(); diff --git a/ubl-settings-services.css b/ubl-settings-services.css index 9a6c1f7..1ca94fe 100644 --- a/ubl-settings-services.css +++ b/ubl-settings-services.css @@ -118,12 +118,16 @@ background:transparent; border-style:solid; } -.separator_menu_item{ +.separatorTop{ border-color: darker (@theme_bg_color); border-top-width:1px; border-style:solid; - margin:0px; - padding:0px; +} + +.separatorBottom{ + border-color: darker (@theme_bg_color); + border-bottom-width:1px; + border-style:solid; } .marginright image{