#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_file(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_config_init(); device_fill_disk(edit_widgets->cbtTempDevice); // edit_event(edit_widgets); edit_localization(edit_widgets); philos_temp_config_init(&obj_edit_config); } 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_int_array(&obj_edit_config.i_o_limit_read, obj_edit_config.size); philos_free_int_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(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(GtkWidget *spin) { if (spin != NULL) { // gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 0); } 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_add_disk(edit_widgets, &obj_edit_config); philos_temp_del_disk(edit_widgets, &obj_edit_config); 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() { philos_update_device_to_entry(edit_widgets, &obj_edit_config, 0); philos_update_device_to_entry(edit_widgets, &obj_edit_config, 1); } 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); } 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 0; } } 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) == NULL) { return; } if ((*str_value)[0] == NULL) { return; } 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); } void edit_set_read_device(int* str_value, int* pow_mem) { if (str_value == NULL || pow_mem == NULL) { return; } if (str_value[0] == -2 || pow_mem[0] == -2) { return; } edit_temp_set(str_value[0],pow_mem[0], edit_widgets->chbTempRead, edit_widgets->spinTempRead, edit_widgets->cbtTempRead); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(edit_widgets->chbTempRead), 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(edit_widgets->chbTempWrite), 1); } void edit_set_write_device(int* str_value, int* pow_mem) { if (str_value == NULL || pow_mem == NULL) { return; } if (str_value[0] == -2 || pow_mem[0] == -2) { return; } else { 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); } 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) { char* search = "-"; char* mem_size_pow = yon_char_from_int(value); if (strstr(mem_size_pow, search) == 0 && pow_mem!=-3 && pow_mem>=-1) { 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 printf("%d", pow_mem); gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box_text), pow_mem); } } else { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cheek), 0); } }