From 2df3a1064f2dace59922c0abb4a56f86984f2772 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 19 Jul 2023 16:16:03 +0600 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D1=84?= =?UTF-8?q?=D0=B8=D0=BB=D1=8C=D1=82=D1=80=D1=8B=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=B2=D1=81=D0=B5=20=D0=BE=D0=BA=D0=BE=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/controler.c | 33 ++++++- source/model/philos_utils.h | 1 + source/ubl-settings-diskquota.c | 4 + source/view_filters.c | 160 +++++++++++++++++++++++--------- source/view_filters.h | 4 +- ubl-settings-diskquota.glade | 26 +++--- 6 files changed, 166 insertions(+), 62 deletions(-) diff --git a/source/controler.c b/source/controler.c index f177feb..9a47b21 100644 --- a/source/controler.c +++ b/source/controler.c @@ -4,18 +4,20 @@ main_window cfg_main_gui; custom_window cfg_custom_gui; config_settings_gui main_config; config_all all_config; -int index_selected = 0; +int index_selected = -1; void wrapper_filters_user_show() { + filters_get_tree_view(cfg_custom_gui.user.tree_view); filters_set_name("usrquota"); filters_show(NULL, glade_path); } void wrapper_filters_group_show() { + filters_get_tree_view(cfg_custom_gui.group.tree_view); filters_set_name("grpquota"); - filters_show(NULL, glade_path); } void wrapper_filters_project_show() { + filters_get_tree_view(cfg_custom_gui.project.tree_view); filters_set_name("prjquota"); filters_show(NULL, glade_path); } @@ -122,7 +124,26 @@ void unlock_tree_view(hotebook* widgets,void (*f)()) { g_signal_handlers_unblock_by_func(G_OBJECT(widgets->tree_view), G_CALLBACK(f), NULL); } -void entry_user_disk(GtkWidget *self,int* flag_update) { +void block_button_add_edit_del(hotebook* obj_note) { + int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(obj_note->comboBox)); + int flag_block = 0; + if (menu_id == -1) { + flag_block = 0; + } + else { + flag_block = 1; + } + gtk_widget_set_sensitive(obj_note->btnAdd, flag_block); + gtk_widget_set_sensitive(obj_note->btnEdit, flag_block); + gtk_widget_set_sensitive(obj_note->btnDel, flag_block); + if (index_selected!=-1 || flag_block == 0) { + gtk_widget_set_sensitive(obj_note->boxSpins, flag_block); + } + +} + +void entry_user_disk(GtkWidget *self, int* flag_update) { + block_button_add_edit_del(&cfg_custom_gui.user); if (flag_update) { all_config.flag_set_data = 1; all_config.flag_save = 3; @@ -139,6 +160,7 @@ void entry_user_disk(GtkWidget *self,int* flag_update) { wrapper_fill_tree_view_generate(&all_config, &cfg_custom_gui); } void entry_groups_disk(GtkWidget *self,int* flag_update) { + block_button_add_edit_del(&cfg_custom_gui.group); if (flag_update) { all_config.flag_set_data = 1; all_config.flag_save = 3; @@ -154,7 +176,7 @@ void entry_groups_disk(GtkWidget *self,int* flag_update) { } wrapper_fill_tree_view_generate(&all_config, &cfg_custom_gui); } -void entry_project_disk(GtkWidget *self,int* flag_update) { +void entry_project_disk(GtkWidget *self,int* flag_update) { if (flag_update) { all_config.flag_set_data = 1; all_config.flag_save = 3; @@ -307,6 +329,7 @@ int wrapper_select_tree_view(hotebook* widgets) { char* str_iter = gtk_tree_model_get_string_from_iter(model, &iter); index = atoi(str_iter); index_selected = index; + gtk_widget_set_sensitive(widgets->boxSpins, 1); } else { } @@ -580,6 +603,8 @@ int main(int argc, char *argv[]){ filters_set_name("prjquota"); filters_init_flag(); control_event(widgets, &cfg_custom_gui); + block_button_add_edit_del(&cfg_custom_gui.user); + block_button_add_edit_del(&cfg_custom_gui.group); yon_ubl_header_setup_resource(widgets->HeadOverlay,widgets->HeadBox,widgets->HeadImage,banner_path); yon_ubl_status_box_setup(widgets->StatusIcon,widgets->StatusBox,widgets->StatusLabel); diff --git a/source/model/philos_utils.h b/source/model/philos_utils.h index 1c755cb..42e334a 100644 --- a/source/model/philos_utils.h +++ b/source/model/philos_utils.h @@ -96,6 +96,7 @@ typedef struct { GtkWidget* spinMinutesFile; GtkWidget* cmbSetStatusDisk; GtkWidget* lblSetNameDevice; + GtkWidget* boxSpins; } hotebook; typedef struct { int weeks; diff --git a/source/ubl-settings-diskquota.c b/source/ubl-settings-diskquota.c index 70158e1..bd90fab 100644 --- a/source/ubl-settings-diskquota.c +++ b/source/ubl-settings-diskquota.c @@ -207,6 +207,10 @@ custom_window *setup_window_custom(custom_window* custom_widgets, GtkBuilder *bu custom_widgets->group.name = yon_char_new("grpquota"); custom_widgets->project.name = yon_char_new("grpquota"); + custom_widgets->user.boxSpins = yon_gtk_builder_get_widget(builder,"boxGeneralUsersEnableCheck"); + custom_widgets->group.boxSpins = yon_gtk_builder_get_widget(builder,"boxGeneralGroupEnableCheck"); + custom_widgets->project.boxSpins = yon_gtk_builder_get_widget(builder,"boxGeneralProjectEnableCheck"); + custom_widgets->user.btnAdd = yon_gtk_builder_get_widget(builder,"btnAddUsers"); custom_widgets->user.btnEdit = yon_gtk_builder_get_widget(builder,"btnEditUsers"); custom_widgets->user.btnDel = yon_gtk_builder_get_widget(builder,"btnDelUsers"); diff --git a/source/view_filters.c b/source/view_filters.c index d53ca03..3668e5f 100644 --- a/source/view_filters.c +++ b/source/view_filters.c @@ -1,7 +1,12 @@ #include "view_filters.h" char* flag_filters_u_g_p = NULL; filters_window *filters_widgets = NULL; -gboolean flag_filters[10]; +GtkTreeView* _tree_view = NULL; +const int len_user_group = 10; +const int len_project = 11; +gboolean flag_filters_user[10]; +gboolean flag_filters_group[10]; +gboolean flag_filters_project[11]; filters_window *filters_setup_window(char* glade_path){ if (filters_widgets == NULL) { filters_widgets = malloc(sizeof(filters_window)); @@ -20,7 +25,7 @@ filters_window *filters_setup_window(char* glade_path){ filters_widgets->chbFilterHardLimitFile = yon_gtk_builder_get_widget(builder,"chbFilterHardLimitFile"); filters_widgets->chbFilterHardLimitFileDelay = yon_gtk_builder_get_widget(builder,"chbFilterHardLimitFileDelay"); filters_widgets->chbProjectName = yon_gtk_builder_get_widget(builder,"chbProjectName"); - if (strcmp(flag_filters_u_g_p,"project")==0) { + if (strcmp(flag_filters_u_g_p, "prjquota")==0) { gtk_button_set_label(GTK_BUTTON(filters_widgets->chbFilterName), _("ID")); } else { @@ -29,16 +34,95 @@ filters_window *filters_setup_window(char* glade_path){ filters_event(filters_widgets); } + filters_set_flag(); return filters_widgets; } + +gboolean* filters_get_flag_user() { + flag_filters_user[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterName)); + flag_filters_user[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterQuotas)); + flag_filters_user[2] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSize)); + flag_filters_user[3] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitSize)); + flag_filters_user[4] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSize)); + flag_filters_user[5] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitFile)); + flag_filters_user[6] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterFiles)); + flag_filters_user[7] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFile)); + flag_filters_user[8] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSizeDelay)); + flag_filters_user[9] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFileDelay)); + return flag_filters_user; +} + + +gboolean* filters_get_flag_group() { + flag_filters_group[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterName)); + flag_filters_group[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterQuotas)); + flag_filters_group[2] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSize)); + flag_filters_group[3] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitSize)); + flag_filters_group[4] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSize)); + flag_filters_group[5] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitFile)); + flag_filters_group[6] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterFiles)); + flag_filters_group[7] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFile)); + flag_filters_group[8] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSizeDelay)); + flag_filters_group[9] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFileDelay)); + return flag_filters_group; +} + + +gboolean* filters_get_flag_project() { + flag_filters_project[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterName)); + flag_filters_project[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterQuotas)); + flag_filters_project[2] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSize)); + flag_filters_project[3] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitSize)); + flag_filters_project[4] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSize)); + flag_filters_project[5] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitFile)); + flag_filters_project[6] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterFiles)); + flag_filters_project[7] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFile)); + flag_filters_project[8] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSizeDelay)); + flag_filters_project[9] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFileDelay)); + flag_filters_project[10] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbProjectName)); + return flag_filters_project; +} + void filters_set_name(char* _flag_filters_u_g_p) { flag_filters_u_g_p = _flag_filters_u_g_p; } +void filters_get_tree_view(GtkWidget *tree_view) { + _tree_view = GTK_TREE_VIEW(tree_view); +} + +void filters_tree_view_update() { + int n_end = len_user_group; + gboolean* array_flags = NULL; + if (strcmp(flag_filters_u_g_p, "prjquota")==0) { + n_end = len_project; + array_flags = filters_get_flag_project(); + } + else { + n_end = len_user_group; + if (strcmp(flag_filters_u_g_p, "usrquota")==0) { + array_flags = filters_get_flag_user(); + } + else { + array_flags = filters_get_flag_group(); + } + } + for (int i = 0; i < n_end; i++) { + GtkTreeViewColumn* column = gtk_tree_view_get_column(_tree_view, i); + gtk_tree_view_column_set_visible(column, array_flags[i]); + } +} +void filters_save(GtkWidget *self) { + filters_tree_view_update(); + filters_on_hide_subwindow(self); + +} + void filters_event(filters_window *widgets) { - g_signal_connect(G_OBJECT(widgets->btnFiltersCancel), "clicked",G_CALLBACK(filters_on_hide_subwindow),NULL); + g_signal_connect(G_OBJECT(widgets->btnFiltersSave), "clicked",G_CALLBACK(filters_save),widgets->Window); + g_signal_connect(G_OBJECT(widgets->btnFiltersCancel), "clicked",G_CALLBACK(filters_on_hide_subwindow),widgets->Window); g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(filters_destroy), NULL); } @@ -69,51 +153,41 @@ void filters_show(GtkWidget *self, char* glade_path) { } } -gboolean* filters_get_flag() { - flag_filters[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterName)); - flag_filters[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitFile)); - flag_filters[2] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterFiles)); - flag_filters[3] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSizeDelay)); - flag_filters[4] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSize)); - flag_filters[5] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterQuotas)); - flag_filters[6] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitSize)); - flag_filters[7] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSize)); - flag_filters[8] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFile)); - flag_filters[9] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFileDelay)); - if (strcmp(flag_filters_u_g_p,"project")==0) { - flag_filters[10] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbProjectName)); - } - return flag_filters; -} + void filters_init_flag() { - flag_filters[0] = 1; - flag_filters[1] = 1; - flag_filters[2] = 1; - flag_filters[3] = 1; - flag_filters[4] = 1; - flag_filters[5] = 1; - flag_filters[6] = 1; - flag_filters[7] = 1; - flag_filters[8] = 1; - flag_filters[9] = 1; - if (strcmp(flag_filters_u_g_p,"project")==0) { - flag_filters[10] = 1; + for (int i=0; ichbFilterName),flag_filters[0] ); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitFile), flag_filters[1]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterFiles), flag_filters[2]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSizeDelay), flag_filters[3]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSize), flag_filters[4]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterQuotas), flag_filters[5]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitSize), flag_filters[6]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSize), flag_filters[7]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFile), flag_filters[8]); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFileDelay), flag_filters[9]); - if (strcmp(flag_filters_u_g_p,"project")==0) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbProjectName), flag_filters[10]); + gboolean* array_flags = NULL; + if (strcmp(flag_filters_u_g_p, "prjquota")==0) { + array_flags = flag_filters_project; + } + else { + if (strcmp(flag_filters_u_g_p, "usrquota")==0) { + array_flags = flag_filters_user; + } + else { + array_flags = flag_filters_group; + } + } + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterName),array_flags[0] ); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterQuotas), array_flags[1]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSize), array_flags[2]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitSize), array_flags[3]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSize), array_flags[4]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterSoftLimitFile), array_flags[5]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterFiles), array_flags[6]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFile), array_flags[7]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitSizeDelay), array_flags[8]); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterHardLimitFileDelay), array_flags[9]); + if (strcmp(flag_filters_u_g_p,"prjquota")==0) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbProjectName), array_flags[10]); } } \ No newline at end of file diff --git a/source/view_filters.h b/source/view_filters.h index a3eb6be..67adf43 100644 --- a/source/view_filters.h +++ b/source/view_filters.h @@ -41,9 +41,9 @@ void filters_on_hide_subwindow(GtkWidget *self); filters_window *get_widget_filters(); void filters_show(GtkWidget *self, char* glade_path); void filters_destroy(GtkWidget *self); -int* filters_get_flag(); void filters_init_flag(); -void filters_set_flag(); void filters_set_name(char* _flag_u_g_p); void filters_show(GtkWidget *self, char* glade_path); +void filters_set_flag(); +void filters_get_tree_view(GtkWidget *tree_view); #endif \ No newline at end of file diff --git a/ubl-settings-diskquota.glade b/ubl-settings-diskquota.glade index 1b205ec..099ce21 100644 --- a/ubl-settings-diskquota.glade +++ b/ubl-settings-diskquota.glade @@ -3280,7 +3280,7 @@ limitation - + True False @@ -4134,7 +4134,7 @@ limitation False vertical - + True False @@ -5409,8 +5409,8 @@ limitation - - Hard limit (size) delay + + Soft limit (files) True True False @@ -5420,7 +5420,7 @@ limitation False True - 6 + 8 @@ -5435,12 +5435,12 @@ limitation False True - 7 + 9 - - Soft limit (files) + + Hard limit (files) True True False @@ -5450,12 +5450,12 @@ limitation False True - 8 + 10 - - Hard limit (files) + + Hard limit (size) delay True True False @@ -5465,7 +5465,7 @@ limitation False True - 9 + 12 @@ -5480,7 +5480,7 @@ limitation False True - 10 + 13