diff --git a/Makefile b/Makefile index facb51f..e697951 100644 --- a/Makefile +++ b/Makefile @@ -96,6 +96,7 @@ uninstall: @echo "Uninstall: OK" install: check uninstall + @cc source/filters.c source/filters.h source/ubl-settings-resourcequota-cm.h source/view_edit.h source/view_edit.c source/view_add.h source/view_add.c source/ubl-utils.h source/ubl-utils.c source/ubl-strings.h source/ubl-settings-resourcequota.h source/ubl-settings-resourcequota.c -o ubl-settings-resourcequota `pkg-config --cflags --libs gtk+-3.0 vte-2.91 webkit2gtk-4.0 webkit2gtk-web-extension-4.0` -g @echo "Install ..." @for FILE_PO in $(wildcard *.po); do \ LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ diff --git a/source/ubl-settings-resourcequota.c b/source/ubl-settings-resourcequota.c index fc45343..09c00d9 100644 --- a/source/ubl-settings-resourcequota.c +++ b/source/ubl-settings-resourcequota.c @@ -120,6 +120,7 @@ main_window *setup_window(){ GtkBuilder *builder = gtk_builder_new_from_file(glade_path); widgets->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); + widgets->btnDelQuotas = yon_gtk_builder_get_widget(builder,"btnDelQuotas"); widgets->treeViewMain = yon_gtk_builder_get_widget(builder,"treeViewMain"); widgets->tvc0 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc0")); widgets->tvc1 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc1")); @@ -223,28 +224,154 @@ void main_update_processes() { } void main_update_information() { - const gchar* menu_id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->cbtMainInfo)); - char* cmd_param = gtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(widgets->cbtMainInfoLevel2)); + int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtMainInfo)); char* cmd = NULL; - if (*menu_id == 0) { + config_str fill_cmb_2 = NULL; + int size = 0; + if (menu_id == 0) { + fill_cmb_2 = philos_list_user(&size); } - else if (*menu_id == 1) { + else if (menu_id == 1) { } - else if (*menu_id == 2) { + else if (menu_id == 2) { } - else if (*menu_id == 3) { + else if (menu_id == 3) { } - if (*menu_id >= 0) { + if (menu_id >= 0) { gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->cbtMainInfoLevel2)); - yon_terminal_integrated_launch(widgets->vteProcesses, cmd, NULL, NULL); + philos_fill_combo_box_text(widgets->cbtMainInfoLevel2, fill_cmb_2, size); + // yon_terminal_integrated_launch(widgets->vteProcesses, cmd, NULL, NULL); } - } +void main_cbx_2_event() { + int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtMainInfo)); + char* cmd_text_param = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->cbtMainInfo)); + if (menu_id == 0) { + + } + else if (menu_id == 1) { + + } + else if (menu_id == 2) { + + } + else if (menu_id == 3) { + + } + if (menu_id >= 0) { + + } + //char *cmd = yon_char_get_augumented("systemd-cgtop -d ", str_second); + //yon_terminal_integrated_launch(widgets->vteDispatcher, cmd, NULL, NULL); + +} + +void tree_view_delete(GtkWidget *self, main_window *widgets) { + yon_ubl_status_box_render(STR_DEL_TABLE ,BACKGROUND_IMAGE_SUCCESS_TYPE); + GtkTreeIter iter; + char *name; + GtkTreeModel *list_s = GTK_TREE_MODEL(main_config.list); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->treeViewMain)); + if(gtk_tree_selection_get_selected(selection,&list_s,&iter)){ + gtk_tree_model_get(list_s, &iter, 1, &name, -1); + } else { + yon_ubl_status_box_render(STR_DEL_TABLE, BACKGROUND_IMAGE_FAIL_TYPE); + } +} + +void tree_view_select(GtkWidget *self, main_window *widgets) { + GtkTreeIter iter; + char *name; + GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->treeViewMain)); + if (gtk_tree_selection_get_selected(selection, &list_s, &iter)){ + int installed=0; + gtk_tree_model_get(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->treeViewMain)),&iter,0,&installed,-1); + if (installed==1){ + gtk_widget_set_sensitive(widgets->btnAdd,0); + gtk_widget_set_sensitive(widgets->btnDelQuotas,1); + } else { + gtk_widget_set_sensitive(widgets->btnAdd,1); + gtk_widget_set_sensitive(widgets->btnDelQuotas,0); + } + } +} + +void wrapper_tree_view_add(GtkWidget *self, main_window *widgets){ + yon_ubl_status_box_render(STR_QUOTAS_ADD, BACKGROUND_IMAGE_FAIL_TYPE); + add_show(NULL, glade_path); +} + +void tree_view_add(int index) { + yon_char_parsed_append(main_config.type_quota, &main_config.size_tree_view, add_get_quota_object()); + char* text = " "; + yon_char_parsed_append(main_config.quota_volume, &main_config.size_tree_view, text ); + yon_char_parsed_append(main_config.soft_raw_limit, &main_config.size_tree_view, add_get_soft()); + yon_char_parsed_append(main_config.hard_raw_limit, &main_config.size_tree_view, add_get_hard()); + yon_char_parsed_append(main_config.swap, &main_config.size_tree_view, add_get_limit_swap()); + yon_char_parsed_append(main_config.cpu_limit, &main_config.size_tree_view, add_get_limit_cpu()); + yon_char_parsed_append(main_config.i_o_limit_read, &main_config.size_tree_view, add_get_read_device()); + yon_char_parsed_append(main_config.i_o_limit_write, &main_config.size_tree_view, add_get_write_device()); + GtkTreeIter iter; + gtk_list_store_append(main_config.list,&iter); + gtk_list_store_set(main_config.list,&iter,main_config.type_quota[index], + main_config.quota_volume[index], + main_config.soft_raw_limit[index], + main_config.hard_raw_limit[index], + main_config.swap[index], + main_config.cpu_limit[index], + main_config.i_o_limit_read[index], + main_config.i_o_limit_write[index]); +} + +void config_data_append(int index) { + if (index == -1) { + + } + else { + + } +} + +/* +void yon_gtk_list_store_fill_with_proprietaries(GtkListStore *list){ + if(videoconfig.proprietary){ + dictionary *dict=NULL; + gtk_list_store_clear(videoconfig.list); + gtk_list_store_clear(videoconfig.list2); + int inssize=0; + config_str installed=yon_config_load(get_proprietary_installed_command,&inssize); + for (int i=0;idata,&size,";"); + if (strcmp(str[0],"")!=0&&str[0]){ + gtk_list_store_append(videoconfig.list,&iter); + gtk_list_store_set(videoconfig.list,&iter,1,str[0],2,str[1],3,str[2],4,_(str[3]),5,_(str[4]),-1); + if (yon_char_parsed_check_exist(installed,inssize,str[0])!=-1) + gtk_list_store_set(videoconfig.list,&iter,0,1,-1); + } + else{ + gtk_list_store_append(videoconfig.list2,&iter); + gtk_list_store_set(videoconfig.list2,&iter,1,str[0],2,str[1],3,str[2],4,_(str[3]),5,_(str[4]),-1); + if (yon_char_parsed_check_exist(installed,inssize,str[1])!=-1){ + gtk_list_store_set(videoconfig.list2,&iter,0,1,-1); + } + } + } + } +} +*/ + + void main_visible_columns(GtkWidget *self) { gboolean *flags_filters = filters_get_flag(); gtk_tree_view_column_set_visible(widgets->tvc0, flags_filters[0]); @@ -273,13 +400,16 @@ void main_event(main_window *widgets) { g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),NULL); g_signal_connect(G_OBJECT(widgets->btnShowFilters),"clicked",G_CALLBACK(wrapper_filters_show), NULL); - g_signal_connect(G_OBJECT(widgets->btnAdd),"clicked",G_CALLBACK(add_show), glade_path); + g_signal_connect(G_OBJECT(widgets->btnAdd),"clicked",G_CALLBACK(wrapper_tree_view_add), widgets); g_signal_connect(G_OBJECT(widgets->btnEdit),"clicked",G_CALLBACK(edit_show), glade_path); g_signal_connect(G_OBJECT(widgets->btnInfo),"clicked",G_CALLBACK(info_show), glade_path); g_signal_connect(G_OBJECT(widgets->btnUpdateDispatcher),"clicked",G_CALLBACK(main_update_dispatcher), NULL); g_signal_connect(G_OBJECT(widgets->btnMainShowAllEmpty), "toggled", G_CALLBACK(main_update_processes), NULL); g_signal_connect(G_OBJECT(widgets->btnMainShowCoreStream), "toggled", G_CALLBACK(main_update_processes), NULL); g_signal_connect(G_OBJECT(widgets->cbtMainInfo),"changed",G_CALLBACK(main_update_information), NULL); + g_signal_connect(G_OBJECT(widgets->cbtMainInfoLevel2),"changed",G_CALLBACK(main_cbx_2_event), NULL); + g_signal_connect(G_OBJECT(widgets->btnDelQuotas), "clicked", G_CALLBACK(tree_view_delete), widgets); + g_signal_connect(G_OBJECT(widgets->treeViewMain), "cursor-changed", G_CALLBACK(tree_view_select), widgets); /* g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(),NULL); g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(),NULL); @@ -384,6 +514,7 @@ int main(int argc, char *argv[]){ main_window *widgets = setup_window(); + main_update_information(); filters_init_flag(); filters_setup_window(glade_path); add_setup_window(glade_path); diff --git a/source/ubl-settings-resourcequota.h b/source/ubl-settings-resourcequota.h index 6d967dc..701c8de 100644 --- a/source/ubl-settings-resourcequota.h +++ b/source/ubl-settings-resourcequota.h @@ -51,6 +51,19 @@ typedef struct { int lock_save_local; int lock_save_global; int lock_load_global; + + GtkListStore *list; + GtkListStore *list2; + render_data status_render; + config_str type_quota; + config_str quota_volume; + config_str soft_raw_limit; + config_str hard_raw_limit; + config_str swap; + config_str cpu_limit; + config_str i_o_limit_read; + config_str i_o_limit_write; + int size_tree_view; } config; typedef struct { @@ -65,6 +78,7 @@ typedef struct { GtkTreeViewColumn *tvc6; GtkTreeViewColumn *tvc7; + GtkWidget *btnDelQuotas; GtkWidget *cbtMainInfoLevel2; GtkWidget *cbtMainInfo; GtkWidget *vteProcesses; @@ -120,9 +134,9 @@ typedef struct { GtkWidget *CloseButton; GtkWidget *AcceptButton; + } documentation_confirmation_window; - main_window *setup_window(); void main_update_processes(); void config_init(); @@ -133,4 +147,10 @@ void main_localization(main_window *widgets); void main_visible_columns(); void wrapper_filters_show(GtkWidget *self); void main_update_dispatcher(); -void main_update_information(); \ No newline at end of file +void main_update_information(); +void main_fill_combo_box_text(GtkWidget *cbt, config_str list_data, int size); +void main_cbx_2_event(); +void tree_view_delete(GtkWidget *self, main_window *widgets); +void tree_view_select(GtkWidget *self, main_window *widgets); +void tree_view_add(int index); +void wrapper_tree_view_add(GtkWidget *self, main_window *widgets); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index e80897e..2bc0e69 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -29,4 +29,7 @@ #define GLOBAL_LOCAL_SAVE_SUCCESS _("Local and global configuration saving succseeded.") #define GLOBAL_SAVE_SUCCESS _("Global configuration saving succseeded.") -#define LOCAL_SAVE_SUCCESS _("Local configuration saving succseeded.") \ No newline at end of file +#define LOCAL_SAVE_SUCCESS _("Local configuration saving succseeded.") +#define STR_DEL_TABLE _("Quota deleted") +#define STR_NO_SELECT_TABLE _("Quota deleted") +#define STR_QUOTAS_ADD _("Quota deleted") \ No newline at end of file diff --git a/source/ubl-utils.c b/source/ubl-utils.c index ba842df..a6fdafe 100644 --- a/source/ubl-utils.c +++ b/source/ubl-utils.c @@ -369,6 +369,87 @@ char *yon_char_divide(char *source, int dividepos) return cut; } +config_str philos_list_user(int* size) { + char* str_uid_min = "UID_MIN"; + char* str_uid_max = "UID_MAX"; + unsigned short uid_min = philos_read_uid_min_max(file_source_login_min_max, str_uid_min); + unsigned short uid_max = philos_read_uid_min_max(file_source_login_min_max, str_uid_max); + config_str str_users = malloc(1); + while (1) { + errno = 0; // so we can distinguish errors from no more entries + struct passwd* entry = getpwent(); + if (!entry) { + if (errno) { + return str_users; + } + break; + } + if ((entry->pw_uid >= uid_min && entry->pw_uid < uid_max) || entry->pw_uid == 0) { + str_users = yon_char_parsed_append(str_users, size, entry->pw_name); + } + } + endpwent(); + return str_users; +} + +unsigned short philos_read_uid_min_max(char* filename, char* search) { + int uid = 0; + char* remove_tab = "\t"; + char* remove_space = " "; + char* search_uid_min = "UID_MIN"; + int buff_size = 255; + char* line = g_malloc0(buff_size); + char* search_true = yon_char_get_augumented("SYS_", search); + FILE *fp = fopen(filename, "r"); + if(fp) { + while((fgets(line, buff_size, fp)) != NULL) { + try{ + if (yon_char_find_count(line, search) != 0 && yon_char_find_count(line, search_true) == 0) { + line = philos_str_remove(line, search); + line = philos_str_remove(line, remove_space); + line = philos_str_remove(line, remove_tab); + uid = atoi(line); + + } + } + catch (...) { + if (yon_char_find_count(search, search_uid_min) != 0){ + uid = 1000; + } + else{ + uid = 65534; + } + } + } + } + else{ + if (yon_char_find_count(search, search_uid_min) != 0) { + uid = 1000; + } + else{ + uid = 65534; + } + } + fclose(fp); + free(line); + free(search_true); + return uid; + +} + +char* philos_str_remove(char *str, const char *sub) { + size_t len = strlen(sub); + if (len > 0) { + char *p = str; + size_t size = 0; + while ((p = strstr(p, sub)) != NULL) { + size = (size == 0) ? (p - str) + strlen(p + len) + 1 : size - len; + memmove(p, p + len, size - (p - str)); + } + } + return str; +} + int yon_char_find_count(char *source, char *find){ char *working_string=yon_char_new(source); int i=0; @@ -379,7 +460,6 @@ int yon_char_find_count(char *source, char *find){ if(strstr(rtn[j],find)) i++; } - printf("%d\n",i); return i; } @@ -546,6 +626,18 @@ config_str yon_char_parsed_new (config_str old, int *old_size, ...){ return new_parsed; } +/**config_str yon_char_parsed_append(config_str parsed, int *size, char *string) + * [EN] + * Adds [string] at the end of [parsed] string array of [size] length. + * [RU] + * Добавляет строку [string] в конец массива строк [parsed] с длинной [size]. +*/ +config_str yon_char_parsed_append(config_str parsed, int *size, char *string){ + config_str new_parsed=realloc(parsed,(*size+1)*sizeof(char*)); + new_parsed[(*size)]=yon_char_new(string); + (*size)++; + return new_parsed; +} // parsing functions @@ -836,7 +928,7 @@ void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *en vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL); vte_terminal_set_pty(VTE_TERMINAL(terminal),pty); - char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",command," ; sleep 5;exit 0","\n",NULL); + char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",command,"\n",NULL); if(endwork_function) g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument); vte_terminal_spawn_async(VTE_TERMINAL(terminal), @@ -868,6 +960,26 @@ void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *en gtk_widget_show_all(terminal); } +char* philos_get_size_bite(GtkWidget* chk_button, GtkWidget* spin, GtkWidget* combo_box_text) { + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_button))) { + char* size_prifics = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo_box_text)); + int size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin)); + char* str_size_bite = yon_char_from_int(size_bite); + char* str_size_bute = yon_char_unite(str_size_bite, " ", str_size_bite, NULL); + return str_size_bute; + } + else { + char* str = (char*)malloc(sizeof(char*)*2); + str[0] = '-'; + str[1] = '\0'; + return str; + } +} +void philos_fill_combo_box_text(GtkWidget *cbt, config_str list_data, int size) { + for (int index = 0; index < size; index++) { + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cbt), list_data[index]); + } +} #endif int yon_gtk_combo_box_fill(GtkWidget *combo, config_str parameters,int size){ diff --git a/source/ubl-utils.h b/source/ubl-utils.h index 98247ae..8965527 100644 --- a/source/ubl-utils.h +++ b/source/ubl-utils.h @@ -11,7 +11,8 @@ #include #include #include - +#include +#include #include "ubl-settings-resourcequota-cm.h" #ifdef WEBKIT_FOUND #include @@ -30,6 +31,11 @@ #define yon_ubl_save_global_config(command) yon_config_save(command) #define yon_ubl_save_local_config(command) yon_config_save(command) +#define try bool __HadError=false; +#define catch(x) ExitJmp:if(__HadError) +#define throw(x) {__HadError=true;goto ExitJmp;} +#define file_source_login_min_max "/etc/login.defs" + typedef enum { #ifdef __GTK_H__ @@ -111,7 +117,7 @@ dictionary *yon_dictionary_get_nth(dictionary *dict, int place); void *yon_dictionary_free_all(dictionary *dictionary,void (data_manipulation)(void*)); // char functions - +char* philos_str_remove(char *str, const char *sub); char *yon_char_get_augumented(char *source, char *append); char *yon_char_new(char *chr); @@ -139,9 +145,11 @@ int yon_char_find_count(char *source, char *find); int yon_char_parsed_includes_char_parsed (config_str source, config_str to_check, int source_size, int check_size); config_str yon_char_parsed_new (config_str old, int *old_size, ...); - +config_str yon_char_parsed_append(config_str parsed, int *size, char *string); // parsing functions +config_str philos_list_user(int* size); +unsigned short philos_read_uid_min_max(char* filename, char* search); apps *yon_apps_scan_and_parse_desktops(int *sizef); void yon_apps_sort(apps *applist, int size); @@ -173,6 +181,8 @@ int yon_launch(thread_output *thread); * */ void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument); +char* philos_get_size_bite(GtkWidget* chk_button, GtkWidget* spin, GtkWidget* combo_box_text); +void philos_fill_combo_box_text(GtkWidget *cbt, config_str list_data, int size); #endif /**yon_gtk_builder_get_widget(builder, widget_name) diff --git a/source/view_add.c b/source/view_add.c index 117e339..1bc5774 100644 --- a/source/view_add.c +++ b/source/view_add.c @@ -10,6 +10,9 @@ add_window *add_setup_window(char* glade_path) { add_widgets->btnSaveAddSave = yon_gtk_builder_get_widget(builder,"btnSaveAddSave"); add_widgets->btnAddCancel = yon_gtk_builder_get_widget(builder,"btnAddCancel"); + add_widgets->cbxAddQuotaObj = yon_gtk_builder_get_widget(builder,"cbxAddQuotaObj"); + add_widgets->cbxAddQuotaLevel2 = yon_gtk_builder_get_widget(builder,"cbxAddQuotaLevel2"); + add_widgets->cbtAddDevice = yon_gtk_builder_get_widget(builder,"cbtAddDevice"); add_widgets->lblCPULimitAdd = yon_gtk_builder_get_widget(builder,"lblCPULimitAdd"); add_widgets->spinCPULimitAdd = yon_gtk_builder_get_widget(builder,"spinCPULimitAdd"); add_widgets->chkCPULimitAdd = yon_gtk_builder_get_widget(builder,"chkCPULimitAdd"); @@ -60,6 +63,7 @@ void add_event(add_window *widgets) { g_signal_connect(G_OBJECT(widgets->chkCPULimitAdd), "toggled", G_CALLBACK(add_init_windows), NULL); g_signal_connect(G_OBJECT(widgets->chbAddRead), "toggled", G_CALLBACK(add_init_windows), NULL); g_signal_connect(G_OBJECT(widgets->chbAddWrite), "toggled", G_CALLBACK(add_init_windows), NULL); + g_signal_connect(G_OBJECT(widgets->cbxAddQuotaObj),"changed",G_CALLBACK(add_update_combo_box), NULL); } void add_destroy(GtkWidget *self) { @@ -87,6 +91,7 @@ add_window *get_widget_add() { } void add_show(GtkWidget *self, char* glade_path) { + add_update_combo_box(); if (add_widgets != NULL) { gtk_widget_show_all(add_widgets->Window); } @@ -94,5 +99,67 @@ void add_show(GtkWidget *self, char* glade_path) { add_setup_window(glade_path); gtk_widget_show_all(add_widgets->Window); } - +} + +char* add_get_select_device() { + return gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(add_widgets->cbtAddDevice)); +} +char* add_get_read_device() { + return philos_get_size_bite(add_widgets->chbAddRead, add_widgets->spiSevereRestrictionAdd, + add_widgets->cmSevereRestrictionAdd); +} +char* add_get_write_device() { + return philos_get_size_bite(add_widgets->chbAddWrite, add_widgets->spinAddRead, + add_widgets->cbtAddRead); +} +char* add_get_soft() { + return philos_get_size_bite(add_widgets->chkSoftRestrictionAdd, add_widgets->spinAddWrite, + add_widgets->cbtAddWrite); +} +char* add_get_hard() { + return philos_get_size_bite(add_widgets->chkSevereRestrictionAdd, add_widgets->spinSevereRestrictionAdd, + add_widgets->cmbSevereRestrictionAdd); +} +char* add_get_limit_cpu() { + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkCPULimitAdd))) { + int size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinCPULimitAdd)); + return yon_char_from_int(size_bite); + } + else { + char* str = (char*)malloc(sizeof(char*)*2); + str[0] = '-'; + str[1] = '\0'; + return str; + } +} +char* add_get_limit_swap() { + return philos_get_size_bite(add_widgets->spinPaddingFLAdd, add_widgets->spinPaddingFLAdd, + add_widgets->spinPaddingFLAdd); +} +char* add_get_quota_object() { + return gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(add_widgets->cbxAddQuotaObj)); +} +void add_update_combo_box() { + int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxAddQuotaObj)); + char* cmd = NULL; + config_str fill_cmb_2 = NULL; + int size = 0; + if (menu_id == 0) { + fill_cmb_2 = philos_list_user(&size); + + } + else if (menu_id == 1) { + + } + else if (menu_id == 2) { + + } + else if (menu_id == 3) { + + } + if (menu_id >= 0) { + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(add_widgets->cbxAddQuotaLevel2)); + philos_fill_combo_box_text(add_widgets->cbxAddQuotaLevel2, fill_cmb_2, size); + // yon_terminal_integrated_launch(widgets->vteProcesses, cmd, NULL, NULL); + } } \ No newline at end of file diff --git a/source/view_add.h b/source/view_add.h index 7e84477..82b084b 100644 --- a/source/view_add.h +++ b/source/view_add.h @@ -41,6 +41,10 @@ typedef struct { GtkWidget* chkCPULimitAdd; GtkWidget* spinCPULimitAdd; GtkWidget* lblCPULimitAdd; + + GtkWidget* cbtAddDevice; + GtkWidget* cbxAddQuotaObj; + GtkWidget* cbxAddQuotaLevel2; } add_window; // Функции @@ -53,4 +57,13 @@ void add_show(GtkWidget *self, char* glade_path); void add_destroy(GtkWidget *self); void add_set_active_widgets(GtkWidget *self, GtkWidget *entry, GtkWidget *label); void add_init_windows(); +void add_update_combo_box(); +char* add_get_select_device(); +char* add_get_read_device(); +char* add_get_write_device(); +char* add_get_soft(); +char* add_get_hard(); +char* add_get_limit_cpu(); +char* add_get_limit_swap(); +char* add_get_quota_object(); #endif \ No newline at end of file diff --git a/ubl-settings-resourcequota.glade b/ubl-settings-resourcequota.glade index 7ca2134..f38575d 100644 --- a/ubl-settings-resourcequota.glade +++ b/ubl-settings-resourcequota.glade @@ -945,7 +945,7 @@ limit - + True True True @@ -1926,7 +1926,7 @@ limit - + True False 5 @@ -1935,6 +1935,14 @@ limit 5 5 5 + 0 + 0 + + User + Group + Process + Slice + True @@ -1943,7 +1951,7 @@ limit - + True False 5 @@ -2440,7 +2448,7 @@ limit - + True True 5 diff --git a/ubl-settings-resourcequota_ru.po b/ubl-settings-resourcequota_ru.po index f57418a..f75a052 100644 --- a/ubl-settings-resourcequota_ru.po +++ b/ubl-settings-resourcequota_ru.po @@ -20,6 +20,9 @@ msgstr "" #: source/ubl-strings.h:8 #: source/ubl-strings.h:1 +msgid "Quota deleted" +msgstr "Квота удалена" + msgid "User" msgstr "Пользователь"