static WidgetInfo * create_int_combo_box (void) { GtkWidget *vbox; GtkWidget *combo; GtkWidget *align; vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); align = gtk_alignment_new (0.5, 0.5, 0.5, 0.0); combo = gimp_int_combo_box_new ("Sobel", 1, "Prewitt", 2, "Gradient", 3, "Roberts", 4, "Differential", 5, "Laplace", 6, NULL); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), 1); gtk_container_add (GTK_CONTAINER (align), combo); gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Int Combo Box"), FALSE, FALSE, 0); return new_widget_info ("gimp-widget-int-combo-box", vbox, SMALL); }
static gboolean edge_dialog (GimpDrawable *drawable) { GtkWidget *dialog; GtkWidget *main_vbox; GtkWidget *preview; GtkWidget *hbox; GtkWidget *table; GtkWidget *combo; GtkWidget *toggle; GtkObject *scale_data; GSList *group = NULL; gboolean run; gboolean use_wrap = (evals.wrapmode == GIMP_PIXEL_FETCHER_EDGE_WRAP); gboolean use_smear = (evals.wrapmode == GIMP_PIXEL_FETCHER_EDGE_SMEAR); gboolean use_black = (evals.wrapmode == GIMP_PIXEL_FETCHER_EDGE_BLACK); gimp_ui_init (PLUG_IN_BINARY, FALSE); dialog = gimp_dialog_new (_("Edge Detection"), 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)); main_vbox = gtk_vbox_new (FALSE, 12); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), main_vbox, TRUE, TRUE, 0); gtk_widget_show (main_vbox); preview = gimp_drawable_preview_new (drawable, NULL); gtk_box_pack_start (GTK_BOX (main_vbox), preview, TRUE, TRUE, 0); gtk_widget_show (preview); g_signal_connect (preview, "invalidated", G_CALLBACK (edge_preview_update), NULL); table = gtk_table_new (3, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 6); gtk_table_set_row_spacings (GTK_TABLE (table), 6); gtk_box_pack_start (GTK_BOX (main_vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); combo = gimp_int_combo_box_new (_("Sobel"), SOBEL, _("Prewitt compass"), PREWITT, _("Gradient"), GRADIENT, _("Roberts"), ROBERTS, _("Differential"), DIFFERENTIAL, _("Laplace"), LAPLACE, NULL); gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo), evals.edgemode, G_CALLBACK (gimp_int_combo_box_get_active), &evals.edgemode); gimp_table_attach_aligned (GTK_TABLE (table), 0, 0, _("_Algorithm:"), 0.0, 0.5, combo, 2, FALSE); g_signal_connect_swapped (combo, "changed", G_CALLBACK (gimp_preview_invalidate), preview); /* Label, scale, entry for evals.amount */ scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, _("A_mount:"), 100, 0, evals.amount, 1.0, 10.0, 0.1, 1.0, 1, FALSE, 1.0, G_MAXFLOAT, NULL, NULL); g_signal_connect (scale_data, "value-changed", G_CALLBACK (gimp_double_adjustment_update), &evals.amount); g_signal_connect_swapped (scale_data, "value-changed", G_CALLBACK (gimp_preview_invalidate), preview); /* Radio buttons WRAP, SMEAR, BLACK */ hbox = gtk_hbox_new (FALSE, 4); gtk_table_attach (GTK_TABLE (table), hbox, 0, 3, 2, 3, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (hbox); toggle = gtk_radio_button_new_with_mnemonic (group, _("_Wrap")); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle)); gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, TRUE, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_wrap); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &use_wrap); g_signal_connect_swapped (toggle, "toggled", G_CALLBACK (gimp_preview_invalidate), preview); toggle = gtk_radio_button_new_with_mnemonic (group, _("_Smear")); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle)); gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, TRUE, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_smear); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &use_smear); g_signal_connect_swapped (toggle, "toggled", G_CALLBACK (gimp_preview_invalidate), preview); toggle = gtk_radio_button_new_with_mnemonic (group, _("_Black")); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle)); gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, TRUE, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_black); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &use_black); g_signal_connect_swapped (toggle, "toggled", G_CALLBACK (gimp_preview_invalidate), preview); gtk_widget_show (dialog); run = (gimp_dialog_run (GIMP_DIALOG (dialog)) == GTK_RESPONSE_OK); gtk_widget_destroy (dialog); if (use_wrap) evals.wrapmode = GIMP_PIXEL_FETCHER_EDGE_WRAP; else if (use_smear) evals.wrapmode = GIMP_PIXEL_FETCHER_EDGE_SMEAR; else if (use_black) evals.wrapmode = GIMP_PIXEL_FETCHER_EDGE_BLACK; return run; }
gboolean save_dialog (void) { JpegSaveGui pg; GtkWidget *dialog; GtkWidget *vbox; GtkObject *entry; GtkWidget *table; GtkWidget *table2; GtkWidget *tabledefaults; GtkWidget *expander; GtkWidget *frame; GtkWidget *toggle; GtkWidget *spinbutton; GtkWidget *label; GtkWidget *combo; GtkWidget *text_view; GtkTextBuffer *text_buffer; GtkWidget *scrolled_window; GtkWidget *button; gchar *text; gint row; dialog = gimp_export_dialog_new (_("JPEG"), PLUG_IN_BINARY, SAVE_PROC); g_signal_connect (dialog, "response", G_CALLBACK (save_dialog_response), &pg); g_signal_connect (dialog, "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); gtk_box_pack_start (GTK_BOX (gimp_export_dialog_get_content_area (dialog)), vbox, TRUE, TRUE, 0); gtk_widget_show (vbox); table = gtk_table_new (1, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 6); gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); pg.quality = entry = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, _("_Quality:"), SCALE_WIDTH, 0, jsvals.quality, 0.0, 100.0, 1.0, 10.0, 0, TRUE, 0.0, 0.0, _("JPEG quality parameter"), "file-jpeg-save-quality"); g_signal_connect (entry, "value-changed", G_CALLBACK (gimp_double_adjustment_update), &jsvals.quality); g_signal_connect (entry, "value-changed", G_CALLBACK (make_preview), NULL); preview_size = gtk_label_new (_("File size: unknown")); gtk_misc_set_alignment (GTK_MISC (preview_size), 0.0, 0.5); gtk_label_set_ellipsize (GTK_LABEL (preview_size), PANGO_ELLIPSIZE_END); gimp_label_set_attributes (GTK_LABEL (preview_size), PANGO_ATTR_STYLE, PANGO_STYLE_ITALIC, -1); gtk_box_pack_start (GTK_BOX (vbox), preview_size, FALSE, FALSE, 0); gtk_widget_show (preview_size); gimp_help_set_help_data (preview_size, _("Enable preview to obtain the file size."), NULL); pg.preview = toggle = gtk_check_button_new_with_mnemonic (_("Sho_w preview in image window")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.preview); gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &jsvals.preview); g_signal_connect (toggle, "toggled", G_CALLBACK (make_preview), NULL); text = g_strdup_printf ("<b>%s</b>", _("_Advanced Options")); expander = gtk_expander_new_with_mnemonic (text); gtk_expander_set_use_markup (GTK_EXPANDER (expander), TRUE); g_free (text); gtk_box_pack_start (GTK_BOX (vbox), expander, TRUE, TRUE, 0); gtk_widget_show (expander); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); gtk_container_add (GTK_CONTAINER (expander), vbox); gtk_widget_show (vbox); frame = gimp_frame_new ("<expander>"); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); table = gtk_table_new (4, 8, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 6); gtk_table_set_row_spacings (GTK_TABLE (table), 6); gtk_table_set_col_spacing (GTK_TABLE (table), 1, 12); gtk_container_add (GTK_CONTAINER (frame), table); table2 = gtk_table_new (1, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table2), 6); gtk_table_attach (GTK_TABLE (table), table2, 2, 6, 0, 1, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (table2); pg.smoothing = entry = gimp_scale_entry_new (GTK_TABLE (table2), 0, 0, _("S_moothing:"), 100, 0, jsvals.smoothing, 0.0, 1.0, 0.01, 0.1, 2, TRUE, 0.0, 0.0, NULL, "file-jpeg-save-smoothing"); g_signal_connect (entry, "value-changed", G_CALLBACK (gimp_double_adjustment_update), &jsvals.smoothing); g_signal_connect (entry, "value-changed", G_CALLBACK (make_preview), NULL); restart_markers_label = gtk_label_new (_("Interval (MCU rows):")); gtk_misc_set_alignment (GTK_MISC (restart_markers_label), 1.0, 0.5); gtk_table_attach (GTK_TABLE (table), restart_markers_label, 4, 5, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); gtk_widget_show (restart_markers_label); pg.scale_data = (GtkAdjustment *) gtk_adjustment_new (((jsvals.restart == 0) ? DEFAULT_RESTART_MCU_ROWS : jsvals.restart), 1.0, 64.0, 1.0, 1.0, 0); pg.restart = restart_markers_scale = spinbutton = gtk_spin_button_new (pg.scale_data, 1.0, 0); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); gtk_table_attach (GTK_TABLE (table), spinbutton, 5, 6, 1, 2, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (spinbutton); pg.use_restart_markers = toggle = gtk_check_button_new_with_mnemonic (_("Use _restart markers")); gtk_table_attach (GTK_TABLE (table), toggle, 2, 4, 1, 2, GTK_FILL, 0, 0, 0); gtk_widget_show (toggle); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.restart); gtk_widget_set_sensitive (restart_markers_label, jsvals.restart); gtk_widget_set_sensitive (restart_markers_scale, jsvals.restart); g_signal_connect (pg.scale_data, "value-changed", G_CALLBACK (save_restart_update), toggle); pg.handler_id_restart = g_signal_connect_swapped (toggle, "toggled", G_CALLBACK (save_restart_update), pg.scale_data); row = 0; /* Optimize */ pg.optimize = toggle = gtk_check_button_new_with_mnemonic (_("_Optimize")); gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &jsvals.optimize); g_signal_connect (toggle, "toggled", G_CALLBACK (make_preview), NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.optimize); if (arithc_supported) gtk_widget_set_sensitive (toggle, !jsvals.arithmetic_coding); row++; if (arithc_supported) { /* Arithmetic coding */ pg.arithmetic_coding = toggle = gtk_check_button_new_with_mnemonic (_("Use arithmetic _coding")); gtk_widget_set_tooltip_text (toggle, _("Older software may have trouble opening " "arithmetic-coded images")); gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &jsvals.arithmetic_coding); g_signal_connect (toggle, "toggled", G_CALLBACK (make_preview), NULL); g_signal_connect (toggle, "toggled", G_CALLBACK (toggle_arithmetic_coding), pg.optimize); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.arithmetic_coding); row++; } /* Progressive */ pg.progressive = toggle = gtk_check_button_new_with_mnemonic (_("_Progressive")); gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &jsvals.progressive); g_signal_connect (toggle, "toggled", G_CALLBACK (make_preview), NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.progressive); row++; /* Save EXIF data */ pg.save_exif = toggle = gtk_check_button_new_with_mnemonic (_("Save _Exif data")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.save_exif); gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &jsvals.save_exif); g_signal_connect (toggle, "toggled", G_CALLBACK (make_preview), NULL); gtk_widget_set_sensitive (toggle, TRUE); row++; /* Save thumbnail */ pg.save_thumbnail = toggle = gtk_check_button_new_with_mnemonic (_("Save _thumbnail")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.save_thumbnail); gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &jsvals.save_thumbnail); g_signal_connect (toggle, "toggled", G_CALLBACK (make_preview), NULL); row++; /* XMP metadata */ pg.save_xmp = toggle = gtk_check_button_new_with_mnemonic (_("Save _XMP data")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.save_xmp); gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &jsvals.save_xmp); g_signal_connect (toggle, "toggled", G_CALLBACK (make_preview), NULL); gtk_widget_set_sensitive (toggle, TRUE); row++; /* IPTC metadata */ pg.save_iptc = toggle = gtk_check_button_new_with_mnemonic (_("Save _IPTC data")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.save_iptc); gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &jsvals.save_iptc); g_signal_connect (toggle, "toggled", G_CALLBACK (make_preview), NULL); gtk_widget_set_sensitive (toggle, TRUE); row++; /* custom quantization tables - now used also for original quality */ pg.use_orig_quality = toggle = gtk_check_button_new_with_mnemonic (_("_Use quality settings from original " "image")); gtk_table_attach (GTK_TABLE (table), toggle, 0, 4, row, row + 1, GTK_FILL, 0, 0, 0); gtk_widget_show (toggle); gimp_help_set_help_data (toggle, _("If the original image was loaded from a JPEG " "file using non-standard quality settings " "(quantization tables), enable this option to " "get almost the same quality and file size."), NULL); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &jsvals.use_orig_quality); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), jsvals.use_orig_quality && (orig_quality > 0)); gtk_widget_set_sensitive (toggle, (orig_quality > 0)); /* changing quality disables custom quantization tables, and vice-versa */ g_signal_connect (pg.quality, "value-changed", G_CALLBACK (quality_changed), pg.use_orig_quality); g_signal_connect (pg.use_orig_quality, "toggled", G_CALLBACK (use_orig_qual_changed), pg.quality); /* Subsampling */ label = gtk_label_new_with_mnemonic (_("Su_bsampling:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_table_attach (GTK_TABLE (table), label, 2, 3, 2, 3, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (label); pg.subsmp = combo = gimp_int_combo_box_new (_("4:4:4 (best quality)"), JPEG_SUBSAMPLING_1x1_1x1_1x1, _("4:2:2 horizontal (chroma halved)"), JPEG_SUBSAMPLING_2x1_1x1_1x1, _("4:2:2 vertical (chroma halved)"), JPEG_SUBSAMPLING_1x2_1x1_1x1, _("4:2:0 (chroma quartered)"), JPEG_SUBSAMPLING_2x2_1x1_1x1, NULL); gtk_table_attach (GTK_TABLE (table), combo, 3, 6, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); gtk_widget_show (combo); gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo); if (gimp_drawable_is_rgb (drawable_ID_global)) { gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo), jsvals.subsmp, G_CALLBACK (subsampling_changed), entry); g_signal_connect (pg.use_orig_quality, "toggled", G_CALLBACK (use_orig_qual_changed2), pg.subsmp); } else { gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), JPEG_SUBSAMPLING_1x1_1x1_1x1); gtk_widget_set_sensitive (combo, FALSE); } /* DCT method */ label = gtk_label_new_with_mnemonic (_("_DCT method:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_table_attach (GTK_TABLE (table), label, 2, 3, 3, 4, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (label); pg.dct = combo = gimp_int_combo_box_new (_("Fast Integer"), 1, _("Integer"), 0, _("Floating-Point"), 2, NULL); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), jsvals.dct); gtk_table_attach (GTK_TABLE (table), combo, 3, 6, 3, 4, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); gtk_widget_show (combo); gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo); g_signal_connect (combo, "changed", G_CALLBACK (gimp_int_combo_box_get_active), &jsvals.dct); g_signal_connect (combo, "changed", G_CALLBACK (make_preview), NULL); frame = gimp_frame_new (_("Comment")); gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); gtk_widget_show (frame); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_set_size_request (scrolled_window, 250, 50); gtk_container_add (GTK_CONTAINER (frame), scrolled_window); gtk_widget_show (scrolled_window); pg.text_buffer = text_buffer = gtk_text_buffer_new (NULL); if (image_comment) gtk_text_buffer_set_text (text_buffer, image_comment, -1); text_view = gtk_text_view_new_with_buffer (text_buffer); gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text_view), GTK_WRAP_WORD); gtk_container_add (GTK_CONTAINER (scrolled_window), text_view); gtk_widget_show (text_view); g_object_unref (text_buffer); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); gtk_box_pack_start (GTK_BOX (gimp_export_dialog_get_content_area (dialog)), vbox, TRUE, TRUE, 0); gtk_widget_show (vbox); tabledefaults = gtk_table_new (1, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (tabledefaults), 6); gtk_box_pack_start (GTK_BOX (vbox), tabledefaults, FALSE, FALSE, 0); gtk_widget_show (tabledefaults); button = gtk_button_new_with_mnemonic (_("_Load Defaults")); gtk_table_attach (GTK_TABLE (tabledefaults), button, 0, 1, 1, 2, GTK_FILL, 0, 0, 0); gtk_widget_show (button); g_signal_connect_swapped (button, "clicked", G_CALLBACK (load_gui_defaults), &pg); button = gtk_button_new_with_mnemonic (_("Sa_ve Defaults")); gtk_table_attach (GTK_TABLE (tabledefaults), button, 1, 2, 1, 2, GTK_FILL, 0, 0, 0); gtk_widget_show (button); g_signal_connect_swapped (button, "clicked", G_CALLBACK (save_defaults), &pg); gtk_widget_show (frame); gtk_widget_show (table); gtk_widget_show (dialog); make_preview (); pg.run = FALSE; gtk_main (); destroy_preview (); return pg.run; }
/* This function creates and returns an hbox for an icon, which then gets added to the dialog's main vbox. */ static GtkWidget * ico_create_icon_hbox (GtkWidget *icon_preview, gint32 layer, gint layer_num, IcoSaveInfo *info) { static GtkSizeGroup *size = NULL; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *alignment; GtkWidget *combo; GtkWidget *checkbox; hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); alignment = gtk_alignment_new (1.0, 0.5, 0, 0); gtk_box_pack_start (GTK_BOX (hbox), alignment, FALSE, FALSE, 0); gtk_widget_show (alignment); /* To make life easier for the callbacks, we store the layer's ID and stacking number with the hbox. */ g_object_set_data (G_OBJECT (hbox), "icon_layer", GINT_TO_POINTER (layer)); g_object_set_data (G_OBJECT (hbox), "icon_layer_num", GINT_TO_POINTER (layer_num)); g_object_set_data (G_OBJECT (hbox), "icon_preview", icon_preview); gtk_container_add (GTK_CONTAINER (alignment), icon_preview); gtk_widget_show (icon_preview); if (! size) size = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); gtk_size_group_add_widget (size, alignment); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); gtk_widget_show (vbox); combo = gimp_int_combo_box_new (_("1 bpp, 1-bit alpha, 2-slot palette"), 1, _("4 bpp, 1-bit alpha, 16-slot palette"), 4, _("8 bpp, 1-bit alpha, 256-slot palette"), 8, _("24 bpp, 1-bit alpha, no palette"), 24, _("32 bpp, 8-bit alpha, no palette"), 32, NULL); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), info->depths[layer_num]); g_signal_connect (combo, "changed", G_CALLBACK (ico_dialog_bpp_changed), hbox); g_object_set_data (G_OBJECT (hbox), "icon_menu", combo); gtk_box_pack_start (GTK_BOX (vbox), combo, FALSE, FALSE, 0); gtk_widget_show (combo); checkbox = gtk_check_button_new_with_label (_("Compressed (PNG)")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), info->compress[layer_num]); g_signal_connect (checkbox, "toggled", G_CALLBACK (ico_dialog_toggle_compress), hbox); gtk_box_pack_start (GTK_BOX (vbox), checkbox, FALSE, FALSE, 0); gtk_widget_show (checkbox); return hbox; }
static gboolean webpage_dialog (void) { GtkWidget *dialog; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *image; GtkWidget *label; GtkWidget *entry; GtkSizeGroup *sizegroup; GtkAdjustment *adjustment; GtkWidget *spinbutton; GtkWidget *combo; gint active; gint status; gboolean ret = FALSE; gimp_ui_init (PLUG_IN_BINARY, FALSE); dialog = gimp_dialog_new (_("Create from webpage"), PLUG_IN_ROLE, NULL, 0, gimp_standard_help_func, PLUG_IN_PROC, _("_Cancel"), GTK_RESPONSE_CANCEL, _("Cre_ate"), GTK_RESPONSE_OK, NULL); gimp_dialog_set_alternative_button_order (GTK_DIALOG (dialog), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1); gimp_window_set_transient (GTK_WINDOW (dialog)); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 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, FALSE, FALSE, 0); gtk_widget_show (hbox); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); gtk_widget_show (vbox); image = gtk_image_new_from_icon_name (GIMP_ICON_WEB, GTK_ICON_SIZE_BUTTON); gtk_box_pack_start (GTK_BOX (vbox), image, FALSE, FALSE, 0); gtk_widget_show (image); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); gtk_widget_show (vbox); label = gtk_label_new (_("Enter location (URI):")); gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); gtk_widget_show (label); entry = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); gtk_widget_set_size_request (entry, 400, -1); gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0); if (webpagevals.url) gtk_entry_set_text (GTK_ENTRY (entry), webpagevals.url); gtk_widget_show (entry); sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); /* Width */ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); label = gtk_label_new (_("Width (pixels):")); gtk_size_group_add_widget (sizegroup, label); gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); adjustment = gtk_adjustment_new (webpagevals.width, 1, 8192, 1, 10, 0); spinbutton = gtk_spin_button_new (adjustment, 1.0, 0); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE); gtk_box_pack_start (GTK_BOX (hbox), spinbutton, FALSE, FALSE, 0); gtk_widget_show (spinbutton); /* Font size */ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); label = gtk_label_new (_("Font size:")); gtk_size_group_add_widget (sizegroup, label); gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); combo = gimp_int_combo_box_new (_("Huge"), 16, _("Large"), 14, C_("web-page", "Default"), 12, _("Small"), 10, _("Tiny"), 8, NULL); switch (webpagevals.font_size) { case 16: case 14: case 12: case 10: case 8: active = webpagevals.font_size; break; default: active = 12; } gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), active); gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0); gtk_widget_show (combo); g_object_unref (sizegroup); status = gimp_dialog_run (GIMP_DIALOG (dialog)); if (status == GTK_RESPONSE_OK) { g_free (webpagevals.url); webpagevals.url = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); webpagevals.width = (gint) gtk_adjustment_get_value (adjustment); gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (combo), &webpagevals.font_size); ret = TRUE; } gtk_widget_destroy (dialog); return ret; }
static gboolean retinex_dialog (GimpDrawable *drawable) { GtkWidget *dialog; GtkWidget *main_vbox; GtkWidget *preview; GtkWidget *table; GtkWidget *combo; GtkObject *adj; gboolean run; gimp_ui_init (PLUG_IN_BINARY, FALSE); dialog = gimp_dialog_new (_("Retinex Image Enhancement"), PLUG_IN_BINARY, 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)); main_vbox = gtk_vbox_new (FALSE, 12); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), main_vbox, TRUE, TRUE, 0); gtk_widget_show (main_vbox); preview = gimp_zoom_preview_new (drawable); gtk_box_pack_start (GTK_BOX (main_vbox), preview, TRUE, TRUE, 0); gtk_widget_show (preview); g_signal_connect_swapped (preview, "invalidated", G_CALLBACK (retinex), drawable); table = gtk_table_new (4, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 6); gtk_table_set_row_spacings (GTK_TABLE (table), 6); gtk_box_pack_start (GTK_BOX (main_vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); combo = gimp_int_combo_box_new (_("Uniform"), filter_uniform, _("Low"), filter_low, _("High"), filter_high, NULL); gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo), rvals.scales_mode, G_CALLBACK (gimp_int_combo_box_get_active), &rvals.scales_mode); g_signal_connect_swapped (combo, "changed", G_CALLBACK (gimp_preview_invalidate), preview); gimp_table_attach_aligned (GTK_TABLE (table), 0, 0, _("_Level:"), 0.0, 0.5, combo, 2, FALSE); gtk_widget_show (combo); adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, _("_Scale:"), SCALE_WIDTH, ENTRY_WIDTH, rvals.scale, MIN_GAUSSIAN_SCALE, MAX_GAUSSIAN_SCALE, 1, 1, 0, TRUE, 0, 0, NULL, NULL); g_signal_connect (adj, "value-changed", G_CALLBACK (gimp_int_adjustment_update), &rvals.scale); g_signal_connect_swapped (adj, "value-changed", G_CALLBACK (gimp_preview_invalidate), preview); adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, _("Scale _division:"), SCALE_WIDTH, ENTRY_WIDTH, rvals.nscales, 0, MAX_RETINEX_SCALES, 1, 1, 0, TRUE, 0, 0, NULL, NULL); g_signal_connect (adj, "value-changed", G_CALLBACK (gimp_int_adjustment_update), &rvals.nscales); g_signal_connect_swapped (adj, "value-changed", G_CALLBACK (gimp_preview_invalidate), preview); adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 3, _("Dy_namic:"), SCALE_WIDTH, ENTRY_WIDTH, rvals.cvar, 0, 4, 0.1, 0.1, 1, TRUE, 0, 0, NULL, NULL); g_signal_connect (adj, "value-changed", G_CALLBACK (gimp_float_adjustment_update), &rvals.cvar); g_signal_connect_swapped (adj, "value-changed", G_CALLBACK (gimp_preview_invalidate), preview); gtk_widget_show (dialog); run = (gimp_dialog_run (GIMP_DIALOG (dialog)) == GTK_RESPONSE_OK); gtk_widget_destroy (dialog); return run; }
static gboolean file_vtf_save_dialog (SaveInfo *info) { gimp_ui_init ("file-vtf", TRUE); GtkWidget *dialog = gimp_export_dialog_new ("Valve Texture", "file-vtf", "plug-in-vtf"); GtkWidget *table = gtk_table_new (2, 2, FALSE); g_object_set (G_OBJECT (table), "border-width", 12, "column-spacing", 8, "row-spacing", 4, NULL); info->ctl_version = gimp_int_combo_box_new ( "7.0", 0, "7.2", 2, "7.3", 3, "7.4", 4, NULL); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (info->ctl_version), info->version); g_signal_connect (info->ctl_version, "changed", G_CALLBACK (save_dialog_version_changed), info); gtk_table_attach (GTK_TABLE (table), info->ctl_version, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), GTK_FILL, 0, 0); GtkWidget *label = gtk_label_new ("_Version:"); g_object_set (G_OBJECT (label), "mnemonic-widget", info->ctl_version, "use-underline", TRUE, "xalign", 1.0, NULL); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); info->ctl_format = gimp_int_combo_box_new ( Vtf::formatToString (Vtf::FormatRGBA8888), Vtf::FormatRGBA8888, Vtf::formatToString (Vtf::FormatDXT1), Vtf::FormatDXT1, Vtf::formatToString (Vtf::FormatDXT3), Vtf::FormatDXT3, Vtf::formatToString (Vtf::FormatDXT5), Vtf::FormatDXT5, NULL); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (info->ctl_format), info->format); gtk_table_attach (GTK_TABLE (table), info->ctl_format, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), GTK_FILL, 0, 0); label = gtk_label_new ("_Format:"); g_object_set (G_OBJECT (label), "mnemonic-widget", info->ctl_format, "use-underline", TRUE, "xalign", 1.0, NULL); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); info->ctl_layer = gimp_int_combo_box_new ( "Frames", 0, "Faces", 1, "Z slices", 2, NULL); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (info->ctl_layer), 0); gtk_table_attach (GTK_TABLE (table), info->ctl_layer, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), GTK_FILL, 0, 0); label = gtk_label_new ("_Layers to:"); g_object_set (G_OBJECT (label), "mnemonic-widget", info->ctl_layer, "use-underline", TRUE, "xalign", 1.0, NULL); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); info->ctl_mipmap = gtk_check_button_new_with_label ("Add and generate _mipmaps"); g_object_set (G_OBJECT (info->ctl_mipmap), "use-underline", TRUE, "active", TRUE, NULL); gtk_table_attach (GTK_TABLE (table), info->ctl_mipmap, 0, 2, 3, 4, GTK_FILL, GTK_FILL, 0, 0); info->ctl_lowres = gtk_check_button_new_with_label ("Add low _resolution image"); g_object_set (G_OBJECT (info->ctl_lowres), "use-underline", TRUE, "active", TRUE, NULL); gtk_table_attach (GTK_TABLE (table), info->ctl_lowres, 0, 2, 4, 5, GTK_FILL, GTK_FILL, 0, 0); info->ctl_crc = gtk_check_button_new_with_label ("Add _CRC"); g_object_set (G_OBJECT (info->ctl_crc), "use-underline", TRUE, "active", TRUE, NULL); gtk_table_attach (GTK_TABLE (table), info->ctl_crc, 0, 2, 5, 6, GTK_FILL, GTK_FILL, 0, 0); gtk_box_pack_start (GTK_BOX (gimp_export_dialog_get_content_area (dialog)), table, TRUE, TRUE, 0); gtk_widget_show_all (table); gtk_widget_show (dialog); gint resp = gimp_dialog_run (GIMP_DIALOG (dialog)); gtk_widget_destroy (dialog); return (resp == GTK_RESPONSE_OK); }
static GObject* webx_indexed_target_constructor (GType type, guint n_params, GObjectConstructParam *params) { GObject *object; WebxIndexedTarget *indexed; GtkWidget *radio; GSList *radio_group; GtkWidget *combo; GtkWidget *label; GtkWidget *separator; gint row = 0; object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params); indexed = WEBX_INDEXED_TARGET (object); /* * reuse existing */ radio = gtk_radio_button_new_with_label (NULL, _("Reuse existing palette")); gtk_table_attach (GTK_TABLE (indexed), radio, 0, 3, row, row+1, GTK_FILL, GTK_FILL, 0, 0); radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)); g_signal_connect_swapped (GTK_WIDGET (radio), "toggled", G_CALLBACK (webx_indexed_target_changed), indexed); indexed->reuse_pal_w = radio; gtk_widget_show (radio); /* * generate optimum */ row++; radio = gtk_radio_button_new_with_label (radio_group, _("Generate optimum palette")); gtk_table_attach (GTK_TABLE (indexed), radio, 0, 3, row, row+1, GTK_FILL, GTK_FILL, 0, 0); radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)); g_signal_connect_swapped (GTK_WIDGET (radio), "toggled", G_CALLBACK (webx_indexed_target_changed), indexed); indexed->make_pal_w = radio; gtk_widget_show (radio); row++; label = gtk_label_new (_("Number of colors:")); gtk_table_attach (GTK_TABLE (indexed), label, 0, 2, row, row+1, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (label); indexed->num_colors_w = gtk_spin_button_new_with_range (2, 256, 1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (indexed->num_colors_w), 256); g_signal_connect_swapped (indexed->num_colors_w, "value-changed", G_CALLBACK (webx_indexed_target_changed), indexed); gtk_table_attach (GTK_TABLE (indexed), indexed->num_colors_w, 2, 3, row, row+1, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (indexed->num_colors_w); /* * web-optimized */ row++; radio = gtk_radio_button_new_with_label (radio_group, _("Use web-optimized palette")); gtk_table_attach (GTK_TABLE (indexed), radio, 0, 3, row, row+1, GTK_FILL, GTK_FILL, 0, 0); radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)); g_signal_connect_swapped (GTK_WIDGET (radio), "toggled", G_CALLBACK (webx_indexed_target_changed), indexed); indexed->web_pal_w = radio; gtk_widget_show (radio); /* * b&w */ row++; radio = gtk_radio_button_new_with_label (radio_group, _("Use black and white palette")); gtk_table_attach (GTK_TABLE (indexed), radio, 0, 3, row, row+1, GTK_FILL, GTK_FILL, 0, 0); radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)); g_signal_connect_swapped (GTK_WIDGET (radio), "toggled", G_CALLBACK (webx_indexed_target_changed), indexed); indexed->bw_pal_w = radio; gtk_widget_show (radio); row++; indexed->remove_unused_w = gtk_check_button_new_with_label (_("Remove unused colors")); gtk_table_attach (GTK_TABLE (indexed), indexed->remove_unused_w, 0, 3, row, row+1, GTK_FILL, GTK_FILL, 0, 0); g_signal_connect_swapped (indexed->remove_unused_w, "toggled", G_CALLBACK (webx_indexed_target_changed), indexed); gtk_widget_show (indexed->remove_unused_w); row++; separator = gtk_hseparator_new (); gtk_table_attach (GTK_TABLE (indexed), separator, 0, 3, row, row+1, GTK_FILL, GTK_FILL, 0, 8); row++; label = gtk_label_new (_("Dither:")); gtk_table_attach (GTK_TABLE (indexed), label, 0, 1, row, row+1, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (label); combo = gimp_int_combo_box_new (_("None"), GIMP_NO_DITHER, _("Floyd-Steinberg"), GIMP_FS_DITHER, _("Floyd-Steinberg 2"), GIMP_FSLOWBLEED_DITHER, _("Positioned"), GIMP_FIXED_DITHER, NULL); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), GIMP_NO_DITHER); gtk_table_attach (GTK_TABLE (indexed), combo, 1, 3, row, row+1, GTK_SHRINK, GTK_SHRINK, 0, 0); g_signal_connect_swapped (combo, "changed", G_CALLBACK (webx_indexed_target_changed), indexed); indexed->dither_type_w = combo; gtk_widget_show (combo); row++; indexed->alpha_dither_w = gtk_check_button_new_with_label (_("Dithering of transparency")); gtk_table_attach (GTK_TABLE (indexed), indexed->alpha_dither_w, 0, 3, row, row+1, GTK_FILL, GTK_FILL, 0, 0); g_signal_connect_swapped (indexed->alpha_dither_w, "toggled", G_CALLBACK (webx_indexed_target_changed), indexed); gtk_widget_show (indexed->alpha_dither_w); row++; separator = gtk_hseparator_new (); gtk_table_attach (GTK_TABLE (indexed), separator, 0, 3, row, row+1, GTK_FILL, GTK_FILL, 0, 8); gtk_widget_show (separator); indexed->last_row = ++row; webx_indexed_target_changed (indexed); return object; }
static int align_layers_dialog (void) { GtkWidget *dialog; GtkWidget *table; GtkWidget *combo; GtkWidget *toggle; GtkObject *adj; gboolean run; gimp_ui_init (PLUG_IN_BINARY, FALSE); dialog = gimp_dialog_new (_("Align Visible Layers"), 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)); table = gtk_table_new (7, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 6); gtk_table_set_row_spacings (GTK_TABLE (table), 6); gtk_container_set_border_width (GTK_CONTAINER (table), 12); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), table, FALSE, FALSE, 0); gtk_widget_show (table); combo = gimp_int_combo_box_new (C_("align-style", "None"), H_NONE, _("Collect"), H_COLLECT, _("Fill (left to right)"), LEFT2RIGHT, _("Fill (right to left)"), RIGHT2LEFT, _("Snap to grid"), SNAP2HGRID, NULL); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), VALS.h_style); g_signal_connect (combo, "changed", G_CALLBACK (gimp_int_combo_box_get_active), &VALS.h_style); gimp_table_attach_aligned (GTK_TABLE (table), 0, 0, _("_Horizontal style:"), 0.0, 0.5, combo, 2, FALSE); combo = gimp_int_combo_box_new (_("Left edge"), H_BASE_LEFT, _("Center"), H_BASE_CENTER, _("Right edge"), H_BASE_RIGHT, NULL); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), VALS.h_base); g_signal_connect (combo, "changed", G_CALLBACK (gimp_int_combo_box_get_active), &VALS.h_base); gimp_table_attach_aligned (GTK_TABLE (table), 0, 1, _("Ho_rizontal base:"), 0.0, 0.5, combo, 2, FALSE); combo = gimp_int_combo_box_new (C_("align-style", "None"), V_NONE, _("Collect"), V_COLLECT, _("Fill (top to bottom)"), TOP2BOTTOM, _("Fill (bottom to top)"), BOTTOM2TOP, _("Snap to grid"), SNAP2VGRID, NULL); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), VALS.v_style); g_signal_connect (combo, "changed", G_CALLBACK (gimp_int_combo_box_get_active), &VALS.v_style); gimp_table_attach_aligned (GTK_TABLE (table), 0, 2, _("_Vertical style:"), 0.0, 0.5, combo, 2, FALSE); combo = gimp_int_combo_box_new (_("Top edge"), V_BASE_TOP, _("Center"), V_BASE_CENTER, _("Bottom edge"), V_BASE_BOTTOM, NULL); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), VALS.v_base); g_signal_connect (combo, "changed", G_CALLBACK (gimp_int_combo_box_get_active), &VALS.v_base); gimp_table_attach_aligned (GTK_TABLE (table), 0, 3, _("Ver_tical base:"), 0.0, 0.5, combo, 2, FALSE); adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 4, _("_Grid size:"), SCALE_WIDTH, 0, VALS.grid_size, 1, 200, 1, 10, 0, TRUE, 0, 0, NULL, NULL); g_signal_connect (adj, "value-changed", G_CALLBACK (gimp_int_adjustment_update), &VALS.grid_size); toggle = gtk_check_button_new_with_mnemonic (_("_Ignore the bottom layer even if visible")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), VALS.ignore_bottom); gtk_table_attach_defaults (GTK_TABLE (table), toggle, 0, 3, 5, 6); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &VALS.ignore_bottom); toggle = gtk_check_button_new_with_mnemonic (_("_Use the (invisible) bottom layer as the base")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), VALS.base_is_bottom_layer); gtk_table_attach_defaults (GTK_TABLE (table), toggle, 0, 3, 6, 7); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &VALS.base_is_bottom_layer); gtk_widget_show (dialog); run = (gimp_dialog_run (GIMP_DIALOG (dialog)) == GTK_RESPONSE_OK); gtk_widget_destroy (dialog); return run; }
static GtkWidget * print_offset_frame (PrintData *data, GtkSizeGroup *label_group, GtkSizeGroup *entry_group) { GtkWidget *entry; GtkWidget *spinner; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *table; GtkWidget *frame; GtkWidget *label; GtkWidget *combo; frame = gimp_frame_new (_("Position")); vbox = gtk_vbox_new (FALSE, 6); gtk_container_add (GTK_CONTAINER (frame), vbox); gtk_widget_show (vbox); /* the offset entry */ entry = GTK_WIDGET (info.size_entry); 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_table_set_col_spacing (GTK_TABLE (table), 0, 0); gtk_table_set_col_spacing (GTK_TABLE (table), 1, 12); gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); /* left */ spinner = gimp_spin_button_new (&info.left_adj, 1, 1, 1, 1, 10, 0, 1, 2); gimp_size_entry_add_field (GIMP_SIZE_ENTRY (entry), GTK_SPIN_BUTTON (spinner), NULL); gtk_table_attach_defaults (GTK_TABLE (table), spinner, 1, 2, 0, 1); gtk_widget_show (spinner); label = gtk_label_new_with_mnemonic (_("_Left:")); gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinner); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1); gtk_size_group_add_widget (label_group, label); gtk_widget_show (label); /* right */ spinner = gimp_spin_button_new (&info.right_adj, 1, 1, 1, 1, 10, 0, 1, 2); g_signal_connect (info.right_adj, "value-changed", G_CALLBACK (print_size_info_offset_max_changed), GINT_TO_POINTER (LEFT)); gimp_size_entry_add_field (GIMP_SIZE_ENTRY (entry), GTK_SPIN_BUTTON (spinner), NULL); gtk_table_attach_defaults (GTK_TABLE (table), spinner, 3, 4, 0, 1); gtk_widget_show (spinner); label = gtk_label_new_with_mnemonic (_("_Right:")); gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinner); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 0, 1); gtk_widget_show (label); /* top */ spinner = gimp_spin_button_new (&info.top_adj, 1, 1, 1, 1, 10, 0, 1, 2); gimp_size_entry_add_field (GIMP_SIZE_ENTRY (entry), GTK_SPIN_BUTTON (spinner), NULL); gtk_table_attach_defaults (GTK_TABLE (table), spinner, 1, 2, 1, 2); gtk_widget_show (spinner); label = gtk_label_new_with_mnemonic (_("_Top:")); gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinner); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); gtk_size_group_add_widget (label_group, label); gtk_widget_show (label); /* bottom */ spinner = gimp_spin_button_new (&info.bottom_adj, 1, 1, 1, 1, 10, 0, 1, 2); g_signal_connect (info.bottom_adj, "value-changed", G_CALLBACK (print_size_info_offset_max_changed), GINT_TO_POINTER (TOP)); gimp_size_entry_add_field (GIMP_SIZE_ENTRY (entry), GTK_SPIN_BUTTON (spinner), NULL); gtk_table_attach_defaults (GTK_TABLE (table), spinner, 3, 4, 1, 2); gtk_widget_show (spinner); label = gtk_label_new_with_mnemonic (_("_Bottom:")); gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinner); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_table_attach_defaults (GTK_TABLE (table), label, 2, 3, 1, 2); gtk_widget_show (label); gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), LEFT, 72.0, FALSE); gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), RIGHT, 72.0, FALSE); gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), TOP, 72.0, FALSE); gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (entry), BOTTOM, 72.0, FALSE); print_size_info_update_offsets (); g_signal_connect (info.size_entry, "value-changed", G_CALLBACK (print_size_info_size_changed), NULL); hbox = gtk_hbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); label = gtk_label_new_with_mnemonic (_("C_enter:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_size_group_add_widget (label_group, label); gtk_widget_show (label); /* if and how to center the image on the page */ combo = gimp_int_combo_box_new (_("None"), CENTER_NONE, _("Horizontally"), CENTER_HORIZONTALLY, _("Vertically"), CENTER_VERTICALLY, _("Both"), CENTER_BOTH, NULL); gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0); gtk_widget_show (combo); gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo); gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo), data->center, G_CALLBACK (print_size_info_center_changed), NULL); info.center_combo = combo; g_signal_connect (info.left_adj, "value-changed", G_CALLBACK (print_size_info_center_none), NULL); g_signal_connect (info.right_adj, "value-changed", G_CALLBACK (print_size_info_center_none), NULL); g_signal_connect (info.top_adj, "value-changed", G_CALLBACK (print_size_info_center_none), NULL); g_signal_connect (info.bottom_adj, "value-changed", G_CALLBACK (print_size_info_center_none), NULL); return frame; }