static gboolean cwt_dialog(CWTArgs *args) { GtkWidget *dialog, *table; CWTControls controls; enum { RESPONSE_RESET = 1 }; gint response; dialog = gtk_dialog_new_with_buttons(_("2D CWT"), NULL, 0, _("_Reset"), RESPONSE_RESET, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); table = gtk_table_new(4, 4, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 2); gtk_table_set_col_spacings(GTK_TABLE(table), 6); gtk_container_set_border_width(GTK_CONTAINER(table), 4); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, FALSE, FALSE, 4); controls.scale = gtk_adjustment_new(args->scale, 0.0, 1000.0, 1, 10, 0); gwy_table_attach_spinbutton(table, 1, _("_Scale:"), _("pixels"), controls.scale); controls.preserve = gtk_check_button_new_with_mnemonic(_("_Preserve size (don't " "resize to power of 2)")); gtk_table_attach(GTK_TABLE(table), controls.preserve, 0, 3, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.preserve), args->preserve); g_signal_connect(controls.preserve, "toggled", G_CALLBACK(preserve_changed_cb), args); controls.interp = gwy_enum_combo_box_new(gwy_interpolation_type_get_enum(), -1, G_CALLBACK(gwy_enum_combo_box_update_int), &args->interp, args->interp, TRUE); gwy_table_attach_row(table, 2, _("_Interpolation type:"), "", controls.interp); controls.wavelet = gwy_enum_combo_box_new(gwy_2d_cwt_wavelet_type_get_enum(), -1, G_CALLBACK(gwy_enum_combo_box_update_int), &args->wavelet, args->wavelet, TRUE); gwy_table_attach_row(table, 3, _("_Wavelet type:"), "", controls.wavelet); gtk_widget_show_all(dialog); do { response = gtk_dialog_run(GTK_DIALOG(dialog)); switch (response) { case GTK_RESPONSE_CANCEL: case GTK_RESPONSE_DELETE_EVENT: args->scale = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls.scale)); gtk_widget_destroy(dialog); case GTK_RESPONSE_NONE: return FALSE; break; case GTK_RESPONSE_OK: break; case RESPONSE_RESET: *args = cwt_defaults; cwt_dialog_update(&controls, args); break; default: g_assert_not_reached(); break; } } while (response != GTK_RESPONSE_OK); args->scale = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls.scale)); gtk_widget_destroy(dialog); return TRUE; }
static gboolean dwt_anisotropy_dialog(DWTAnisotropyArgs *args) { enum { RESPONSE_RESET = 1 }; GtkWidget *dialog, *table; DWTAnisotropyControls controls; gint response; dialog = gtk_dialog_new_with_buttons(_("2D DWT Anisotropy"), NULL, 0, _("_Reset"), RESPONSE_RESET, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT); table = gtk_table_new(2, 5, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 2); gtk_table_set_col_spacings(GTK_TABLE(table), 6); gtk_container_set_border_width(GTK_CONTAINER(table), 4); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, FALSE, FALSE, 4); controls.interp = gwy_enum_combo_box_new(gwy_interpolation_type_get_enum(), -1, G_CALLBACK(gwy_enum_combo_box_update_int), &args->interp, args->interp, TRUE); gwy_table_attach_row(table, 1, _("_Interpolation type:"), "", controls.interp); controls.wavelet = gwy_enum_combo_box_new(gwy_dwt_type_get_enum(), -1, G_CALLBACK(gwy_enum_combo_box_update_int), &args->wavelet, args->wavelet, TRUE); gwy_table_attach_row(table, 2, _("_Wavelet type:"), "", controls.wavelet); controls.ratio = gtk_adjustment_new(args->ratio, 0.0001, 10.0, 1, 0.1, 0); gwy_table_attach_spinbutton(table, 3, _("X/Y ratio threshold:"), NULL, controls.ratio); g_signal_connect(controls.ratio, "value-changed", G_CALLBACK(ratio_changed_cb), args); controls.lowlimit = gtk_adjustment_new(args->lowlimit, 1, 20, 1, 1, 0); gwy_table_attach_spinbutton(table, 4, _("Low level exclude limit:"), NULL, controls.lowlimit); g_signal_connect(controls.lowlimit, "value-changed", G_CALLBACK(lowlimit_changed_cb), args); gtk_widget_show_all(dialog); do { response = gtk_dialog_run(GTK_DIALOG(dialog)); switch (response) { case GTK_RESPONSE_CANCEL: case GTK_RESPONSE_DELETE_EVENT: gtk_widget_destroy(dialog); case GTK_RESPONSE_NONE: return FALSE; break; case GTK_RESPONSE_OK: break; case RESPONSE_RESET: *args = dwt_anisotropy_defaults; dwt_anisotropy_dialog_update(&controls, args); break; default: g_assert_not_reached(); break; } } while (response != GTK_RESPONSE_OK); gtk_widget_destroy(dialog); return TRUE; }
static gboolean dwt_dialog(DWTArgs *args, gint size, gint newsize) { enum { RESPONSE_RESET = 1 }; GtkWidget *dialog, *table, *label; DWTControls controls; gint row, response; gchar *s; dialog = gtk_dialog_new_with_buttons(_("2D DWT"), NULL, 0, _("_Reset"), RESPONSE_RESET, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); table = gtk_table_new(2, 4, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 2); gtk_table_set_col_spacings(GTK_TABLE(table), 6); gtk_container_set_border_width(GTK_CONTAINER(table), 4); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, FALSE, FALSE, 4); row = 0; controls.wavelet = gwy_enum_combo_box_new(gwy_dwt_type_get_enum(), -1, G_CALLBACK(gwy_enum_combo_box_update_int), &args->wavelet, args->wavelet, TRUE); gwy_table_attach_row(table, row, _("_Wavelet type:"), NULL, controls.wavelet); row++; if (size != newsize) { gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8); s = g_strdup_printf(_("Size %d is not a power of 2,\n" "data will be resampled to %d×%d for DWT."), size, newsize, newsize); label = gtk_label_new(s); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(table), label, 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0); g_free(s); row++; } controls.interp = gwy_enum_combo_box_new(gwy_interpolation_type_get_enum(), -1, G_CALLBACK(gwy_enum_combo_box_update_int), &args->interp, args->interp, TRUE); gwy_table_attach_row(table, row, _("_Interpolation type:"), NULL, controls.interp); gwy_table_hscale_set_sensitive(GTK_OBJECT(controls.interp), size != newsize); row++; gtk_widget_show_all(dialog); do { response = gtk_dialog_run(GTK_DIALOG(dialog)); switch (response) { case GTK_RESPONSE_CANCEL: case GTK_RESPONSE_DELETE_EVENT: gtk_widget_destroy(dialog); case GTK_RESPONSE_NONE: return FALSE; break; case GTK_RESPONSE_OK: break; case RESPONSE_RESET: *args = dwt_defaults; dwt_dialog_update(&controls, args); break; default: g_assert_not_reached(); break; } } while (response != GTK_RESPONSE_OK); gtk_widget_destroy(dialog); return TRUE; }
static gboolean unrotate_dialog(UnrotateArgs *args, GwyContainer *data, GwyDataField *dfield, gint id, gdouble *correction, GwyPlaneSymmetry guess) { enum { RESPONSE_RESET = 1 }; GtkWidget *dialog, *table, *label, *hbox; GwyPixmapLayer *layer; UnrotateControls controls; const gchar *s; gint response; gint row; controls.correction = correction; controls.guess = guess; controls.args = args; dialog = gtk_dialog_new_with_buttons(_("Correct Rotation"), NULL, 0, _("_Reset"), RESPONSE_RESET, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT); hbox = gtk_hbox_new(FALSE, 8); gtk_container_set_border_width(GTK_CONTAINER(hbox), 4); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, FALSE, 4); table = gtk_table_new(4, 3, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 2); gtk_table_set_col_spacings(GTK_TABLE(table), 6); gtk_container_set_border_width(GTK_CONTAINER(table), 4); gtk_box_pack_start(GTK_BOX(hbox), table, FALSE, FALSE, 0); row = 0; gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Structure")), 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0); row++; label = gtk_label_new(_("Detected:")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0); s = gwy_sgettext(gwy_enum_to_string(guess, gwy_plane_symmetry_get_enum(), -1)); label = gtk_label_new(_(s)); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(table), label, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0); row++; controls.symmetry = gwy_enum_combo_box_new(gwy_plane_symmetry_get_enum(), -1, G_CALLBACK(unrotate_symmetry_cb), &controls, args->symmetry, TRUE); gwy_table_attach_row(table, row, _("_Assume:"), NULL, controls.symmetry); row++; label = gtk_label_new(_("Correction:")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0); controls.corrlabel = gtk_label_new(NULL); gtk_misc_set_alignment(GTK_MISC(controls.corrlabel), 0.0, 0.5); gtk_table_attach(GTK_TABLE(table), controls.corrlabel, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0); gtk_table_set_row_spacing(GTK_TABLE(table), row, 8); row++; controls.interp = gwy_enum_combo_box_new(gwy_interpolation_type_get_enum(), -1, G_CALLBACK(unrotate_interp_cb), &controls, args->interp, TRUE); gwy_table_attach_row(table, row, _("_Interpolation type:"), "", controls.interp); controls.data = create_preview_data(data, dfield, id); controls.data_view = gwy_data_view_new(controls.data); g_object_unref(controls.data); layer = gwy_layer_basic_new(); gwy_pixmap_layer_set_data_key(layer, "/0/show"); gwy_layer_basic_set_gradient_key(GWY_LAYER_BASIC(layer), "/0/base/palette"); gwy_data_view_set_data_prefix(GWY_DATA_VIEW(controls.data_view), "/0/data"); gwy_data_view_set_base_layer(GWY_DATA_VIEW(controls.data_view), layer); gtk_box_pack_start(GTK_BOX(hbox), controls.data_view, FALSE, FALSE, 8); unrotate_dialog_update(&controls, args); gtk_widget_show_all(dialog); do { response = gtk_dialog_run(GTK_DIALOG(dialog)); switch (response) { case GTK_RESPONSE_CANCEL: case GTK_RESPONSE_DELETE_EVENT: gtk_widget_destroy(dialog); case GTK_RESPONSE_NONE: return FALSE; break; case GTK_RESPONSE_OK: break; case RESPONSE_RESET: *args = unrotate_defaults; unrotate_dialog_update(&controls, args); break; default: g_assert_not_reached(); break; } } while (response != GTK_RESPONSE_OK); gtk_widget_destroy(dialog); return TRUE; }
static gboolean psdflp_dialog(PSDFLPArgs *args) { GtkWidget *dialog, *table; PSDFLPControls controls; gint response, row; controls.args = args; dialog = gtk_dialog_new_with_buttons(_("Log-Phi PSDF"), NULL, 0, _("_Reset"), RESPONSE_RESET, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT); table = gtk_table_new(2, 4, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 2); gtk_table_set_col_spacings(GTK_TABLE(table), 6); gtk_container_set_border_width(GTK_CONTAINER(table), 4); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, FALSE, FALSE, 4); row = 0; controls.window = gwy_enum_combo_box_new(gwy_windowing_type_get_enum(), -1, G_CALLBACK(gwy_enum_combo_box_update_int), &args->window, args->window, TRUE); gwy_table_attach_row(table, row, _("_Windowing type:"), NULL, controls.window); g_signal_connect_swapped(controls.window, "changed", G_CALLBACK(windowing_changed), &controls); row++; controls.sigma = gtk_adjustment_new(args->sigma, 0.0, 40.0, 0.01, 1.0, 0); gwy_table_attach_hscale(table, row, _("Gaussian _smoothing:"), "px", controls.sigma, GWY_HSCALE_SQRT); g_signal_connect_swapped(controls.sigma, "value-changed", G_CALLBACK(sigma_changed), &controls); row++; gtk_widget_show_all(dialog); do { response = gtk_dialog_run(GTK_DIALOG(dialog)); switch (response) { case GTK_RESPONSE_CANCEL: case GTK_RESPONSE_DELETE_EVENT: gtk_widget_destroy(dialog); case GTK_RESPONSE_NONE: return FALSE; break; case GTK_RESPONSE_OK: break; case RESPONSE_RESET: *args = psdflp_defaults; psdflp_dialog_update(&controls, args); break; default: g_assert_not_reached(); break; } } while (response != GTK_RESPONSE_OK); gtk_widget_destroy(dialog); return TRUE; }
static gboolean maskcor_dialog(MaskcorArgs *args) { MaskcorControls controls; GtkWidget *dialog, *table, *chooser, *spin, *combo, *method; GtkObject *adj; gint row, response; gboolean ok; controls.args = args; dialog = gtk_dialog_new_with_buttons(_("Mask by Correlation"), NULL, 0, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT); table = gtk_table_new(5, 4, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 2); gtk_table_set_col_spacings(GTK_TABLE(table), 6); gtk_container_set_border_width(GTK_CONTAINER(table), 4); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, TRUE, TRUE, 4); row = 0; /* Kernel */ chooser = gwy_data_chooser_new_channels(); g_object_set_data(G_OBJECT(chooser), "dialog", dialog); gwy_data_chooser_set_active(GWY_DATA_CHOOSER(chooser), NULL, -1); gwy_data_chooser_set_filter(GWY_DATA_CHOOSER(chooser), maskcor_kernel_filter, &args->data, NULL); gwy_data_chooser_set_active_id(GWY_DATA_CHOOSER(chooser), &args->kernel); gwy_data_chooser_get_active_id(GWY_DATA_CHOOSER(chooser), &args->kernel); g_signal_connect(chooser, "changed", G_CALLBACK(maskcor_kernel_changed), &args->kernel); gwy_table_attach_hscale(table, row, _("Correlation _kernel:"), NULL, GTK_OBJECT(chooser), GWY_HSCALE_WIDGET); row++; /* Result */ combo = gwy_enum_combo_box_newl(G_CALLBACK(maskcor_operation_changed), &controls, args->result, _("Objects marked"), GWY_MASKCOR_OBJECTS, _("Correlation maxima"), GWY_MASKCOR_MAXIMA, _("Correlation score"), GWY_MASKCOR_SCORE, NULL); gwy_table_attach_row(table, row, _("Output _type:"), NULL, combo); row++; /* Parameters */ method = gwy_enum_combo_box_new(gwy_correlation_type_get_enum(), -1, G_CALLBACK(gwy_enum_combo_box_update_int), &args->method, args->method, TRUE); gwy_table_attach_row(table, row, _("Correlation _method:"), NULL, method); row++; adj = gtk_adjustment_new(args->threshold, -1.0, 1.0, 0.01, 0.1, 0); controls.threshold = adj; spin = gwy_table_attach_hscale(table, row, _("T_hreshold:"), NULL, adj, 0); gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3); gwy_table_hscale_set_sensitive(adj, args->result != GWY_MASKCOR_SCORE); g_signal_connect(adj, "value-changed", G_CALLBACK(maskcor_threshold_changed), &args->threshold); row++; gtk_widget_show_all(dialog); do { response = gtk_dialog_run(GTK_DIALOG(dialog)); switch (response) { case GTK_RESPONSE_CANCEL: case GTK_RESPONSE_DELETE_EVENT: gtk_widget_destroy(dialog); case GTK_RESPONSE_NONE: return FALSE; break; case GTK_RESPONSE_OK: gtk_widget_destroy(dialog); ok = TRUE; break; default: g_assert_not_reached(); break; } } while (!ok); return ok; }