#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); }