diff --git a/ChangeLog b/ChangeLog index 755abb4f67..9716e2e16b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ +2004-09-01 Michael Natterer + + * plug-ins/script-fu/script-fu-types.h (struct SFOptions): changed + "guint history" to "gint history". + + * plug-ins/script-fu/script-fu-interface.c: added callbacks for + string entries and combo boxes and connect *all* widgets to callbacks. + + (script_fu_ok): don't touch the widgets at all but get the values + directly now that the callbacks correctly write them to their + structs. + + (script_fu_reset): don't copy the default values manually but + simply set the default values on the widgets; their callbacks will + do the rest. + + * plug-ins/script-fu/script-fu-scripts.c (script_fu_add_script): + added some line breaks and spaces to make it more readable. + 2004-09-01 Michael Natterer * libgimp/Makefile.am diff --git a/plug-ins/script-fu/script-fu-interface.c b/plug-ins/script-fu/script-fu-interface.c index 62ecb25256..c387ffbbcb 100644 --- a/plug-ins/script-fu/script-fu-interface.c +++ b/plug-ins/script-fu/script-fu-interface.c @@ -78,8 +78,12 @@ static void script_fu_ok (SFScript *script); static void script_fu_reset (SFScript *script); static void script_fu_about (SFScript *script); +static void script_fu_string_callback (GtkWidget *widget, + gchar **value); static void script_fu_file_entry_callback (GtkWidget *widget, SFFilename *file); +static void script_fu_combo_callback (GtkWidget *widget, + SFOption *option); static void script_fu_pattern_callback (const gchar *name, gint width, gint height, @@ -301,6 +305,7 @@ script_fu_interface (SFScript *script) } gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (widget), *ID_ptr); + g_signal_connect (widget, "changed", G_CALLBACK (gimp_int_combo_box_get_active), ID_ptr); @@ -314,6 +319,7 @@ script_fu_interface (SFScript *script) GIMP_COLOR_AREA_FLAT); gimp_color_button_set_update (GIMP_COLOR_BUTTON (widget), TRUE); + g_signal_connect (widget, "color_changed", G_CALLBACK (gimp_color_button_get_color), &script->arg_values[i].sfa_color); @@ -335,8 +341,13 @@ script_fu_interface (SFScript *script) case SF_STRING: widget = gtk_entry_new (); gtk_widget_set_size_request (widget, TEXT_WIDTH, -1); + gtk_entry_set_text (GTK_ENTRY (widget), script->arg_values[i].sfa_value); + + g_signal_connect (widget, "changed", + G_CALLBACK (script_fu_string_callback), + &script->arg_values[i].sfa_value); break; case SF_ADJUSTMENT: @@ -373,6 +384,11 @@ script_fu_interface (SFScript *script) default: break; } + + g_signal_connect (script->arg_values[i].sfa_adjustment.adj, + "value_changed", + G_CALLBACK (gimp_double_adjustment_update), + &script->arg_values[i].sfa_adjustment.value); break; case SF_FILENAME: @@ -445,6 +461,10 @@ script_fu_interface (SFScript *script) gtk_combo_box_set_active (GTK_COMBO_BOX (widget), script->arg_values[i].sfa_option.history); + + g_signal_connect (widget, "changed", + G_CALLBACK (script_fu_combo_callback), + &script->arg_values[i].sfa_option); break; default: @@ -553,6 +573,16 @@ script_fu_interface_quit (SFScript *script) gtk_main_quit (); } +static void +script_fu_string_callback (GtkWidget *widget, + gchar **value) +{ + if (*value) + g_free (*value); + + *value = g_strdup (gtk_entry_get_text (GTK_ENTRY (widget))); +} + static void script_fu_file_entry_callback (GtkWidget *widget, SFFilename *file) @@ -564,6 +594,13 @@ script_fu_file_entry_callback (GtkWidget *widget, gimp_file_entry_get_filename (GIMP_FILE_ENTRY(file->file_entry)); } +static void +script_fu_combo_callback (GtkWidget *widget, + SFOption *option) +{ + option->history = gtk_combo_box_get_active (GTK_COMBO_BOX (widget)); +} + static void script_fu_pattern_callback (const gchar *name, gint width, @@ -680,8 +717,6 @@ script_fu_ok (SFScript *script) for (i = 0; i < script->num_args; i++) { - GtkWidget *widget = sf_interface->args_widgets[i]; - switch (script->arg_types[i]) { case SF_IMAGE: @@ -700,12 +735,11 @@ script_fu_ok (SFScript *script) break; case SF_VALUE: - length += strlen (gtk_entry_get_text (GTK_ENTRY (widget))) + 1; + length += strlen (script->arg_values[i].sfa_value) + 1; break; case SF_STRING: - escaped = g_strescape (gtk_entry_get_text (GTK_ENTRY (widget)), - NULL); + escaped = g_strescape (script->arg_values[i].sfa_value, NULL); length += strlen (escaped) + 3; g_free (escaped); break; @@ -757,10 +791,9 @@ script_fu_ok (SFScript *script) sprintf (command, "(%s ", script->script_name); c += strlen (script->script_name) + 2; + for (i = 0; i < script->num_args; i++) { - GtkWidget *widget = sf_interface->args_widgets[i]; - switch (script->arg_types[i]) { case SF_IMAGE: @@ -786,37 +819,17 @@ script_fu_ok (SFScript *script) break; case SF_VALUE: - text = (gchar *) gtk_entry_get_text (GTK_ENTRY (widget)); - g_free (script->arg_values[i].sfa_value); - script->arg_values[i].sfa_value = g_strdup (text); + text = script->arg_values[i].sfa_value; break; case SF_STRING: - text = (gchar *) gtk_entry_get_text (GTK_ENTRY (widget)); - g_free (script->arg_values[i].sfa_value); - script->arg_values[i].sfa_value = g_strdup (text); - escaped = g_strescape (text, NULL); + escaped = g_strescape (script->arg_values[i].sfa_value, NULL); g_snprintf (buffer, sizeof (buffer), "\"%s\"", escaped); g_free (escaped); text = buffer; break; case SF_ADJUSTMENT: - switch (script->arg_defaults[i].sfa_adjustment.type) - { - case SF_SLIDER: - script->arg_values[i].sfa_adjustment.value = - script->arg_values[i].sfa_adjustment.adj->value; - break; - - case SF_SPINNER: - script->arg_values[i].sfa_adjustment.value = - gtk_spin_button_get_value (GTK_SPIN_BUTTON (widget)); - break; - - default: - break; - } text = g_ascii_dtostr (buffer, sizeof (buffer), script->arg_values[i].sfa_adjustment.value); break; @@ -871,9 +884,6 @@ script_fu_ok (SFScript *script) break; case SF_OPTION: - script->arg_values[i].sfa_option.history = - gtk_combo_box_get_active (GTK_COMBO_BOX (widget)); - g_snprintf (buffer, sizeof (buffer), "%d", script->arg_values[i].sfa_option.history); text = buffer; @@ -915,41 +925,31 @@ script_fu_reset (SFScript *script) break; case SF_COLOR: - script->arg_values[i].sfa_color = script->arg_defaults[i].sfa_color; gimp_color_button_set_color (GIMP_COLOR_BUTTON (widget), - &script->arg_values[i].sfa_color); + &script->arg_defaults[i].sfa_color); break; case SF_TOGGLE: - script->arg_values[i].sfa_toggle = script->arg_defaults[i].sfa_toggle; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), - script->arg_values[i].sfa_toggle); + script->arg_defaults[i].sfa_toggle); break; case SF_VALUE: case SF_STRING: - g_free (script->arg_values[i].sfa_value); - script->arg_values[i].sfa_value = - g_strdup (script->arg_defaults[i].sfa_value); gtk_entry_set_text (GTK_ENTRY (widget), - script->arg_values[i].sfa_value); + script->arg_defaults[i].sfa_value); break; case SF_ADJUSTMENT: - script->arg_values[i].sfa_adjustment.value = - script->arg_defaults[i].sfa_adjustment.value; gtk_adjustment_set_value (script->arg_values[i].sfa_adjustment.adj, - script->arg_values[i].sfa_adjustment.value); + script->arg_defaults[i].sfa_adjustment.value); break; case SF_FILENAME: case SF_DIRNAME: - g_free (script->arg_values[i].sfa_file.filename); - script->arg_values[i].sfa_file.filename = - g_strdup (script->arg_defaults[i].sfa_file.filename); gimp_file_entry_set_filename (GIMP_FILE_ENTRY (script->arg_values[i].sfa_file.file_entry), - script->arg_values[i].sfa_file.filename); + script->arg_defaults[i].sfa_file.filename); break; case SF_FONT: @@ -981,10 +981,8 @@ script_fu_reset (SFScript *script) break; case SF_OPTION: - script->arg_values[i].sfa_option.history = - script->arg_defaults[i].sfa_option.history; gtk_combo_box_set_active (GTK_COMBO_BOX (widget), - script->arg_values[i].sfa_option.history); + script->arg_defaults[i].sfa_option.history); break; default: diff --git a/plug-ins/script-fu/script-fu-scripts.c b/plug-ins/script-fu/script-fu-scripts.c index a6c8e5127c..6a10e7d6b1 100644 --- a/plug-ins/script-fu/script-fu-scripts.c +++ b/plug-ins/script-fu/script-fu-scripts.c @@ -247,8 +247,11 @@ script_fu_add_script (LISP a) case SF_CHANNEL: if (!TYPEP (car (a), tc_flonum)) return my_err ("script-fu-register: drawable defaults must be integer values", NIL); - script->arg_defaults[i].sfa_image = get_c_long (car (a)); - script->arg_values[i].sfa_image = script->arg_defaults[i].sfa_image; + + script->arg_defaults[i].sfa_image = + get_c_long (car (a)); + script->arg_values[i].sfa_image = + script->arg_defaults[i].sfa_image; switch (script->arg_types[i]) { @@ -282,6 +285,7 @@ script_fu_add_script (LISP a) case SF_COLOR: if (!TYPEP (car (a), tc_cons)) return my_err ("script-fu-register: color defaults must be a list of 3 integers", NIL); + color_list = car (a); r = CLAMP (get_c_long (car (color_list)), 0, 255); color_list = cdr (color_list); @@ -295,53 +299,57 @@ script_fu_add_script (LISP a) script->arg_values[i].sfa_color = script->arg_defaults[i].sfa_color; - args[i + 1].type = GIMP_PDB_COLOR; - args[i + 1].name = "color"; + args[i + 1].type = GIMP_PDB_COLOR; + args[i + 1].name = "color"; args[i + 1].description = script->arg_labels[i]; break; case SF_TOGGLE: if (!TYPEP (car (a), tc_flonum)) return my_err ("script-fu-register: toggle default must be an integer value", NIL); + script->arg_defaults[i].sfa_toggle = (get_c_long (car (a))) ? TRUE : FALSE; script->arg_values[i].sfa_toggle = script->arg_defaults[i].sfa_toggle; - args[i + 1].type = GIMP_PDB_INT32; - args[i + 1].name = "toggle"; + args[i + 1].type = GIMP_PDB_INT32; + args[i + 1].name = "toggle"; args[i + 1].description = script->arg_labels[i]; break; case SF_VALUE: if (!TYPEP (car (a), tc_string)) return my_err ("script-fu-register: value defaults must be string values", NIL); + script->arg_defaults[i].sfa_value = g_strdup (get_c_string (car (a))); script->arg_values[i].sfa_value = g_strdup (script->arg_defaults[i].sfa_value); - args[i + 1].type = GIMP_PDB_STRING; - args[i + 1].name = "value"; + args[i + 1].type = GIMP_PDB_STRING; + args[i + 1].name = "value"; args[i + 1].description = script->arg_labels[i]; break; case SF_STRING: if (!TYPEP (car (a), tc_string)) return my_err ("script-fu-register: string defaults must be string values", NIL); + script->arg_defaults[i].sfa_value = g_strdup (get_c_string (car (a))); script->arg_values[i].sfa_value = g_strdup (script->arg_defaults[i].sfa_value); - args[i + 1].type = GIMP_PDB_STRING; - args[i + 1].name = "string"; + args[i + 1].type = GIMP_PDB_STRING; + args[i + 1].name = "string"; args[i + 1].description = script->arg_labels[i]; break; case SF_ADJUSTMENT: if (!TYPEP (car (a), tc_cons)) return my_err ("script-fu-register: adjustment defaults must be a list", NIL); + adj_list = car (a); script->arg_defaults[i].sfa_adjustment.value = get_c_double (car (adj_list)); @@ -364,11 +372,12 @@ script_fu_add_script (LISP a) script->arg_defaults[i].sfa_adjustment.type = get_c_long (car (adj_list)); script->arg_values[i].sfa_adjustment.adj = NULL; + script->arg_values[i].sfa_adjustment.value = script->arg_defaults[i].sfa_adjustment.value; - args[i + 1].type = GIMP_PDB_FLOAT; - args[i + 1].name = "value"; + args[i + 1].type = GIMP_PDB_FLOAT; + args[i + 1].name = "value"; args[i + 1].description = script->arg_labels[i]; break; @@ -376,9 +385,11 @@ script_fu_add_script (LISP a) if (!TYPEP (car (a), tc_string)) return my_err ("script-fu-register: filename defaults must be string values", NIL); /* fallthrough */ + case SF_DIRNAME: if (!TYPEP (car (a), tc_string)) return my_err ("script-fu-register: dirname defaults must be string values", NIL); + script->arg_defaults[i].sfa_file.filename = g_strdup (get_c_string (car (a))); @@ -399,54 +410,58 @@ script_fu_add_script (LISP a) g_strdup (script->arg_defaults[i].sfa_file.filename); script->arg_values[i].sfa_file.file_entry = NULL; - args[i + 1].type = GIMP_PDB_STRING; - args[i + 1].name = (script->arg_types[i] == SF_FILENAME ? - "filename" : "dirname"); + args[i + 1].type = GIMP_PDB_STRING; + args[i + 1].name = (script->arg_types[i] == SF_FILENAME ? + "filename" : "dirname"); args[i + 1].description = script->arg_labels[i]; break; case SF_FONT: if (!TYPEP (car (a), tc_string)) return my_err ("script-fu-register: font defaults must be string values", NIL); + script->arg_defaults[i].sfa_font = g_strdup (get_c_string (car (a))); script->arg_values[i].sfa_font = g_strdup (script->arg_defaults[i].sfa_font); - args[i + 1].type = GIMP_PDB_STRING; - args[i + 1].name = "font"; + args[i + 1].type = GIMP_PDB_STRING; + args[i + 1].name = "font"; args[i + 1].description = script->arg_labels[i]; break; case SF_PALETTE: if (!TYPEP (car (a), tc_string)) return my_err ("script-fu-register: palette defaults must be string values", NIL); + script->arg_defaults[i].sfa_palette = g_strdup (get_c_string (car (a))); script->arg_values[i].sfa_palette = g_strdup (script->arg_defaults[i].sfa_palette); - args[i + 1].type = GIMP_PDB_STRING; - args[i + 1].name = "palette"; + args[i + 1].type = GIMP_PDB_STRING; + args[i + 1].name = "palette"; args[i + 1].description = script->arg_labels[i]; break; case SF_PATTERN: if (!TYPEP (car (a), tc_string)) return my_err ("script-fu-register: pattern defaults must be string values", NIL); + script->arg_defaults[i].sfa_pattern = g_strdup (get_c_string (car (a))); script->arg_values[i].sfa_pattern = g_strdup (script->arg_defaults[i].sfa_pattern); - args[i + 1].type = GIMP_PDB_STRING; - args[i + 1].name = "pattern"; + args[i + 1].type = GIMP_PDB_STRING; + args[i + 1].name = "pattern"; args[i + 1].description = script->arg_labels[i]; break; case SF_BRUSH: if (!TYPEP (car (a), tc_cons)) return my_err ("script-fu-register: brush defaults must be a list", NIL); + brush_list = car (a); script->arg_defaults[i].sfa_brush.name = g_strdup (get_c_string (car (brush_list))); @@ -471,27 +486,29 @@ script_fu_add_script (LISP a) script->arg_values[i].sfa_brush.paint_mode = script->arg_defaults[i].sfa_brush.paint_mode; - args[i + 1].type = GIMP_PDB_STRING; - args[i + 1].name = "brush"; + args[i + 1].type = GIMP_PDB_STRING; + args[i + 1].name = "brush"; args[i + 1].description = script->arg_labels[i]; break; case SF_GRADIENT: if (!TYPEP (car (a), tc_string)) return my_err ("script-fu-register: gradient defaults must be string values", NIL); + script->arg_defaults[i].sfa_gradient = g_strdup (get_c_string (car (a))); script->arg_values[i].sfa_gradient = g_strdup (script->arg_defaults[i].sfa_pattern); - args[i + 1].type = GIMP_PDB_STRING; - args[i + 1].name = "gradient"; + args[i + 1].type = GIMP_PDB_STRING; + args[i + 1].name = "gradient"; args[i + 1].description = script->arg_labels[i]; break; case SF_OPTION: if (!TYPEP (car (a), tc_cons)) return my_err ("script-fu-register: option defaults must be a list", NIL); + for (option_list = car (a); option_list; option_list = cdr (option_list)) @@ -503,8 +520,8 @@ script_fu_add_script (LISP a) script->arg_defaults[i].sfa_option.history = 0; script->arg_values[i].sfa_option.history = 0; - args[i + 1].type = GIMP_PDB_INT32; - args[i + 1].name = "option"; + args[i + 1].type = GIMP_PDB_INT32; + args[i + 1].name = "option"; args[i + 1].description = script->arg_labels[i]; break; @@ -515,7 +532,10 @@ script_fu_add_script (LISP a) a = cdr (a); } else - return my_err ("script-fu-register: missing default argument", NIL); + { + return my_err ("script-fu-register: missing default argument", + NIL); + } } } @@ -542,10 +562,10 @@ script_fu_load_script (const GimpDatafileData *file_data, if (gimp_datafiles_check_extension (file_data->filename, ".scm")) { gchar *command; - gchar *qf = g_strescape (file_data->filename, NULL); + gchar *escaped = g_strescape (file_data->filename, NULL); - command = g_strdup_printf ("(load \"%s\")", qf); - g_free (qf); + command = g_strdup_printf ("(load \"%s\")", escaped); + g_free (escaped); if (repl_c_string (command, 0, 0, 1) != 0) script_fu_error_msg (command); @@ -840,8 +860,8 @@ script_fu_lookup_script (gpointer *foo, *name = script; return TRUE; } - else - return FALSE; + + return FALSE; } static SFScript * @@ -855,8 +875,8 @@ script_fu_find_script (const gchar *pdb_name) if (script == pdb_name) return NULL; - else - return (SFScript *) script; + + return (SFScript *) script; } static void diff --git a/plug-ins/script-fu/script-fu-types.h b/plug-ins/script-fu/script-fu-types.h index bfc4829298..595ca2fb54 100644 --- a/plug-ins/script-fu/script-fu-types.h +++ b/plug-ins/script-fu/script-fu-types.h @@ -52,7 +52,7 @@ typedef struct typedef struct { GSList *list; - guint history; + gint history; } SFOption; typedef union