static void prof_dialog(ProfArgs *args, GwyContainer *data, GwyDataField *dfield, gint id) { GtkWidget *hbox, *hbox2, *vbox, *label; GwyDataChooser *chooser; GtkTable *table; GtkDialog *dialog; GwyGraph *graph; GwyGraphArea *area; ProfControls controls; gint response; gint row; controls.args = args; controls.psdffield = prof_psdf(dfield, args); controls.modfield = prof_sqrt(controls.psdffield); controls.hx = gwy_data_field_get_xmeasure(dfield)/(2*G_PI); controls.hy = gwy_data_field_get_xmeasure(dfield)/(2*G_PI); controls.dialog = gtk_dialog_new_with_buttons(_("Radial PSDF Section"), NULL, 0, GTK_STOCK_CLEAR, RESPONSE_CLEAR, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); dialog = GTK_DIALOG(controls.dialog); gtk_dialog_set_default_response(dialog, GTK_RESPONSE_OK); gtk_dialog_set_response_sensitive(dialog, GTK_RESPONSE_OK, FALSE); gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT); hbox = gtk_hbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, FALSE, 4); controls.mydata = gwy_container_new(); gwy_container_set_object_by_name(controls.mydata, "/0/data", controls.modfield); g_object_unref(controls.modfield); gwy_container_set_string_by_name(controls.mydata, "/0/base/palette", g_strdup("DFit")); gwy_container_set_enum_by_name(controls.mydata, "/0/base/range-type", GWY_LAYER_BASIC_RANGE_AUTO); gwy_app_sync_data_items(data, controls.mydata, id, 0, FALSE, GWY_DATA_ITEM_REAL_SQUARE, 0); controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, FALSE); controls.selection = create_vector_layer(GWY_DATA_VIEW(controls.view), 0, "Point", TRUE); gwy_selection_set_max_objects(controls.selection, NLINES); g_object_set(gwy_data_view_get_top_layer(GWY_DATA_VIEW(controls.view)), "draw-as-vector", TRUE, NULL); g_signal_connect_swapped(controls.selection, "changed", G_CALLBACK(prof_selection_changed), &controls); gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4); vbox = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 4); controls.gmodel = gwy_graph_model_new(); g_object_set(controls.gmodel, "title", _("PSDF Section"), "axis-label-bottom", "k", "axis-label-left", "W", NULL); init_graph_model_units(controls.gmodel, controls.psdffield); controls.line = gwy_data_line_new(1, 1.0, FALSE); controls.graph = gwy_graph_new(controls.gmodel); graph = GWY_GRAPH(controls.graph); gtk_widget_set_size_request(controls.graph, GRAPH_WIDTH, -1); gwy_graph_set_axis_visible(graph, GTK_POS_LEFT, FALSE); gwy_graph_set_axis_visible(graph, GTK_POS_RIGHT, FALSE); gwy_graph_set_axis_visible(graph, GTK_POS_TOP, FALSE); gwy_graph_set_axis_visible(graph, GTK_POS_BOTTOM, FALSE); gwy_graph_enable_user_input(graph, FALSE); area = GWY_GRAPH_AREA(gwy_graph_get_area(graph)); gwy_graph_area_enable_user_input(area, FALSE); gtk_box_pack_start(GTK_BOX(vbox), controls.graph, TRUE, TRUE, 0); table = GTK_TABLE(gtk_table_new(4, 4, FALSE)); gtk_table_set_row_spacings(table, 2); gtk_table_set_col_spacings(table, 6); gtk_container_set_border_width(GTK_CONTAINER(table), 4); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(table), FALSE, FALSE, 0); row = 0; controls.resolution = gtk_adjustment_new(controls.args->resolution, MIN_RESOLUTION, MAX_RESOLUTION, 1, 10, 0); gwy_table_attach_hscale(GTK_WIDGET(table), row, _("_Fix res.:"), NULL, controls.resolution, GWY_HSCALE_CHECK | GWY_HSCALE_SQRT); g_signal_connect_swapped(controls.resolution, "value-changed", G_CALLBACK(prof_resolution_changed), &controls); controls.fixres = gwy_table_hscale_get_check(controls.resolution); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.fixres), controls.args->fixres); g_signal_connect_swapped(controls.fixres, "toggled", G_CALLBACK(prof_fixres_changed), &controls); gwy_table_hscale_set_sensitive(controls.resolution, controls.args->fixres); row++; controls.separate = gtk_check_button_new_with_mnemonic(_("_Separate curves")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.separate), args->separate); gtk_table_attach(table, controls.separate, 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0); g_signal_connect_swapped(controls.separate, "toggled", G_CALLBACK(prof_separate_changed), &controls); row++; hbox2 = gtk_hbox_new(FALSE, 6); gtk_table_attach(table, hbox2, 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0); label = gtk_label_new_with_mnemonic(_("_Interpolation type:")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0); controls.interpolation = gwy_enum_combo_box_new(gwy_interpolation_type_get_enum(), -1, G_CALLBACK(prof_interpolation_changed), &controls, controls.args->interpolation, TRUE); gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.interpolation); gtk_box_pack_end(GTK_BOX(hbox2), controls.interpolation, FALSE, FALSE, 0); row++; controls.target_hbox = hbox2 = gtk_hbox_new(FALSE, 6); gtk_widget_set_sensitive(hbox2, !args->separate); gtk_table_attach(GTK_TABLE(table), hbox2, 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0); label = gtk_label_new_with_mnemonic(_("Target _graph:")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0); controls.target_graph = gwy_data_chooser_new_graphs(); chooser = GWY_DATA_CHOOSER(controls.target_graph); gwy_data_chooser_set_none(chooser, _("New graph")); gwy_data_chooser_set_active(chooser, NULL, -1); gwy_data_chooser_set_filter(chooser, filter_target_graphs, &controls, NULL); gwy_data_chooser_set_active_id(chooser, &args->target_graph); gwy_data_chooser_get_active_id(chooser, &args->target_graph); gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.target_graph); gtk_box_pack_end(GTK_BOX(hbox2), controls.target_graph, FALSE, FALSE, 0); g_signal_connect_swapped(controls.target_graph, "changed", G_CALLBACK(target_graph_changed), &controls); row++; gtk_widget_show_all(controls.dialog); do { response = gtk_dialog_run(dialog); switch (response) { case GTK_RESPONSE_CANCEL: case GTK_RESPONSE_DELETE_EVENT: gtk_widget_destroy(controls.dialog); case GTK_RESPONSE_NONE: goto finalize; break; case GTK_RESPONSE_OK: break; case RESPONSE_CLEAR: gwy_selection_clear(controls.selection); break; default: g_assert_not_reached(); break; } } while (response != GTK_RESPONSE_OK); gtk_widget_destroy(controls.dialog); prof_execute(&controls, data); finalize: g_object_unref(controls.psdffield); g_object_unref(controls.mydata); g_object_unref(controls.gmodel); g_object_unref(controls.line); }
static void facets_dialog(FacetsArgs *args, GwyContainer *data, GwyContainer *fdata, GwyDataField *dfield, GwyDataField *mfield, gint id, GQuark mquark) { GtkWidget *dialog, *table, *hbox, *hbox2, *vbox, *label, *scale, *button; GtkWidget *spin; FacetsControls controls; gint response; GwySelection *selection; gint row; gwy_clear(&controls, 1); controls.args = args; dialog = gtk_dialog_new_with_buttons(_("Mark Facets"), NULL, GTK_DIALOG_DESTROY_WITH_PARENT, gwy_sgettext("verb|_Mark"), RESPONSE_PREVIEW, _("_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); controls.dialog = dialog; /* Shallow-copy stuff to temporary container */ controls.fdata = fdata; controls.mydata = gwy_container_new(); gwy_container_set_object_by_name(controls.mydata, "/0/data", dfield); gwy_app_sync_data_items(data, controls.mydata, id, 0, FALSE, GWY_DATA_ITEM_PALETTE, GWY_DATA_ITEM_RANGE, GWY_DATA_ITEM_MASK_COLOR, GWY_DATA_ITEM_REAL_SQUARE, 0); hbox = gtk_hbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, FALSE, 4); controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, TRUE); gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4); selection = create_vector_layer(GWY_DATA_VIEW(controls.view), 0, "Point", TRUE); g_signal_connect(selection, "changed", G_CALLBACK(preview_selection_updated), &controls); vbox = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); hbox2 = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0); /* Slope view */ controls.fview = create_preview(controls.fdata, 0, FDATA_RES, TRUE); gtk_box_pack_start(GTK_BOX(hbox2), controls.fview, FALSE, FALSE, 0); selection = create_vector_layer(GWY_DATA_VIEW(controls.fview), 0, "Point", TRUE); g_signal_connect(selection, "changed", G_CALLBACK(facet_view_selection_updated), &controls); /* Info table */ table = gtk_table_new(7, 2, 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(hbox2), table, TRUE, TRUE, 4); row = 0; /* TRANSLATORS: The direction or line orthogonal to something. */ label = gwy_label_new_header(_("Normal")); gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1, GTK_FILL, 0, 0, 0); row++; controls.theta_label = add_angle_label(table, _("θ:"), &row); controls.phi_label = add_angle_label(table, _("φ:"), &row); button = gtk_button_new_with_mnemonic(_("_Find Maximum")); gtk_table_attach(GTK_TABLE(table), button, 0, 2, row, row+1, GTK_FILL, 0, 0, 0); g_signal_connect_swapped(button, "clicked", G_CALLBACK(facet_view_reset_maximum), &controls); gtk_table_set_row_spacing(GTK_TABLE(table), row, 8); row++; label = gwy_label_new_header(_("Mean Normal")); gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1, GTK_FILL, 0, 0, 0); row++; controls.mtheta_label = add_angle_label(table, _("θ:"), &row); controls.mphi_label = add_angle_label(table, _("φ:"), &row); gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8); label = gtk_label_new_with_mnemonic(_("Facet plane size:")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1, GTK_FILL, 0, 0, 0); row++; controls.kernel_size = gtk_adjustment_new(args->kernel_size, 0.0, MAX_PLANE_SIZE, 1.0, 1.0, 0); spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.kernel_size), 0.0, 0); gtk_label_set_mnemonic_widget(GTK_LABEL(label), spin); gtk_table_attach(GTK_TABLE(table), spin, 0, 1, row, row+1, 0, 0, 0, 0); g_signal_connect(controls.kernel_size, "value-changed", G_CALLBACK(facet_view_recompute), &controls); row++; table = gtk_table_new(4 + 2*(!!mfield), 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(vbox), table, TRUE, TRUE, 4); row = 0; controls.tolerance = gtk_adjustment_new(args->tolerance*180.0/G_PI, 0.0, 15.0, 0.01, 0.1, 0); scale = gwy_table_attach_hscale(table, row++, _("_Tolerance:"), _("deg"), controls.tolerance, 0); gtk_spin_button_set_digits(GTK_SPIN_BUTTON(scale), 3); g_signal_connect(controls.tolerance, "value-changed", G_CALLBACK(facets_tolerance_changed), &controls); if (mfield) { gwy_container_set_object_by_name(controls.fdata, "/1/mask", mfield); controls.combine = gtk_check_button_new_with_mnemonic(_("Com_bine with " "existing mask")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.combine), args->combine); gtk_table_attach(GTK_TABLE(table), controls.combine, 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0); g_signal_connect(controls.combine, "toggled", G_CALLBACK(combine_changed), &controls); row++; controls.combine_type = gwy_enum_combo_box_new(gwy_merge_type_get_enum(), -1, G_CALLBACK(combine_type_changed), &controls, args->combine_type, TRUE); gwy_table_attach_hscale(table, row, _("Operation:"), NULL, GTK_OBJECT(controls.combine_type), GWY_HSCALE_WIDGET); gtk_table_set_row_spacing(GTK_TABLE(table), row, 8); row++; } controls.color_button = create_mask_color_button(controls.mydata, dialog, 0); gwy_table_attach_hscale(table, row, _("_Mask color:"), NULL, GTK_OBJECT(controls.color_button), GWY_HSCALE_WIDGET_NO_EXPAND); row++; if (!gwy_si_unit_equal(gwy_data_field_get_si_unit_xy(dfield), gwy_data_field_get_si_unit_z(dfield))) { gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8); label = gtk_label_new(_("Warning: Lateral and value units differ. " "Angles are not physically meaningful.")); gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(table), label, 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0); row++; } gtk_widget_show_all(dialog); facet_view_select_angle(&controls, args->theta0, args->phi0); 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: g_object_unref(controls.mydata); facets_save_args(gwy_app_settings_get(), args); return; break; case GTK_RESPONSE_OK: break; case RESPONSE_RESET: args->tolerance = facets_defaults.tolerance; args->kernel_size = facets_defaults.kernel_size; facets_dialog_update_controls(&controls, args); break; case RESPONSE_PREVIEW: preview(&controls, args); update_average_angle(&controls, args); break; default: g_assert_not_reached(); break; } } while (response != GTK_RESPONSE_OK); gwy_app_sync_data_items(controls.mydata, data, 0, id, FALSE, GWY_DATA_ITEM_MASK_COLOR, 0); gtk_widget_destroy(dialog); g_object_unref(controls.mydata); run_noninteractive(args, data, fdata, dfield, mfield, mquark); facets_save_args(gwy_app_settings_get(), args); gwy_app_channel_log_add_proc(data, id, id); }
static gboolean immerse_dialog(ImmerseArgs *args) { ImmerseControls controls; GwyContainer *data; GtkDialog *dialog; GtkWidget *table, *chooser, *hbox, *alignment, *label, *button, *vbox; GtkTooltips *tooltips; GdkDisplay *display; GwyDataField *dfield; gint response, row, id; gboolean ok; memset(&controls, 0, sizeof(ImmerseControls)); controls.args = args; tooltips = gwy_app_get_tooltips(); controls.dialog = gtk_dialog_new_with_buttons(_("Immerse Detail"), NULL, 0, NULL); dialog = GTK_DIALOG(controls.dialog); button = gtk_dialog_add_button(dialog, _("_Locate"), RESPONSE_ESTIMATE); gtk_tooltips_set_tip(tooltips, button, _("Locate detail by full image correlation search"), NULL); button = gtk_dialog_add_button(dialog, _("_Improve"), RESPONSE_REFINE); gtk_tooltips_set_tip(tooltips, button, _("Improve detail position by " "correlation search in neighborhood"), NULL); gtk_dialog_add_button(dialog, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); gtk_dialog_add_button(dialog, GTK_STOCK_OK, GTK_RESPONSE_OK); gtk_dialog_set_default_response(dialog, GTK_RESPONSE_OK); gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT); hbox = gtk_hbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(dialog->vbox), hbox, FALSE, FALSE, 4); /* Preview */ data = gwy_app_data_browser_get(args->image.datano); id = args->image.id; dfield = gwy_container_get_object(data, gwy_app_get_data_key_for_id(id)); controls.vf = gwy_data_field_get_value_format_xy(dfield, GWY_SI_UNIT_FORMAT_VFMARKUP, NULL); controls.mydata = gwy_container_new(); gwy_container_set_object_by_name(controls.mydata, "/0/data", dfield); gwy_app_sync_data_items(data, controls.mydata, id, 0, FALSE, GWY_DATA_ITEM_PALETTE, GWY_DATA_ITEM_MASK_COLOR, GWY_DATA_ITEM_RANGE, 0); gwy_container_set_boolean_by_name(controls.mydata, "/0/data/realsquare", TRUE); controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, FALSE); alignment = GTK_WIDGET(gtk_alignment_new(0.5, 0, 0, 0)); gtk_container_add(GTK_CONTAINER(alignment), controls.view); gtk_box_pack_start(GTK_BOX(hbox), alignment, FALSE, FALSE, 4); g_signal_connect_after(controls.view, "expose-event", G_CALLBACK(immerse_view_expose), &controls); g_signal_connect(controls.view, "button-press-event", G_CALLBACK(immerse_view_button_press), &controls); g_signal_connect(controls.view, "button-release-event", G_CALLBACK(immerse_view_button_release), &controls); g_signal_connect(controls.view, "motion-notify-event", G_CALLBACK(immerse_view_motion_notify), &controls); vbox = gtk_vbox_new(FALSE, 8); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 4); /* Parameters table */ table = gtk_table_new(8, 4, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 2); gtk_table_set_col_spacings(GTK_TABLE(table), 6); gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 4); row = 0; /* Detail to immerse */ chooser = gwy_data_chooser_new_channels(); gwy_data_chooser_set_active_id(GWY_DATA_CHOOSER(chooser), &args->detail); gwy_data_chooser_set_filter(GWY_DATA_CHOOSER(chooser), immerse_data_filter, &args->image, NULL); gwy_data_chooser_get_active_id(GWY_DATA_CHOOSER(chooser), &args->detail); g_signal_connect(chooser, "changed", G_CALLBACK(immerse_detail_cb), &controls); gwy_table_attach_hscale(table, row, _("_Detail image:"), NULL, GTK_OBJECT(chooser), GWY_HSCALE_WIDGET_NO_EXPAND); row++; /* Detail position */ label = gtk_label_new(_("Position:")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0); controls.pos = gtk_label_new(NULL); gtk_misc_set_alignment(GTK_MISC(controls.pos), 0.0, 0.5); gtk_table_attach(GTK_TABLE(table), controls.pos, 1, 3, row, row+1, GTK_FILL, 0, 0, 0); gtk_table_set_row_spacing(GTK_TABLE(table), row, 8); row++; /* Sampling */ label = gtk_label_new(_("Result Sampling")); 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); row++; controls.sampling = gwy_radio_buttons_createl(G_CALLBACK(immerse_sampling_changed), &controls, args->sampling, _("_Upsample large image"), GWY_IMMERSE_SAMPLING_UP, _("_Downsample detail"), GWY_IMMERSE_SAMPLING_DOWN, NULL); row = gwy_radio_buttons_attach_to_table(controls.sampling, GTK_TABLE(table), 4, row); gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8); /* Leveling */ label = gtk_label_new(_("Detail Leveling")); 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); row++; controls.leveling = gwy_radio_buttons_createl(G_CALLBACK(immerse_leveling_changed), &controls, args->leveling, gwy_sgettext("levelling|_None"), GWY_IMMERSE_LEVEL_NONE, _("_Mean value"), GWY_IMMERSE_LEVEL_MEAN, NULL); row = gwy_radio_buttons_attach_to_table(controls.leveling, GTK_TABLE(table), 4, row); gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8); /* Draw frame */ controls.draw_frame = gtk_check_button_new_with_mnemonic(_("Show _frame")); gtk_table_attach(GTK_TABLE(table), controls.draw_frame, 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.draw_frame), args->draw_frame); g_signal_connect(controls.draw_frame, "toggled", G_CALLBACK(immerse_frame_toggled), &controls); gtk_widget_show_all(controls.dialog); display = gtk_widget_get_display(controls.dialog); controls.near_cursor = gdk_cursor_new_for_display(display, GDK_FLEUR); controls.move_cursor = gdk_cursor_new_for_display(display, GDK_CROSS); immerse_detail_cb(GWY_DATA_CHOOSER(chooser), &controls); ok = FALSE; do { response = gtk_dialog_run(dialog); switch (response) { case GTK_RESPONSE_CANCEL: case GTK_RESPONSE_DELETE_EVENT: case GTK_RESPONSE_NONE: immerse_controls_destroy(&controls); immerse_save_args(gwy_app_settings_get(), args); return FALSE; break; case RESPONSE_ESTIMATE: case RESPONSE_REFINE: immerse_search(&controls, response); break; case GTK_RESPONSE_OK: ok = TRUE; break; default: g_assert_not_reached(); break; } } while (!ok); immerse_controls_destroy(&controls); immerse_save_args(gwy_app_settings_get(), args); return TRUE; }
static GtkWidget * create_dialog (void) { GtkWidget *notebook; GtkWidget *hbox; GtkWidget *preview_box; gimp_ui_init (PLUG_IN_BINARY, TRUE); dialog = gimp_dialog_new (_("GIMPressionist"), PLUG_IN_ROLE, NULL, 0, gimp_standard_help_func, PLUG_IN_PROC, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1); gimp_window_set_transient (GTK_WINDOW (dialog)); g_signal_connect (dialog, "response", G_CALLBACK (dialog_response), NULL); g_signal_connect (dialog, "destroy", G_CALLBACK (gtk_main_quit), NULL); hbox = gtk_hbox_new (FALSE, 12); gtk_container_set_border_width (GTK_CONTAINER (hbox), 12); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), hbox, TRUE, TRUE, 0); gtk_widget_show (hbox); preview_box = create_preview (); gtk_box_pack_start (GTK_BOX (hbox), preview_box, FALSE, FALSE, 0); gtk_widget_show (preview_box); notebook = gtk_notebook_new (); gtk_box_pack_start (GTK_BOX (hbox), notebook, TRUE, TRUE, 5); gtk_widget_show (notebook); create_presetpage (GTK_NOTEBOOK (notebook)); create_paperpage (GTK_NOTEBOOK (notebook)); create_brushpage (GTK_NOTEBOOK (notebook)); create_orientationpage (GTK_NOTEBOOK (notebook)); create_sizepage (GTK_NOTEBOOK (notebook)); create_placementpage (GTK_NOTEBOOK (notebook)); create_colorpage (GTK_NOTEBOOK (notebook)); create_generalpage (GTK_NOTEBOOK (notebook)); updatepreview (NULL, NULL); /* * This is to make sure the values from the pcvals will be reflected * in the GUI here. Otherwise they will be set to the defaults. * */ restore_values (); gtk_widget_show (dialog); return dialog; }