More enabling of mnemonics.

This commit is contained in:
Maurits Rijk 2002-05-25 18:10:04 +00:00
parent 8a87bde69d
commit 3c5cefc8e9
12 changed files with 53 additions and 38 deletions

View File

@ -1,3 +1,18 @@
2002-05-25 Maurits Rijk <lpeek.mrijk@consunet.nl>
* plug-ins/common/scatter_hsv.c (scatter_hsv_dialog)
* plug-ins/common/noisify.c (noisify_dialog)
* plug-ins/common/spread.c (spread_dialog)
* plug-ins/common/edge.c (edge_dialog)
* plug-ins/common/sobel.c (sobel_dialog)
* plug-ins/common/sharpen.c (sharpen_dialog)
* plug-ins/common/unsharp.c (unsharp_mask_dialog)
* plug-ins/common/max_rgb.c (dialog): enable mnemonics.
* libgimpwidgets/gimpsizeentry.c (gimp_size_entry_attach_label): allow
underscore to be embedded in text paramter so labels can have
mnemonics. More work to do here.
2002-05-25 Maurits Rijk <lpeek.mrijk@consunet.nl> 2002-05-25 Maurits Rijk <lpeek.mrijk@consunet.nl>
* plug-ins/common/tileit.c: fix for #82498 (Opacity only seems to work * plug-ins/common/tileit.c: fix for #82498 (Opacity only seems to work

View File

@ -472,7 +472,7 @@ gimp_size_entry_attach_label (GimpSizeEntry *gse,
g_return_if_fail (GIMP_IS_SIZE_ENTRY (gse)); g_return_if_fail (GIMP_IS_SIZE_ENTRY (gse));
g_return_if_fail (text != NULL); g_return_if_fail (text != NULL);
label = gtk_label_new (text); label = gtk_label_new_with_mnemonic (text);
gtk_misc_set_alignment (GTK_MISC (label), alignment, 0.5); gtk_misc_set_alignment (GTK_MISC (label), alignment, 0.5);
gtk_table_attach (GTK_TABLE (gse), label, column, column+1, row, row+1, gtk_table_attach (GTK_TABLE (gse), label, column, column+1, row, row+1,

View File

@ -671,7 +671,7 @@ edge_dialog (GimpDrawable *drawable)
/* Label, scale, entry for evals.amount */ /* Label, scale, entry for evals.amount */
scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, 0,
_("Amount:"), 100, 0, _("_Amount:"), 100, 0,
evals.amount, 1.0, 10.0, 0.1, 1.0, 1, evals.amount, 1.0, 10.0, 0.1, 1.0, 1,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);
@ -687,7 +687,7 @@ edge_dialog (GimpDrawable *drawable)
GTK_FILL, GTK_FILL, 0, 0); GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (hbox); gtk_widget_show (hbox);
toggle = gtk_radio_button_new_with_label (group, _("Wrap")); toggle = gtk_radio_button_new_with_mnemonic (group, _("_Wrap"));
group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle)); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle));
gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, TRUE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_wrap); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_wrap);
@ -697,7 +697,7 @@ edge_dialog (GimpDrawable *drawable)
G_CALLBACK (gimp_toggle_button_update), G_CALLBACK (gimp_toggle_button_update),
&use_wrap); &use_wrap);
toggle = gtk_radio_button_new_with_label (group, _("Smear")); toggle = gtk_radio_button_new_with_mnemonic (group, _("_Smear"));
group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle)); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle));
gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, TRUE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_smear); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_smear);
@ -707,7 +707,7 @@ edge_dialog (GimpDrawable *drawable)
G_CALLBACK (gimp_toggle_button_update), G_CALLBACK (gimp_toggle_button_update),
&use_smear); &use_smear);
toggle = gtk_radio_button_new_with_label (group, _("Black")); toggle = gtk_radio_button_new_with_mnemonic (group, _("_Black"));
group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle)); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle));
gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), toggle, TRUE, TRUE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_black); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_black);

View File

@ -476,11 +476,11 @@ gauss_iir2_dialog (gint32 image_ID,
b2vals.horizontal == b2vals.vertical, b2vals.horizontal == b2vals.vertical,
FALSE, FALSE,
_("Horizontal:"), b2vals.horizontal, xres, _("_Horizontal:"), b2vals.horizontal, xres,
0, 8 * MAX (drawable->width, drawable->height), 0, 8 * MAX (drawable->width, drawable->height),
0, 0, 0, 0,
_("Vertical:"), b2vals.vertical, yres, _("_Vertical:"), b2vals.vertical, yres,
0, 8 * MAX (drawable->width, drawable->height), 0, 8 * MAX (drawable->width, drawable->height),
0, 0); 0, 0);
gtk_container_set_border_width (GTK_CONTAINER (size), 4); gtk_container_set_border_width (GTK_CONTAINER (size), 4);

