Merge pull request 'master' (#48) from YanTheKaller/ubl-settings-resourcequota:master into master

Reviewed-on: #48
master v2.31
Dmitry Razumov 2 years ago
commit 98bc50d165

4
.gitignore vendored

@ -6,3 +6,7 @@ ubl-settings-resourcequota
build/
compile
vgcore.*
*~*
*#*
terminal-commands/
.install.sh

@ -120,7 +120,7 @@ install: check uninstall
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/" "com.ublinux.${PKGNAME}.svg"
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.checked.svg"
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.warning.svg"
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.funnel.svg"
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.funnel-symbolic.svg"
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/applications/" "${PKGNAME}.desktop"
@install -Dm755 -t "${DESTDIR}${PREFIX}/bin/" "${CMAKE_BUILD_DIR}/${PKGNAME}"
@install -Dm644 "com.ublinux.${PKGNAME}.policy" "${DESTDIR}/usr/share/polkit-1/actions/com.ublinux.${PKGNAME}${PKGIDENT}.policy"

@ -2,6 +2,8 @@
<gresources>
<gresource prefix="/com/ublinux/ui">
<file>ubl-settings-resourcequota.glade</file>
<file>ubl-settings-resourcequota-filters.glade</file>
<file>ubl-settings-resourcequota-quota.glade</file>
</gresource>
<gresource prefix="/com/ublinux/css">
<file>ubl-settings-resourcequota.css</file>

@ -36,6 +36,8 @@ add_custom_target(GLADE ubl-settings-resourcequota.glade)
set(DEPENDFILES
../ubl-settings-resourcequota.glade
../ubl-settings-resourcequota-filters.glade
../ubl-settings-resourcequota-quota.glade
../gresource.xml
../ubl-settings-resourcequota-banner.png
../ubl-settings-resourcequota.css
@ -72,20 +74,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
view_add.h
view_edit.c
view_edit.h
ubl-strings.h
ubl-utils.h
ubl-utils.c
ubl-cmake.h
philos_utils.c
philos_utils.h
ubl-utils.h
${CMAKE_CURRENT_BINARY_DIR}/ubl-cmake.h
)

@ -1,90 +0,0 @@
#include "filters.h"
filters_window *filters_widgets = NULL;
gboolean flag_filters[8];
filters_window *filters_setup_window(char* glade_path){
if (filters_widgets == NULL) {
filters_widgets = malloc(sizeof(filters_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
filters_widgets->Window = yon_gtk_builder_get_widget(builder,"wndFilters");
filters_widgets->chbFilterTypeQouota = yon_gtk_builder_get_widget(builder,"chbFilterTypeQouota");
filters_widgets->chbQuotaVolume = yon_gtk_builder_get_widget(builder,"chbQuotaVolume");
filters_widgets->chbSoftLimit = yon_gtk_builder_get_widget(builder,"chbSoftLimit");
filters_widgets->chbHardLimit = yon_gtk_builder_get_widget(builder,"chbHardLimit");
filters_widgets->chbSwapFileLimit = yon_gtk_builder_get_widget(builder,"chbSwapFileLimit");
filters_widgets->chbIOLimitWrite = yon_gtk_builder_get_widget(builder,"chbIOLimitWrite");
filters_widgets->chbCPULimit = yon_gtk_builder_get_widget(builder,"chbCPULimit");
filters_widgets->chbIOLimitRead = yon_gtk_builder_get_widget(builder,"chbIOLimitRead");
filters_widgets->btnFiltersCancel = yon_gtk_builder_get_widget(builder,"btnFiltersCancel");
filters_widgets->btnFiltersSave = yon_gtk_builder_get_widget(builder,"btnFiltersSave");
filters_event(filters_widgets);
}
filters_set_flag();
return filters_widgets;
}
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->Window), "destroy", G_CALLBACK(filters_destroy), NULL);
}
void filters_destroy(GtkWidget *self) {
filters_widgets = NULL;
}
void filters_localization(filters_window *widgets) {
}
void filters_on_hide_subwindow(GtkWidget *self) {
gtk_widget_destroy(gtk_widget_get_toplevel(self));
filters_widgets = NULL;
}
filters_window *get_widget_filters() {
return filters_widgets;
}
void filters_show(GtkWidget *self, char* glade_path) {
if (filters_widgets != NULL) {
gtk_widget_show_all(filters_widgets->Window);
}
else {
filters_setup_window(glade_path);
gtk_widget_show_all(filters_widgets->Window);
}
}
gboolean* filters_get_flag() {
flag_filters[0] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterTypeQouota));
flag_filters[1] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbQuotaVolume));
flag_filters[2] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbSoftLimit));
flag_filters[3] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbHardLimit));
flag_filters[4] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbSwapFileLimit));
flag_filters[5] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbCPULimit));
flag_filters[6] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbIOLimitWrite));
flag_filters[7] = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filters_widgets->chbIOLimitRead));
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;
}
void filters_set_flag() {
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbFilterTypeQouota),flag_filters[0] );
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbQuotaVolume), flag_filters[1]);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbSoftLimit), flag_filters[2]);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbHardLimit), flag_filters[3]);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbSwapFileLimit), flag_filters[4]);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbCPULimit), flag_filters[5]);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbIOLimitWrite), flag_filters[6]);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filters_widgets->chbIOLimitRead), flag_filters[7]);
}

@ -1,42 +0,0 @@
#ifndef FILTERS_H
#define FILTERS_H
#include <gtk/gtk.h>
#include <gtk/gtkx.h>
#include "ubl-utils.h"
#include "ubl-strings.h"
#include <locale.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <libintl.h>
#include <getopt.h>
#include <libintl.h>
#include "philos_utils.h"
// Переменные
typedef struct {
GtkWidget* Window;
GtkWidget* btnFiltersSave;
GtkWidget* btnFiltersCancel;
GtkWidget* chbFilterTypeQouota;
GtkWidget* chbCPULimit;
GtkWidget* chbIOLimitRead;
GtkWidget* chbIOLimitWrite;
GtkWidget* chbSwapFileLimit;
GtkWidget* chbHardLimit;
GtkWidget* chbSoftLimit;
GtkWidget* chbQuotaVolume;
} filters_window;
// Функции
filters_window *filters_setup_window(char* glade_path);
void filters_event(filters_window *widgets);
void filters_localization(filters_window *widgets);
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();
#endif

@ -1,50 +0,0 @@
#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);
obj_device_config.size_disk = 0;
char* split_simvol = " ";
for (int index = 1; index < size; index++ ) {
char* 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--;
disk = yon_char_replace(disk," ", "");
if (strlen(disk)!=0) {
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);
}
free(disk);
}
philos_free_string_array(&responce, size);
}
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]);
}
}

@ -1,24 +0,0 @@
#ifndef MY_DEVICE_H
#define MY_DEVICE_H
#include "ubl-utils.h"
#include <locale.h>
#include <stdio.h>
#include <unistd.h>
#include "philos_utils.h"
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);
size_t get_mem_total();
float get_size_pow_memory(size_t size_memory, int size);
size_t get_resurs_total(char* cmd);
#endif

File diff suppressed because it is too large Load Diff

@ -1,121 +0,0 @@
#ifndef PHILOS_UTILS_H
#define PHILOS_UTILS_H
#include "ubl-utils.h"
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <pthread.h>
#include <string.h>
#include <dirent.h>
#include <locale.h>
#include <gtk/gtk.h>
#include <gtk/gtkx.h>
#include <vte/vte.h>
#include <pwd.h>
#include <stdbool.h>
#include "my_device.h"
#define catch(x) ExitJmp:if(__HadError)
#define throw(x) {__HadError=true;goto ExitJmp;}
#define file_source_login_min_max "/etc/login.defs"
static char** array_size_pow;
typedef struct {
char** disk_read;
char** disk_write;
int* i_o_limit_read;
int* i_o_limit_write;
int* i_o_limit_read_size;
int* i_o_limit_write_size;
int size;
int size_disk;
} temp_config;
typedef struct {
GtkWidget* Window;
GtkWidget* btnSaveTempSave;
GtkWidget* btnTempCancel;
GtkWidget* entryTempCmd;
GtkWidget* chbTempRead;
GtkWidget* spinTempRead;
GtkWidget* cbtTempRead;
GtkWidget* chbTempWrite;
GtkWidget* spinTempWrite;
GtkWidget* cbtTempWrite;
GtkWidget* chkSoftRestrictionTemp;
GtkWidget* spiSevereRestrictionTemp;
GtkWidget* cmSevereRestrictionTemp;
GtkWidget* chkSevereRestrictionTemp;
GtkWidget* spinSevereRestrictionTemp;
GtkWidget* cmbSevereRestrictionTemp;
GtkWidget* chkPaddingFLTemp;
GtkWidget* spinPaddingFLTemp;
GtkWidget* cmbPaddingFLTemp;
GtkWidget* chkCPULimitTemp;
GtkWidget* spinCPULimitTemp;
GtkWidget* lblCPULimitTemp;
GtkWidget* cbtTempDevice;
GtkWidget* cbxTempQuotaObj;
GtkWidget* cbxTempQuotaLevel2;
GtkWidget* boxBlockGui;
GtkWidget* lblInfoObjQuotas;
} temp_set_window;
void philos_array_string_remove_char(char*** array, char* str_remove, int size);
void philos_set_pow_size_memory(char* str_find, int** array_size,int index, char** array_size_pow);
void philos_set_size_memory_integer_char(char* str_find, char*** array_data, int index);
void philos_free_string_array(char ***array, int size);
void philos_free_string_array_n3(char ****array, int size);
void philos_free_int_array(int **array, int size);
void philos_free_int_array_n2(int ***array, int size);
config_str philos_list_group(int* size);
unsigned short philos_read_uid_min_max(char* filename, char* search);
config_str philos_list_user(int* size);
char* philos_str_size_pow_byte(GtkWidget *combo_box_text);
char* philos_str_remove(char *str, const char *sub);
void philos_split_size_memory(char* str_value, int* size, char* pow_memory);
char* philos_format_cfg_str_size_memory(char* str_key, int value, int pow_size_memory);
char** philos_str_split(char *parameters, int *size, char *divider);
void philos_array_str_copy(char*** source, char*** copy);
void philos_set_pow_size_memory_device(char* str_find, int** array_size,int index, char** array_size_pow);
void philos_array_int_copy(int** source, int** copy);
char** philos_pars_terminal_systemd_cgls(char* CMD_GET_SLICE_SERVICE, char* str_find, int* size_array_data);
char* philos_pard_array_add_cmd(char* cmd, temp_config* _config, char* key, int* array_io, int* array_io_pow_size, char** disk, int size);
int philos_check_activ_disk(temp_set_window *widgets, temp_config* _config);
void philos_temp_generate_cmd(temp_set_window *widgets, temp_config* _config);
void philos_temp_del_disk(temp_set_window *widgets, temp_config* _config, int flag_check_array);
void philos_temp_config_init(temp_config* _config);
void philos_update_device_to_entry(temp_set_window *widgets, temp_config* _config, int flag_check_array);
void philos_temp_add_disk(temp_set_window *widgets, temp_config* _config, int flag_check_array);
int* philos_int_append(int* array, int* size, int value);
int* remove_element_int_array(int* array, int* size, int item_to_delete);
int** remove_element_int_array_n3(int** array, int* size, int item_to_delete);
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);
void philos_set_spin_adjustment(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, size_t value);
void philos_set_active_widgets(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, int flag_cpu, char* cmd);
size_t get_resurs_total(char* cmd);
float get_size_pow_memory(size_t size_memory, int size);
void philos_set_active_widgets_device_io(GtkWidget* combo_to_l2,GtkWidget *check, GtkWidget *spin, GtkWidget *combo);
char *yon_char_get_augumented(char *source, char *append);
dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data);
char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete);
char*** yon_char_parsed_shrink_n3(char ***char_string, int *size, int item_to_delete);
dictionary *yon_dictionary_create_empty();
void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument);
dictionary *yon_dictionary_create_conneced(dictionary *targetdict);
void yon_int_array_append(int **source, int append);
static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer user_data);
int philos_config_save(char *command);
void philos_array_int_pars_to(int** array, int to);
void philos_array_char_pars_to(char*** array, char* to);
int find_null_array(temp_config* _config);
void init_device_disk(temp_config* _config);
#endif

File diff suppressed because it is too large Load Diff

