#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"); 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), widgets->spiSevereRestrictionTemp); g_signal_connect(G_OBJECT(widgets->cmbSevereRestrictionTemp),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), widgets->spinSevereRestrictionTemp); g_signal_connect(G_OBJECT(widgets->cmbPaddingFLTemp),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), widgets->spinPaddingFLTemp); g_signal_connect(G_OBJECT(widgets->cbtTempRead),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), widgets->spinTempRead); g_signal_connect(G_OBJECT(widgets->cbtTempWrite),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), widgets->spinTempWrite); 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); philos_temp_del_disk(edit_widgets, &obj_edit_config); edit_init_windows(); philos_temp_generate_cmd(edit_widgets, &obj_edit_config); } 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); 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() { obj_edit_config.i_o_limit_read = philos_int_append(obj_edit_config.i_o_limit_read,&obj_edit_config.size, -2); obj_edit_config.size--; return &obj_edit_config.i_o_limit_read; } int** edit_get_read_device_size_pow() { obj_edit_config.i_o_limit_read_size = philos_int_append(obj_edit_config.i_o_limit_read_size,&obj_edit_config.size, -2); obj_edit_config.size--; return &obj_edit_config.i_o_limit_read_size; } int** edit_get_write_device() { obj_edit_config.i_o_limit_write = philos_int_append(obj_edit_config.i_o_limit_write, &obj_edit_config.size, -2); obj_edit_config.size--; return &obj_edit_config.i_o_limit_write; } int** edit_get_write_device_size_pow() { obj_edit_config.i_o_limit_write_size = philos_int_append(obj_edit_config.i_o_limit_write_size,&obj_edit_config.size, -2); obj_edit_config.size--; 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); } if (index == 0) { obj_edit_config.disk = yon_char_parsed_append(obj_edit_config.disk,&obj_edit_config.size, NULL); obj_edit_config.size--; } return &obj_edit_config.disk; } 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_device(char*** str_value) { if (str_value) { if ((*str_value)) { if ((*str_value)[0] != NULL && strstr((*str_value)[0], "-") == NULL) { yon_char_parsed_copy(&obj_edit_config.disk, str_value); int index = yon_gtk_combo_box_text_find(edit_widgets->cbtTempDevice, (*str_value)[0]); gtk_combo_box_set_active(GTK_COMBO_BOX(edit_widgets->cbtTempDevice), index); } else { obj_edit_config.size = 0; } } else { obj_edit_config.size = 0; } } else { obj_edit_config.size = 0; } } void edit_set_read_device(int* str_value, int* pow_mem) { if (str_value && pow_mem) { if (str_value[0] >=0 && pow_mem[0] >=0) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(edit_widgets->chbTempRead), 1); edit_temp_set(str_value[0],pow_mem[0], edit_widgets->chbTempRead, edit_widgets->spinTempRead, edit_widgets->cbtTempRead); } 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) { if (str_value[0] >=0 && pow_mem[0] >=0) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(edit_widgets->chbTempWrite), 1); edit_temp_set(str_value[0],pow_mem[0], edit_widgets->chbTempWrite, edit_widgets->spinTempWrite, edit_widgets->cbtTempWrite); } 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 = 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); } }