View File

@ -471,11 +471,11 @@ gauss_rle2_dialog (gint32 image_ID,
b2vals.horizontal == b2vals.vertical, b2vals.horizontal == b2vals.vertical,
FALSE, FALSE,
_("Horizontal:"), b2vals.horizontal, xres, _("_Horizontal:"), b2vals.horizontal, xres,
0, 8 * MAX (drawable->width, drawable->height), 0, 8 * MAX (drawable->width, drawable->height),
0, 0, 0, 0,
_("Vertical:"), b2vals.vertical, yres, _("_Vertical:"), b2vals.vertical, yres,
0, 8 * MAX (drawable->width, drawable->height), 0, 8 * MAX (drawable->width, drawable->height),
0, 0); 0, 0);
gtk_container_set_border_width (GTK_CONTAINER (size), 4); gtk_container_set_border_width (GTK_CONTAINER (size), 4);

View File

@ -387,10 +387,10 @@ dialog (GimpDrawable *drawable)
&pvals.max_p, &pvals.max_p,
GINT_TO_POINTER (pvals.max_p), GINT_TO_POINTER (pvals.max_p),
_("Hold the Maximal Channels"), _("_Hold the Maximal Channels"),
GINT_TO_POINTER (MAX_CHANNELS), &max, GINT_TO_POINTER (MAX_CHANNELS), &max,
_("Hold the Minimal Channels"), _("Ho_ld the Minimal Channels"),
GINT_TO_POINTER (MIN_CHANNELS), &min, GINT_TO_POINTER (MIN_CHANNELS), &min,
NULL); NULL);

View File

