You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ubl-settings-resourcequota/source/view_edit.c

359 lines
18 KiB

#include "view_edit.h"
edit_window *edit_widgets = NULL;
edit_config obj_edit_config;
edit_config* get_edit_config() {
return &obj_edit_config;
}
edit_window *edit_setup_window(char* glade_path){
if (edit_widgets == NULL) {
edit_widgets = malloc(sizeof(edit_window));
GtkBuilder *builder = gtk_builder_new_from_file(glade_path);
edit_widgets->Window = yon_gtk_builder_get_widget(builder,"wndQuotasEdit");
edit_widgets->btnEditCancel = yon_gtk_builder_get_widget(builder,"btnEditCancel");
edit_widgets->btnSaveEditSave = yon_gtk_builder_get_widget(builder,"btnSaveEditSave");
edit_widgets->cbtEditDevice = yon_gtk_builder_get_widget(builder,"cbtEditDevice");
edit_widgets->lblCPULimitEdit = yon_gtk_builder_get_widget(builder,"lblCPULimitEdit");
edit_widgets->spinCPULimitEdit = yon_gtk_builder_get_widget(builder,"spinCPULimitEdit");
edit_widgets->chkCPULimitEdit = yon_gtk_builder_get_widget(builder,"chkCPULimitEdit");
edit_widgets->chkPaddingFLEdit = yon_gtk_builder_get_widget(builder,"chkPaddingFLEdit");
edit_widgets->spinPaddingFLEdit = yon_gtk_builder_get_widget(builder,"spinPaddingFLEdit");
edit_widgets->cmbPaddingFLEdit = yon_gtk_builder_get_widget(builder,"cmbPaddingFLEdit");
edit_widgets->chkSevereRestrictionEdit = yon_gtk_builder_get_widget(builder,"chkSevereRestrictionEdit");
edit_widgets->spinSevereRestrictionEdit = yon_gtk_builder_get_widget(builder,"spinSevereRestrictionEdit");
edit_widgets->cmbSevereRestrictionEdit = yon_gtk_builder_get_widget(builder,"cmbSevereRestrictionEdit");
edit_widgets->chkSoftRestrictionEdit = yon_gtk_builder_get_widget(builder,"chkSoftRestrictionEdit");
edit_widgets->spiSevereRestrictionEdit = yon_gtk_builder_get_widget(builder,"spiSevereRestrictionEdit");
edit_widgets->cmSevereRestrictionEdit = yon_gtk_builder_get_widget(builder,"cmSevereRestrictionEdit");
edit_widgets->chbEditRead = yon_gtk_builder_get_widget(builder,"chbEditRead");
edit_widgets->spinEditRead = yon_gtk_builder_get_widget(builder,"spinEditRead");
edit_widgets->cbtEditRead = yon_gtk_builder_get_widget(builder,"cbtEditRead");
edit_widgets->spinEditWrite = yon_gtk_builder_get_widget(builder,"spinEditWrite");
edit_widgets->chbEditWrite = yon_gtk_builder_get_widget(builder,"chbEditWrite");
edit_widgets->cbtEditWrite = yon_gtk_builder_get_widget(builder,"cbtEditWrite");
edit_widgets->entryEditCmd = yon_gtk_builder_get_widget(builder,"entryEditCmd");
edit_config_init();
device_fill_disk(edit_widgets->cbtEditDevice);
// edit_event(edit_widgets);
edit_localization(edit_widgets);
}
return edit_widgets;
}
void edit_config_init() {
if (obj_edit_config.size != 0) {
philos_free_string_array(&obj_edit_config.disk, obj_edit_config.size);
philos_free_string_array(&obj_edit_config.i_o_limit_read, obj_edit_config.size);
philos_free_string_array(&obj_edit_config.i_o_limit_write, obj_edit_config.size);
philos_free_int_array(&obj_edit_config.i_o_limit_read_size, obj_edit_config.size);
philos_free_int_array(&obj_edit_config.i_o_limit_write_size, obj_edit_config.size);
}
obj_edit_config.disk = NULL;
obj_edit_config.i_o_limit_read = NULL;
obj_edit_config.i_o_limit_write = NULL;
obj_edit_config.i_o_limit_read_size = NULL;
obj_edit_config.i_o_limit_write_size = NULL;
obj_edit_config.size = 0;
}
void edit_event(edit_window *widgets) {
g_signal_connect(G_OBJECT(widgets->btnEditCancel),"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->chkSoftRestrictionEdit), "toggled", G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->chkSevereRestrictionEdit), "toggled", G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->chkPaddingFLEdit), "toggled", G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->chkCPULimitEdit), "toggled", G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->chbEditRead), "toggled", G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->chbEditWrite), "toggled", G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->spiSevereRestrictionEdit),"value-changed",G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->spinSevereRestrictionEdit),"value-changed",G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->spinPaddingFLEdit),"value-changed",G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->spinCPULimitEdit),"value-changed",G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->spinEditRead),"value-changed",G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->spinEditWrite),"value-changed",G_CALLBACK(edit_init_windows), NULL);
g_signal_connect(G_OBJECT(widgets->cmSevereRestrictionEdit),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), widgets->spiSevereRestrictionEdit);
g_signal_connect(G_OBJECT(widgets->cmbSevereRestrictionEdit),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), widgets->spinSevereRestrictionEdit);
g_signal_connect(G_OBJECT(widgets->cmbPaddingFLEdit),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), widgets->spinPaddingFLEdit);
g_signal_connect(G_OBJECT(widgets->cbtEditRead),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), widgets->spinEditRead);
g_signal_connect(G_OBJECT(widgets->cbtEditWrite),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), widgets->spinEditWrite);
g_signal_connect(G_OBJECT(widgets->cbtEditDevice),"changed",G_CALLBACK(edit_init_windows), NULL);
}
void edit_destroy(GtkWidget *self) {
edit_widgets = NULL;
}
void edit_localization(edit_window *widgets) {
}
void edit_on_hide_subwindow(GtkWidget *self) {
gtk_widget_destroy(gtk_widget_get_toplevel(self));
edit_widgets = NULL;
}
edit_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(GtkWidget *spin) {
if (spin != NULL) {
// gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 0);
}
edit_init_windows();
}
void edit_init_windows() {
philos_set_active_widgets(edit_widgets->chkSoftRestrictionEdit, edit_widgets->spiSevereRestrictionEdit, edit_widgets->cmSevereRestrictionEdit,0 ,CMD_RAW);
philos_set_active_widgets(edit_widgets->chkSevereRestrictionEdit, edit_widgets->spinSevereRestrictionEdit, edit_widgets->cmbSevereRestrictionEdit,0 , CMD_RAW);
philos_set_active_widgets(edit_widgets->chkPaddingFLEdit, edit_widgets->spinPaddingFLEdit, edit_widgets->cmbPaddingFLEdit,0 , CMD_SWAP);
philos_set_active_widgets(edit_widgets->chkCPULimitEdit, edit_widgets->spinCPULimitEdit, edit_widgets->lblCPULimitEdit,1 ,CMD_CPU);
philos_set_active_widgets_device_io(edit_widgets->cbtEditDevice,edit_widgets->chbEditWrite, edit_widgets->spinEditWrite, edit_widgets->cbtEditWrite);
philos_set_active_widgets_device_io(edit_widgets->cbtEditDevice,edit_widgets->chbEditRead, edit_widgets->spinEditRead, edit_widgets->cbtEditRead);
edit_generate_cmd();
}
int edit_get_soft_size() {
return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmSevereRestrictionEdit));
}
int edit_get_hard_size() {
return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmbSevereRestrictionEdit));
}
int edit_get_limit_cpu_size() {
return -1;
}
int edit_get_limit_swap_size() {
return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmbPaddingFLEdit));
}
char*** edit_get_read_device() {
int index = 0;
if (!obj_edit_config.i_o_limit_read) {
obj_edit_config.i_o_limit_read = yon_char_parsed_append(obj_edit_config.i_o_limit_read,&index, "-");
obj_edit_config.i_o_limit_read = yon_char_parsed_append(obj_edit_config.i_o_limit_read,&index, NULL);
}
return &obj_edit_config.i_o_limit_read;
}
int** edit_get_read_device_size_pow() {
int index = 0;
if (!obj_edit_config.i_o_limit_read_size) {
obj_edit_config.i_o_limit_read_size = philos_int_append(obj_edit_config.i_o_limit_read_size,&index, -1);
obj_edit_config.i_o_limit_read_size = philos_int_append(obj_edit_config.i_o_limit_read_size,&index, -2);
}
return &obj_edit_config.i_o_limit_read_size;
}
char*** edit_get_write_device() {
int index = 0;
if (!obj_edit_config.i_o_limit_write) {
obj_edit_config.i_o_limit_write = yon_char_parsed_append(obj_edit_config.i_o_limit_write, &index, "-");
obj_edit_config.i_o_limit_write = yon_char_parsed_append(obj_edit_config.i_o_limit_write, &index, NULL);
}
return &obj_edit_config.i_o_limit_write;
}
int** edit_get_write_device_size_pow() {
int index = 0;
if (!obj_edit_config.i_o_limit_write_size) {
obj_edit_config.i_o_limit_write_size = philos_int_append(obj_edit_config.i_o_limit_write_size,&index, -1);
obj_edit_config.i_o_limit_write_size = philos_int_append(obj_edit_config.i_o_limit_write_size,&index, -2);
}
return &obj_edit_config.i_o_limit_write_size;
}
char*** edit_get_select_device() {
int index = 0;
if (!obj_edit_config.disk) {
obj_edit_config.disk = yon_char_parsed_append(obj_edit_config.disk,&index, "-");
obj_edit_config.disk = yon_char_parsed_append(obj_edit_config.disk,&index, NULL);
}
return &obj_edit_config.disk;
}
char* edit_get_soft() {
return philos_get_size_bite(edit_widgets->chkSoftRestrictionEdit, edit_widgets->spiSevereRestrictionEdit,
edit_widgets->cmSevereRestrictionEdit);
}
char* edit_get_hard() {
return philos_get_size_bite(edit_widgets->chkSevereRestrictionEdit, edit_widgets->spinSevereRestrictionEdit,
edit_widgets->cmbSevereRestrictionEdit);
}
char* edit_get_limit_cpu() {
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkCPULimitEdit))) {
int size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinCPULimitEdit));
return yon_char_unite(yon_char_from_int(size_bite), "%" ,NULL);
}
else {
char* str = (char*)malloc(sizeof(char*)*2);
str[0] = '-';
str[1] = '\0';
return str;
}
}
char* edit_get_limit_swap() {
return philos_get_size_bite(edit_widgets->chkPaddingFLEdit, edit_widgets->spinPaddingFLEdit,
edit_widgets->cmbPaddingFLEdit);
}
// =================================================================
void edit_set_select_device(char*** str_value) {
if ((*str_value) == NULL) {
return;
}
if ((*str_value)[0] == NULL) {
return;
}
int index = yon_gtk_combo_box_text_find(edit_widgets->cbtEditDevice, (*str_value)[0]);
gtk_combo_box_set_active(GTK_COMBO_BOX(edit_widgets->cbtEditDevice), index);
}
void edit_set_read_device(char*** str_value, int** pow_mem) {
if ((*str_value) == NULL || (*pow_mem) == NULL) {
return;
}
if ((*str_value)[0] == NULL || (*pow_mem)[0] == -2) {
return;
}
edit_temp_set((*str_value)[0],(*pow_mem)[0], edit_widgets->chbEditRead,
edit_widgets->spinEditRead,
edit_widgets->cbtEditRead);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(edit_widgets->chbEditRead), 1);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(edit_widgets->chbEditWrite), 1);
}
void edit_set_write_device(char*** str_value, int** pow_mem) {
if ((*str_value) == NULL || (*pow_mem) == NULL) {
return;
}
if ((*str_value)[0] == NULL || (*pow_mem)[0] == -2) {
return;
}
else {
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(edit_widgets->chbEditWrite), 1);
}
edit_temp_set((*str_value)[0],(*pow_mem)[0], edit_widgets->chbEditWrite,
edit_widgets->spinEditWrite,
edit_widgets->cbtEditWrite);
}
void edit_set_soft(char* str_value, int pow_mem) {
edit_temp_set(str_value,pow_mem, edit_widgets->chkSoftRestrictionEdit,
edit_widgets->spiSevereRestrictionEdit,
edit_widgets->cmSevereRestrictionEdit);
}
void edit_set_hard(char* str_value, int pow_mem) {
edit_temp_set(str_value,pow_mem, edit_widgets->chkSevereRestrictionEdit,
edit_widgets->spinSevereRestrictionEdit,
edit_widgets->cmbSevereRestrictionEdit);
}
void edit_set_limit_cpu(char* str_value, int pow_mem) {
edit_temp_set(str_value,pow_mem, edit_widgets->chkCPULimitEdit,
edit_widgets->spinCPULimitEdit,
NULL);
}
void edit_set_limit_swap(char* str_value, int pow_mem) {
edit_temp_set(str_value,pow_mem, edit_widgets->chkPaddingFLEdit,
edit_widgets->spinPaddingFLEdit,
edit_widgets->cmbPaddingFLEdit);
}
void edit_temp_set(char* str_value, int pow_mem, GtkWidget* cheek, GtkWidget* spin, GtkWidget* combo_box_text) {
char* search = "-";
char* mem_size_pow = yon_char_new(str_value);
if (strstr(mem_size_pow, search) == 0) {
int value = atoi(yon_char_divide_search(mem_size_pow, " ", -1));
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), value);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cheek), 1);
if (combo_box_text != NULL) {
// Todo: add code
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_generate_cmd() {
char* str_cmd = " ";
char* split_simvol = g_malloc0(sizeof(char)*2);
int size_bite = 0;
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkSoftRestrictionEdit))) {
size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spiSevereRestrictionEdit));
str_cmd = yon_char_unite(str_cmd,
"MemoryHigh=",
yon_char_from_int(size_bite),
philos_str_size_pow_byte(edit_widgets->cmSevereRestrictionEdit), NULL);
split_simvol[0] = ',';
split_simvol[1] = '\0';
}
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkSevereRestrictionEdit))) {
size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinSevereRestrictionEdit));
str_cmd = yon_char_unite(str_cmd, split_simvol,
"MemoryMax=",
yon_char_from_int(size_bite),
philos_str_size_pow_byte(edit_widgets->cmbSevereRestrictionEdit), NULL);
split_simvol[0] = ',';
split_simvol[1] = '\0';
}
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkPaddingFLEdit))) {
size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinPaddingFLEdit));
str_cmd = yon_char_unite(str_cmd, split_simvol,
"MemorySwapMax=",
yon_char_from_int(size_bite),
philos_str_size_pow_byte(edit_widgets->cmbPaddingFLEdit), NULL);
split_simvol[0] = ',';
split_simvol[1] = '\0';
}
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkCPULimitEdit))) {
size_bite = (int)gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinCPULimitEdit));
str_cmd = yon_char_unite(str_cmd, split_simvol,
"CPUQuota=",
yon_char_from_int(size_bite),
"%", NULL);
split_simvol[0] = ',';
split_simvol[1] = '\0';
}
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chbEditRead))) {
int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbtEditDevice));
if (menu_id != -1) {
size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinEditRead));
str_cmd = yon_char_unite(str_cmd, split_simvol,
"IOReadBandwidthMax=\"",
get_device_cfg()->name_disk[menu_id],
" ",
yon_char_from_int(size_bite),
philos_str_size_pow_byte(edit_widgets->cbtEditRead),"\"", NULL);
}
split_simvol[0] = ',';
split_simvol[1] = '\0';
}
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chbEditWrite))) {
int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbtEditDevice));
if (menu_id != -1) {
size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinEditWrite));
str_cmd = yon_char_unite(str_cmd, split_simvol,
"IOWriteBandwidthMax=\"",
get_device_cfg()->name_disk[menu_id],
" ",
yon_char_from_int(size_bite),
philos_str_size_pow_byte(edit_widgets->cbtEditWrite),"\"", NULL);
}
}
gtk_entry_set_text(GTK_ENTRY(edit_widgets->entryEditCmd), str_cmd);
free(split_simvol);
}