@ -10,11 +10,7 @@
#include <libintl.h>
#include <vte/vte.h>
#include "ubl-cmake.h"
#include "view_add.h"
#include "filters.h"
#include "view_edit.h"
#include "my_device.h"
#include "philos_utils.h"
#include "sys/sysinfo.h"
#ifdef WEBKIT_FOUND
#include <webkit2/webkit2.h>
@ -26,29 +22,35 @@
#define _(String) gettext(String)
#define glade_path "/com/ublinux/ui/ubl-settings-resourcequota.glade"
#define glade_filters_path "/com/ublinux/ui/ubl-settings-resourcequota-filters.glade"
#define glade_quota_path "/com/ublinux/ui/ubl-settings-resourcequota-quota.glade"
#define banner_path "/com/ublinux/images/ubl-settings-resourcequota-banner.png"
#define CssPath "/com/ublinux/css/ubl-settings-resourcequota.css"
#define LocalePath "/usr/share/locale"
#define LocaleName "ubl-settings-resourcequota"
#define CMD_LOAD_GLOBAL "ubconfig --default --source global get security CGROUP_QUOTA[*]"
#define CMD_LOAD_SYSTEM "ubconfig --default --source system get security CGROUP_QUOTA[*]"
#define CMD_SAVE_GLOBAL "ubconfig --default --target global set security"
#define CMD_SAVE_SYSTEM "ubconfig --default --target system set security"
#define CMD_ALL_SAVE "ubconfig set security "
#define CMD_ALL_REMOVE "ubconfig remove security "
#define CMD_REMOVE_GLOBAL "ubconfig --target global --noexecute remove security "
#define CMD_REMOVE_SYSTEM "ubconfig --target system remove security "
#define CMD_GET_SLICE_SERVICE "systemd-cgls --no-page"
#define load_global_command "ubconfig --default --source global get security CGROUP_QUOTA[*]"
#define load_local_command "ubconfig --default --source system get security CGROUP_QUOTA[*]"
#define save_global_command "ubconfig --default --target global set security"
#define save_local_command "ubconfig --default --target system set security"
#define save_command "ubconfig set security "
#define remove_command "ubconfig remove security "
#define remove_global_command "ubconfig --target global --noexecute remove security "
#define remove_local_command "ubconfig --target system remove security "
#define get_devices_command "findmnt -lo source,target,fstype,label,size -t ext4 |grep -vE \"zram|\\]|\\[|SOURCE\""
#define get_processes_tree_command "clear; systemd-cgls --no-page"
#define get_dispatcher_command "systemd-cgtop"
#define get_information_command "systemctl status "
#define CGROUP_QUOTA(name) yon_char_unite("CGROUP_QUOTA[",name,"]",NULL)
typedef char *string;
string version_application;
static char *local;
char *local;
typedef struct
{
typedef struct {
int always_open_documentation;
int win_pos_x;
int win_pos_y;
@ -63,74 +65,24 @@ typedef struct
int lock_save_local;
int lock_save_global;
int lock_load_global;
GtkListStore *list;
config_str load_system_value;
config_str load_global_value;
config_str cfg_gui_value;
config_str load_system_key;
config_str load_global_key;
render_data status_render;
config_str type_quota;
config_str quota_volume;
int* soft_raw_limit;
int* hard_raw_limit;
int* swap;
int* cpu_limit;
int** i_o_limit_read;
int** i_o_limit_write;
config_str* disk_read;
config_str* disk_write;
config_str array_del_line;
int size_array_del_line;
int *type_quota_size;
int *quota_volume_size;
int *soft_raw_limit_size;
int *hard_raw_limit_size;
int *swap_size;
int *cpu_limit_size;
int** i_o_limit_read_size;
int** i_o_limit_write_size;
int size_tree_view;
int flag_set_data;
int flag_save;
int flag_load; // flag_load = 0 -> system // flag_load = 1 -> global
long avaliable_ram;
long avaliable_swap;
long cores;
config_str users;
int users_size;
config_str processes;
int processes_size;
config_str slices;
int slices_size;
char *last_info;
} config;
typedef struct
{
typedef struct {
//Standard
GtkWidget *Window;
GtkTreeViewColumn *tvc0;
GtkTreeViewColumn *tvc1;
GtkTreeViewColumn *tvc2;
GtkTreeViewColumn *tvc3;
GtkTreeViewColumn *tvc4;
GtkTreeViewColumn *tvc5;
GtkTreeViewColumn *tvc6;
GtkTreeViewColumn *tvc7;
GtkWidget *scrollDispatcher;
GtkWidget *btnDelQuotas;
GtkWidget *cbtMainInfoLevel2;
GtkWidget *cbtMainInfo;
GtkWidget *vteProcesses;
GtkWidget *vteInformation;
GtkWidget *btnMainShowCoreStream;
GtkWidget *btnMainShowAllEmpty;
GtkWidget *vteDispatcher;
GtkWidget *spinUpdateDispatcher;
GtkWidget *btnUpdateDispatcher;
GtkWidget *treeViewMain;
GtkWidget *btnSaveCfg;
GtkWidget *btnShowFilters;
GtkWidget *notebookMain;
GtkWidget *btnEdit;
GtkWidget *btnInfo;
GtkWidget *btnAdd;
GtkWidget *HatLabel;
GtkWidget *PlugBox;
@ -157,10 +109,33 @@ typedef struct
GtkWidget *DocumentationMenuItem;
GtkWidget *AboutMenuItem;
// Custom
GtkWidget *FiltersButton;
GtkWidget *InformationButton;
GtkWidget *RemoveButton;
GtkWidget *EditButton;
GtkWidget *AddButton;
GtkWidget *MainTree;
GtkWidget *MainNotebook;
GtkWidget *DispatcherUpdateCheck;
GtkWidget *DispatcherUpdateSpin;
GtkWidget *DispatcherUpdateButton;
GtkWidget *DispatcherTerminal;
GtkWidget *ShowCoreCheck;
GtkWidget *ShowAllCheck;
GtkWidget *ProcessesUpdateButton;
GtkWidget *ProcessesTerminal;
GtkWidget *TargetTypeCombo;
GtkWidget *TargetCombo;
GtkWidget *InformationUpdateButton;
GtkWidget *InformationTerminal;
} main_window;
typedef struct
{
typedef struct {
GtkWidget *Window;
GtkWidget *HatText;
@ -170,51 +145,61 @@ typedef struct
GtkWidget *CloseButton;
GtkWidget *AcceptButton;
} documentation_confirmation_window;
typedef struct {
GtkWidget *Window;
GtkWidget *TitleLabel;
GtkWidget *BlockUiBox;
GtkWidget *EditQuotaTargetBox;
GtkWidget *AddQuotaTargetBox;
GtkWidget *TargetTypeCombo;
GtkWidget *TargetCombo;
GtkWidget *TargetLabel;
GtkWidget *SoftRestrictionCheck;
GtkWidget *SoftRestrictionSpin;
GtkWidget *SoftRestrictionCombo;
GtkWidget *HardRestrictionCheck;
GtkWidget *HardRestrictionSpin;
GtkWidget *HardRestrictionCombo;
GtkWidget *PagingLimitCheck;
GtkWidget *PagingLimitSpin;
GtkWidget *PagingLimitCombo;
GtkWidget *CpuLimitCheck;
GtkWidget *CpuLimitSpin;
GtkWidget *DeviceLimitCombo;
GtkWidget *DeviceLimitReadCheck;
GtkWidget *DeviceLimitReadSpin;
GtkWidget *DeviceLimitReadCombo;
GtkWidget *DeviceLimitWriteCheck;
GtkWidget *DeviceLimitWriteSpin;
GtkWidget *DeviceLimitWriteCombo;
GtkWidget *ApplyChangesButton;
GtkWidget *ManualInputEntry;
GtkWidget *CancelButton;
GtkWidget *SaveButton;
dictionary *devices;
} quota_window;
typedef struct {
GtkWidget *Window;
GtkWidget *QuotaTypeCheck;
GtkWidget *QuotaTargetCheck;
GtkWidget *SoftRamLimitCheck;
GtkWidget *HardRamLimitCheck;
GtkWidget *PagingLimitCheck;
GtkWidget *CpuLimitCheck;
GtkWidget *ReadLimitCheck;
GtkWidget *WriteLimitCheck;
GtkWidget *CancelButton;
GtkWidget *AcceptButton;
} filters_window;
typedef struct {
char *read;
char *write;
} device_limits;
main_window *setup_window();
void main_update_processes();
void config_init();
void event_all(main_window *widgets);
void main_event(main_window *widgets);
void info_show(GtkWidget *self);
void main_localization(main_window *widgets);
void main_visible_columns();
void wrapper_filters_show(GtkWidget *self);
void main_update_dispatcher();
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_select(GtkWidget *self, main_window *widgets);
void tree_view_add(int index);
int tree_view_edit();
void main_add_btn_save();
void wrapper_add_show(GtkWidget *self);
void main_edit_btn_save();
void tree_view_del_line();
void main_fill_tree_view_after_remove();
void load_system_cfg();
void load_global_cfg();
void template_load_cfg(char *cmd);
int template_format_str_save(char* source_set_cmd, char* source_remove_cmd);
void str_split_value(char *values, int index);
void set_size_memory_integer_device(char* str_find, int** array_data, int index);
void set_size_memory_integer(char* str_find, int** array_data, int index);
void set_size_memory_integer_char(char* str_find, char*** array_data, int index);
void set_pow_size_memory(char* str_find, int** array_size, int index);
void str_split_key(char *source_value, int index);
void fill_tree_view(int start, int size, int flag_gui_add);
void clear_array();
void init_cfg_array(int index);
void wrapper_template_save(char *check_flag);
void wrapper_system_save();
void wrapper_global_save();
void wrapper_all_save();
char* template_format_str_remove_save(char* source_remove_cmd);
char* template_format_str_set_save(char* source_set_cmd);
char* save_format_key(int index);
void get_param_io_limit(char** arr_values, int index_start, int size, int index_n1, char *key_find);
char* add_io_str_format_ubconfig(char* key, int** i_o_limit, int** i_o_limit_size, char*** disk_read, int index);
char* format_io_limit_in_tree_view(config_str* disk, int** i_o_limit, int** i_o_limit_size, int index);
gboolean select_page_notebook(GtkNotebook* self, gboolean object, gpointer user_data);

@ -1,9 +1,10 @@
#define VERSION_LABEL yon_char_unite(_("Version:")," ",version_application,"\n",NULL)
#define HELP_LABEL yon_char_unite(_("ubl-settings-resourcequota version:")," ", version_application,"\n",_("CPU and RAM quotas settings"),"\n",_("Usage:"), " ubl-settings-resourcequota ",_("[OPTIONS]"),"\n",_("Options:"),"\n\t--help, -h\t\t\t",_("Show this help"),"\n\t--version, -V\t\t\t",_("Show package version"),"\n\t--lock-help\t\t\t",_("Lock this help menu"),"\n\t--lock-save\t\t\t",_("Lock configuration saving"),"\n\t--lock-save-local\t\t",_("Lock local configration saving"),"\n\t--lock-save-global\t\t",_("Lock global configration saving"),"\n\t--lock-load-global\t\t",_("Lock global configration loading"),"\n",NULL)
#define HELP_LABEL yon_char_unite(_("ubl-settings-resourcequota version:")," ", version_application,"\n",_("CPU and RAM quotas"),"\n",_("Usage:"), " ubl-settings-resourcequota ",_("[OPTIONS]"),"\n",_("Options:"),"\n\t--help, -h\t\t\t",_("Show this help"),"\n\t--version, -V\t\t\t",_("Show package version"),"\n\t--lock-help\t\t\t",_("Lock this help menu"),"\n\t--lock-save\t\t\t",_("Lock configuration saving"),"\n\t--lock-save-local\t\t",_("Lock local configration saving"),"\n\t--lock-save-global\t\t",_("Lock global configration saving"),"\n\t--lock-load-global\t\t",_("Lock global configration loading"),"\n",NULL)
#define ROOT_WARNING_LABEL _("Warning! Application was launched without root - root-dependent actions are locked")
#define TITLE_LABEL _("CPU and RAM quotas")
#define TITLE_INFO_LABEL _("System resource quota settings management")
#define TITLE_INFO_LABEL _("Configuring CPU and RAM quota settings for groups and users of the system")
#define SUCCESS_LABEL _("Operation succeeded")
#define ABOUT_LABEL _("About")
#define DOCUMENTATION_LABEL _("Documentation")
#define SAVE_LOCAL_LABEL _("Save to local configuration")
@ -13,14 +14,15 @@
#define LOAD_LOCAL_LABEL _("Load local configuration")
#define LOAD_GLOBAL_LABEL _("Load global configuration")
#define LOAD_LABEL _("Load")
#define LOAD_LABEL _("Load")
#define CANCEL_LABEL _("Cancel")
#define HELP_TITLE_LABEL _("Would you like to read documentation in the Web?")
#define HELP_INFO_LABEL _("You will be redirected to documentation website where documentation is\ntranslated and supported by community.")
#define HELP_INFO_LABEL _("You will be redirected to documentation website, where documentation is\ntranslated and supported by community.")
#define HELP_ALWAYS_OPEN_LABEL _("Always redirect to online documentation")
#define OPEN_HELP_LABEL _("Open documentation")
#define PROJECT_HOME_LABEL _("Project Home Page")
#define PROJECT_HOME_LABEL _("Project homepage")
#define NOTHING_CHOSEN_LABEL _("Nothing were chosen")
#define STR_USER _("User")
@ -33,16 +35,69 @@
#define STR_GB _("Gb")
#define STR_TB _("Tb")
#define GLOBAL_LOAD_SUCCESS _("Global configuration loading succseeded.")
#define LOCAL_LOAD_SUCCESS _("Local configuration loading succseeded.")
#define GLOBAL_LOAD_SUCCESS _("Global configuration loading succeeded.")
#define LOCAL_LOAD_SUCCESS _("Local configuration loading succeeded.")
#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.")
#define GLOBAL_LOCAL_SAVE_SUCCESS _("Local and global configuration saving succeeded.")
#define GLOBAL_SAVE_SUCCESS _("Global configuration saving succeeded.")
#define LOCAL_SAVE_SUCCESS _("Local configuration saving succeeded.")
#define STR_DEL_TABLE _("Quota deleted")
#define STR_NO_SELECT_TABLE _("Quota deleted")
#define STR_QUOTAS_ADD _("Quota deleted")
#define ALL_SAVE_SUCCESS _("Save configuration")
#define MESS_NOTHING_SAVE _("Nothing to save!")
#define LOCAL_SAVE_SUCCESS_LABEL _("Local configuration saving succseeded.")
#define LOCAL_SAVE_SUCCESS_LABEL _("Local configuration saving succeeded.")
#define LOAD_FAILED_LABEL _("Config loading failed")
#define LIST_QUOTAS_LABEL _("Quotas list")
#define DISPATCHER_LABEL _("Dispatcher")
#define PROCESSES_LABEL _("Processes")
#define INFORMATION_LABEL _("Information")
#define QUOTA_TYPE_TAB_LABEL _("Quota type")
#define QUOTA_OBJECT_TAB_LABEL _("Quota\ntarget")
#define SOFT_LIMIT_TAB_LABEL _("Soft RAM limit,\n(volume)")
#define HARD_LIMIT_TAB_LABEL _("Hard RAM limit,\n(volume)")
#define SWAP_LIMIT_TAB_LABEL _("Swap file\nlimit\n(volume)")
#define CPU_LIMIT_TAB_LABEL _("CPU limit\n(%)")
#define READ_LIMIT_TAB_LABEL _("I/O\nlimit\n(read)")
#define WRITE_LIMIT_TAB_LABEL _("I/O\nlimit\n(write)")
#define QUOTA_OBJECT_LABEL _("Quota target")
#define SOFT_LIMIT_LABEL _("Soft RAM limit, n(volume)")
#define HARD_LIMIT_LABEL _("Hard RAM limit, (volume)")
#define SWAP_LIMIT_LABEL _("Swap file limit (volume)")
#define CPU_LIMIT_LABEL _("CPU limit (%)")
#define READ_LIMIT_LABEL _("I/O limit (read)")
#define WRITE_LIMIT_LABEL _("I/O limit (write)")
#define ACCEPT_LABEL _("Accept")
#define FILTERS_LABEL _("Filters")
#define INFORMATION_LABEL _("Information")
#define REMOVE_LABEL _("Remove")
#define EDIT_LABEL _("Edit")
#define ADD_LABEL _("Add")
#define UPDATE_DELAY_LABEL _("Update every")
#define SECONDS_LABEL _("seconds")
#define UPDATE_LABEL _("Update")
#define ALL_GROUPS_LABEL _("All groups including empty")
#define CORE_STREAMS_LABEL _("Core streams")
#define VIEW_PROPERTIES_LABEL _("View properties for")
#define ADDING_LABEL _("CPU and RAM quotas - Adding")
#define EDITING_LABEL _("CPU and RAM quotas - Editing")
#define QUOTA_OBJ_LABEL _("Quota object:")
#define RAM_LABEL _("RAM limit")
#define SOFT_RESTRICTION_LABEL _("Soft restriction")
#define HARD_RESTRICTION_LABEL _("Hard restriction")
#define SWAP_LABEL _("Paging file limit")
#define CPU_LABEL _("CPU limit")
#define DEVICES_LABEL _("Input/Output limit of block devices")
#define DEVICE_LABEL _("Device:")
#define READ_LABEL _("Read")
#define WRITE_LABEL _("Write")
#define APPLY_CHANGES_LABEL _("Apply changes of operations limit")
#define MANUAL_INPUT_LABEL _("Manual input (for advanced users)")

@ -540,15 +540,16 @@ char *yon_char_divide(char *source, int dividepos)
* Считает количество символов [find] в строке [source]
*/
int yon_char_find_count(char *source, char *find){
char *working_string=source;
char *working_string=yon_char_new(source);
int i=0;
int size=0;
while ((working_string = strstr(working_string, find))) {
if (working_string) {
working_string++;
size++;
}
int pos=0;
config_str rtn = yon_char_parse(working_string,&size,"\n");
for (int j=0;j<size;j++){
if(strstr(rtn[j],find))
i++;
}
return size;
return i;
}
/**yon_char_divide_search(char *source, char *dividepos, int delete_divider)
@ -582,13 +583,12 @@ char *yon_char_divide_search(char *source, char *dividepos, int delete_divider)
}
return source;
}
/**yon_char_from_int(int int_to_convert)
* [EN]
* char *yon_char_from_int(int int_to_convert)
* converts int to char*.
*
* [RU]
* char *yon_char_from_int(int int_to_convert)
* Конвертирует int в char*
*/
char *yon_char_from_int(int int_to_convert)
@ -604,6 +604,26 @@ char *yon_char_from_int(int int_to_convert)
return ch;
}
/**yon_char_from_long(int int_to_convert)
* [EN]
* converts int to char*.
*
* [RU]
* Конвертирует int в char*
*/
char *yon_char_from_long(long int_to_convert)
{
int i = 1;
double convert_check = (double)int_to_convert;
for (i = 1; convert_check >= 10; i++)
{
convert_check = convert_check / 10;
}
char *ch = g_malloc0(i * sizeof(char) + 1);
sprintf(ch, "%ld", int_to_convert);
return ch;
}
/**yon_char_replace(char *source, char *find, char*replace)
* [EN]
*
@ -638,15 +658,13 @@ char *yon_char_replace(char *source, char *find, char*replace){
*/
char **yon_char_parse(char *parameters, int *size, char *divider){
char **string=NULL;
if (!strstr(parameters, divider)) {
return NULL;
}
int i=1;
string=malloc(sizeof(char*));
char *paramline=yon_char_new(parameters);
char *param;
if (!strstr(parameters,divider)) return NULL;
while ((param=yon_char_divide_search(paramline,divider,1))){
if (strcmp(param,paramline)==0) break;
if (strcmp(param,paramline)==0||param[0]=='\0') break;
string=realloc(string,sizeof(char*)*i);
string[i-1]=yon_char_new(param);
i++;
@ -654,10 +672,8 @@ char **yon_char_parse(char *parameters, int *size, char *divider){
string=realloc(string,sizeof(char*)*i);
string[i-1]=yon_char_new(paramline);
i++;
// printf("%d\n",i);
*size=i-1;
return string;
}
/**yon_char_parsed_rip(char **char_string, int *size, int item_to_delete)
@ -760,7 +776,7 @@ config_str yon_char_parsed_new (int *size, ...){
void yon_char_parsed_copy(config_str *source, config_str *to_copy){
if (source&&!*source&&to_copy&&*to_copy){
int size=0;
config_str new_char = yon_char_parsed_new(&size,(*to_copy)[0]);
config_str new_char = yon_char_parsed_new(&size,(*to_copy)[0],NULL);
for (int i=0;(*to_copy)[i];i++){
new_char = yon_char_parsed_append(new_char,&size,yon_char_new((*to_copy)[i]));
}
@ -781,6 +797,14 @@ config_str yon_char_parsed_append(config_str parsed, int *size, char *string){
return new_parsed;
}
int yon_char_parsed_remove_newline_symbols(config_str parsed, int *size){
int i=0;
for (i=0;i<*size;i++)
if (parsed[i][strlen(parsed[i])-1]=='\n')
parsed[i][strlen(parsed[i])-1]='\0';
return i;
}
/**yon_ubl_check_root()
* [EN]
*
@ -824,6 +848,32 @@ char *yon_ubl_user_get_home_directory(){
return ret;
}
config_str yon_ubl_get_all_users(int *user_size){
struct passwd *user = NULL;
config_str user_list = NULL;
while ((user = getpwent())) {
if (!user_list)
user_list = yon_char_parsed_new(user_size,user->pw_name,NULL);
else {
user_list = yon_char_parsed_append(user_list,user_size,user->pw_name);
}
}
endpwent();
return user_list;
}
config_str yon_ubl_get_all_processes(int *processes_size){
config_str processes = yon_config_load(get_processes_command,processes_size);
yon_char_parsed_remove_newline_symbols(processes,processes_size);
return processes;
}
config_str yon_ubl_get_all_slices(int *slices_size){
config_str slices = yon_config_load(get_slices_command,slices_size);
yon_char_parsed_remove_newline_symbols(slices,slices_size);
return slices;
}
// parsing functions
@ -957,7 +1007,7 @@ int yon_config_load_register(char *command){
}
FILE *output = popen(command, "r");
char **output_strings = NULL;
output_strings = malloc(sizeof(char));
output_strings = malloc(sizeof(char*));
int i = 0;
char str[4096];
memset(str, 0, 4096);
@ -966,13 +1016,14 @@ int yon_config_load_register(char *command){
if (strcmp(str, "") != 0&& strcmp(str,"(null)\n")!=0)
{
char *key = yon_char_divide_search(str,"=",-1);
yon_dictionary_add_or_create_if_exists_with_data(__yon__config__strings,key,str);
char *final_str=yon_char_divide_search(str,"\n",-1);
yon_dictionary_add_or_create_if_exists_with_data(__yon__config__strings,key,yon_char_new(final_str));
__yon__config__strings->data_type=DICTIONARY_CHAR_TYPE;
}
}
check_config
return 0;
else return 1;
return 1;
else return 0;
}
/**yon_config_remove_by_key(char *key)
@ -1034,7 +1085,7 @@ int yon_config_remove_element(char *key, char *deleted){
new_data = yon_char_append(new_data,found+strlen(deleted));
}
dict->data=(void*)(new_data);
free(data);
// free(data);
dict->flag1=1;
return 1;
} else return 0;
@ -1087,10 +1138,30 @@ int yon_config_set(char *key, void *data){
check_config{
dictionary *dict = yon_dictionary_get(&__yon__config__strings,key);
dict->data=data;
dict->flag1=1;
return 1;
} else return 0;
}
/**yon_config_append(char *key, void *data)
* [EN]
*
* [RU]
* Производит поиск по конфигу и дополняет значение параметра с ключом [key] значением [data];
*/
int yon_config_append(char *key, char *data){
check_config{
dictionary *dict = yon_dictionary_get(&__yon__config__strings,key);
if (strcmp(((char*)dict->data),"")!=0)
dict->data=(void*)(yon_char_unite((char*)dict->data," ",data,NULL));
else dict->data=(void*)data;
dict->flag1=1;
return 1;
} else return 0;
}
/**yon_config_clean()
* [EN]
* Erase all parameters from config;
@ -1114,8 +1185,12 @@ int yon_config_clean(){
* [data] - значение параметра;
*/
void yon_config_register(char *key, void *data){
if (!__yon__config__strings||!yon_dictionary_get(&__yon__config__strings,key)){
yon_dictionary_add_or_create_if_exists_with_data(__yon__config__strings,key,data);
}
else if (yon_dictionary_get(&__yon__config__strings,key)) __yon__config__strings->data=data;
__yon__config__strings->data_type=DICTIONARY_CHAR_TYPE;
__yon__config__strings->flag1=1;
}
/**yon_config_load(char *command, int *str_len)
@ -1153,22 +1228,35 @@ config_str yon_config_load(char *command, int *str_len){
}
}
/**int yon_config_save(char *command)
/**int yon_config_save_registered(char *path, char *section)
* [EN]
* Saves config with [command]
* [RU]
* Выполняет команду [command], добавляя в конец все записи конфига в таком виде:
* [ПАРАМЕТР1]="[значения1]" [ПАРАМЕТР2]="[значения2]"
*/
int yon_config_save_registered(char *command){
int yon_config_save_registered(char *path, char *section){
check_config{
char *command = yon_char_unite("/usr/bin/ubconfig",path ? yon_char_append(" --target ",path):"", " set ", section,NULL);
char *remove_command = yon_char_unite("/usr/bin/ubconfig", path ? yon_char_append(" --target ",path):"", " remove ", section,NULL);
dictionary *dict = NULL;
int any_add = 0;
int any_remove = 0;
for_dictionaries(dict,__yon__config__strings){
command = yon_char_unite(command, " ", yon_dictionary_get_data(dict,char*), NULL);
char *data = yon_dictionary_get_data(dict,char*);
if (dict->flag1==1&&strcmp(data,"")!=0){
command = yon_char_unite(command, " ", dict->key,"=\"", yon_dictionary_get_data(dict,char*),"\"", NULL);
any_add=1;
}
if (popen(command, "r")) return 1;
else return 0;
} else return 0;
if (strcmp(data,"")==0){
remove_command = yon_char_unite(remove_command, " ", dict->key, NULL);
any_remove=1;
}
}
if (any_add) yon_launch(command);
if (any_remove) yon_launch(remove_command);
return 1;
} else return 1;
}
/**yon_config_get_all(int *size)
@ -1186,10 +1274,10 @@ config_str yon_config_get_all(int *size){
for_dictionaries(dict,__yon__config__strings){
conf = yon_remalloc(conf,sizeof(char*)*(*size));
conf[(*size)-1] = yon_char_unite(dict->key,"=",(char*)dict->data,NULL);
size++;
(*size)++;
}
conf = yon_remalloc(conf,sizeof(char*)*(*size+1));
conf[*size] = NULL;
conf = yon_remalloc(conf,sizeof(char*)*(*size));
conf[*size-1] = NULL;
return conf;
} else return NULL;
}
@ -1299,7 +1387,6 @@ void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, voi
vte_terminal_set_pty(VTE_TERMINAL(terminal),pty);
gtk_container_add(GTK_CONTAINER(place_to_show),terminal);
char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",command," ; sleep 5;exit 0","\n",NULL);
printf("%s\n",install_command);
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),
@ -1378,7 +1465,7 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end
NULL,
NULL,
NULL);
vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), 100);
vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), -1);
vte_terminal_set_scroll_on_output(VTE_TERMINAL(terminal), TRUE);
vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE);
gtk_widget_show_all(terminal);
@ -1437,6 +1524,9 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end
case YON_TYPE_INT:
g_key_file_set_integer(__yon_window_config_file,"window",param->parameter_name, g_value_get_int(val));
break;
case YON_TYPE_DOUBLE:
g_key_file_set_double(__yon_window_config_file,"window",param->parameter_name, g_value_get_double(val));
break;
case YON_TYPE_BOOLEAN:
g_key_file_set_boolean(__yon_window_config_file,"window",param->parameter_name, g_value_get_boolean(val));
break;
@ -1453,6 +1543,9 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end
case YON_TYPE_INT:
g_key_file_set_integer(__yon_window_config_file,param->section,param->parameter_name, *(int*)param->property);
break;
case YON_TYPE_DOUBLE:
g_key_file_set_double(__yon_window_config_file,param->section,param->parameter_name, *(double*)param->property);
break;
case YON_TYPE_BOOLEAN:
g_key_file_set_boolean(__yon_window_config_file,param->section,param->parameter_name, *(gboolean*)param->property);
break;
@ -1526,8 +1619,7 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end
if (!g_key_file_load_from_file(__yon_window_config_file,__yon_window_config_path,G_KEY_FILE_NONE,NULL)){
struct stat st;
int size;
config_str conf = yon_char_parse(yon_char_new(__yon_window_config_path),&size,"/");
char *path = yon_char_unite(conf[0],"/",conf[1],"/",conf[2],"/",conf[3],"/",conf[4],"/",NULL);
char *path = yon_char_divide(yon_char_new(__yon_window_config_path),yon_char_find_last(__yon_window_config_path,'/'));
if (stat(path, &st) == -1) {
mkdir(path, 0777);
}
@ -1554,6 +1646,9 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end
case YON_TYPE_INT:
g_value_set_int(val,g_key_file_get_integer(__yon_window_config_file,"window",param->parameter_name, NULL));
break;
case YON_TYPE_DOUBLE:
g_value_set_double(val,g_key_file_get_double(__yon_window_config_file,"window",param->parameter_name, NULL));
break;
case YON_TYPE_BOOLEAN:
gboolean res = g_key_file_get_boolean(__yon_window_config_file,"window",param->parameter_name, NULL);
g_value_set_boolean(val,res);
@ -1562,10 +1657,10 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end
}
g_object_set_property(G_OBJECT(param->track_widget),param->property_name,val);
}
if (__yon_main_window_config.width==0) __yon_main_window_config.width=800;
if (__yon_main_window_config.height==0) __yon_main_window_config.height=600;
gtk_window_resize(__yon_window_config_target_window,__yon_main_window_config.width,__yon_main_window_config.height);
gtk_window_move(__yon_window_config_target_window,__yon_main_window_config.x,__yon_main_window_config.y);
if (__yon_main_window_config.width!=0&&__yon_main_window_config.height!=0) gtk_window_resize(__yon_window_config_target_window,__yon_main_window_config.width,__yon_main_window_config.height);
if (__yon_main_window_config.x!=0&&__yon_main_window_config.y!=0) gtk_window_move(__yon_window_config_target_window,__yon_main_window_config.x,__yon_main_window_config.y);
pthread_t tid;
pthread_create(&tid,NULL,(void *)_yon_maximize,NULL);
return 1;
@ -1582,7 +1677,7 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end
return key;
}
/**yon_window_config_add_custom_parameter(GtkWidget *widget, char *param_name, char *widget_property)
/**yon_window_config_add_listener(GtkWidget *widget, char *param_name, char *widget_property, enum YON_TYPE val_type)
* [EN]
*
* [RU]
@ -1616,6 +1711,35 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end
yon_dictionary_add_or_create_if_exists_with_data(__yon_main_window_config.deleted_parameters,param->parameter_name,param);
}
int yon_window_config_get_parameter(char *section, char *config_parameter, void *return_value, enum YON_TYPE type){
GError *err=NULL;
switch (type){
case YON_TYPE_BOOLEAN:
*((int*)return_value) = g_key_file_get_boolean(__yon_window_config_file,section,config_parameter,&err);
if (err) return 0; else return 1;
break;
case YON_TYPE_INT:
*((int*)return_value) = g_key_file_get_integer(__yon_window_config_file,section,config_parameter,&err);
if (err) return 0; else return 1;
break;
case YON_TYPE_DOUBLE:
*((int*)return_value) = g_key_file_get_double(__yon_window_config_file,section,config_parameter,&err);
if (err) return 0; else return 1;
break;
case YON_TYPE_STRING:
*((char**)return_value) = g_key_file_get_string(__yon_window_config_file,section,config_parameter,&err);
if (err) return 0; else return 1;
break;
case YON_TYPE_STRING_LIST:
gsize size=0;
*((char***)return_value) = g_key_file_get_string_list(__yon_window_config_file,section,config_parameter,&size,&err);
*((char***)return_value)=yon_remalloc(return_value,size+1);
*((char***)return_value)[size]=NULL;
if (err) return 0; else return 1;
break;
}
}
GtkWidget *yon_ubl_menu_item_about_new(char *buttonname){
GtkWidget *menu_item = gtk_menu_item_new();
gtk_style_context_add_class(gtk_widget_get_style_context(menu_item),"menuitembottom");
@ -1724,6 +1848,23 @@ int yon_dictionary_gtk_pack_end_multiple_widgets(GtkBox *destination, gboolean e
}
void yon_gtk_widget_set_sensitive_from_toggle_button(GtkToggleButton *toggle, GtkWidget *target){
gtk_widget_set_sensitive(target,gtk_toggle_button_get_active(toggle));
}
void yon_gtk_widget_set_sensitive_from_toggle_button_inversed(GtkToggleButton *toggle, GtkWidget *target){
gtk_widget_set_sensitive(target,!gtk_toggle_button_get_active(toggle));
}
void yon_gtk_widget_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target){
gtk_widget_set_sensitive(target,gtk_combo_box_get_active(toggle)>=0 ? 1 : 0);
}
void yon_gtk_widget_set_sensitive_from_toggle_combo_box_inversed(GtkComboBox *toggle, GtkWidget *target){
gtk_widget_set_sensitive(target,!gtk_combo_box_get_active(toggle)>=0 ? 0 : 1);
}
void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path)
{
gtk_overlay_add_overlay(GTK_OVERLAY(Overlay), Head);

@ -14,6 +14,8 @@
#include <locale.h>
#include <gtk/gtk.h>
#include <gtk/gtkx.h>
#include <pwd.h>
#include <vte/vte.h>
#include "ubl-cmake.h"
#ifdef WEBKIT_FOUND
@ -31,6 +33,9 @@ static char** array_size_pow;
#define get_home_dir_command yon_char_unite("getent passwd \"",yon_ubl_root_user_get(),"\" | cut -d: -f6",NULL)
#define get_processes_command "systemd-cgls --no-pager |grep -oE \"[-0-9A-Za-z.:]{1,}.service\""
#define get_slices_command "systemd-cgls --no-pager |grep -oE \"[-0-9A-Za-z.:]{1,}.slice\""
typedef enum
{
#ifdef __GTK_H__
@ -142,6 +147,7 @@ char *yon_char_divide(char *source, int dividepos);
char *yon_char_divide_search(char *source, char *dividepos, int delete_divider);
char *yon_char_from_int(int int_to_convert);
char *yon_char_from_long(long int_to_convert);
char *yon_char_replace(char *source, char *find, char*replace);
@ -161,12 +167,18 @@ void yon_char_parsed_copy(config_str *source, config_str *to_copy);
config_str yon_char_parsed_append(config_str parsed, int *size, char *string);
int yon_char_parsed_remove_newline_symbols(config_str parsed, int *size);
int yon_ubl_check_root();
char *yon_ubl_root_user_get();
char *yon_ubl_user_get_home_directory();
config_str yon_ubl_get_all_users(int *user_size);
config_str yon_ubl_get_all_processes(int *processes_size);
config_str yon_ubl_get_all_slices(int *slices_size);
// parsing functions
config_str philos_list_user(int* size);
@ -179,7 +191,7 @@ apps *yon_apps_get_by_name(apps *applist, char *name, int size);
config_str yon_config_load(char *command, int *str_len);
int yon_config_save_registered(char *command);
int yon_config_save_registered(char *path, char *section);
char *yon_config_get_parameter(config_str parameters, int size, char *param);
@ -223,6 +235,7 @@ enum YON_TYPE{
YON_TYPE_STRING,
YON_TYPE_STRING_LIST,
YON_TYPE_INT,
YON_TYPE_DOUBLE,
YON_TYPE_BOOLEAN,
YON_TYPE_OTHER
};
@ -270,7 +283,10 @@ int yon_dictionary_gtk_pack_start_multiple_widgets(GtkBox *destination, gboolean
int yon_dictionary_gtk_pack_end_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...);
void yon_gtk_widget_set_sensitive_from_toggle_button(GtkToggleButton *toggle, GtkWidget *target);
void yon_gtk_widget_set_sensitive_from_toggle_button_inversed(GtkToggleButton *toggle, GtkWidget *target);
void yon_gtk_widget_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target);
void yon_gtk_widget_set_sensitive_from_combo_box_inversed(GtkComboBox *toggle, GtkWidget *target);
typedef enum
{
@ -318,25 +334,6 @@ int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label);
*/
void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type);
#ifdef __cplusplus
/**yon_ubl_header_setup(overlay, head, image, imag_path)
* [EN]
* Sets up header of app.
* [overlay] is overlay for app header;
* [head] is box of header, which connects to [overlay]
* [image] is header background image;
* [imag_path] is path of image, shown in [image]
* [RU]
* Настраивает заголовок приложения.
* [overlay] - оверлей заголовка приложения;
* [head] - шапка заголовка, присоединяемая к [overlay]
* [image] - виджет картинки для заднего фона;
* [imag_path] - путь до картинки, загружаемой в [image]
*/
#define yon_ubl_header_setup(overlay, head, image, imag_path) _yon_ubl_header_setup(GTK_WIDGET(overlay.gobj()), GTK_WIDGET(head.gobj()), GTK_WIDGET(image.gobj()), (char *)imag_path)
#else
/**yon_ubl_header_setup(overlay, head, image, imag_path)
* [EN]
* Sets up header of app.
@ -367,4 +364,3 @@ void yon_ubl_browser_window_open(char *link, char *browser_window_name);
void yon_ubl_browser_window_open(char *link, char *browser_window_name);
#endif
#endif
#endif

@ -1,287 +0,0 @@
#include "view_add.h"
temp_set_window *add_widgets = NULL;
temp_config obj_add_config;
temp_config* get_add_config() {
return &obj_add_config;
}
temp_set_window *add_setup_window(char* glade_path) {
if (add_widgets == NULL) {
add_widgets = malloc(sizeof(temp_set_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
add_widgets->Window = yon_gtk_builder_get_widget(builder,"wndQuotasAdding");
add_widgets->btnSaveTempSave = yon_gtk_builder_get_widget(builder,"btnSaveAddSave");
add_widgets->btnTempCancel = yon_gtk_builder_get_widget(builder,"btnAddCancel");
add_widgets->entryTempCmd = yon_gtk_builder_get_widget(builder,"entryAddCmd");
add_widgets->cbxTempQuotaObj = yon_gtk_builder_get_widget(builder,"cbxAddQuotaObj");
add_widgets->cbxTempQuotaLevel2 = yon_gtk_builder_get_widget(builder,"cbxAddQuotaLevel2");
add_widgets->cbtTempDevice = yon_gtk_builder_get_widget(builder,"cbtAddDevice");
add_widgets->lblCPULimitTemp = yon_gtk_builder_get_widget(builder,"lblCPULimitAdd");
add_widgets->spinCPULimitTemp = yon_gtk_builder_get_widget(builder,"spinCPULimitAdd");
add_widgets->chkCPULimitTemp = yon_gtk_builder_get_widget(builder,"chkCPULimitAdd");
add_widgets->chkPaddingFLTemp = yon_gtk_builder_get_widget(builder,"chkPaddingFLAdd");
add_widgets->spinPaddingFLTemp = yon_gtk_builder_get_widget(builder,"spinPaddingFLAdd");
add_widgets->cmbPaddingFLTemp = yon_gtk_builder_get_widget(builder,"cmbPaddingFLAdd");
add_widgets->chkSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"chkSevereRestrictionAdd");
add_widgets->spinSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"spinSevereRestrictionAdd");
add_widgets->cmbSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"cmbSevereRestrictionAdd");
add_widgets->chkSoftRestrictionTemp = yon_gtk_builder_get_widget(builder,"chkSoftRestrictionAdd");
add_widgets->spiSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"spiSevereRestrictionAdd");
add_widgets->cmSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"cmSevereRestrictionAdd");
add_widgets->chbTempRead = yon_gtk_builder_get_widget(builder,"chbAddRead");
add_widgets->spinTempRead = yon_gtk_builder_get_widget(builder,"spinAddRead");
add_widgets->cbtTempRead = yon_gtk_builder_get_widget(builder,"cbtAddRead");
add_widgets->spinTempWrite = yon_gtk_builder_get_widget(builder,"spinAddWrite");
add_widgets->chbTempWrite = yon_gtk_builder_get_widget(builder,"chbAddWrite");
add_widgets->cbtTempWrite = yon_gtk_builder_get_widget(builder,"cbtAddWrite");
add_widgets->boxBlockGui = yon_gtk_builder_get_widget(builder,"boxBlockGui");
device_fill_disk(add_widgets->cbtTempDevice);
add_event(add_widgets);
add_init_windows();
add_localization(add_widgets);
philos_temp_config_init(&obj_add_config);
init_device_disk(&obj_add_config);
}
return add_widgets;
}
void add_init_windows() {
if (gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaLevel2)) != -1) {
gtk_widget_set_sensitive(add_widgets->boxBlockGui, 1);
gtk_widget_set_sensitive(add_widgets->btnSaveTempSave, 1);
philos_set_active_widgets(add_widgets->chkSoftRestrictionTemp, add_widgets->spiSevereRestrictionTemp, add_widgets->cmSevereRestrictionTemp, 0 , CMD_RAW);
philos_set_active_widgets(add_widgets->chkSevereRestrictionTemp, add_widgets->spinSevereRestrictionTemp, add_widgets->cmbSevereRestrictionTemp,0 , CMD_RAW);
philos_set_active_widgets(add_widgets->chkPaddingFLTemp, add_widgets->spinPaddingFLTemp, add_widgets->cmbPaddingFLTemp,0 , CMD_SWAP);
philos_set_active_widgets(add_widgets->chkCPULimitTemp, add_widgets->spinCPULimitTemp, add_widgets->lblCPULimitTemp,1 , CMD_CPU);
philos_set_active_widgets_device_io(add_widgets->cbtTempDevice,add_widgets->chbTempWrite, add_widgets->spinTempWrite, add_widgets->cbtTempWrite);
philos_set_active_widgets_device_io(add_widgets->cbtTempDevice,add_widgets->chbTempRead, add_widgets->spinTempRead, add_widgets->cbtTempRead);
}
else {
gtk_widget_set_sensitive(add_widgets->boxBlockGui, 0);
gtk_widget_set_sensitive(add_widgets->btnSaveTempSave, 0);
}
philos_temp_generate_cmd(add_widgets, &obj_add_config);
}
void event_check_io_device() {
add_init_windows();
philos_temp_add_disk(add_widgets, &obj_add_config, 0);
philos_temp_add_disk(add_widgets, &obj_add_config, 1);
philos_temp_generate_cmd(add_widgets, &obj_add_config);
}
void combo_box_device() {
g_signal_handlers_block_by_func(G_OBJECT(add_widgets->cbtTempDevice), G_CALLBACK(combo_box_device), NULL);
g_signal_handlers_block_by_func(G_OBJECT(add_widgets->cbtTempRead), G_CALLBACK(event_check_io_device), NULL);
g_signal_handlers_block_by_func(G_OBJECT(add_widgets->cbtTempWrite), G_CALLBACK(event_check_io_device), NULL);
g_signal_handlers_block_by_func(G_OBJECT(add_widgets->spinTempRead), G_CALLBACK(event_check_io_device), NULL);
g_signal_handlers_block_by_func(G_OBJECT(add_widgets->spinTempWrite), G_CALLBACK(event_check_io_device), NULL);
g_signal_handlers_block_by_func(G_OBJECT(add_widgets->chbTempRead), G_CALLBACK(event_check_io_device), NULL);
g_signal_handlers_block_by_func(G_OBJECT(add_widgets->chbTempWrite), G_CALLBACK(event_check_io_device), NULL);
philos_update_device_to_entry(add_widgets, &obj_add_config, 0);
philos_update_device_to_entry(add_widgets, &obj_add_config, 1);
add_init_windows();
g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->cbtTempDevice), G_CALLBACK(combo_box_device), NULL);
g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->cbtTempRead), G_CALLBACK(event_check_io_device), NULL);
g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->cbtTempWrite), G_CALLBACK(event_check_io_device), NULL);
g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->spinTempRead), G_CALLBACK(event_check_io_device), NULL);
g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->spinTempWrite), G_CALLBACK(event_check_io_device), NULL);
g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->chbTempRead), G_CALLBACK(event_check_io_device), NULL);
g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->chbTempWrite), G_CALLBACK(event_check_io_device), NULL);
}
void add_event(temp_set_window *widgets) {
g_signal_connect(G_OBJECT(widgets->btnTempCancel),"clicked",G_CALLBACK(add_on_destroy_subwindow),NULL);
g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(add_destroy), NULL);
g_signal_connect(G_OBJECT(widgets->chkSoftRestrictionTemp), "toggled", G_CALLBACK(add_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->chkSevereRestrictionTemp), "toggled", G_CALLBACK(add_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->chkPaddingFLTemp), "toggled", G_CALLBACK(add_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->chkCPULimitTemp), "toggled", G_CALLBACK(add_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->cbxTempQuotaObj),"changed",G_CALLBACK(add_update_combo_box), NULL);
g_signal_connect(G_OBJECT(widgets->cbxTempQuotaLevel2),"changed",G_CALLBACK(add_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->spiSevereRestrictionTemp),"value-changed",G_CALLBACK(add_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->spinSevereRestrictionTemp),"value-changed",G_CALLBACK(add_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->spinPaddingFLTemp),"value-changed",G_CALLBACK(add_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->spinCPULimitTemp),"value-changed",G_CALLBACK(add_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->cmSevereRestrictionTemp),"changed",G_CALLBACK(add_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->cmbSevereRestrictionTemp),"changed",G_CALLBACK(add_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->cmbPaddingFLTemp),"changed",G_CALLBACK(add_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->cbtTempDevice),"changed",G_CALLBACK(combo_box_device), NULL);
g_signal_connect(G_OBJECT(widgets->cbtTempRead),"changed",G_CALLBACK(event_check_io_device), NULL);
g_signal_connect(G_OBJECT(widgets->cbtTempWrite),"changed",G_CALLBACK(event_check_io_device), NULL);
g_signal_connect(G_OBJECT(widgets->spinTempRead),"value-changed",G_CALLBACK(event_check_io_device), NULL);
g_signal_connect(G_OBJECT(widgets->spinTempWrite),"value-changed",G_CALLBACK(event_check_io_device), NULL);
g_signal_connect(G_OBJECT(widgets->chbTempRead), "toggled", G_CALLBACK(event_check_io_device), NULL);
g_signal_connect(G_OBJECT(widgets->chbTempWrite), "toggled", G_CALLBACK(event_check_io_device), NULL);
}
void add_get_systemd_cgls(char* cmd_systemd_cgls) {
CMD_GET_SLICE_SERVICE = cmd_systemd_cgls;
}
void add_destroy(GtkWidget *self) {
add_widgets = NULL;
}
void add_localization(temp_set_window *widgets) {
}
void add_on_destroy_subwindow(GtkWidget *self) {
gtk_widget_destroy(gtk_widget_get_toplevel(self));
add_widgets = NULL;
}
temp_set_window *get_widget_add() {
return add_widgets;
}
void add_show(GtkWidget *self, char* glade_path) {
if (add_widgets != NULL) {
add_update_combo_box();
gtk_widget_show_all(add_widgets->Window);
add_init_windows();
}
else {
add_setup_window(glade_path);
add_update_combo_box();
gtk_widget_show_all(add_widgets->Window);
add_init_windows();
}
}
char* add_get_select_device_to_level_2() {
char* text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(add_widgets->cbxTempQuotaLevel2));
int disk_id = gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaLevel2));
if (disk_id >= 0) {
return text;
}
else {
char* str = (char*)malloc(sizeof(char*)*2);
str[0] = '-';
str[1] = '\0';
return str;
}
}
int add_get_index_type_quota() {
return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaObj));
}
int add_get_index_volume_quota() {
return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaLevel2));
}
int add_get_soft_size() {
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkSoftRestrictionTemp))) {
return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmSevereRestrictionTemp));
}
else {
return -3;
}
}
int add_get_hard_size() {
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkSevereRestrictionTemp))) {
return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmbSevereRestrictionTemp));
}
else {
return -3;
}
}
int add_get_limit_cpu_size() {
return -1;
}
int add_get_limit_swap_size() {
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkPaddingFLTemp))) {
return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmbPaddingFLTemp));
}
else {
return -3;
}
}
int add_get_quota_object_size() {
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkPaddingFLTemp))) {
return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaObj));
}
else {
return -3;
}
}
int add_get_soft() {
return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spiSevereRestrictionTemp));
}
int add_get_hard() {
return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinSevereRestrictionTemp));
}
int add_get_limit_cpu() {
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkCPULimitTemp))) {
return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinCPULimitTemp));
}
else {
return -3;
}
}
int add_get_limit_swap() {
return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinPaddingFLTemp));
}
char* add_get_quota_object() {
return gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(add_widgets->cbxTempQuotaObj));
}
void add_update_combo_box() {
int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaObj));
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) {
fill_cmb_2 = philos_pars_terminal_systemd_cgls(CMD_GET_SLICE_SERVICE, ".service", &size);
philos_array_string_remove_char(&fill_cmb_2, "\n", size);
}
else if (menu_id == 2) {
fill_cmb_2 = philos_pars_terminal_systemd_cgls(CMD_GET_SLICE_SERVICE, ".slice", &size);
philos_array_string_remove_char(&fill_cmb_2, "\n", size);
}
if (menu_id >= 0) {
gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(add_widgets->cbxTempQuotaLevel2));
philos_fill_combo_box_text(add_widgets->cbxTempQuotaLevel2, fill_cmb_2, size);
}
}
int** add_get_read_device() {
return &obj_add_config.i_o_limit_read;
}
int** add_get_read_device_size_pow() {
return &obj_add_config.i_o_limit_read_size;
}
int** add_get_write_device() {
return &obj_add_config.i_o_limit_write;
}
int** add_get_write_device_size_pow() {
return &obj_add_config.i_o_limit_write_size;
}
char*** add_get_select_read_device() {
return &obj_add_config.disk_read;
}
char*** add_get_select_write_device() {
return &obj_add_config.disk_write;
}

@ -1,62 +0,0 @@
#ifndef VIEW_ADD_H
#define VIEW_ADD_H
#include <gtk/gtk.h>
#include <gtk/gtkx.h>
#include "ubl-utils.h"
#include "ubl-strings.h"
#include <locale.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <libintl.h>
#include <getopt.h>
#include <libintl.h>
#include "my_device.h"
#include "philos_utils.h"
#define CMD_CPU "lscpu | grep \"CPU(s):\" |grep -oE \"[0-9]{1,}\""
#define CMD_SWAP "grep '^Swap' /proc/meminfo | grep \"SwapTotal\" |grep -oE \"[0-9]{1,}\""
#define CMD_RAW "cat /proc/meminfo | grep \"MemTotal\" |grep -oE \"[0-9]{1,}\""
static char* CMD_GET_GROUP;
static char* CMD_GET_SLICE_SERVICE;
temp_set_window *add_setup_window(char* glade_path);
void add_event(temp_set_window *widgets);
void add_localization(temp_set_window *widgets);
void add_on_destroy_subwindow(GtkWidget *self);
temp_set_window *get_widget_add();
void add_show(GtkWidget *self, char* glade_path);
void add_destroy(GtkWidget *self);
void add_set_active_widgets(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, int flag_cpu, char* cmd);
void add_init_windows();
void add_update_combo_box();
char*** add_get_select_read_device();
int** add_get_read_device();
int** add_get_write_device();
int add_get_soft();
int add_get_hard();
int add_get_limit_cpu();
int add_get_limit_swap();
char* add_get_quota_object();
char*** add_get_select_write_device();
char*** add_get_select_read_device();
void combo_box_device();
int** add_get_write_device_size_pow();
int** add_get_read_device_size_pow();
int add_get_soft_size();
int add_get_hard_size();
int add_get_limit_cpu_size();
int add_get_limit_swap_size();
int add_get_quota_object_size();
temp_config* get_add_config();
void add_set_active_widgets_device_io(GtkWidget *check, GtkWidget *spin, GtkWidget *combo);
void add_get_cmd_group(char* cmd_get_group);
char* add_get_select_device_to_level_2();
int add_get_index_volume_quota();
int add_get_index_type_quota();
void add_get_systemd_cgls(char* cmd_systemd_cgls);
void add_set_spin_adjustment(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, size_t value);
#endif

@ -1,314 +0,0 @@
#include "view_edit.h"
temp_set_window *edit_widgets = NULL;
temp_config obj_edit_config;
temp_config* get_edit_config() {
return &obj_edit_config;
}
temp_set_window *edit_setup_window(char* glade_path){
if (edit_widgets == NULL) {
edit_widgets = malloc(sizeof(temp_set_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
edit_widgets->Window = yon_gtk_builder_get_widget(builder,"wndQuotasEdit");
edit_widgets->btnTempCancel = yon_gtk_builder_get_widget(builder,"btnEditCancel");
edit_widgets->btnSaveTempSave = yon_gtk_builder_get_widget(builder,"btnSaveEditSave");
edit_widgets->cbtTempDevice = yon_gtk_builder_get_widget(builder,"cbtEditDevice");
edit_widgets->lblCPULimitTemp = yon_gtk_builder_get_widget(builder,"lblCPULimitEdit");
edit_widgets->spinCPULimitTemp = yon_gtk_builder_get_widget(builder,"spinCPULimitEdit");
edit_widgets->chkCPULimitTemp = yon_gtk_builder_get_widget(builder,"chkCPULimitEdit");
edit_widgets->chkPaddingFLTemp = yon_gtk_builder_get_widget(builder,"chkPaddingFLEdit");
edit_widgets->spinPaddingFLTemp = yon_gtk_builder_get_widget(builder,"spinPaddingFLEdit");
edit_widgets->cmbPaddingFLTemp = yon_gtk_builder_get_widget(builder,"cmbPaddingFLEdit");
edit_widgets->chkSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"chkSevereRestrictionEdit");
edit_widgets->spinSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"spinSevereRestrictionEdit");
edit_widgets->cmbSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"cmbSevereRestrictionEdit");
edit_widgets->chkSoftRestrictionTemp = yon_gtk_builder_get_widget(builder,"chkSoftRestrictionEdit");
edit_widgets->spiSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"spiSevereRestrictionEdit");
edit_widgets->cmSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"cmSevereRestrictionEdit");
edit_widgets->chbTempRead = yon_gtk_builder_get_widget(builder,"chbEditRead");
edit_widgets->spinTempRead = yon_gtk_builder_get_widget(builder,"spinEditRead");
edit_widgets->cbtTempRead = yon_gtk_builder_get_widget(builder,"cbtEditRead");
edit_widgets->spinTempWrite = yon_gtk_builder_get_widget(builder,"spinEditWrite");
edit_widgets->chbTempWrite = yon_gtk_builder_get_widget(builder,"chbEditWrite");
edit_widgets->cbtTempWrite = yon_gtk_builder_get_widget(builder,"cbtEditWrite");
edit_widgets->entryTempCmd = yon_gtk_builder_get_widget(builder,"entryEditCmd");
edit_widgets->lblInfoObjQuotas = yon_gtk_builder_get_widget(builder,"lblInfoObjQuotas");
device_fill_disk(edit_widgets->cbtTempDevice);
edit_localization(edit_widgets);
philos_temp_config_init(&obj_edit_config);
}
return edit_widgets;
}
void edit_event(temp_set_window *widgets) {
g_signal_connect(G_OBJECT(widgets->btnTempCancel),"clicked",G_CALLBACK(edit_on_hide_subwindow),NULL);
g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(edit_destroy), NULL);
g_signal_connect(G_OBJECT(widgets->chkSoftRestrictionTemp), "toggled", G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->chkSevereRestrictionTemp), "toggled", G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->chkPaddingFLTemp), "toggled", G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->chkCPULimitTemp), "toggled", G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->chbTempRead), "toggled", G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->chbTempWrite), "toggled", G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->spiSevereRestrictionTemp),"value-changed",G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->spinSevereRestrictionTemp),"value-changed",G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->spinPaddingFLTemp),"value-changed",G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->spinCPULimitTemp),"value-changed",G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->spinTempRead),"value-changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_connect(G_OBJECT(widgets->spinTempWrite),"value-changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_connect(G_OBJECT(widgets->cmSevereRestrictionTemp),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_connect(G_OBJECT(widgets->cmbSevereRestrictionTemp),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_connect(G_OBJECT(widgets->cmbPaddingFLTemp),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_connect(G_OBJECT(widgets->cbtTempRead),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_connect(G_OBJECT(widgets->cbtTempWrite),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_connect(G_OBJECT(widgets->cbtTempDevice),"changed",G_CALLBACK(combo_box_device_edit), NULL);
}
void edit_destroy(GtkWidget *self) {
edit_widgets = NULL;
}
void edit_localization(temp_set_window *widgets) {
}
void edit_on_hide_subwindow(GtkWidget *self) {
gtk_widget_destroy(gtk_widget_get_toplevel(self));
edit_widgets = NULL;
}
temp_set_window *get_widget_edit() {
return edit_widgets;
}
void edit_show(GtkWidget *self, char* glade_path) {
if (edit_widgets != NULL) {
gtk_widget_show_all(edit_widgets->Window);
}
else {
edit_setup_window(glade_path);
gtk_widget_show_all(edit_widgets->Window);
}
}
void wrapper_edit_init_windows_size_memory() {
philos_temp_add_disk(edit_widgets, &obj_edit_config, 0);
philos_temp_add_disk(edit_widgets, &obj_edit_config, 1);
edit_init_windows();
}
void edit_init_windows() {
philos_set_active_widgets(edit_widgets->chkSoftRestrictionTemp, edit_widgets->spiSevereRestrictionTemp, edit_widgets->cmSevereRestrictionTemp,0 ,CMD_RAW);
philos_set_active_widgets(edit_widgets->chkSevereRestrictionTemp, edit_widgets->spinSevereRestrictionTemp, edit_widgets->cmbSevereRestrictionTemp,0 , CMD_RAW);
philos_set_active_widgets(edit_widgets->chkPaddingFLTemp, edit_widgets->spinPaddingFLTemp, edit_widgets->cmbPaddingFLTemp,0 , CMD_SWAP);
philos_set_active_widgets(edit_widgets->chkCPULimitTemp, edit_widgets->spinCPULimitTemp, edit_widgets->lblCPULimitTemp,1 ,CMD_CPU);
philos_set_active_widgets_device_io(edit_widgets->cbtTempDevice,edit_widgets->chbTempWrite, edit_widgets->spinTempWrite, edit_widgets->cbtTempWrite);
philos_set_active_widgets_device_io(edit_widgets->cbtTempDevice,edit_widgets->chbTempRead, edit_widgets->spinTempRead, edit_widgets->cbtTempRead);
philos_temp_generate_cmd(edit_widgets, &obj_edit_config);
}
void combo_box_device_edit() {
g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->cbtTempDevice), G_CALLBACK(combo_box_device_edit), NULL);
g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->cbtTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->cbtTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->spinTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->spinTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->chbTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->chbTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
philos_update_device_to_entry(edit_widgets, &obj_edit_config, 0);
philos_update_device_to_entry(edit_widgets, &obj_edit_config, 1);
edit_init_windows();
g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->cbtTempDevice), G_CALLBACK(combo_box_device_edit), NULL);
g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->cbtTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->cbtTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->spinTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->spinTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->chbTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->chbTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
}
int edit_get_soft_size() {
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkSoftRestrictionTemp))) {
return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmSevereRestrictionTemp));
}
else {
return -3;
}
}
int edit_get_hard_size() {
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkSevereRestrictionTemp))) {
return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmbSevereRestrictionTemp));
}
else {
return -3;
}
}
int edit_get_limit_cpu_size() {
return -1;
}
int edit_get_limit_swap_size() {
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkPaddingFLTemp))) {
return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmbPaddingFLTemp));
}
else {
return -3;
}
}
int edit_get_quota_object_size() {
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkPaddingFLTemp))) {
return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbxTempQuotaObj));
}
else {
return -3;
}
}
int** edit_get_read_device() {
return &obj_edit_config.i_o_limit_read;
}
int** edit_get_read_device_size_pow() {
return &obj_edit_config.i_o_limit_read_size;
}
int** edit_get_write_device() {
return &obj_edit_config.i_o_limit_write;
}
int** edit_get_write_device_size_pow() {
return &obj_edit_config.i_o_limit_write_size;
}
char*** edit_get_select_write_device() {
return &obj_edit_config.disk_write;
}
char*** edit_get_select_read_device() {
return &obj_edit_config.disk_read;
}
int edit_get_soft() {
return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spiSevereRestrictionTemp));
}
int edit_get_hard() {
return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinSevereRestrictionTemp));
}
int edit_get_limit_cpu() {
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkCPULimitTemp))) {
return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinCPULimitTemp));
}
else {
return -3;
}
}
int edit_get_limit_swap() {
return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinPaddingFLTemp));
}
void edit_set_select_read_device(char*** str_value) {
if (str_value) {
if ((*str_value)) {
yon_char_parsed_copy(&obj_edit_config.disk_read, str_value);
}
}
}
void edit_set_select_write_device(char*** str_value) {
if (str_value) {
if ((*str_value)) {
yon_char_parsed_copy(&obj_edit_config.disk_write, str_value);
}
}
}
int set_template_gui_device(int flag_check_array) {
int index = -1;
if (flag_check_array==0) {
index = yon_gtk_combo_box_text_find(edit_widgets->cbtTempDevice, obj_edit_config.disk_read[0]);
gtk_combo_box_set_active(GTK_COMBO_BOX(edit_widgets->cbtTempDevice), index);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(edit_widgets->chbTempRead), 1);
edit_temp_set(obj_edit_config.i_o_limit_read[0],
obj_edit_config.i_o_limit_read_size[0], edit_widgets->chbTempRead,
edit_widgets->spinTempRead,
edit_widgets->cbtTempRead);
}
else if (flag_check_array==1) {
index = yon_gtk_combo_box_text_find(edit_widgets->cbtTempDevice, obj_edit_config.disk_write[0]);
gtk_combo_box_set_active(GTK_COMBO_BOX(edit_widgets->cbtTempDevice), index);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(edit_widgets->chbTempWrite), 1);
edit_temp_set(obj_edit_config.i_o_limit_write[0],
obj_edit_config.i_o_limit_write_size[0],
edit_widgets->chbTempWrite,
edit_widgets->spinTempWrite,
edit_widgets->cbtTempWrite);
}
return index;
}
void set_gui_device() {
int flag = -1;
if (obj_edit_config.disk_read) {
if (obj_edit_config.disk_read[0] != NULL && strstr(obj_edit_config.disk_read[0], "-") == NULL) {
flag = set_template_gui_device(0);
}
}
if (obj_edit_config.disk_write) {
if (obj_edit_config.disk_write[0] != NULL && strstr(obj_edit_config.disk_write[0], "-") == NULL) {
flag = set_template_gui_device(1);
}
}
}
void edit_set_read_device(int* str_value, int* pow_mem) {
if (str_value && pow_mem) {
philos_array_int_copy(&obj_edit_config.i_o_limit_read, &str_value);
philos_array_int_copy(&obj_edit_config.i_o_limit_read_size, &pow_mem);
}
}
void edit_set_write_device(int* str_value, int* pow_mem) {
if (str_value && pow_mem) {
philos_array_int_copy(&obj_edit_config.i_o_limit_write, &str_value);
philos_array_int_copy(&obj_edit_config.i_o_limit_write_size, &pow_mem);
}
}
void edit_set_size_arrays(size_t size_array) {
obj_edit_config.size_disk = size_array;
}
void edit_set_soft(int value, int pow_mem) {
edit_temp_set(value,pow_mem, edit_widgets->chkSoftRestrictionTemp,
edit_widgets->spiSevereRestrictionTemp,
edit_widgets->cmSevereRestrictionTemp);
}
void edit_set_hard(int value, int pow_mem) {
edit_temp_set(value,pow_mem, edit_widgets->chkSevereRestrictionTemp,
edit_widgets->spinSevereRestrictionTemp,
edit_widgets->cmbSevereRestrictionTemp);
}
void edit_set_limit_cpu(int value, int pow_mem) {
edit_temp_set(value,pow_mem, edit_widgets->chkCPULimitTemp,
edit_widgets->spinCPULimitTemp,
NULL);
}
void edit_set_limit_swap(int value, int pow_mem) {
edit_temp_set(value,pow_mem, edit_widgets->chkPaddingFLTemp,
edit_widgets->spinPaddingFLTemp,
edit_widgets->cmbPaddingFLTemp);
}
void edit_temp_set(int value, int pow_mem, GtkWidget* cheek, GtkWidget* spin, GtkWidget* combo_box_text) {
if (pow_mem>=-1 && value>=0) {
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), value);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cheek), 1);
if (combo_box_text) {
gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box_text), pow_mem);
}
}
else {
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cheek), 0);
}
}
void edit_temp_set_obj_quota(char* type, char* value) {
gtk_label_set_label(GTK_LABEL(edit_widgets->lblInfoObjQuotas), yon_char_unite(type, " " ,value, NULL));
}

@ -1,65 +0,0 @@
#ifndef VIEW_EDIT_H
#define VIEW_EDIT_H
#include <gtk/gtk.h>
#include <gtk/gtkx.h>
#include "ubl-utils.h"
#include "ubl-strings.h"
#include <locale.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <libintl.h>
#include <getopt.h>
#include <libintl.h>
#include "my_device.h"
#include "philos_utils.h"
#define CMD_CPU "lscpu | grep \"CPU(s):\" |grep -oE \"[0-9]{1,}\""
#define CMD_SWAP "grep '^Swap' /proc/meminfo | grep \"SwapTotal\" |grep -oE \"[0-9]{1,}\""
#define CMD_RAW "cat /proc/meminfo | grep \"MemTotal\" |grep -oE \"[0-9]{1,}\""
// Функции
temp_set_window *edit_setup_window(char* glade_path);
void edit_event(temp_set_window *widgets);
void edit_localization(temp_set_window *widgets);
void edit_on_hide_subwindow(GtkWidget *self);
temp_set_window *get_widget_edit();
void combo_box_device_edit();
void edit_show(GtkWidget *self, char* glade_path);
void edit_destroy(GtkWidget *self);
void edit_init_windows();
void wrapper_edit_init_windows_size_memory();
void edit_set_active_widgets(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, int flag_cpu, char* cmd);
char*** edit_get_select_read_device();
char*** edit_get_select_write_device();
int** edit_get_read_device();
int** edit_get_write_device();
int edit_get_soft();
int edit_get_hard();
int edit_get_limit_cpu();
int edit_get_limit_swap();
void wrapper_edit_show();
void edit_set_select_write_device(char*** str_value);
void edit_set_select_read_device(char*** str_value);
void edit_set_read_device(int* str_value, int* pow_mem);
void edit_set_write_device(int* str_value, int* pow_mem);
void edit_set_soft(int value, int pow_mem);
void edit_set_hard(int value, int pow_mem);
void edit_set_limit_cpu(int value, int pow_mem);
void edit_set_limit_swap(int value, int pow_mem);
void edit_temp_set(int value, int pow_mem, GtkWidget* cheek, GtkWidget* spin, GtkWidget* combo_box_text);
int** edit_get_read_device_size_pow();
int** edit_get_write_device_size_pow();
void edit_set_size_arrays(size_t size_array);
int edit_get_soft_size();
int edit_get_hard_size();
int edit_get_limit_cpu_size();
int edit_get_limit_swap_size();
void edit_config_init();
void set_gui_device();
temp_config* get_edit_config();
void edit_temp_set_obj_quota(char* type, char* value);
void edit_set_active_widgets_device_io(GtkWidget *check, GtkWidget *spin, GtkWidget *combo);
void edit_set_spin_adjustment(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, size_t value);
#endif

@ -0,0 +1,239 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-resourcequota">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-resourcequota.css -->
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">emblem-ok-symbolic</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">process-stop-symbolic</property>
</object>
<object class="GtkWindow" id="FiltersWindow">
<property name="can-focus">False</property>
<property name="valign">start</property>
<property name="resizable">False</property>
<property name="icon-name">com.ublinux.ubl-settings-resourcequota</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkCheckButton" id="QuotaTypeCheck">
<property name="label" translatable="yes">Quota type</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="halign">start</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="QuotaTargetCheck">
<property name="label" translatable="yes">Quota target</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="halign">start</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="SoftRamLimitCheck">
<property name="label" translatable="yes">Soft RAM limit, (volume)</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="halign">start</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="HardRamLimitCheck">
<property name="label" translatable="yes">Hard RAM limit, (volume)</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="halign">start</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="PagingLimitCheck">
<property name="label" translatable="yes">Swap file limit (volume)</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="halign">start</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="CpuLimitCheck">
<property name="label" translatable="yes">CPU limit (%)</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="halign">start</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="ReadLimitCheck">
<property name="label" translatable="yes">I/O limit (read)</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="halign">start</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="WriteLimitCheck">
<property name="label" translatable="yes">I/O limit (write)</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="halign">start</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">7</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">end</property>
<property name="margin-top">5</property>
<property name="spacing">5</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkButton" id="CancelButton">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="valign">center</property>
<property name="image">image2</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="AcceptButton">
<property name="label" translatable="yes">Accept</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="valign">center</property>
<property name="image">image1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">5</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="show-close-button">True</property>
<child type="title">
<object class="GtkLabel" id="lblFiltersHead">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Filters</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">32</property>
<property name="icon-name">com.ublinux.ubl-settings-resourcequota</property>
<property name="icon_size">5</property>
</object>
</child>
</object>
</child>
</object>
</interface>

@ -0,0 +1,938 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-resourcequota">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-resourcequota.css -->
<object class="GtkAdjustment" id="adjustment1">
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustment2">
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustment3">
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustment4">
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustment5">
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustment6">
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">process-stop-symbolic</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">emblem-ok-symbolic</property>
</object>
<object class="GtkWindow" id="QuotasWindow">
<property name="can-focus">False</property>
<property name="valign">start</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="icon-name">com.ublinux.ubl-settings-resourcequota</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="AddQuotaTargetBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Quota object:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="TargetTypeCombo">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<property name="active-id">0</property>
<items>
<item translatable="yes">User</item>
<item translatable="yes">Process</item>
<item translatable="yes">Slice</item>
</items>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="TargetCombo">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="EditQuotaTargetBox">
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Quota object:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="TargetLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="BlockUiBox">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0.019999999552965164</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="bottom-padding">5</property>
<property name="left-padding">5</property>
<property name="right-padding">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Soft restriction</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkCheckButton" id="SoftRestrictionCheck">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="SoftRestrictionSpin">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="width-chars">7</property>
<property name="text" translatable="yes">0</property>
<property name="adjustment">adjustment3</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="SoftRestrictionCombo">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<property name="active-id">0</property>
<items>
<item translatable="yes">Kb</item>
<item translatable="yes">Mb</item>
<item translatable="yes">Gb</item>
<item translatable="yes">Tb</item>
</items>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Hard restriction</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkCheckButton" id="HardRestrictionCheck">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="HardRestrictionSpin">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="width-chars">7</property>
<property name="text" translatable="yes">0</property>
<property name="adjustment">adjustment4</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="HardRestrictionCombo">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<property name="active-id">0</property>
<items>
<item translatable="yes">Kb</item>
<item translatable="yes">Mb</item>
<item translatable="yes">Gb</item>
<item translatable="yes">Tb</item>
</items>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">RAM limit</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0.019999999552965164</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="bottom-padding">5</property>
<property name="left-padding">5</property>
<property name="right-padding">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkCheckButton" id="PagingLimitCheck">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="PagingLimitSpin">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="width-chars">7</property>
<property name="text" translatable="yes">0</property>
<property name="adjustment">adjustment5</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="PagingLimitCombo">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<property name="active-id">0</property>
<items>
<item translatable="yes">Kb</item>
<item translatable="yes">Mb</item>
<item translatable="yes">Gb</item>
<item translatable="yes">Tb</item>
</items>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Paging file limit</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0.019999999552965164</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="bottom-padding">5</property>
<property name="left-padding">5</property>
<property name="right-padding">5</property>
<child>
<object class="GtkBox" id="lblCPULimit">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkCheckButton" id="CpuLimitCheck">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="CpuLimitSpin">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="width-chars">7</property>
<property name="text" translatable="yes">0</property>
<property name="adjustment">adjustment6</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">%</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">CPU limit</property>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0.019999999552965164</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="bottom-padding">5</property>
<property name="left-padding">5</property>
<property name="right-padding">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Device:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="DeviceLimitCombo">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="box2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Read</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkCheckButton" id="DeviceLimitReadCheck">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="DeviceLimitReadSpin">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="width-chars">7</property>
<property name="text" translatable="yes">0</property>
<property name="adjustment">adjustment1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="DeviceLimitReadCombo">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<property name="active-id">0</property>
<items>
<item translatable="yes">Kb</item>
<item translatable="yes">Mb</item>
<item translatable="yes">Gb</item>
<item translatable="yes">Tb</item>
</items>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="label" translatable="yes">Write</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkCheckButton" id="DeviceLimitWriteCheck">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="DeviceLimitWriteSpin">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="width-chars">7</property>
<property name="text" translatable="yes">0</property>
<property name="adjustment">adjustment2</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="DeviceLimitWriteCombo">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<property name="active-id">0</property>
<items>
<item translatable="yes">Kb</item>
<item translatable="yes">Mb</item>
<item translatable="yes">Gb</item>
<item translatable="yes">Tb</item>
</items>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Input/Output limit of block devices</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0.019999999552965164</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="bottom-padding">5</property>
<property name="left-padding">5</property>
<property name="right-padding">5</property>
<child>
<object class="GtkEntry" id="ManualInputEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Manual input (for advanced users)</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="lblEditSpace1">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="CancelButton">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="SaveButton">
<property name="label" translatable="yes">Save</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image2</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="show-close-button">True</property>
<child type="title">
<object class="GtkLabel" id="TitleLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">CPU and RAM quotas - Adding</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">32</property>
<property name="icon-name">com.ublinux.ubl-settings-resourcequota</property>
<property name="icon_size">5</property>
</object>
</child>
</object>
</child>
</object>
<object class="GtkSizeGroup">
<widgets>
<widget name="box2"/>
<widget name="frame1"/>
<widget name="box1"/>
</widgets>
</object>
</interface>

@ -1,57 +1,39 @@
.noborder {
border:none;
}
.textHead{
text-shadow: 2px 2px @theme_bg_color;
color: @theme_text_color;
}
.boxInfoMessError{
background-color: #ea9999;
}
.boxInfoMessOK{
background-color: #f3f0ac;
}
.bannerbackground {
background-color: #404040;
}
.view_app {
background-color: @theme_bg_color;
}
.view_app.view.cell:selected {
background-color:@theme_selected_bg_color;
color:@theme_selected_text_color;
transition: 10ms ease-out;
border-radius: 3px;
}
#GnomeIcon{
border-style:solid;
border-bottom-width: 1px;
border-image: linear-gradient(90deg, alpha(@theme_text_color,0.4) 55%, alpha(@theme_bg_color, 0) 100%);
border-image-slice: 1;
.thin {
margin:0px;
padding:0px;
}
#SepIcon{
background-color: alpha(@theme_text_color, 0.6);
.inherited>* {
border:none;
background:inherit;
}
#iconlabel {
font-size:14px;
font-weight: bold;
.opacited {
opacity:0.98;
}
.roundborder * {
border-width:0px;
border-radius:5px;
.borders {
border-radius: 2px;
border-width: 1px;
border-color: @theme_text_color;
}
.noborder {
border: none;
.workingbg {
background:@theme_base_color;
}
.menu:hover {
border-color:alpha(@theme_text_color, 0.01);
.textoutline {
text-shadow: 0.5px 0 0.5px @theme_bg_color,
0 0.5px 0.5px @theme_bg_color,
-0.5px 0 0.5px @theme_bg_color,
0 -0.5px 0.5px @theme_bg_color;
}
.menu {
border-color:alpha(@theme_text_color, 0.01);
.nobackground {
background: none;
}
.menu:hover >* {
border-color:alpha(@theme_text_color, 0.01);
}.menuitembottom{
.menuitembottom{
margin-top:0px;
margin-bottom:3px;
border-color:inherit;
@ -73,25 +55,19 @@
border-left-width:inherit;
border-right-width:inherit;
}
.menuitemtop *{
.menuitemtop>*{
margin:2px 2px 0 2px;
padding-top:2px;
padding-bottom:2px;
/* padding: 5px 0px 3px 5px; */
padding: 5px 10px 3px 5px;
border:transparent;
}
.menuitemmiddle *{
.menuitemmiddle>*{
margin:0 2px 0 2px;
padding-top:2px;
padding-bottom:2px;
/* padding: 3px 0px 3px 5px; */
padding: 3px 10px 3px 5px;
border:transparent;
}
.menuitembottom *{
.menuitembottom>*{
margin:0 2px 2px 2px;
padding-top:2px;
padding-bottom:2px;
/* padding: 3px 0px 5px 5px; */
padding: 3px 10px 5px 5px;
}
.menuitemtop:hover {
background:@theme_bg_color;
@ -114,68 +90,68 @@
border-right-width:inherit;
}
.menuitemtop:hover* {
.menuitemtop:hover>* {
margin:2px 2px 0 2px;
padding-top:2px;
padding-bottom:2px;
/* padding: 5px 0 3px 5px; */
padding: 5px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
}
.menuitemmiddle:hover* {
margin:0 2px 0px 2px;
padding-top:2px;
padding-bottom:2px;
/* padding: 3px 0px 3px 5px; */
.menuitemmiddle:hover>* {
margin:0 2px 0 2px;
padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
}
.menuitembottom:hover* {
.menuitembottom:hover>* {
margin:0 2px 2px 2px;
padding-top:2px;
padding-bottom:2px;
/* padding: 3px 0px 5px 5px; */
padding: 3px 10px 5px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
}
.workingbg, #workingbg {
background-color:@theme_base_color;
}
.workingbg.view.cell:selected {
background-color:@theme_selected_bg_color;
}
.workingbg.view.cell:hover {
background-color:darker(@theme_selected_bg_color);
color:@theme_selected_text_color;
border-radius:3px;
}
.bkim {
transition: 200ms ease-out;
background-image: none;
}
.noborder{
border:none;
.boxInfoMessError{
background-color: #ea9999;
}
.bkim{
opacity:0.99;
border:none;
.boxInfoMessOK{
background-color: #f3f0ac;
}
.nohover {
margin:3px 2px 3px 2px;
border-radius:2px;
}
.bkim_no_plug{
background-color: transparent;
opacity:0.99;
.nohover:hover {
background-color: transparent;
margin:3px 2px 3px 2px;
border-radius:2px;
color:inherit;
}
.thin{
margin:0px;
padding: 0px;
.aaa{
margin-top:0px;
margin-bottom:0px;
border-color:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.nobg{
background: none;
.aaa *{
margin:0 2px 0 2px;
padding-top: 3px;
padding-bottom:3px;
border:transparent;
}
.addbg * {
background-color: @theme_bg_color;
.aaa:hover {
background:@theme_bg_color;
border-color:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.aaa:hover * {
margin:0 2px 0 2px;
padding-top: 3px;
padding-bottom:3px;
background:@theme_selected_bg_color;
border-radius:2px;
}

File diff suppressed because it is too large Load Diff

@ -1,257 +1,408 @@
# Language translations for ubl-settings-diskquota package.
# Language translations for ubl-settings-resourcequota package.
# Copyright (C) 2022, UBTech LLC
# This file is distributed under the same license as the ubl-settings-diskquota package.
# This file is distributed under the same license as the ubl-settings-resourcequota package.
# UBLinux Team <info@ublinux.com>, 2022
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Project-Id-Version: ubl-settings-resourcequota 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-10 16:09+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"POT-Creation-Date: 2023-05-22 16:12+0600\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "Update"
#: source/ubl-strings.h:1
msgid "Version:"
msgstr ""
msgid ""
"Warning! Application was launched without root - root-dependent actions are "
"locked"
#: source/ubl-strings.h:2
msgid "ubl-settings-resourcequota version:"
msgstr ""
msgid "Config loading failed"
#: source/ubl-strings.h:2 source/ubl-strings.h:4
msgid "CPU and RAM quotas"
msgstr ""
msgid "Remove"
#: source/ubl-strings.h:2
msgid "Usage:"
msgstr ""
msgid "User"
#: source/ubl-strings.h:2
msgid "[OPTIONS]"
msgstr ""
msgid "Group"
#: source/ubl-strings.h:2
msgid "Options:"
msgstr ""
msgid "Process"
#: source/ubl-strings.h:2
msgid "Show this help"
msgstr ""
msgid "Slice"
#: source/ubl-strings.h:2
msgid "Show package version"
msgstr ""
#: source/ubl-strings.h:2
msgid "Lock this help menu"
msgstr ""
#: source/ubl-strings.h:2
msgid "Lock configuration saving"
msgstr ""
#: source/ubl-strings.h:2
msgid "Lock local configration saving"
msgstr ""
#: source/ubl-strings.h:2
msgid "Lock global configration saving"
msgstr ""
#: source/ubl-strings.h:2
msgid "Lock global configration loading"
msgstr ""
#: source/ubl-strings.h:3
msgid ""
"Warning! Application was launched without root - root-dependent actions are "
"locked"
msgstr ""
#: source/ubl-strings.h:5
msgid ""
"Configuring CPU and RAM quota settings for groups and users of the system"
msgstr ""
#: source/ubl-strings.h:7
msgid "Operation succeeded"
msgstr ""
#: source/ubl-strings.h:8
msgid "About"
msgstr ""
#: source/ubl-strings.h:9
msgid "Documentation"
msgstr ""
#: source/ubl-strings.h:10
msgid "Save to local configuration"
msgstr ""
#: source/ubl-strings.h:10
#: source/ubl-strings.h:11
msgid "Save to global configuration"
msgstr ""
#: source/ubl-strings.h:11
#: source/ubl-strings.h:12 source/ubl-strings.h:47
msgid "Save configuration"
msgstr ""
msgid "Kb"
#: source/ubl-strings.h:13
msgid "Save"
msgstr ""
msgid "Mb"
#: source/ubl-strings.h:14
msgid "Load local configuration"
msgstr ""
msgid "Gb"
#: source/ubl-strings.h:15
msgid "Load global configuration"
msgstr ""
msgid "Tb"
#: source/ubl-strings.h:16 source/ubl-strings.h:17
msgid "Load"
msgstr ""
msgid "Type quota"
#: source/ubl-strings.h:19
msgid "Cancel"
msgstr ""
msgid "Quota volume"
#: source/ubl-strings.h:21
msgid "Would you like to read documentation in the Web?"
msgstr ""
msgid "Soft RAM limit, (volume)"
#: source/ubl-strings.h:22
msgid ""
"You will be redirected to documentation website, where documentation is\n"
"translated and supported by community."
msgstr ""
msgid "Hard RAM limit, (volume)"
#: source/ubl-strings.h:23
msgid "Always redirect to online documentation"
msgstr ""
msgid "Swap file limit (volume)"
#: source/ubl-strings.h:24
msgid "Open documentation"
msgstr ""
msgid "CPU limit (%)"
#: source/ubl-strings.h:25
msgid "Project homepage"
msgstr ""
msgid "I/O limit (read)"
#: source/ubl-strings.h:26
msgid "Nothing were chosen"
msgstr ""
msgid "I/O limit (write)"
#: source/ubl-strings.h:28
msgid "User"
msgstr ""
msgid "Filters"
#: source/ubl-strings.h:29
msgid "Group"
msgstr ""
msgid "List quotas"
#: source/ubl-strings.h:30
msgid "Process"
msgstr ""
msgid "Dispatcher"
#: source/ubl-strings.h:31
msgid "Slice"
msgstr ""
msgid "Processes"
#: source/ubl-strings.h:33
msgid "Kb"
msgstr ""
msgid "Information"
#: source/ubl-strings.h:34
msgid "Mb"
msgstr ""
msgid "seconds"
#: source/ubl-strings.h:35
msgid "Gb"
msgstr ""
msgid "Update every"
#: source/ubl-strings.h:36
msgid "Tb"
msgstr ""
msgid "Core streams"
#: source/ubl-strings.h:38
msgid "Global configuration loading succeeded."
msgstr ""
msgid "All groups including empty"
#: source/ubl-strings.h:39
msgid "Local configuration loading succeeded."
msgstr ""
msgid "View properties for"
#: source/ubl-strings.h:41
msgid "Local and global configuration saving succeeded."
msgstr ""
msgid "Setting resource quotas"
#: source/ubl-strings.h:42
msgid "Global configuration saving succeeded."
msgstr ""
msgid "CPU and RAM quotas"
#: source/ubl-strings.h:43 source/ubl-strings.h:49
msgid "Local configuration saving succeeded."
msgstr ""
#: source/ubl-strings.h:44 source/ubl-strings.h:45 source/ubl-strings.h:46
msgid "Quota deleted"
msgstr ""
#: source/ubl-strings.h:48
msgid "Nothing to save!"
msgstr ""
#: source/ubl-strings.h:50
msgid "Config loading failed"
msgstr ""
#: source/ubl-strings.h:52
msgid "Quotas list"
msgstr ""
#: source/ubl-strings.h:53
msgid "Dispatcher"
msgstr ""
#: source/ubl-strings.h:54
msgid "Processes"
msgstr ""
#: source/ubl-strings.h:55 source/ubl-strings.h:76
msgid "Information"
msgstr ""
msgid "Delete"
#: source/ubl-strings.h:57
msgid "Quota type"
msgstr ""
msgid "Edit"
#: source/ubl-strings.h:58
msgid ""
"Quota\n"
"target"
msgstr ""
msgid "Add"
#: source/ubl-strings.h:59
msgid ""
"Soft RAM limit,\n"
"(volume)"
msgstr ""
msgid "Error saved local and global configuration"
#: source/ubl-strings.h:60
msgid ""
"Hard RAM limit,\n"
"(volume)"
msgstr ""
#: source/ubl-strings.h:61
msgid ""
"GTK settings disk quota for UBLinux\n"
"\n"
"Usage: ubl-settings-diskquota [OPTIONS...]\n"
"Options:\n"
" -h, --help\t Show this help\n"
" -V, --version\t Show package version\n"
" --lock-help Lock utility help\n"
" --lock-save Lock saving local and global configuration\n"
" --lock-save-local Lock save global configuration\n"
" --lock-save-global Lock load global configuration\n"
" --lock-load-global Lock load global configuration\n"
"Swap file\n"
"limit\n"
"(volume)"
msgstr ""
msgid "Global configuration read error"
#: source/ubl-strings.h:62
msgid ""
"CPU limit\n"
"(%)"
msgstr ""
msgid "Global configuration write error"
#: source/ubl-strings.h:63
msgid ""
"I/O\n"
"limit\n"
"(read)"
msgstr ""
msgid "Nothing to save!"
#: source/ubl-strings.h:64
msgid ""
"I/O\n"
"limit\n"
"(write)"
msgstr ""
msgid "Project Home Page"
#: source/ubl-strings.h:66
msgid "Quota target"
msgstr ""
msgid "Save"
#: source/ubl-strings.h:67
msgid "Soft RAM limit, n(volume)"
msgstr ""
msgid "Save in global and local configuration"
#: source/ubl-strings.h:68
msgid "Hard RAM limit, (volume)"
msgstr ""
msgid "Save in global configuration"
#: source/ubl-strings.h:69
msgid "Swap file limit (volume)"
msgstr ""
msgid "Save in local configuration"
#: source/ubl-strings.h:70
msgid "CPU limit (%)"
msgstr ""
msgid "Global configuration downloaded successfully"
#: source/ubl-strings.h:71
msgid "I/O limit (read)"
msgstr ""
msgid "Load"
#: source/ubl-strings.h:72
msgid "I/O limit (write)"
msgstr ""
msgid "Load global configuration"
#: source/ubl-strings.h:73
msgid "Accept"
msgstr ""
msgid "Load local configuration"
#: source/ubl-strings.h:75
msgid "Filters"
msgstr ""
msgid "Local configuration downloaded successfully"
#: source/ubl-strings.h:77
msgid "Remove"
msgstr ""
msgid "Local configuration reading error"
#: source/ubl-strings.h:78
msgid "Edit"
msgstr ""
msgid "Local configuration successfully written"
#: source/ubl-strings.h:79
msgid "Add"
msgstr ""
msgid "Local configuration write error"
#: source/ubl-strings.h:81
msgid "Update every"
msgstr ""
msgid "Help"
#: source/ubl-strings.h:82
msgid "seconds"
msgstr ""
msgid "About"
#: source/ubl-strings.h:83
msgid "Update"
msgstr ""
#: source/ubl-strings.h:85
msgid "All groups including empty"
msgstr ""
msgid "Settings quotas - Editing"
#: source/ubl-strings.h:86
msgid "Core streams"
msgstr ""
msgid "Quota object"
#: source/ubl-strings.h:88
msgid "View properties for"
msgstr ""
#: source/ubl-strings.h:90
msgid "CPU and RAM quotas - Adding"
msgstr ""
#: source/ubl-strings.h:91
msgid "CPU and RAM quotas - Editing"
msgstr ""
#: source/ubl-strings.h:92
msgid "Quota object:"
msgstr ""
#: source/ubl-strings.h:93
msgid "RAM limit"
msgstr ""
msgid "Soft Restriction"
#: source/ubl-strings.h:94
msgid "Soft restriction"
msgstr ""
msgid "Severe Restriction"
#: source/ubl-strings.h:95
msgid "Hard restriction"
msgstr ""
#: source/ubl-strings.h:96
msgid "Paging file limit"
msgstr ""
#: source/ubl-strings.h:97
msgid "CPU limit"
msgstr ""
#: source/ubl-strings.h:98
msgid "Input/Output limit of block devices"
msgstr ""
#: source/ubl-strings.h:99
msgid "Device:"
msgstr ""
#: source/ubl-strings.h:100
msgid "Read"
msgstr ""
#: source/ubl-strings.h:101
msgid "Write"
msgstr ""
msgid "Manual input (for advanced users)"
#: source/ubl-strings.h:102
msgid "Apply changes of operations limit"
msgstr ""
msgid "Settings quotas - Adding"
#: source/ubl-strings.h:103
msgid "Manual input (for advanced users)"
msgstr ""

@ -1,60 +1,34 @@
# Russian translations for ubl-settings-diskquota package.
# Russian translations for ubl-settings-resourcequota package.
# Copyright (C) 2022, UBTech LLC
# This file is distributed under the same license as the ubl-settings-diskquota package.
# This file is distributed under the same license as the ubl-settings-resourcequota package.
# UBLinux Team <info@ublinux.com>, 2022
#
#, fuzzy
msgid "test"
msgid ""
msgstr ""
"Project-Id-Version: ubl-settings-bootloader 1.0\n"
"Project-Id-Version: ubl-settings-resourcequota 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-04-10 16:09+0000\n"
"POT-Creation-Date: 2023-05-22 16:12+0600\n"
"PO-Revision-Date: 2023-01-01 00:00+0600\n"
"Last-Translator: UBLinux Team <info@ublinux.com>\n"
"Language-Team: Russian - UBLinux Team <info@ublinux.com>\n"
"Language: Russian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit"
#: source/ubl-strings.h:9
#: source/ubl-strings.h:8
#: source/ubl-strings.h:1
msgid "Update"
msgstr "Обновить"
msgid "Open documentation"
msgstr "Прочитать справку"
msgid "Config loading failed"
msgstr "Не удалось загрузить конфигурацию"
msgid ""
"Warning! Application was launched without root - root-dependent actions are "
"locked"
msgstr "Внимание! Приложение было запущено без прав суперпользователя - действия, требующие их наличия заблокированы"
msgid "Quota deleted"
msgstr "Квота удалена"
msgid "User"
msgstr "Пользователь"
msgid "Group"
msgstr "Группа"
msgid "Process"
msgstr "Процесс"
msgid "Slice"
msgstr "Слайс"
"Content-Transfer-Encoding: 8bit\n"
#: source/ubl-strings.h:1
msgid "Version:"
msgstr "Версия:"
#: source/ubl-strings.h:2
msgid "CPU and RAM quotas settings"
msgstr "Настройки квот процессора и ОЗУ"
#, fuzzy
msgid "ubl-settings-resourcequota version:"
msgstr "Версия ubl-settings-resourcequota: "
#: source/ubl-strings.h:2 source/ubl-strings.h:4
msgid "CPU and RAM quotas"
msgstr "Квоты процессора и ОЗУ"
#: source/ubl-strings.h:2
msgid "Usage:"
@ -81,9 +55,8 @@ msgid "Lock this help menu"
msgstr "Блокировка вызова справки"
#: source/ubl-strings.h:2
#, fuzzy
msgid "Lock configuration saving"
msgstr "Блокировка сохранения локальной и глобальной конфигурации"
msgstr "Блокировка сохранения конфигурации"
#: source/ubl-strings.h:2
msgid "Lock local configration saving"
@ -97,296 +70,366 @@ msgstr "Блокировка сохранения глобальной конф
msgid "Lock global configration loading"
msgstr "Блокировка загрузки глобальной конфигурации"
msgid "Read Online"
msgstr "Читать онлайн"
msgid "Always redirect to online documentation"
msgstr "Всегда перенаправлять"
msgid "Would you like to read documentation in the Web?"
msgstr "Вы хотите прочитать справку в Сети?"
#: source/ubl-strings.h:3
msgid ""
"Warning! Application was launched without root - root-dependent actions are "
"locked"
msgstr ""
"Внимание! Приложение было запущено без прав суперпользователя - действия, "
"требующие их наличия заблокированы"
#: source/ubl-strings.h:5
msgid ""
"You will be redirected to documentation website where documentation is\n"
"translated and supported by community."
"Configuring CPU and RAM quota settings for groups and users of the system"
msgstr ""
"Вы будете перенаправлены на сайт с документацией где страницы помощи\n"
"переводятся и поддерживаются сообществом."
"Настройка параметров квот процессорного времени и ОЗУ для групп и "
"пользователей системы"
#: source/ubl-strings.h:7
msgid "Operation succeeded"
msgstr "Операция завершена"
#: source/ubl-strings.h:8
msgid "About"
msgstr "О программе"
#: source/ubl-strings.h:9
msgid "Documentation"
msgstr "Справка"
#: source/ubl-strings.h:10
msgid "Save to local configuration"
msgstr "Сохранить в локальную конфигурацию"
#: source/ubl-strings.h:10
#: source/ubl-strings.h:11
msgid "Save to global configuration"
msgstr "Сохранить в глобальную конфигурацию"
#: source/ubl-strings.h:11
#: source/ubl-strings.h:12 source/ubl-strings.h:47
msgid "Save configuration"
msgstr "Сохранить конфигурацию"
msgid "Kb"
msgstr "Кб"
#: source/ubl-strings.h:13
msgid "Save"
msgstr "Сохранить"
msgid "Mb"
msgstr "Мб"
#: source/ubl-strings.h:14
msgid "Load local configuration"
msgstr "Загрузить локальную конфигуруцию"
msgid "Gb"
msgstr "Гб"
#: source/ubl-strings.h:15
msgid "Load global configuration"
msgstr "Загрузить глобальную конфигурацию"
msgid "Tb"
msgstr "Тб"
#: source/ubl-strings.h:16 source/ubl-strings.h:17
msgid "Load"
msgstr "Загрузить"
msgid "Type quota"
msgstr "Тип квоты"
#: source/ubl-strings.h:19
msgid "Cancel"
msgstr "Отмена"
msgid "Quota volume"
msgstr "Объект квотирования"
#: source/ubl-strings.h:21
msgid "Would you like to read documentation in the Web?"
msgstr "Вы хотите прочитать справку в Сети?"
msgid "Soft RAM limit, (volume)"
msgstr "Мягкий лимит ОЗУ, (объём)"
#: source/ubl-strings.h:22
msgid ""
"You will be redirected to documentation website, where documentation is\n"
"translated and supported by community."
msgstr ""
"Вы будете перенаправлены на сайт с документацией, где страницы помощи\n"
"переводятся и поддерживаются сообществом."
msgid "Hard RAM limit, (volume)"
msgstr "Жёсткий лимит ОЗУ, (объём)"
#: source/ubl-strings.h:23
msgid "Always redirect to online documentation"
msgstr "Всегда перенаправлять"
msgid "Swap file limit (volume)"
msgstr "Лимит файла подкачки (объём)"
#: source/ubl-strings.h:24
msgid "Open documentation"
msgstr "Прочитать справку"
msgid "CPU limit (%)"
msgstr "Лимит ЦПУ (%)"
#: source/ubl-strings.h:25
msgid "Project homepage"
msgstr "Домашняя страница проекта"
msgid "I/O limit (read)"
msgstr "Лимит I/O (чтение)"
#: source/ubl-strings.h:26
msgid "Nothing were chosen"
msgstr "Ничего не было выбрано"
msgid "I/O limit (write)"
msgstr "Лимит I/O (запись)"
#: source/ubl-strings.h:28
msgid "User"
msgstr "Пользователь"
msgid "Filters"
msgstr "Фильтры"
#: source/ubl-strings.h:29
msgid "Group"
msgstr "Группа"
msgid "Quota\nvolume"
msgstr "Объем\nквотирования"
#: source/ubl-strings.h:30
msgid "Process"
msgstr "Процесс"
msgid "Soft RAM limit,\n(volume)"
msgstr "Мягкий лимит ОЗУ,\n(объём)"
#: source/ubl-strings.h:31
msgid "Slice"
msgstr "Слайс"
msgid "Hard RAM limit,\n(volume)"
msgstr "Жёсткий лимит ОЗУ,\n(объём)"
#: source/ubl-strings.h:33
msgid "Kb"
msgstr "Кб"
msgid "Swap file\nlimit\n(volume)"
msgstr "Лимит файлов\nподкачки\n(объём)"
#: source/ubl-strings.h:34
msgid "Mb"
msgstr "Мб"
msgid "CPU limit\n(%)"
msgstr "Лимит ЦПУ\n(%)"
#: source/ubl-strings.h:35
msgid "Gb"
msgstr "Гб"
msgid "I/O\nlimit\n(read)"
msgstr "Лимит\nI/O\n(чтение)"
#: source/ubl-strings.h:36
msgid "Tb"
msgstr "Тб"
msgid "I/O\nlimit\n(write)"
msgstr "Лимит\nI/O\n(запись)"
#: source/ubl-strings.h:38
msgid "Global configuration loading succeeded."
msgstr "Успешно загружена глобальная конфигурация"
#: source/ubl-strings.h:39
msgid "Local configuration loading succeeded."
msgstr "Успешно загружена локальная конфигурация"
#: source/ubl-strings.h:41
msgid "Local and global configuration saving succeeded."
msgstr "Успешно записана конфигурация"
#: source/ubl-strings.h:42
msgid "Global configuration saving succeeded."
msgstr "Успешно записана глобальная конфигурация"
#: source/ubl-strings.h:43 source/ubl-strings.h:49
msgid "Local configuration saving succeeded."
msgstr "Успешно записана локальная конфигурация"
#: source/ubl-strings.h:44 source/ubl-strings.h:45 source/ubl-strings.h:46
msgid "Quota deleted"
msgstr "Квота удалена"
#: source/ubl-strings.h:48
msgid "Nothing to save!"
msgstr "Ничего не было выбрано"
#: source/ubl-strings.h:50
msgid "Config loading failed"
msgstr "Ошибка загрузки конфигурации"
msgid "List quotas"
#: source/ubl-strings.h:52
msgid "Quotas list"
msgstr "Список квот"
#: source/ubl-strings.h:53
msgid "Dispatcher"
msgstr "Диспетчер"
#: source/ubl-strings.h:54
msgid "Processes"
msgstr "Процессы"
#: source/ubl-strings.h:55 source/ubl-strings.h:76
msgid "Information"
msgstr "Информация"
msgid "seconds"
msgstr "сек."
msgid "Update every"
msgstr "Обновлять каждые"
msgid "Core streams"
msgstr "Потоки ядра"
msgid "All groups including empty"
msgstr "Все группы включая пустые"
msgid "View properties for"
msgstr "Посмотреть свойства для"
#: source/ubl-strings.h:57
msgid "Quota type"
msgstr "Тип квоты"
msgid "Setting resource quotas"
msgstr "Установка ресурсов квот"
#: source/ubl-strings.h:58
msgid ""
"Quota\n"
"target"
msgstr ""
"Объект\n"
"квотирования"
msgid "CPU and RAM quotas"
msgstr "Квоты процессора и ОЗУ"
#: source/ubl-strings.h:59
msgid ""
"Soft RAM limit,\n"
"(volume)"
msgstr ""
"Мягкий лимит ОЗУ,\n"
"(объём)"
msgid "Delete"
msgstr "Удалить"
#: source/ubl-strings.h:60
msgid ""
"Hard RAM limit,\n"
"(volume)"
msgstr ""
"Жёсткий лимит,\n"
"(объём)"
msgid "Edit"
msgstr "Редактировать"
#: source/ubl-strings.h:61
msgid ""
"Swap file\n"
"limit\n"
"(volume)"
msgstr ""
"Лимит файла\n"
"подкачки\n"
"(объём)"
msgid "Add"
msgstr "Добавить"
#: source/ubl-strings.h:62
msgid ""
"CPU limit\n"
"(%)"
msgstr ""
"Лимит ЦПУ\n"
"(%)"
msgid "Error saved local and global configuration"
msgstr "Сохранить глобальную и локальную конфигурацию"
#: source/ubl-strings.h:63
msgid ""
"I/O\n"
"limit\n"
"(read)"
msgstr ""
"Лимит\n"
"I/O\n"
"(чтение)"
#: source/ubl-strings.h:64
msgid ""
"GTK settings disk quota for UBLinux\n"
"\n"
"Usage: ubl-settings-diskquota [OPTIONS...]\n"
"Options:\n"
" -h, --help\t Show this help\n"
" -V, --version\t Show package version\n"
" --lock-help Lock utility help\n"
" --lock-save Lock saving local and global configuration\n"
" --lock-save-local Lock save global configuration\n"
" --lock-save-global Lock load global configuration\n"
" --lock-load-global Lock load global configuration\n"
"I/O\n"
"limit\n"
"(write)"
msgstr ""
"GTK утилита настройки дисковых для UBLinux\n"
"\n"
"Использование: ubl-settings-diskquota [Параметры приложения...]\n"
"Параметры приложения:\n"
" -h, --help\t Показать параметры справки\n"
" -V, --version\t Показать версию пакета\n"
" --lock-help Блокировка вызова справки\n"
" --lock-save Блокировка сохранения локальной и глобальной "
"конфигурации\n"
" --lock-save-local Блокировка сохранения локальной конфигурации\n"
" --lock-save-global Блокировка сохранения глобальной конфигурации\n"
" --lock-load-global Блокировка загрузки глобальной конфигурации\n"
msgid "Global configuration read error"
msgstr "Сохранить глобальную конфигурацию"
msgid "Global configuration write error"
msgstr "Сохранить глобальную конфигурацию"
"Лимит\n"
"I/O\n"
"(запись)"
msgid "Remove"
msgstr "Удалить"
#: source/ubl-strings.h:66
msgid "Quota target"
msgstr "Объект квотирования"
msgid "Nothing to save!"
msgstr "Нечего сохранять!"
#: source/ubl-strings.h:67
#, fuzzy
msgid "Soft RAM limit, n(volume)"
msgstr "Мягкий лимит ОЗУ, (объём)"
msgid "Project Home Page"
msgstr "Главная страница проекта"
#: source/ubl-strings.h:68
msgid "Hard RAM limit, (volume)"
msgstr "Жёсткий лимит, (объём)"
msgid "Save"
msgstr "Сохранить"
#: source/ubl-strings.h:69
msgid "Swap file limit (volume)"
msgstr "Лимит файла подкачки (объём)"
msgid "Save in global and local configuration"
msgstr "Сохранить в глобальную и локальную конфигурацию"
#: source/ubl-strings.h:70
msgid "CPU limit (%)"
msgstr "Лимит ЦПУ (%)"
msgid "Save in global configuration"
msgstr "Сохранить в глобальную конфигурацию"
#: source/ubl-strings.h:71
msgid "I/O limit (read)"
msgstr "Лимит I/O (чтение)"
msgid "Save in local configuration"
msgstr "Сохранить в локальную конфигурацию"
#: source/ubl-strings.h:72
msgid "I/O limit (write)"
msgstr "Лимит I/O (запись)"
msgid "Global configuration downloaded successfully"
msgstr "Успешно загружена глобальная конфигурация"
#: source/ubl-strings.h:73
msgid "Accept"
msgstr "Принять"
msgid "Load"
msgstr "Загрузить"
#: source/ubl-strings.h:75
msgid "Filters"
msgstr "Фильтры"
msgid "Load global configuration"
msgstr "Загрузить глобальную конфигурацию"
#: source/ubl-strings.h:77
msgid "Remove"
msgstr "Удалить"
msgid "Load local configuration"
msgstr "Загрузить локальную конфигурацию"
#: source/ubl-strings.h:78
msgid "Edit"
msgstr "Изменить"
msgid "Local configuration downloaded successfully"
msgstr "Успешно загружена локальная конфигурация"
#: source/ubl-strings.h:79
msgid "Add"
msgstr "Добавить"
msgid "Local configuration reading error"
msgstr "Загрузить локальную конфигурацию"
#: source/ubl-strings.h:81
msgid "Update every"
msgstr "Обновлять каждые"
msgid "Local configuration successfully written"
msgstr "Успешно записана локальная конфигурация"
#: source/ubl-strings.h:82
msgid "seconds"
msgstr "секунд"
msgid "Local configuration write error"
msgstr "Загрузить локальную конфигурацию"
#: source/ubl-strings.h:83
msgid "Update"
msgstr "Обновить"
msgid "Help"
msgstr "Справка"
#: source/ubl-strings.h:85
msgid "All groups including empty"
msgstr "Все группы, включая пустые"
msgid "About"
msgstr "О программе"
#: source/ubl-strings.h:86
msgid "Core streams"
msgstr "Потоки ядра"
#: source/ubl-strings.h:88
msgid "View properties for"
msgstr "Посмотреть свойства для"
msgid "Settings quotas - Editing"
msgstr "Квоты настроек - Редактирование"
#: source/ubl-strings.h:90
#, fuzzy
msgid "CPU and RAM quotas - Adding"
msgstr "Квоты процессора и ОЗУ - Добавление"
msgid "Quota object"
msgstr "Объект квоты"
#: source/ubl-strings.h:91
#, fuzzy
msgid "CPU and RAM quotas - Editing"
msgstr "Квоты процессора и ОЗУ - Изменение"
#: source/ubl-strings.h:92
msgid "Quota object:"
msgstr "Объект квоты:"
msgid "Quota\nobject"
msgstr "Объект\nквоты"
msgstr "Объект квотирования:"
#: source/ubl-strings.h:93
msgid "RAM limit"
msgstr "Лимит ОЗУ"
msgid "Soft Restriction"
#: source/ubl-strings.h:94
msgid "Soft restriction"
msgstr "Мягкое ограничение"
msgid "Severe Restriction"
msgstr "Жесткое ограничение"
#: source/ubl-strings.h:95
msgid "Hard restriction"
msgstr "Жёсткое ограничение"
#: source/ubl-strings.h:96
msgid "Paging file limit"
msgstr "Лимит файлов подкачки"
msgstr "Лимит файла подкачки"
#: source/ubl-strings.h:97
msgid "CPU limit"
msgstr "Лимит ЦПУ"
#: source/ubl-strings.h:98
msgid "Input/Output limit of block devices"
msgstr "Лимит операций Ввода/Вывода блочных устройств"
msgstr "Лимит операций ввода/вывода блочных устройств"
#: source/ubl-strings.h:99
msgid "Device:"
msgstr "Устройство:"
#: source/ubl-strings.h:100
msgid "Read"
msgstr "Чтение"
#: source/ubl-strings.h:101
msgid "Write"
msgstr "Запись"
#: source/ubl-strings.h:102
msgid "Apply changes of operations limit"
msgstr "Применить изменения лимита операций"
#: source/ubl-strings.h:103
msgid "Manual input (for advanced users)"
msgstr "Ручной ввод (для опытных пользователей)"
msgid "Settings quotas - Adding"
msgstr "Квоты настроек - Добавление"
#: source/ubl-strings.h:24
msgid "Nothing were chosen"
msgstr "Ничего не было выбрано"
msgid "Cancel"
msgstr "Отмена"
#: source/ubl-strings.h:27
msgid "Global configuration loading succseeded."
msgstr "Успешно загружена глобальная конфигурация"
#: source/ubl-strings.h:28
msgid "Local configuration loading succseeded."
msgstr "Успешно загружена локальная конфигурация"
#: source/ubl-strings.h:30
msgid "Local and global configuration saving succseeded."
msgstr "Успешно записаны локальная и глобальная конфигурация"
#: source/ubl-strings.h:31
msgid "Global configuration saving succseeded."
msgstr "Успешно записана глобальная конфигурация"
#: source/ubl-strings.h:32
msgid "Local configuration saving succseeded."
msgstr "Успешно записана локальная конфигурация"
msgid "Configuring CPU and RAM quota settings for groups and users of the system"
msgstr "Настройка параметров квот процессорного времени и ОЗУ для групп и пользователей системы"

Loading…
Cancel
Save