#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); } 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); philos_temp_del_disk(add_widgets, &obj_add_config); 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); 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_cmd_group(char* cmd_get_group) { CMD_GET_GROUP = cmd_get_group; } 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 != -1) { return text; } else { char* str = (char*)malloc(sizeof(char*)*2); str[0] = '-'; str[1] = '\0'; return str; } } int** add_get_read_device() { obj_add_config.i_o_limit_read = philos_int_append(obj_add_config.i_o_limit_read,&obj_add_config.size, -2); obj_add_config.size--; return &obj_add_config.i_o_limit_read; } int** add_get_read_device_size_pow() { obj_add_config.i_o_limit_read_size = philos_int_append(obj_add_config.i_o_limit_read_size,&obj_add_config.size, -2); obj_add_config.size--; return &obj_add_config.i_o_limit_read_size; } int** add_get_write_device() { obj_add_config.i_o_limit_write = philos_int_append(obj_add_config.i_o_limit_write, &obj_add_config.size, -2); obj_add_config.size--; return &obj_add_config.i_o_limit_write; } int** add_get_write_device_size_pow() { obj_add_config.i_o_limit_write_size = philos_int_append(obj_add_config.i_o_limit_write_size,&obj_add_config.size, -2); obj_add_config.size--; return &obj_add_config.i_o_limit_write_size; } char*** add_get_select_device() { int flag = 0; if (obj_add_config.size == 0) { obj_add_config.disk = yon_char_parsed_append(obj_add_config.disk,&obj_add_config.size, "-"); flag = 1; } obj_add_config.disk = yon_char_parsed_append(obj_add_config.disk,&obj_add_config.size, NULL); if (flag == 1) { obj_add_config.size-=2; } else { obj_add_config.size-=1; } return &obj_add_config.disk; } 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 = yon_config_load(CMD_GET_GROUP, &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, ".service", &size); philos_array_string_remove_char(&fill_cmb_2, "\n", size); } else if (menu_id == 3) { 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); } }