@ -538,7 +538,7 @@ noisify_dialog (GimpDrawable *drawable,
gtk_container_set_border_width (GTK_CONTAINER (table), 4); gtk_container_set_border_width (GTK_CONTAINER (table), 4);
gtk_container_add (GTK_CONTAINER (frame), table); gtk_container_add (GTK_CONTAINER (frame), table);
toggle = gtk_check_button_new_with_label (_("Independent")); toggle = gtk_check_button_new_with_label (_("_Independent"));
gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 0, 1, GTK_FILL, 0, 0, 0); gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), nvals.independent); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), nvals.independent);
gtk_widget_show (toggle); gtk_widget_show (toggle);
@ -552,7 +552,7 @@ noisify_dialog (GimpDrawable *drawable,
if (channels == 1) if (channels == 1)
{ {
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
_("Gray:"), SCALE_WIDTH, 0, _("_Gray:"), SCALE_WIDTH, 0,
nvals.noise[0], 0.0, 1.0, 0.01, 0.1, 2, nvals.noise[0], 0.0, 1.0, 0.01, 0.1, 2,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);
@ -568,7 +568,7 @@ noisify_dialog (GimpDrawable *drawable,
else if (channels == 2) else if (channels == 2)
{ {
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
_("Gray:"), SCALE_WIDTH, 0, _("_Gray:"), SCALE_WIDTH, 0,
nvals.noise[0], 0.0, 1.0, 0.01, 0.1, 2, nvals.noise[0], 0.0, 1.0, 0.01, 0.1, 2,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);
@ -582,7 +582,7 @@ noisify_dialog (GimpDrawable *drawable,
noise_int.channel_adj[0] = adj; noise_int.channel_adj[0] = adj;
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
_("Alpha:"), SCALE_WIDTH, 0, _("_Alpha:"), SCALE_WIDTH, 0,
nvals.noise[1], 0.0, 1.0, 0.01, 0.1, 2, nvals.noise[1], 0.0, 1.0, 0.01, 0.1, 2,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);
@ -599,7 +599,7 @@ noisify_dialog (GimpDrawable *drawable,
else if (channels == 3) else if (channels == 3)
{ {
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
_("Red:"), SCALE_WIDTH, 0, _("_Red:"), SCALE_WIDTH, 0,
nvals.noise[0], 0.0, 1.0, 0.01, 0.1, 2, nvals.noise[0], 0.0, 1.0, 0.01, 0.1, 2,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);
@ -613,7 +613,7 @@ noisify_dialog (GimpDrawable *drawable,
noise_int.channel_adj[0] = adj; noise_int.channel_adj[0] = adj;
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
_("Green:"), SCALE_WIDTH, 0, _("_Green:"), SCALE_WIDTH, 0,
nvals.noise[1], 0.0, 1.0, 0.01, 0.1, 2, nvals.noise[1], 0.0, 1.0, 0.01, 0.1, 2,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);
@ -627,7 +627,7 @@ noisify_dialog (GimpDrawable *drawable,
noise_int.channel_adj[1] = adj; noise_int.channel_adj[1] = adj;
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 3, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 3,
_("Blue:"), SCALE_WIDTH, 0, _("_Blue:"), SCALE_WIDTH, 0,
nvals.noise[2], 0.0, 1.0, 0.01, 0.1, 2, nvals.noise[2], 0.0, 1.0, 0.01, 0.1, 2,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);
@ -644,7 +644,7 @@ noisify_dialog (GimpDrawable *drawable,
else if (channels == 4) else if (channels == 4)
{ {
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
_("Red:"), SCALE_WIDTH, 0, _("_Red:"), SCALE_WIDTH, 0,
nvals.noise[0], 0.0, 1.0, 0.01, 0.1, 2, nvals.noise[0], 0.0, 1.0, 0.01, 0.1, 2,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);
@ -658,7 +658,7 @@ noisify_dialog (GimpDrawable *drawable,
noise_int.channel_adj[0] = adj; noise_int.channel_adj[0] = adj;
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
_("Green:"), SCALE_WIDTH, 0, _("_Green:"), SCALE_WIDTH, 0,
nvals.noise[1], 0.0, 1.0, 0.01, 0.1, 2, nvals.noise[1], 0.0, 1.0, 0.01, 0.1, 2,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);
@ -672,7 +672,7 @@ noisify_dialog (GimpDrawable *drawable,
noise_int.channel_adj[1] = adj; noise_int.channel_adj[1] = adj;
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 3, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 3,
_("Blue:"), SCALE_WIDTH, 0, _("_Blue:"), SCALE_WIDTH, 0,
nvals.noise[2], 0.0, 1.0, 0.01, 0.1, 2, nvals.noise[2], 0.0, 1.0, 0.01, 0.1, 2,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);
@ -686,7 +686,7 @@ noisify_dialog (GimpDrawable *drawable,
noise_int.channel_adj[2] = adj; noise_int.channel_adj[2] = adj;
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 4, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 4,
_("Alpha:"), SCALE_WIDTH, 0, _("_Alpha:"), SCALE_WIDTH, 0,
nvals.noise[3], 0.0, 1.0, 0.01, 0.1, 2, nvals.noise[3], 0.0, 1.0, 0.01, 0.1, 2,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);

View File

@ -320,9 +320,9 @@ randomize_value (gint now,
return new; return new;
} }
void scatter_hsv_scatter (guchar *r, static void scatter_hsv_scatter (guchar *r,
guchar *g, guchar *g,
guchar *b) guchar *b)
{ {
gint h, s, v; gint h, s, v;
gint h1, s1, v1; gint h1, s1, v1;
@ -443,7 +443,7 @@ scatter_hsv_dialog (void)
gtk_widget_show (table); gtk_widget_show (table);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0,
_("Holdness:"), SCALE_WIDTH, 0, _("_Holdness:"), SCALE_WIDTH, 0,
VALS.holdness, 1, 8, 1, 2, 0, VALS.holdness, 1, 8, 1, 2, 0,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);
@ -452,7 +452,7 @@ scatter_hsv_dialog (void)
&VALS.holdness); &VALS.holdness);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
_("Hue:"), SCALE_WIDTH, 0, _("H_ue:"), SCALE_WIDTH, 0,
VALS.hue_distance, 0, 255, 1, 8, 0, VALS.hue_distance, 0, 255, 1, 8, 0,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);
@ -461,7 +461,7 @@ scatter_hsv_dialog (void)
&VALS.hue_distance); &VALS.hue_distance);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
_("Saturation:"), SCALE_WIDTH, 0, _("_Saturation:"), SCALE_WIDTH, 0,
VALS.saturation_distance, 0, 255, 1, 8, 0, VALS.saturation_distance, 0, 255, 1, 8, 0,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);
@ -470,7 +470,7 @@ scatter_hsv_dialog (void)
&VALS.saturation_distance); &VALS.saturation_distance);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 3, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 3,
_("Value:"), SCALE_WIDTH, 0, _("_Value:"), SCALE_WIDTH, 0,
VALS.value_distance, 0, 255, 1, 8, 0, VALS.value_distance, 0, 255, 1, 8, 0,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);

