From 03e264fbb6add5e222d425299147b03fcd310cd3 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Mon, 29 May 2023 15:48:57 +0600 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20=D0=B2=20?= =?UTF-8?q?=D0=BE=D0=BA=D0=BD=D0=B0=D1=85=20=D1=80=D0=B5=D0=B4=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B8?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 4 +- source/CMakeLists.txt | 6 +- source/my_device.c | 58 ++++++++++++ source/my_device.h | 20 ++++ ...ings-resourcequota.h.in => ubl-cmake.h.in} | 0 source/ubl-settings-resourcequota-cm.h | 0 source/ubl-settings-resourcequota.c | 2 + source/ubl-settings-resourcequota.h | 3 +- source/ubl-utils.c | 25 ++++- source/ubl-utils.h | 9 +- source/view_add.c | 94 ++++++++++++++++++- source/view_add.h | 4 +- source/view_edit.c | 93 +++++++++++++++++- source/view_edit.h | 7 +- ubl-settings-resourcequota.glade | 10 +- 15 files changed, 317 insertions(+), 18 deletions(-) create mode 100644 source/my_device.c create mode 100644 source/my_device.h rename source/{ubl-settings-resourcequota.h.in => ubl-cmake.h.in} (100%) delete mode 100644 source/ubl-settings-resourcequota-cm.h diff --git a/Makefile b/Makefile index e697951..6b214de 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ all: init build init: @echo "Initialize ..."; \ - sed -r "s/(version_application = ).*/\1\"$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2)\";/" -i source/view/ubl-settings-resourcequota.h; \ + sed -r "s/(version_application = ).*/\1\"$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2)\";/" -i source/ubl-settings-resourcequota.h; \ echo "-- Build path: ${CMAKE_BUILD_DIR}" depend: @@ -96,7 +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 + @cc source/my_device.c source/my_device.h source/filters.c source/filters.h source/ubl-cmake.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/CMakeLists.txt b/source/CMakeLists.txt index 001e1b1..b61aca0 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -24,7 +24,7 @@ if(WEBKIT_LIBRARIES_FOUND) add_definitions(${WEBKIT_CFLAGS_OTHER}) endif() -configure_file(ubl-settings-resourcequota.h.in ubl-settings-resourcequota-cm.h) +configure_file(ubl-cmake.h.in ubl-cmake.h) #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -std=c++2a") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -lm") @@ -36,6 +36,8 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin set(SOURCE_FILES ubl-settings-resourcequota.c ubl-settings-resourcequota.h + my_device.c + my_device.h filters.c filters.h view_add.c @@ -45,7 +47,7 @@ set(SOURCE_FILES ubl-strings.h ubl-utils.h ubl-utils.c - ubl-settings-resourcequota-cm.h) + ubl-cmake.h) set(LIBRARIES ${GTK3_LIBRARIES} diff --git a/source/my_device.c b/source/my_device.c new file mode 100644 index 0000000..995306d --- /dev/null +++ b/source/my_device.c @@ -0,0 +1,58 @@ +#include "my_device.h" + +device_config obj_device_config; + +device_config* get_device_cfg() { + return &obj_device_config; +} + +void device_disk_parsed() { + char* cmd = "lsblk --fs --raw --output PATH,FSTYPE --exclude 7,11,253"; + int size = 0; + char** responce = yon_config_load(cmd, &size); + char* disk = NULL; + obj_device_config.size_disk = 0; + char* split_simvol = " "; + for (int index = 1; index < size; index++ ) { + disk = yon_char_divide_search(responce[index], "\n", -1); + if (yon_char_find_count(disk, " ") != 0) { + char* name_disk = yon_char_divide_search(disk, " ", -1); + obj_device_config.name_disk = yon_char_parsed_append(obj_device_config.name_disk, &obj_device_config.size_disk, name_disk); + obj_device_config.size_disk--; + obj_device_config.file_system = yon_char_parsed_append(obj_device_config.file_system, &obj_device_config.size_disk, disk); + obj_device_config.size_disk--; + obj_device_config.mounted = yon_char_parsed_append(obj_device_config.mounted, &obj_device_config.size_disk, ""); + obj_device_config.size_disk--; + obj_device_config.type_dick = yon_char_parsed_append(obj_device_config.type_dick, &obj_device_config.size_disk, ""); + obj_device_config.size_disk--; + char* description_disk = yon_char_unite(name_disk, + split_simvol, + disk, + NULL); + obj_device_config.description_disk = yon_char_parsed_append(obj_device_config.description_disk, &obj_device_config.size_disk, description_disk); + free(description_disk); + free(name_disk); + } + else { + obj_device_config.name_disk = yon_char_parsed_append(obj_device_config.name_disk, &obj_device_config.size_disk, disk); + obj_device_config.size_disk--; + obj_device_config.file_system = yon_char_parsed_append(obj_device_config.file_system, &obj_device_config.size_disk, ""); + obj_device_config.size_disk--; + obj_device_config.mounted = yon_char_parsed_append(obj_device_config.mounted, &obj_device_config.size_disk, ""); + obj_device_config.size_disk--; + obj_device_config.type_dick = yon_char_parsed_append(obj_device_config.type_dick, &obj_device_config.size_disk, ""); + obj_device_config.size_disk--; + char* description_disk = yon_char_unite(disk, + split_simvol, + NULL); + obj_device_config.description_disk = yon_char_parsed_append(obj_device_config.description_disk, &obj_device_config.size_disk, description_disk); + free(description_disk); + } + } + +} +void device_fill_disk(GtkWidget* combo_box_text) { + for (int index = 0; index < obj_device_config.size_disk; index++) { + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box_text), obj_device_config.description_disk[index]); + } +} \ No newline at end of file diff --git a/source/my_device.h b/source/my_device.h new file mode 100644 index 0000000..4b695a0 --- /dev/null +++ b/source/my_device.h @@ -0,0 +1,20 @@ +#ifndef MY_DEVICE_H +#define MY_DEVICE_H +#include "ubl-utils.h" +#include +#include +#include +typedef struct { + char** name_disk; + char** file_system; + char** mounted; + char** type_dick; + char** description_disk; + int size_disk; +} device_config; + +void device_disk_parsed(); +device_config* get_device_cfg(); +void device_fill_disk(GtkWidget* combo_box_text); + +#endif \ No newline at end of file diff --git a/source/ubl-settings-resourcequota.h.in b/source/ubl-cmake.h.in similarity index 100% rename from source/ubl-settings-resourcequota.h.in rename to source/ubl-cmake.h.in diff --git a/source/ubl-settings-resourcequota-cm.h b/source/ubl-settings-resourcequota-cm.h deleted file mode 100644 index e69de29..0000000 diff --git a/source/ubl-settings-resourcequota.c b/source/ubl-settings-resourcequota.c index 70a95a8..202051b 100644 --- a/source/ubl-settings-resourcequota.c +++ b/source/ubl-settings-resourcequota.c @@ -562,6 +562,7 @@ int main(int argc, char *argv[]){ } } gtk_init(&argc,&argv); + device_disk_parsed(); main_window *widgets = setup_window(); main_update_information(); filters_init_flag(); @@ -573,6 +574,7 @@ int main(int argc, char *argv[]){ event_all(widgets); main_event(widgets); + yon_ubl_header_setup(widgets->HeadOverlay,widgets->HeadBox,widgets->HeadImage,banner_path); if (yon_ubl_status_box_setup(widgets->StatusIcon,widgets->StatusBox,widgets->StatusLabel)) diff --git a/source/ubl-settings-resourcequota.h b/source/ubl-settings-resourcequota.h index 524f388..87e34e8 100644 --- a/source/ubl-settings-resourcequota.h +++ b/source/ubl-settings-resourcequota.h @@ -9,10 +9,11 @@ #include #include #include -#include "ubl-settings-resourcequota-cm.h" +#include "ubl-cmake.h" #include "view_add.h" #include "filters.h" #include "view_edit.h" +#include "my_device.h" diff --git a/source/ubl-utils.c b/source/ubl-utils.c index ac2ca3c..1e406aa 100644 --- a/source/ubl-utils.c +++ b/source/ubl-utils.c @@ -391,6 +391,26 @@ config_str philos_list_user(int* size) { endpwent(); return str_users; } + +char* philos_str_size_pow_byte(GtkWidget *combo_box_text) { + int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_box_text)); + if (menu_id == 0) { + return "K"; + } + else if (menu_id == 1) { + return "M"; + } + else if (menu_id == 2) { + return "G"; + } + else if (menu_id == 3) { + return "T"; + } + else { + return " "; + } +} + config_str philos_list_group(int* size) { char* str_uid_min = "UID_MIN"; char* str_uid_max = "UID_MAX"; @@ -552,7 +572,10 @@ char *yon_char_replace(char *source, char *find, char*replace){ return source; } } - +void philos_split_size_memory(char* str_value, int* size, char* pow_memory) { + // pow_memory = yon_char_new(str_value); + (*size) = atoi(yon_char_divide_search(pow_memory, " ", -1)); +} /**[EN] * char **yon_char_parse(char *parameters, int *size, char *divider) * Parses string [parameters], divided by [divider], diff --git a/source/ubl-utils.h b/source/ubl-utils.h index b804295..90c540c 100644 --- a/source/ubl-utils.h +++ b/source/ubl-utils.h @@ -13,7 +13,7 @@ #include #include #include -#include "ubl-settings-resourcequota-cm.h" +#include "ubl-cmake.h" #ifdef WEBKIT_FOUND #include #endif @@ -134,6 +134,8 @@ char *yon_char_from_int(int int_to_convert); char *yon_char_replace(char *source, char *find, char*replace); +void philos_split_size_memory(char* str_value, int* size, char* pow_memory); + char **yon_char_parse(char *parameters, int *size, char *divider); char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete); @@ -149,8 +151,13 @@ config_str yon_char_parsed_append(config_str parsed, int *size, char *string); // parsing functions config_str philos_list_user(int* size); + +char* philos_str_size_pow_byte(GtkWidget *combo_box_text); + config_str philos_list_group(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); diff --git a/source/view_add.c b/source/view_add.c index ea780f5..98ff006 100644 --- a/source/view_add.c +++ b/source/view_add.c @@ -2,6 +2,7 @@ add_window *add_widgets = NULL; + add_window *add_setup_window(char* glade_path) { if (add_widgets == NULL) { add_widgets = malloc(sizeof(add_window)); @@ -10,6 +11,7 @@ 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->entryAddCmd = yon_gtk_builder_get_widget(builder,"entryAddCmd"); 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"); @@ -36,7 +38,8 @@ add_window *add_setup_window(char* glade_path) { add_widgets->spinAddWrite = yon_gtk_builder_get_widget(builder,"spinAddWrite"); add_widgets->chbAddWrite = yon_gtk_builder_get_widget(builder,"chbAddWrite"); add_widgets->cbtAddWrite = yon_gtk_builder_get_widget(builder,"cbtAddWrite"); - + + device_fill_disk(add_widgets->cbtAddDevice); add_event(add_widgets); add_init_windows(); add_localization(add_widgets); @@ -52,6 +55,7 @@ void add_init_windows() { add_set_active_widgets(add_widgets->chkCPULimitAdd, add_widgets->spinCPULimitAdd, add_widgets->lblCPULimitAdd); add_set_active_widgets(add_widgets->chbAddWrite, add_widgets->spinAddWrite, add_widgets->cbtAddWrite); add_set_active_widgets(add_widgets->chbAddRead, add_widgets->spinAddRead, add_widgets->cbtAddRead); + add_generate_cmd(); } void add_event(add_window *widgets) { @@ -64,7 +68,21 @@ void add_event(add_window *widgets) { 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); -} + + g_signal_connect(G_OBJECT(widgets->spiSevereRestrictionAdd),"value-changed",G_CALLBACK(add_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->spinSevereRestrictionAdd),"value-changed",G_CALLBACK(add_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->spinPaddingFLAdd),"value-changed",G_CALLBACK(add_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->spinCPULimitAdd),"value-changed",G_CALLBACK(add_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->spinAddRead),"value-changed",G_CALLBACK(add_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->spinAddWrite),"value-changed",G_CALLBACK(add_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->cmSevereRestrictionAdd),"changed",G_CALLBACK(add_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->cmbSevereRestrictionAdd),"changed",G_CALLBACK(add_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->cmbPaddingFLAdd),"changed",G_CALLBACK(add_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->cbtAddRead),"changed",G_CALLBACK(add_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->cbtAddWrite),"changed",G_CALLBACK(add_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->cbtAddDevice),"changed",G_CALLBACK(add_generate_cmd), NULL); + +} void add_destroy(GtkWidget *self) { add_widgets = NULL; @@ -187,4 +205,74 @@ void add_update_combo_box() { 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 +} +void add_generate_cmd() { + char* str_cmd = ""; + char* split_simvol = g_malloc0(sizeof(char)*2); + int size_bite = 0; + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkSoftRestrictionAdd))) { + size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spiSevereRestrictionAdd)); + str_cmd = yon_char_unite(str_cmd, + "MemoryHigh=", + yon_char_from_int(size_bite), + philos_str_size_pow_byte(add_widgets->cmSevereRestrictionAdd), NULL); + split_simvol[0] = ','; + split_simvol[1] = '\0'; + } + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkSevereRestrictionAdd))) { + size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinSevereRestrictionAdd)); + str_cmd = yon_char_unite(str_cmd, split_simvol, + "MemoryMax=", + yon_char_from_int(size_bite), + philos_str_size_pow_byte(add_widgets->cmbSevereRestrictionAdd), NULL); + split_simvol[0] = ','; + split_simvol[1] = '\0'; + } + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkPaddingFLAdd))) { + size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinPaddingFLAdd)); + str_cmd = yon_char_unite(str_cmd, split_simvol, + "MemorySwapMax=", + yon_char_from_int(size_bite), + philos_str_size_pow_byte(add_widgets->cmbPaddingFLAdd), NULL); + split_simvol[0] = ','; + split_simvol[1] = '\0'; + } + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkCPULimitAdd))) { + size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinCPULimitAdd)); + str_cmd = yon_char_unite(str_cmd, split_simvol, + "CPUQuota=", + yon_char_from_int(size_bite), + "\%", NULL); + split_simvol[0] = ','; + split_simvol[1] = '\0'; + } + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chbAddRead))) { + int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbtAddDevice)); + if (menu_id != -1) { + size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinAddRead)); + str_cmd = yon_char_unite(str_cmd, split_simvol, + "IOReadBandwidthMax=\"", + get_device_cfg()->name_disk[menu_id], + " ", + yon_char_from_int(size_bite), + philos_str_size_pow_byte(add_widgets->cbtAddRead),"\"", NULL); + } + split_simvol[0] = ','; + split_simvol[1] = '\0'; + + } + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chbAddWrite))) { + int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbtAddDevice)); + if (menu_id != -1) { + size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinAddWrite)); + str_cmd = yon_char_unite(str_cmd, split_simvol, + "IOWriteBandwidthMax=\"", + get_device_cfg()->name_disk[menu_id], + " ", + yon_char_from_int(size_bite), + philos_str_size_pow_byte(add_widgets->cbtAddWrite),"\"", NULL); + } + } + gtk_entry_set_text(GTK_ENTRY(add_widgets->entryAddCmd), str_cmd); + free(split_simvol); +} diff --git a/source/view_add.h b/source/view_add.h index b295566..ea25419 100644 --- a/source/view_add.h +++ b/source/view_add.h @@ -11,6 +11,7 @@ #include #include #include +#include "my_device.h" // Переменные typedef struct { @@ -18,6 +19,7 @@ typedef struct { GtkWidget* btnSaveAddSave; GtkWidget* btnAddCancel; + GtkWidget* entryAddCmd; GtkWidget* chbAddRead; GtkWidget* spinAddRead; GtkWidget* cbtAddRead; @@ -46,7 +48,6 @@ typedef struct { GtkWidget* cbxAddQuotaObj; GtkWidget* cbxAddQuotaLevel2; } add_window; - // Функции add_window *add_setup_window(char* glade_path); void add_event(add_window *widgets); @@ -67,4 +68,5 @@ char* add_get_limit_cpu(); char* add_get_limit_swap(); char* add_get_quota_object(); char* add_get_select_device_to_level_2(); +void add_generate_cmd(); #endif \ No newline at end of file diff --git a/source/view_edit.c b/source/view_edit.c index 410f4ba..b620c62 100644 --- a/source/view_edit.c +++ b/source/view_edit.c @@ -34,6 +34,8 @@ edit_window *edit_setup_window(char* glade_path){ edit_widgets->spinEditWrite = yon_gtk_builder_get_widget(builder,"spinEditWrite"); edit_widgets->chbEditWrite = yon_gtk_builder_get_widget(builder,"chbEditWrite"); edit_widgets->cbtEditWrite = yon_gtk_builder_get_widget(builder,"cbtEditWrite"); + edit_widgets->entryEditCmd = yon_gtk_builder_get_widget(builder,"entryEditCmd"); + device_fill_disk(edit_widgets->cbtEditDevice); edit_event(edit_widgets); edit_init_windows(); edit_localization(edit_widgets); @@ -50,6 +52,19 @@ void edit_event(edit_window *widgets) { g_signal_connect(G_OBJECT(widgets->chkCPULimitEdit), "toggled", G_CALLBACK(edit_init_windows), NULL); g_signal_connect(G_OBJECT(widgets->chbEditRead), "toggled", G_CALLBACK(edit_init_windows), NULL); g_signal_connect(G_OBJECT(widgets->chbEditWrite), "toggled", G_CALLBACK(edit_init_windows), NULL); + + g_signal_connect(G_OBJECT(widgets->spiSevereRestrictionEdit),"value-changed",G_CALLBACK(edit_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->spinSevereRestrictionEdit),"value-changed",G_CALLBACK(edit_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->spinPaddingFLEdit),"value-changed",G_CALLBACK(edit_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->spinCPULimitEdit),"value-changed",G_CALLBACK(edit_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->spinEditRead),"value-changed",G_CALLBACK(edit_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->spinEditWrite),"value-changed",G_CALLBACK(edit_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->cmSevereRestrictionEdit),"changed",G_CALLBACK(edit_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->cmbSevereRestrictionEdit),"changed",G_CALLBACK(edit_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->cmbPaddingFLEdit),"changed",G_CALLBACK(edit_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->cbtEditRead),"changed",G_CALLBACK(edit_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->cbtEditWrite),"changed",G_CALLBACK(edit_generate_cmd), NULL); + g_signal_connect(G_OBJECT(widgets->cbtEditDevice),"changed",G_CALLBACK(edit_generate_cmd), NULL); } void edit_destroy(GtkWidget *self) { @@ -81,6 +96,7 @@ void edit_show(GtkWidget *self, char* glade_path) { } void edit_init_windows() { + edit_generate_cmd(); edit_set_active_widgets(edit_widgets->chkSoftRestrictionEdit, edit_widgets->spiSevereRestrictionEdit, edit_widgets->cmSevereRestrictionEdit); edit_set_active_widgets(edit_widgets->chkSevereRestrictionEdit, edit_widgets->spinSevereRestrictionEdit, edit_widgets->cmbSevereRestrictionEdit); edit_set_active_widgets(edit_widgets->chkPaddingFLEdit, edit_widgets->spinPaddingFLEdit, edit_widgets->cmbPaddingFLEdit); @@ -159,13 +175,82 @@ void edit_set_hard(char* str_value) { } void edit_set_limit_cpu(char* str_value) { - if (str_value != '-') { // Баг - int i_value = ; + char* search = "-"; + if (yon_char_find_count(str_value, search) != 0) { gtk_spin_button_set_digits(GTK_SPIN_BUTTON(edit_widgets->spinCPULimitEdit), atoi(str_value)); } } void edit_set_limit_swap(char* str_value) { +} +void edit_generate_cmd() { + char* str_cmd = ""; + char* split_simvol = g_malloc0(sizeof(char)*2); + int size_bite = 0; + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkSoftRestrictionEdit))) { + size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spiSevereRestrictionEdit)); + str_cmd = yon_char_unite(str_cmd, + "MemoryHigh=", + yon_char_from_int(size_bite), + philos_str_size_pow_byte(edit_widgets->cmSevereRestrictionEdit), NULL); + split_simvol[0] = ','; + split_simvol[1] = '\0'; + } + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkSevereRestrictionEdit))) { + size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinSevereRestrictionEdit)); + str_cmd = yon_char_unite(str_cmd, split_simvol, + "MemoryMax=", + yon_char_from_int(size_bite), + philos_str_size_pow_byte(edit_widgets->cmbSevereRestrictionEdit), NULL); + split_simvol[0] = ','; + split_simvol[1] = '\0'; + } + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkPaddingFLEdit))) { + size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinPaddingFLEdit)); + str_cmd = yon_char_unite(str_cmd, split_simvol, + "MemorySwapMax=", + yon_char_from_int(size_bite), + philos_str_size_pow_byte(edit_widgets->cmbPaddingFLEdit), NULL); + split_simvol[0] = ','; + split_simvol[1] = '\0'; + } + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkCPULimitEdit))) { + size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinCPULimitEdit)); + str_cmd = yon_char_unite(str_cmd, split_simvol, + "CPUQuota=", + yon_char_from_int(size_bite), + "\%", NULL); + split_simvol[0] = ','; + split_simvol[1] = '\0'; + } + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chbEditRead))) { + int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbtEditDevice)); + if (menu_id != -1) { + size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinEditRead)); + str_cmd = yon_char_unite(str_cmd, split_simvol, + "IOReadBandwidthMax=\"", + get_device_cfg()->name_disk[menu_id], + " ", + yon_char_from_int(size_bite), + philos_str_size_pow_byte(edit_widgets->cbtEditRead),"\"", NULL); + } + split_simvol[0] = ','; + split_simvol[1] = '\0'; + + } + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chbEditWrite))) { + int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbtEditDevice)); + if (menu_id != -1) { + size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinEditWrite)); + str_cmd = yon_char_unite(str_cmd, split_simvol, + "IOWriteBandwidthMax=\"", + get_device_cfg()->name_disk[menu_id], + " ", + yon_char_from_int(size_bite), + philos_str_size_pow_byte(edit_widgets->cbtEditWrite),"\"", NULL); + } + } + gtk_entry_set_text(GTK_ENTRY(edit_widgets->entryEditCmd), str_cmd); + free(split_simvol); +} - -} \ No newline at end of file diff --git a/source/view_edit.h b/source/view_edit.h index 280ce8a..05a8385 100644 --- a/source/view_edit.h +++ b/source/view_edit.h @@ -11,13 +11,15 @@ #include #include #include +#include "my_device.h" // Переменные typedef struct { GtkWidget* Window; GtkWidget* btnSaveEditSave; GtkWidget* btnEditCancel; - + + GtkWidget* entryEditCmd; GtkWidget* chbEditRead; GtkWidget* spinEditRead; GtkWidget* cbtEditRead; @@ -61,6 +63,7 @@ char* edit_get_soft(); char* edit_get_hard(); char* edit_get_limit_cpu(); char* edit_get_limit_swap(); +void edit_generate_cmd(); void wrapper_edit_show(); void edit_set_select_device(char* str_value); void edit_set_read_device(char* str_value); @@ -69,4 +72,6 @@ void edit_set_soft(char* str_value); void edit_set_hard(char* str_value); void edit_set_limit_cpu(char* str_value); void edit_set_limit_swap(char* str_value); + + #endif \ No newline at end of file diff --git a/ubl-settings-resourcequota.glade b/ubl-settings-resourcequota.glade index 87dd138..f16fa4c 100644 --- a/ubl-settings-resourcequota.glade +++ b/ubl-settings-resourcequota.glade @@ -843,6 +843,12 @@ True False + 5 + 5 + 5 + 5 + 5 + 5 True @@ -1124,7 +1130,7 @@ False 12 - + True True 5 @@ -2217,7 +2223,7 @@ False 12 - + True True 5