From 8d16d6f11aadb21fc52929c702f9eccf276c3003 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 28 Mar 2024 18:07:04 +0600 Subject: [PATCH] Filters implemented; localisation updates; loading test fixes; button sensitivity logic added; --- source/ubl-settings-services.c | 319 ++++++++++++++++++++++----------- source/ubl-settings-services.h | 24 +-- source/ubl-strings.h | 11 +- ubl-settings-services.glade | 60 +++++-- ubl-settings-services.pot | 32 ++++ ubl-settings-services_ru.po | 32 ++++ 6 files changed, 335 insertions(+), 143 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 0ebfec0..58617fc 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -67,8 +67,6 @@ void on_config_custom_load(GtkWidget *self,main_window *widgets){ yon_interface_update(widgets); } -// functions - void on_service_constant_update(){ } @@ -93,22 +91,78 @@ void on_config_custom_save(GtkWidget *self, main_window *widgets){ if (window){}; } +// functions + +enum YON_UNIT_TYPE { + YON_UNIT_SERVICE=0, + YON_UNIT_SWAP, + YON_UNIT_SOCKET, + YON_UNIT_DEVICE, + YON_UNIT_TARGET, + YON_UNIT_MOUNT, + YON_UNIT_TIMER, + YON_UNIT_PATH, + YON_UNIT_SLICE, + YON_UNIT_SCOPE, + YON_UNIT_UNRECOGNISED +}; +enum YON_UNIT_TYPE yon_get_unit_type(char *unit_name); + +enum YON_UNIT_TYPE yon_get_unit_type(char *unit_name){ + enum YON_UNIT_TYPE final_type=0; + char *type = yon_char_new(unit_name); + int cut = yon_char_find_last(type,'.'); + if (cut>-1){ + free(yon_char_divide(type,cut)); + } + if (!strcmp(type,"service")){ + final_type = YON_UNIT_SERVICE; + } else if (!strcmp(type,"swap")){ + final_type = YON_UNIT_SWAP; + } else if (!strcmp(type,"socket")){ + final_type = YON_UNIT_SOCKET; + } else if (!strcmp(type,"device")){ + final_type = YON_UNIT_DEVICE; + } else if (!strcmp(type,"target")){ + final_type = YON_UNIT_TARGET; + } else if (!strcmp(type,"automount")){ + final_type = YON_UNIT_MOUNT; + } else if (!strcmp(type,"timer")){ + final_type = YON_UNIT_TIMER; + } else if (!strcmp(type,"path")){ + final_type = YON_UNIT_PATH; + } else if (!strcmp(type,"slice")){ + final_type = YON_UNIT_SLICE; + } else if (!strcmp(type,"scope")){ + final_type = YON_UNIT_SCOPE; + } else { + final_type = YON_UNIT_UNRECOGNISED; + } + free(type); + return final_type; +} + void on_activate(GtkTreeView *self, main_window *widgets){ if (self&&widgets){}; } void on_config_autostart_clicked(GtkWidget *self, main_window *widgets){ if (self){}; + GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; GtkWidget *Tree; + GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); Tree = widgets->SystemUnitsTree; + filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); Tree = widgets->UserUnitsTree; + filter = GTK_TREE_MODEL(widgets->UserFilter); } - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&filter,&filter_iter)){ + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *name; gtk_tree_model_get(model,&iter,0,&status,5,&name,-1); @@ -140,17 +194,22 @@ void on_config_autostart_clicked(GtkWidget *self, main_window *widgets){ void on_config_autostop_clicked(GtkWidget *self, main_window *widgets){ if (self){}; + GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; GtkWidget *Tree; + GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); Tree = widgets->SystemUnitsTree; + filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); Tree = widgets->UserUnitsTree; + filter = GTK_TREE_MODEL(widgets->UserFilter); } - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&filter,&filter_iter)){ + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *name; gtk_tree_model_get(model,&iter,1,&status,5,&name,-1); @@ -183,17 +242,22 @@ void on_config_autostop_clicked(GtkWidget *self, main_window *widgets){ void on_config_block_clicked(GtkWidget *self, main_window *widgets){ if (self){}; + GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; GtkWidget *Tree; + GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); Tree = widgets->SystemUnitsTree; + filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); Tree = widgets->UserUnitsTree; + filter = GTK_TREE_MODEL(widgets->UserFilter); } - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&filter,&filter_iter)){ + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *name; gtk_tree_model_get(model,&iter,2,&status,5,&name,-1); @@ -226,17 +290,22 @@ void on_config_block_clicked(GtkWidget *self, main_window *widgets){ void on_system_autostart_clicked(GtkWidget *self, main_window *widgets){ if (self){}; + GtkTreeIter filter_iter; GtkTreeIter iter; GtkTreeModel *model; GtkWidget *Tree; + GtkTreeModel *filter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->SystemList); Tree = widgets->SystemUnitsTree; + filter = GTK_TREE_MODEL(widgets->SystemFilter); } else { model = GTK_TREE_MODEL(widgets->UserList); Tree = widgets->UserUnitsTree; + filter = GTK_TREE_MODEL(widgets->UserFilter); } - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&filter,&filter_iter)){ + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter); gboolean status = 0; char *service_name; gtk_tree_model_get(model,&iter,3,&status,5,&service_name,-1); @@ -247,6 +316,70 @@ void on_system_autostart_clicked(GtkWidget *self, main_window *widgets){ } +gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets){ + gboolean autostart,autostop,masked,type,loaded,inactive; + gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,7,&type,8,&loaded,9,&inactive,-1); + GtkWidget *combo=NULL; + GtkWidget *loaded_check=NULL; + GtkWidget *active_check=NULL; + int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); + if (page == 0){ + combo = widgets->SystemFiltersCombo; + loaded_check = widgets->SystemUnloadedShowCheck; + active_check = widgets->SystemInactiveShowCheck; + } else if (page == 1){ + combo = widgets->UserFiltersCombo; + loaded_check = widgets->UserUnloadedShowCheck; + active_check = widgets->UserInactiveShowCheck; + } + int type_filter=1; + int active_filter=0; + int loaded_filter=0; + + int filter_active = gtk_combo_box_get_active(GTK_COMBO_BOX(combo)); + if (filter_active>0){ + if (filter_active>3){ + char *text = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo)); + if (yon_get_unit_type(text)!=(enum YON_UNIT_TYPE)type) type_filter = 0; + } else { + switch (filter_active){ + case 1: if (!autostart) type_filter=0; + break; + case 2: if (!autostop) type_filter=0; + break; + case 3: if (!masked) type_filter=0; + break; + } + } + } + + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(active_check))){ + active_filter=1; + + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(loaded_check))) + loaded_filter=1; + } + + if (type_filter&&(active_filter||inactive)&&(loaded_filter||loaded)){ + return 1; + } + return 0; +} + +void on_filter_changed(GtkWidget *self, main_window *widgets){ + if (self){}; + int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); + if (page == 0){ + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),NULL); + gtk_tree_model_filter_refilter(widgets->SystemFilter); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemFilter)); + } else if (page == 1){ + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),NULL); + gtk_tree_model_filter_refilter(widgets->UserFilter); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserFilter)); + } +} + void on_system_kill_confirmed(GtkWidget *self,char *service_name){ if (self){}; char *command = service_kill_command(service_name); @@ -300,14 +433,6 @@ void on_system_restart_clicked(GtkWidget *self, main_window *widgets){ if (self&&widgets){}; } -void on_source_show(){ - -} - -void on_properties_show(){ - -} - void on_session_activate(){ } @@ -320,14 +445,6 @@ void on_session_block(){ } -void on_status_show(){ - -} - -void on_log_show(){ - -} - log_window *yon_log_window_new(){ log_window *window = malloc(sizeof(log_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_log); @@ -505,38 +622,6 @@ void on_system_status_clicked(GtkWidget *self, main_window *widgets){ } -void on_system_filter_changed(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - -void on_system_search(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - -void on_system_inactive_toggled(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - -void on_system_unloaded_toggled(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets){ if (self){} if (widgets){ @@ -639,38 +724,6 @@ void on_user_status_clicked(GtkWidget *self, main_window *widgets){ } -void on_user_filter_changed(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - -void on_user_search(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - -void on_user_inactive_toggled(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - -void on_user_unloaded_toggled(GtkWidget *self, main_window *widgets){ - if (self){} - if (widgets){ - - } - -} - void on_config_log_save(GtkWidget *self, log_window *window){ if (self){}; GtkTextIter start, end; @@ -836,8 +889,11 @@ gboolean yon_interface_update(main_window *widgets){ int size; config_str parsed = yon_char_parse(system_services[i],&size,";"); if (parsed){ + int loaded = !strcmp(parsed[1],"loaded"); + int active = !strcmp(parsed[2],"active"); + enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]); gtk_list_store_append(widgets->SystemList,&iter); - gtk_list_store_set(widgets->SystemList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],-1); + gtk_list_store_set(widgets->SystemList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],7,type,8,loaded,9,active,11,_(parsed[3]),-1); } } @@ -847,8 +903,11 @@ gboolean yon_interface_update(main_window *widgets){ int size; config_str parsed = yon_char_parse(user_services[i],&size,";"); if (parsed){ + int loaded = !strcmp(parsed[1],"loaded"); + int active = !strcmp(parsed[2],"active"); + enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]); gtk_list_store_append(widgets->UserList,&iter); - gtk_list_store_set(widgets->UserList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],-1); + gtk_list_store_set(widgets->UserList,&iter,4,strcmp(parsed[2],"active")?0:1,5,parsed[0],6,parsed[4],5,parsed[0],6,parsed[4],7,type,8,loaded,9,active,11,_(parsed[3]),-1); } } @@ -956,12 +1015,12 @@ gboolean yon_interface_update(main_window *widgets){ char *enabled = yon_config_get_by_key(SERVICES_ENABLE_PARAMETER); config_str parsed = yon_char_parse(enabled,&parsed_size,","); GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->UserList); + GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); int valid = gtk_tree_model_get_iter_first(model,&iter); for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) { - gtk_list_store_set(widgets->UserList,&iter,0,0,-1); + gtk_list_store_set(widgets->SystemList,&iter,0,0,-1); } valid = gtk_tree_model_get_iter_first(model,&iter); for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) @@ -969,7 +1028,13 @@ gboolean yon_interface_update(main_window *widgets){ char *name; gtk_tree_model_get(model,&iter,5,&name,-1); for (int i=0;iUserList,&iter,0,1,-1); + if (yon_char_find_last(parsed[i],'.')==-1) { + char *temp = yon_char_append(parsed[i],".service"); + free(parsed[i]); + parsed[i]=temp; + } + if (!strcmp(name,parsed[i])) + gtk_list_store_set(widgets->SystemList,&iter,0,1,-1); } } yon_char_parsed_free(parsed,parsed_size); @@ -979,7 +1044,7 @@ gboolean yon_interface_update(main_window *widgets){ valid = gtk_tree_model_get_iter_first(model,&iter); for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) { - gtk_list_store_set(widgets->UserList,&iter,1,0,-1); + gtk_list_store_set(widgets->SystemList,&iter,1,0,-1); } valid = gtk_tree_model_get_iter_first(model,&iter); for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) @@ -987,7 +1052,7 @@ gboolean yon_interface_update(main_window *widgets){ char *name; gtk_tree_model_get(model,&iter,5,&name,-1); for (int i=0;iUserList,&iter,1,1,-1); + if (strstr(name,parsed[i])) gtk_list_store_set(widgets->SystemList,&iter,1,1,-1); } } yon_char_parsed_free(parsed,parsed_size); @@ -997,7 +1062,7 @@ gboolean yon_interface_update(main_window *widgets){ valid = gtk_tree_model_get_iter_first(model,&iter); for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) { - gtk_list_store_set(widgets->UserList,&iter,2,0,-1); + gtk_list_store_set(widgets->SystemList,&iter,2,0,-1); } valid = gtk_tree_model_get_iter_first(model,&iter); for (;valid;valid=gtk_tree_model_iter_next(model,&iter)) @@ -1005,7 +1070,7 @@ gboolean yon_interface_update(main_window *widgets){ char *name; gtk_tree_model_get(model,&iter,5,&name,-1); for (int i=0;iUserList,&iter,2,1,-1); + if (strstr(name,parsed[i])) gtk_list_store_set(widgets->SystemList,&iter,2,1,-1); } } } @@ -1068,8 +1133,8 @@ gboolean yon_interface_update(main_window *widgets){ } } } - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemList)); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserList)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemFilter)); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserFilter)); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),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)); @@ -1116,12 +1181,41 @@ void config_init(){ void on_tree_selection_changed(GtkWidget *self, main_window *widgets){ if (self){}; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->SystemList); + GtkTreeModel *model; + GtkWidget *Tree; GtkTreeIter iter; - // int switch_status=0; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemUnitsTree)),&model,&iter)){ - // switch_status=1; + int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); + if (page==0){ + model = GTK_TREE_MODEL(widgets->SystemList); + Tree = widgets->SystemUnitsTree; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + gtk_widget_set_sensitive(widgets->SystemEditButton,1); + gtk_widget_set_sensitive(widgets->SystemLogButton,1); + gtk_widget_set_sensitive(widgets->SystemStatusButton,1); + gtk_widget_set_sensitive(widgets->SystemInfoButton,1); + } else { + gtk_widget_set_sensitive(widgets->SystemEditButton,0); + gtk_widget_set_sensitive(widgets->SystemLogButton,0); + gtk_widget_set_sensitive(widgets->SystemStatusButton,0); + gtk_widget_set_sensitive(widgets->SystemInfoButton,0); + } + } else if (page==1){ + model = GTK_TREE_MODEL(widgets->UserList); + Tree = widgets->UserUnitsTree; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(Tree)),&model,&iter)){ + gtk_widget_set_sensitive(widgets->UserEditButton,1); + gtk_widget_set_sensitive(widgets->UserLogButton,1); + gtk_widget_set_sensitive(widgets->UserStatusButton,1); + gtk_widget_set_sensitive(widgets->UserInfoButton,1); + } else { + gtk_widget_set_sensitive(widgets->UserEditButton,0); + gtk_widget_set_sensitive(widgets->UserLogButton,0); + gtk_widget_set_sensitive(widgets->UserStatusButton,0); + gtk_widget_set_sensitive(widgets->UserInfoButton,0); + } + } + // int switch_status=0; if (getuid()==0){ } } @@ -1168,6 +1262,8 @@ void yon_main_window_complete(main_window *widgets){ widgets->SystemLogButton=yon_gtk_builder_get_widget(builder,"SystemLogButton"); widgets->SystemEditButton=yon_gtk_builder_get_widget(builder,"SystemEditButton"); widgets->SystemPropertiesButton=yon_gtk_builder_get_widget(builder,"SystemPropertiesButton"); + widgets->SystemFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"SystemFilter")); + widgets->UserFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"UserFilter")); widgets->SystemStatusButton=yon_gtk_builder_get_widget(builder,"SystemStatusButton"); widgets->SystemMenu = yon_rmb_menu_setup(widgets->SystemUnitsTree,NULL,NULL, CONFIGURE_CONFIGURATION_LABEL,NULL,NULL,NULL, @@ -1245,10 +1341,10 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->SystemLogButton),"clicked",G_CALLBACK(on_system_log_clicked),widgets); g_signal_connect(G_OBJECT(widgets->SystemEditButton),"clicked",G_CALLBACK(on_system_edit_clicked),widgets); g_signal_connect(G_OBJECT(widgets->SystemStatusButton),"clicked",G_CALLBACK(on_system_status_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->SystemFiltersCombo),"changed",G_CALLBACK(on_system_filter_changed),widgets); - g_signal_connect(G_OBJECT(widgets->SystemSearchEntry),"changed",G_CALLBACK(on_system_search),widgets); - g_signal_connect(G_OBJECT(widgets->SystemInactiveShowCheck),"toggled",G_CALLBACK(on_system_inactive_toggled),widgets); - g_signal_connect(G_OBJECT(widgets->SystemUnloadedShowCheck),"toggled",G_CALLBACK(on_system_unloaded_toggled),widgets); + g_signal_connect(G_OBJECT(widgets->SystemFiltersCombo),"changed",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->SystemSearchEntry),"changed",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->SystemInactiveShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->SystemUnloadedShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets); g_signal_connect(G_OBJECT(widgets->UserPrevButton),"clicked",G_CALLBACK(on_user_update_hz_clicked),widgets); g_signal_connect(G_OBJECT(widgets->UserUpdateButton),"clicked",G_CALLBACK(on_user_update_clicked),widgets); @@ -1256,10 +1352,10 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->UserLogButton),"clicked",G_CALLBACK(on_user_log_clicked),widgets); g_signal_connect(G_OBJECT(widgets->UserEditButton),"clicked",G_CALLBACK(on_user_edit_clicked),widgets); g_signal_connect(G_OBJECT(widgets->UserStatusButton),"clicked",G_CALLBACK(on_user_status_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->UserFiltersCombo),"changed",G_CALLBACK(on_user_filter_changed),widgets); - g_signal_connect(G_OBJECT(widgets->UserSearchEntry),"changed",G_CALLBACK(on_user_search),widgets); - g_signal_connect(G_OBJECT(widgets->UserInactiveShowCheck),"toggled",G_CALLBACK(on_user_inactive_toggled),widgets); - g_signal_connect(G_OBJECT(widgets->UserUnloadedShowCheck),"toggled",G_CALLBACK(on_user_unloaded_toggled),widgets); + g_signal_connect(G_OBJECT(widgets->UserFiltersCombo),"changed",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->UserSearchEntry),"changed",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->UserInactiveShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets); + g_signal_connect(G_OBJECT(widgets->UserUnloadedShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets); g_signal_connect(G_OBJECT(widgets->ConfigEditButton),"clicked",G_CALLBACK(on_config_edit_clicked),widgets); @@ -1274,6 +1370,8 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->SocketsStatusListMenuItem),"activate",G_CALLBACK(on_sockets_list_status),widgets); g_signal_connect(G_OBJECT(widgets->TimersStatusListMenuItem),"activate",G_CALLBACK(on_timers_list_status),widgets); + g_signal_connect(G_OBJECT(widgets->SystemInactiveShowCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),widgets->SystemUnloadedShowCheck); + g_signal_connect(G_OBJECT(widgets->UserInactiveShowCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),widgets->UserUnloadedShowCheck); // g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"button-press-event",G_CALLBACK(on_context_menu_open),widgets); for (unsigned int i=0;iSaveGlobalMenuItem),"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); + g_signal_connect(G_OBJECT(widgets->UserUnitsTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); + gtk_tree_model_filter_set_visible_func(widgets->UserFilter,(GtkTreeModelFilterVisibleFunc)yon_filter,widgets,NULL); + gtk_tree_model_filter_set_visible_func(widgets->SystemFilter,(GtkTreeModelFilterVisibleFunc)yon_filter,widgets,NULL); gtk_tree_view_set_search_entry(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_ENTRY(widgets->SystemSearchEntry)); yon_load_proceed(YON_CONFIG_LOCAL); yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index 84b1c04..df255ee 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -186,7 +186,8 @@ typedef struct { GtkWidget *UnitsStatusListMenuItem; GtkWidget *SocketsStatusListMenuItem; GtkWidget *TimersStatusListMenuItem; - + GtkTreeModelFilter *SystemFilter; + GtkTreeModelFilter *UserFilter; } main_window; @@ -249,6 +250,9 @@ void on_service_constant_update(); log_window *yon_log_window_new(); +gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets); +void on_filter_changed(GtkWidget *self, main_window *widgets); + void on_system_services_status(GtkWidget *self, main_window *widgets); void on_user_services_status(GtkWidget *self, main_window *widgets); @@ -315,15 +319,9 @@ void on_save_clicked(GtkWidget *self, log_window *window); void on_update_clicked(GtkWidget *self, log_window *window); void on_system_edit_clicked(GtkWidget *self, main_window *widgets); -void on_system_status_clicked(GtkWidget *self, main_window *widgets); - -void on_system_filter_changed(GtkWidget *self, main_window *widgets); - -void on_system_search(GtkWidget *self, main_window *widgets); - -void on_system_inactive_toggled(GtkWidget *self, main_window *widgets); +void on_filter_changed(GtkWidget *self, main_window *widgets); -void on_system_unloaded_toggled(GtkWidget *self, main_window *widgets); +void on_system_status_clicked(GtkWidget *self, main_window *widgets); void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets); @@ -337,14 +335,6 @@ void on_user_edit_clicked(GtkWidget *self, main_window *widgets); void on_user_status_clicked(GtkWidget *self, main_window *widgets); -void on_user_filter_changed(GtkWidget *self, main_window *widgets); - -void on_user_search(GtkWidget *self, main_window *widgets); - -void on_user_inactive_toggled(GtkWidget *self, main_window *widgets); - -void on_user_unloaded_toggled(GtkWidget *self, main_window *widgets); - void on_config_log_save(GtkWidget *self, log_window *window); void on_config_edit_clicked(GtkWidget *self, main_window *widgets); diff --git a/source/ubl-strings.h b/source/ubl-strings.h index f7f3ba3..b8d8ee6 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -113,4 +113,13 @@ #define LEFT_LABEL _("Left") #define LAST_LABEL _("Last") #define PASSED_LABEL _("Passed") -#define ACTIVATES_LABEL _("Activates") \ No newline at end of file +#define ACTIVATES_LABEL _("Activates") + +#define STATE_ACTIVE_LABEL _("active") +#define STATE_DEAD_LABEL _("dead") +#define STATE_WAITING_LABEL _("waiting") +#define STATE_RUNNING_LABEL _("running") +#define STATE_LISTENING_LABEL _("listening") +#define STATE_EXITED_LABEL _("exited") +#define STATE_MOUNTED_LABEL _("mounted") +#define STATE_PLUGGED_LABEL _("plugged") \ No newline at end of file diff --git a/ubl-settings-services.glade b/ubl-settings-services.glade index debcdbc..7ee5de3 100644 --- a/ubl-settings-services.glade +++ b/ubl-settings-services.glade @@ -29,26 +29,35 @@ - + - + - + - + - + - + - + - - - + + + + + + + + + + + SystemList + @@ -77,16 +86,25 @@ - + - + - + + + + + - + + + + + UserList + True False @@ -284,6 +302,7 @@ Show unloaded True + False True False True @@ -374,6 +393,7 @@ True + False True True Toggle service blocking at configuration @@ -391,6 +411,7 @@ True + False True True Toggle autostart at system @@ -408,6 +429,7 @@ True + False True True Launch/Stop service @@ -425,6 +447,7 @@ True + False True True Check service log @@ -624,7 +647,7 @@ - 5 + 11 @@ -835,6 +858,7 @@ Show unloaded True + False True False True @@ -923,6 +947,7 @@ True + False True True image15 @@ -939,6 +964,7 @@ True + False True True image16 @@ -955,6 +981,7 @@ True + False True True image17 @@ -971,6 +998,7 @@ True + False True True image18 @@ -1131,7 +1159,7 @@ - 5 + 11 diff --git a/ubl-settings-services.pot b/ubl-settings-services.pot index b82b19f..2edf990 100644 --- a/ubl-settings-services.pot +++ b/ubl-settings-services.pot @@ -382,3 +382,35 @@ msgstr "" #: source/ubl-strings.h:116 msgid "Activates" msgstr "" + +#: source/ubl-strings.h:118 +msgid "active" +msgstr "" + +#: source/ubl-strings.h:119 +msgid "dead" +msgstr "" + +#: source/ubl-strings.h:120 +msgid "waiting" +msgstr "" + +#: source/ubl-strings.h:121 +msgid "running" +msgstr "" + +#: source/ubl-strings.h:122 +msgid "listening" +msgstr "" + +#: source/ubl-strings.h:123 +msgid "exited" +msgstr "" + +#: source/ubl-strings.h:124 +msgid "mounted" +msgstr "" + +#: source/ubl-strings.h:125 +msgid "plugged" +msgstr "" diff --git a/ubl-settings-services_ru.po b/ubl-settings-services_ru.po index 878c93b..9167fac 100644 --- a/ubl-settings-services_ru.po +++ b/ubl-settings-services_ru.po @@ -385,3 +385,35 @@ msgstr "Пройденный" #: source/ubl-strings.h:116 msgid "Activates" msgstr "Активируется" + +#: source/ubl-strings.h:118 +msgid "active" +msgstr "актиен" + +#: source/ubl-strings.h:119 +msgid "dead" +msgstr "" + +#: source/ubl-strings.h:120 +msgid "waiting" +msgstr "ожидает" + +#: source/ubl-strings.h:121 +msgid "running" +msgstr "работает" + +#: source/ubl-strings.h:122 +msgid "listening" +msgstr "слушает" + +#: source/ubl-strings.h:123 +msgid "exited" +msgstr "" + +#: source/ubl-strings.h:124 +msgid "mounted" +msgstr "примонтирован" + +#: source/ubl-strings.h:125 +msgid "plugged" +msgstr "подключен"