View File

@ -626,7 +626,7 @@ sharpen_dialog (void)
gtk_widget_show (table); gtk_widget_show (table);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0,
_("Sharpness:"), SCALE_WIDTH, 0, _("_Sharpness:"), SCALE_WIDTH, 0,
sharpen_percent, 1, 99, 1, 10, 0, sharpen_percent, 1, 99, 1, 10, 0,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);

View File

@ -269,7 +269,7 @@ sobel_dialog (void)
gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); gtk_container_set_border_width (GTK_CONTAINER (vbox), 2);
gtk_container_add (GTK_CONTAINER (frame), vbox); gtk_container_add (GTK_CONTAINER (frame), vbox);
toggle = gtk_check_button_new_with_label (_("Sobel Horizontally")); toggle = gtk_check_button_new_with_mnemonic (_("Sobel _Horizontally"));
gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), bvals.horizontal); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), bvals.horizontal);
gtk_widget_show (toggle); gtk_widget_show (toggle);
@ -278,7 +278,7 @@ sobel_dialog (void)
G_CALLBACK (gimp_toggle_button_update), G_CALLBACK (gimp_toggle_button_update),
&bvals.horizontal); &bvals.horizontal);
toggle = gtk_check_button_new_with_label (_("Sobel Vertically")); toggle = gtk_check_button_new_with_mnemonic (_("Sobel _Vertically"));
gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), bvals.vertical); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), bvals.vertical);
gtk_widget_show (toggle); gtk_widget_show (toggle);
@ -287,7 +287,7 @@ sobel_dialog (void)
G_CALLBACK (gimp_toggle_button_update), G_CALLBACK (gimp_toggle_button_update),
&bvals.vertical); &bvals.vertical);
toggle = gtk_check_button_new_with_label (_("Keep Sign of Result (one Direction only)")); toggle = gtk_check_button_new_with_mnemonic (_("_Keep Sign of Result (one Direction only)"));
gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), bvals.keep_sign); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), bvals.keep_sign);
gtk_widget_show (toggle); gtk_widget_show (toggle);

View File

@ -406,11 +406,11 @@ spread_dialog (gint32 image_ID,
spvals.spread_amount_x == spvals.spread_amount_y, spvals.spread_amount_x == spvals.spread_amount_y,
FALSE, FALSE,
_("Horizontal:"), spvals.spread_amount_x, xres, _("_Horizontal:"), spvals.spread_amount_x, xres,
0, MAX (drawable->width, drawable->height), 0, MAX (drawable->width, drawable->height),
0, 0, 0, 0,
_("Vertical:"), spvals.spread_amount_y, yres, _("_Vertical:"), spvals.spread_amount_y, yres,
0, MAX (drawable->width, drawable->height), 0, MAX (drawable->width, drawable->height),
0, 0); 0, 0);
gtk_container_set_border_width (GTK_CONTAINER (size), 4); gtk_container_set_border_width (GTK_CONTAINER (size), 4);

View File

@ -809,7 +809,7 @@ unsharp_mask_dialog (void)
gtk_widget_show (table); gtk_widget_show (table);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0,
_("Radius:"), SCALE_WIDTH, 0, _("_Radius:"), SCALE_WIDTH, 0,
unsharp_params.radius, 1.0, 25.0, 0.1, 1.0, 1, unsharp_params.radius, 1.0, 25.0, 0.1, 1.0, 1,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);
@ -818,7 +818,7 @@ unsharp_mask_dialog (void)
&unsharp_params.radius); &unsharp_params.radius);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
_("Amount:"), SCALE_WIDTH, 0, _("_Amount:"), SCALE_WIDTH, 0,
unsharp_params.amount, 0.0, 5.0, 0.01, 0.1, 2, unsharp_params.amount, 0.0, 5.0, 0.01, 0.1, 2,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);
@ -827,7 +827,7 @@ unsharp_mask_dialog (void)
&unsharp_params.amount); &unsharp_params.amount);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2, adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
_("Threshold:"), SCALE_WIDTH, 0, _("_Threshold:"), SCALE_WIDTH, 0,
unsharp_params.threshold, 0.0, 255.0, 1.0, 10.0, 0, unsharp_params.threshold, 0.0, 255.0, 1.0, 10.0, 0,
TRUE, 0, 0, TRUE, 0, 0,
NULL, NULL); NULL, NULL);