diff options
Diffstat (limited to 'src/lingot-config-dialog.c')
| -rw-r--r-- | src/lingot-config-dialog.c | 472 |
1 files changed, 472 insertions, 0 deletions
diff --git a/src/lingot-config-dialog.c b/src/lingot-config-dialog.c new file mode 100644 index 0000000..c0c707f --- /dev/null +++ b/src/lingot-config-dialog.c @@ -0,0 +1,472 @@ +//-*- C++ -*- +/* + * lingot, a musical instrument tuner. + * + * Copyright (C) 2004-2007 Ibán Cereijo Graña, Jairo Chapela Martínez. + * + * This file is part of lingot. + * + * lingot is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * lingot is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with lingot; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <unistd.h> +#include <signal.h> + +#include "lingot-defs.h" + +#include "lingot-core.h" +#include "lingot-config.h" +#include "lingot-mainframe.h" +#include "lingot-config-dialog.h" +#include "lingot-i18n.h" + +/* button press event attention routine. */ +void lingot_config_dialog_callback_click(GtkButton *button, + LingotConfigDialog *dialog) + { + if ((GtkWidget*)button == dialog->button_ok) + { + lingot_config_dialog_apply(dialog); + lingot_config_save(dialog->conf, CONFIG_FILE_NAME); + lingot_config_dialog_close(dialog); + } + else if ((GtkWidget*)button == dialog->button_cancel) + { + lingot_mainframe_change_config(dialog->mainframe, dialog->conf_old); // restore old configuration. + lingot_config_dialog_close(dialog); + } + else if ((GtkWidget*)button == dialog->button_apply) + { + lingot_config_dialog_apply(dialog); + lingot_config_dialog_rewrite(dialog); + } + else if ((GtkWidget*)button == dialog->button_default) + { + lingot_config_reset(dialog->conf); + lingot_config_dialog_rewrite(dialog); + } + } + +void lingot_config_dialog_callback_close(GtkWidget *widget, + LingotConfigDialog *dialog) + { + gtk_widget_destroy(dialog->win); + lingot_config_dialog_destroy(dialog); + } + +void lingot_config_dialog_callback_change_sample_rate(GtkWidget *widget, + LingotConfigDialog *dialog) + { + char buff[20]; + float sample_rate =atof(gtk_combo_box_get_active_text(GTK_COMBO_BOX(dialog->combo_sample_rate))); + float oversampling= + gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(dialog->spin_oversampling)); + sprintf(buff, " = %0.1f", sample_rate/oversampling); + gtk_label_set_text ( GTK_LABEL(dialog->label_sample_rate), buff); + } + +void lingot_config_dialog_callback_change_a_frequence(GtkWidget *widget, + LingotConfigDialog *dialog) + { + char buff[20]; + + float root_freq = 440.0*pow(2.0, gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(dialog->spin_root_frequency_error))/1200.0); + sprintf(buff, "%% = %0.2f", root_freq); + gtk_label_set_text ( GTK_LABEL(dialog->label_root_frequency), buff); + } + +void lingot_config_dialog_combo_select_value(GtkWidget* combo, int value) + { + + GtkTreeModel* model = gtk_combo_box_get_model(GTK_COMBO_BOX(combo)); + GtkTreeIter iter; + + gboolean valid = gtk_tree_model_get_iter_first (model, &iter); + + while (valid) + { + gchar *str_data; + gtk_tree_model_get (model, &iter, 0, &str_data, -1); + if (atoi(str_data) == value) + gtk_combo_box_set_active_iter(GTK_COMBO_BOX(combo), &iter); + g_free (str_data); + valid = gtk_tree_model_iter_next (model, &iter); + } + } + +void lingot_config_dialog_rewrite(LingotConfigDialog* dialog) + { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(dialog->spin_calculation_rate), dialog->conf->calculation_rate); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(dialog->spin_visualization_rate), dialog->conf->visualization_rate); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(dialog->spin_oversampling), dialog->conf->oversampling); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(dialog->spin_root_frequency_error), dialog->conf->root_frequency_error); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(dialog->spin_temporal_window), dialog->conf->temporal_window); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(dialog->spin_noise_threshold), dialog->conf->noise_threshold_db); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(dialog->spin_dft_number), dialog->conf->dft_number); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(dialog->spin_dft_size), dialog->conf->dft_size); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(dialog->spin_peak_number), dialog->conf->peak_number); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(dialog->spin_peak_order), dialog->conf->peak_order); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(dialog->spin_peak_rejection_relation), dialog->conf->peak_rejection_relation_db); + lingot_config_dialog_combo_select_value(dialog->combo_fft_size, + (int) dialog->conf->fft_size); + lingot_config_dialog_combo_select_value(dialog->combo_sample_rate, + (int) dialog->conf->sample_rate); + lingot_config_dialog_callback_change_sample_rate(NULL, dialog); + lingot_config_dialog_callback_change_a_frequence(NULL, dialog); + } + +LingotConfigDialog* lingot_config_dialog_new(LingotMainFrame* frame) + { + GtkWidget* vertical_box; + GtkWidget* frame1; + GtkWidget* tab1; + GtkWidget* frame2; + GtkWidget* tab2; + GtkWidget* box; + char buff[80]; + LingotConfigDialog* dialog = malloc(sizeof(LingotConfigDialog)); + + dialog->mainframe = frame; + dialog->conf = lingot_config_new(); + dialog->conf_old = lingot_config_new(); + + // config copy + *dialog->conf = *frame->conf; + *dialog->conf_old = *frame->conf; + + dialog->win = gtk_dialog_new_with_buttons (_("lingot configuration"), + GTK_WINDOW(frame->win), 0, NULL); + + gtk_container_set_border_width(GTK_CONTAINER(dialog->win), 6); + + // items vertically displayed + vertical_box = gtk_vbox_new(FALSE, 6); + gtk_container_add(GTK_CONTAINER (GTK_DIALOG(dialog->win)->vbox), vertical_box); + + frame1 = gtk_frame_new(_("General parameters")); + gtk_box_pack_start_defaults(GTK_BOX(vertical_box), frame1); + + tab1 = gtk_table_new(5, 3, FALSE); + int row = 0; + + gtk_table_set_col_spacings(GTK_TABLE(tab1), 20); + gtk_table_set_row_spacings(GTK_TABLE(tab1), 3); + gtk_container_set_border_width(GTK_CONTAINER(tab1), 5); + + gtk_container_add(GTK_CONTAINER(frame1), tab1); + + // -------------------------------------------------------------------------- + + dialog->spin_calculation_rate = gtk_spin_button_new( + (GtkAdjustment*)gtk_adjustment_new(dialog->conf->calculation_rate, 1.0, + 60.0, 0.5, 10.0, 15.0), 0.5, 1); + gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(dialog->spin_calculation_rate), TRUE); + gtk_table_attach_defaults(GTK_TABLE(tab1), + gtk_label_new(_("Calculation rate")), 0, 1, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab1), dialog->spin_calculation_rate, 1, 2, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab1), gtk_label_new(_("Hz")), 2, 3, row, row + 1); + row++; + + // -------------------------------------------------------------------------- + + dialog->spin_visualization_rate =gtk_spin_button_new( + (GtkAdjustment*)gtk_adjustment_new(dialog->conf->visualization_rate, + 1.0, 60.0, 0.5, 10.0, 15.0), 0.5, 1); + gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(dialog->spin_visualization_rate), TRUE); + gtk_table_attach_defaults(GTK_TABLE(tab1), + gtk_label_new(_("Visualization rate")), 0, 1, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab1), dialog->spin_visualization_rate, 1, 2, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab1), gtk_label_new(_("Hz")), 2, 3, row, row + 1); + row++; + + // -------------------------------------------------------------------------- + + dialog->combo_fft_size = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_fft_size), "256"); + gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_fft_size), "512"); + gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_fft_size), "1024"); + gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_fft_size), "2048"); + gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_fft_size), "4096"); + lingot_config_dialog_combo_select_value(dialog->combo_fft_size, + (int) dialog->conf->fft_size); + + gtk_table_attach_defaults(GTK_TABLE(tab1), gtk_label_new(_("FFT size")), 0, 1, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab1), dialog->combo_fft_size, 1, 2, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab1), gtk_label_new(_("samples")), 2, 3, row, row + 1); + row++; + + // -------------------------------------------------------------------------- + + dialog->spin_noise_threshold =gtk_spin_button_new( + (GtkAdjustment*)gtk_adjustment_new(dialog->conf->noise_threshold_db, + -30.0, 60.0, 0.1, 0.1, 0.1), 0.1, 1); + gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(dialog->spin_noise_threshold), TRUE); + gtk_spin_button_set_digits(GTK_SPIN_BUTTON(dialog->spin_noise_threshold), 1) ; + + gtk_table_attach_defaults(GTK_TABLE(tab1), + gtk_label_new(_("Noise threshold")), 0, 1, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab1), gtk_label_new(_("dB")), 2, 3, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab1), dialog->spin_noise_threshold, 1, 2, row, row + 1); + row++; + + // -------------------------------------------------------------------------- + + box = gtk_hbox_new (FALSE, FALSE); + + dialog->combo_sample_rate = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_sample_rate), "8000"); + gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_sample_rate), "11025"); + gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_sample_rate), "22050"); + gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_sample_rate), "44100"); + + lingot_config_dialog_combo_select_value(dialog->combo_sample_rate, + (int) dialog->conf->sample_rate); + + dialog->spin_oversampling = gtk_spin_button_new( + (GtkAdjustment*) gtk_adjustment_new(dialog->conf->oversampling, 1.0, + 30.0, 1.0, 10.0, 15.0), 1.0, 1); + + gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(dialog->spin_oversampling), TRUE); + gtk_spin_button_set_digits(GTK_SPIN_BUTTON(dialog->spin_oversampling), 0) ; + + sprintf(buff, " = %0.1f", atof(gtk_combo_box_get_active_text(GTK_COMBO_BOX(dialog->combo_sample_rate))) + /gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dialog->spin_oversampling))); + dialog->label_sample_rate = gtk_label_new(buff); + + gtk_box_pack_start (GTK_BOX(box), dialog->combo_sample_rate, FALSE, FALSE, FALSE); + gtk_box_pack_start (GTK_BOX(box), gtk_label_new(" / "), FALSE, FALSE, FALSE); + gtk_box_pack_start (GTK_BOX(box), dialog->spin_oversampling, FALSE, FALSE, FALSE); + gtk_box_pack_start (GTK_BOX(box), dialog->label_sample_rate, FALSE, FALSE, FALSE); + + gtk_signal_connect(GTK_OBJECT(dialog->combo_sample_rate), "changed", + GTK_SIGNAL_FUNC (lingot_config_dialog_callback_change_sample_rate), dialog); + + gtk_signal_connect (GTK_OBJECT (dialog->spin_oversampling), "value_changed", + GTK_SIGNAL_FUNC (lingot_config_dialog_callback_change_sample_rate), dialog); + + gtk_table_attach_defaults(GTK_TABLE(tab1), + gtk_label_new(_("Sample rate")), 0, 1, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab1), box, 1, 2, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab1), gtk_label_new(_("Hz")), 2, 3, row, row + 1); + row++; + + // -------------------------------------------------------------------------- + + frame2 = gtk_frame_new(_("Advanced parameters")); + gtk_box_pack_start_defaults(GTK_BOX(vertical_box), frame2); + + tab2 = gtk_table_new(7, 3, FALSE); + row = 0; + + gtk_table_set_col_spacings(GTK_TABLE(tab2), 20); + gtk_table_set_row_spacings(GTK_TABLE(tab2), 3); + gtk_container_set_border_width(GTK_CONTAINER(tab2), 5); + + gtk_container_add(GTK_CONTAINER(frame2), tab2); + + // -------------------------------------------------------------------------- + + box = gtk_hbox_new (TRUE, FALSE); + + dialog->spin_root_frequency_error = gtk_spin_button_new( + (GtkAdjustment*)gtk_adjustment_new(dialog->conf->root_frequency_error, + -500.0, +500.0, 1.0, 10.0, 15.0), 1.0, 1); + + gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(dialog->spin_root_frequency_error), TRUE); + gtk_spin_button_set_digits(GTK_SPIN_BUTTON(dialog->spin_root_frequency_error), 0) ; + + gtk_box_pack_start (GTK_BOX(box), gtk_label_new(_(" A (440 Hz) + ")), FALSE, FALSE, FALSE); + gtk_box_pack_start (GTK_BOX(box), dialog->spin_root_frequency_error, FALSE, TRUE, FALSE); + + sprintf(buff, "%% = %0.2f", dialog->conf->root_frequency); + dialog->label_root_frequency = gtk_label_new(_(buff)); + + gtk_box_pack_start (GTK_BOX(box), dialog->label_root_frequency, FALSE, FALSE, FALSE); + + gtk_signal_connect (GTK_OBJECT (dialog->spin_root_frequency_error), "value_changed", + GTK_SIGNAL_FUNC (lingot_config_dialog_callback_change_a_frequence), dialog); + + gtk_table_attach_defaults(GTK_TABLE(tab2), + gtk_label_new(_("Root frequency")), 0, 1, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab2), box, 1, 2, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab2), gtk_label_new(_("Hz")), 2, 3, row, row + 1); + row++; + + // -------------------------------------------------------------------------- + + dialog->spin_temporal_window =gtk_spin_button_new( + (GtkAdjustment*)gtk_adjustment_new(dialog->conf->temporal_window, 0.0, + 15.0, 0.005, 0.1, 0.1), 0.005, 1); + gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(dialog->spin_temporal_window), TRUE); + gtk_spin_button_set_digits(GTK_SPIN_BUTTON(dialog->spin_temporal_window), 3) ; + + gtk_table_attach_defaults(GTK_TABLE(tab2), + gtk_label_new(_("Temporal window")), 0, 1, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab2), gtk_label_new(_("seconds")), 2, 3, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab2), dialog->spin_temporal_window, 1, 2, row, row + 1); + row++; + + // -------------------------------------------------------------------------- + + dialog->spin_dft_number =gtk_spin_button_new( + (GtkAdjustment*)gtk_adjustment_new(dialog->conf->dft_number, 0.0, 10.0, + 1.0, 1.0, 1.0), 1.0, 1); + gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(dialog->spin_dft_number), TRUE); + gtk_spin_button_set_digits(GTK_SPIN_BUTTON(dialog->spin_dft_number), 0) ; + + gtk_table_attach_defaults(GTK_TABLE(tab2), + gtk_label_new(_("DFT number")), 0, 1, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab2), dialog->spin_dft_number, 1, 2, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab2), gtk_label_new(_("DFTs")), 2, 3, row, row + 1); + row++; + + // -------------------------------------------------------------------------- + + dialog->spin_dft_size =gtk_spin_button_new( + (GtkAdjustment*)gtk_adjustment_new(dialog->conf->dft_size, 4.0, 100.0, + 1.0, 1.0, 1.0), 1.0, 1); + gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(dialog->spin_dft_size), TRUE); + gtk_spin_button_set_digits(GTK_SPIN_BUTTON(dialog->spin_dft_size), 0) ; + + gtk_table_attach_defaults(GTK_TABLE(tab2), gtk_label_new(_("DFT size")), 0, 1, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab2), gtk_label_new(_("samples")), 2, 3, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab2), dialog->spin_dft_size, 1, 2, row, row + 1); + row++; + + // -------------------------------------------------------------------------- + + dialog->spin_peak_number =gtk_spin_button_new( + (GtkAdjustment*)gtk_adjustment_new(dialog->conf->peak_number, 1.0, + 10.0, 1.0, 1.0, 1.0), 1.0, 1); + gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(dialog->spin_peak_number), TRUE); + gtk_spin_button_set_digits(GTK_SPIN_BUTTON(dialog->spin_peak_number), 0) ; + + gtk_table_attach_defaults(GTK_TABLE(tab2), gtk_label_new(_("Peak number")), 0, 1, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab2), dialog->spin_peak_number, 1, 2, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab2), gtk_label_new(_("peaks")), 2, 3, row, row + 1); + row++; + + // -------------------------------------------------------------------------- + + dialog->spin_peak_order = gtk_spin_button_new( + (GtkAdjustment*)gtk_adjustment_new(dialog->conf->peak_order, 1.0, 5.0, + 1.0, 1.0, 1.0), 1.0, 1); + gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(dialog->spin_peak_order), TRUE); + gtk_spin_button_set_digits(GTK_SPIN_BUTTON(dialog->spin_peak_order), 0) ; + + gtk_table_attach_defaults(GTK_TABLE(tab2), gtk_label_new(_("Peak order")), 0, 1, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab2), dialog->spin_peak_order, 1, 2, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab2), gtk_label_new(_("samples")), 2, 3, row, row + 1); + row++; + + // -------------------------------------------------------------------------- + + dialog->spin_peak_rejection_relation + = gtk_spin_button_new( + (GtkAdjustment*)gtk_adjustment_new( + dialog->conf->peak_rejection_relation_db, 2.0, 40.0, 0.1, 1.0, + 1.0), 0.1, 1); + gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(dialog->spin_peak_rejection_relation), TRUE); + gtk_spin_button_set_digits(GTK_SPIN_BUTTON(dialog->spin_peak_rejection_relation), 1); + + gtk_table_attach_defaults(GTK_TABLE(tab2), + gtk_label_new(_("Rejection peak relation")), 0, 1, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab2), dialog->spin_peak_rejection_relation, 1, 2, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(tab2), gtk_label_new(_("dB")), 2, 3, row, row + 1); + row++; + + // -------------------------------------------------------------------------- + + dialog->button_ok = gtk_button_new_from_stock(GTK_STOCK_OK); + dialog->button_cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL); + dialog->button_apply = gtk_button_new_from_stock(GTK_STOCK_APPLY); + dialog->button_default = gtk_button_new_with_label(_("Default config")); + + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog->win)->action_area), dialog->button_default, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog->win)->action_area), dialog->button_apply, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog->win)->action_area), dialog->button_ok, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog->win)->action_area), dialog->button_cancel, TRUE, TRUE, 0); + + g_signal_connect(GTK_OBJECT(dialog->button_default), "clicked", GTK_SIGNAL_FUNC(lingot_config_dialog_callback_click), dialog); + g_signal_connect(GTK_OBJECT(dialog->button_apply), "clicked", GTK_SIGNAL_FUNC(lingot_config_dialog_callback_click), dialog); + g_signal_connect(GTK_OBJECT(dialog->button_ok), "clicked", GTK_SIGNAL_FUNC(lingot_config_dialog_callback_click), dialog); + g_signal_connect(GTK_OBJECT(dialog->button_cancel), "clicked", GTK_SIGNAL_FUNC(lingot_config_dialog_callback_click), dialog); + + g_signal_connect(GTK_OBJECT(dialog->win), "destroy", GTK_SIGNAL_FUNC(lingot_config_dialog_callback_close), dialog); + + lingot_config_dialog_rewrite(dialog); + gtk_window_set_resizable(GTK_WINDOW(dialog->win), FALSE); + gtk_widget_show_all(dialog->win); + + return dialog; + } + +void lingot_config_dialog_destroy(LingotConfigDialog* dialog) + { + dialog->mainframe->config_dialog = NULL; + lingot_config_destroy(dialog->conf); + lingot_config_destroy(dialog->conf_old); + + //gtk_widget_destroy(dialog->win); + free(dialog); + } + +void lingot_config_dialog_apply(LingotConfigDialog* dialog) + { + GtkWidget* message_dialog; + + dialog->conf->root_frequency_error = gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(dialog->spin_root_frequency_error)); + dialog->conf->calculation_rate = gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(dialog->spin_calculation_rate)); + dialog->conf->visualization_rate = gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(dialog->spin_visualization_rate)); + dialog->conf->temporal_window = gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(dialog->spin_temporal_window)); + dialog->conf->noise_threshold_db = gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(dialog->spin_noise_threshold)); + dialog->conf->oversampling + = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dialog->spin_oversampling)); + dialog->conf->dft_number= gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dialog->spin_dft_number)); + dialog->conf->dft_size = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dialog->spin_dft_size)); + dialog->conf->peak_number + = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dialog->spin_peak_number)); + dialog->conf->peak_order= gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dialog->spin_peak_order)); + dialog->conf->peak_rejection_relation_db + = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dialog->spin_peak_rejection_relation)); + dialog->conf->fft_size = atoi(gtk_combo_box_get_active_text(GTK_COMBO_BOX(dialog->combo_fft_size))); + dialog->conf->sample_rate + = atoi(gtk_combo_box_get_active_text(GTK_COMBO_BOX(dialog->combo_sample_rate))); + + int result = lingot_config_update_internal_params(dialog->conf); + + lingot_mainframe_change_config(dialog->mainframe, dialog->conf); + + if (!result) + { + message_dialog + = gtk_message_dialog_new( + GTK_WINDOW(dialog->win), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_INFO, + GTK_BUTTONS_CLOSE, + _("Temporal buffer is smaller than FFT size. It has been increased to %0.3f seconds"), dialog->conf->temporal_window); + gtk_dialog_run(GTK_DIALOG(message_dialog)); + gtk_widget_destroy (message_dialog); + } + } + +void lingot_config_dialog_close(LingotConfigDialog* dialog) + { + gtk_widget_destroy(dialog->win); + } |
