add new functions script_fu_script_get_title() and

2008-09-19  Michael Natterer  <mitch@gimp.org>

	* plug-ins/script-fu/script-fu-script.[ch]: add new functions
	script_fu_script_get_title() and script_fu_script_reset().

	* plug-ins/script-fu/script-fu-scripts.c (script_fu_add_script):
	don't set all default values *and* values when parsing the script,
	just set the defaults and call script_fu_script_reset() afterwards.

	* plug-ins/script-fu/script-fu-interface.c (script_fu_interface):
	use the new script_fu_script_get_title().

	(script_fu_reset): call script_fu_script_reset() and then update
	the UI from the current values, instead of doing slightly
	different things for each arg type.


svn path=/trunk/; revision=27009
This commit is contained in:
Michael Natterer
2008-09-19 09:34:35 +00:00
committed by Michael Natterer
parent 39e7f1016f
commit cb702ebd1e
5 changed files with 178 additions and 87 deletions

View File

@ -1,3 +1,19 @@
2008-09-19 Michael Natterer <mitch@gimp.org>
* plug-ins/script-fu/script-fu-script.[ch]: add new functions
script_fu_script_get_title() and script_fu_script_reset().
* plug-ins/script-fu/script-fu-scripts.c (script_fu_add_script):
don't set all default values *and* values when parsing the script,
just set the defaults and call script_fu_script_reset() afterwards.
* plug-ins/script-fu/script-fu-interface.c (script_fu_interface):
use the new script_fu_script_get_title().
(script_fu_reset): call script_fu_script_reset() and then update
the UI from the current values, instead of doing slightly
different things for each arg type.
2008-09-19 Sven Neumann <sven@gimp.org>
* plug-ins/help-browser/dialog.c (update_actions): allow to copy

View File

@ -180,15 +180,15 @@ script_fu_interface (SFScript *script,
GtkWidget *vbox2;
GtkSizeGroup *group;
GSList *list;
gchar *tmp;
gchar *title;
gint i;
static gboolean gtk_initted = FALSE;
/* Simply return if there is already an interface. This is an
ugly workaround for the fact that we can not process two
scripts at a time. */
* ugly workaround for the fact that we can not process two
* scripts at a time.
*/
if (sf_interface != NULL)
{
gchar *message =
@ -219,28 +219,7 @@ script_fu_interface (SFScript *script,
sf_interface = g_slice_new0 (SFInterface);
sf_interface->widgets = g_new0 (GtkWidget *, script->n_args);
/* strip mnemonics from the menupath */
sf_interface->title = gimp_strip_uline (gettext (script->menu_path));
/* if this looks like a full menu path, use only the last part */
if (sf_interface->title[0] == '<' &&
(tmp = strrchr (sf_interface->title, '/')) && tmp[1])
{
tmp = g_strdup (tmp + 1);
g_free (sf_interface->title);
sf_interface->title = tmp;
}
/* cut off ellipsis */
tmp = (strstr (sf_interface->title, "..."));
if (! tmp)
/* U+2026 HORIZONTAL ELLIPSIS */
tmp = strstr (sf_interface->title, "\342\200\246");
if (tmp && tmp == (sf_interface->title + strlen (sf_interface->title) - 3))
*tmp = '\0';
sf_interface->title = script_fu_script_get_title (script);
title = g_strdup_printf (_("Script-Fu: %s"), sf_interface->title);
@ -256,7 +235,7 @@ script_fu_interface (SFScript *script,
NULL);
g_free (title);
gtk_dialog_set_alternative_button_order (GTK_DIALOG (sf_interface->dialog),
gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
RESPONSE_RESET,
GTK_RESPONSE_OK,
GTK_RESPONSE_CANCEL,
@ -304,7 +283,8 @@ script_fu_interface (SFScript *script,
row -= start_arg;
/* we add a colon after the label;
some languages want an extra space here */
* some languages want an extra space here
*/
label_text = g_strdup_printf (_("%s:"), gettext (arg->label));
switch (arg->type)
@ -643,8 +623,7 @@ script_fu_interface_quit (SFScript *script)
g_slice_free (SFInterface, sf_interface);
sf_interface = NULL;
/*
* We do not call gtk_main_quit() earlier to reduce the possibility
/* We do not call gtk_main_quit() earlier to reduce the possibility
* that script_fu_script_proc() is called from gimp_extension_process()
* while we are not finished with the current script. This sucks!
*/
@ -861,12 +840,14 @@ script_fu_reset (SFScript *script)
{
gint i;
script_fu_script_reset (script, FALSE);
for (i = 0; i < script->n_args; i++)
{
SFArg *arg = &script->args[i];
SFArgValue *value = &script->args[i].value;
GtkWidget *widget = sf_interface->widgets[i];
switch (arg->type)
switch (script->args[i].type)
{
case SF_IMAGE:
case SF_DRAWABLE:
@ -878,18 +859,17 @@ script_fu_reset (SFScript *script)
case SF_COLOR:
gimp_color_button_set_color (GIMP_COLOR_BUTTON (widget),
&arg->default_value.sfa_color);
&value->sfa_color);
break;
case SF_TOGGLE:
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget),
arg->default_value.sfa_toggle);
value->sfa_toggle);
break;
case SF_VALUE:
case SF_STRING:
gtk_entry_set_text (GTK_ENTRY (widget),
arg->default_value.sfa_value);
gtk_entry_set_text (GTK_ENTRY (widget), value->sfa_value);
break;
case SF_TEXT:
@ -897,63 +877,60 @@ script_fu_reset (SFScript *script)
GtkWidget *view;
GtkTextBuffer *buffer;
g_free (arg->value.sfa_value);
arg->value.sfa_value = g_strdup (arg->default_value.sfa_value);
view = gtk_bin_get_child (GTK_BIN (widget));
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
gtk_text_buffer_set_text (buffer, arg->value.sfa_value, -1);
gtk_text_buffer_set_text (buffer, value->sfa_value, -1);
}
break;
case SF_ADJUSTMENT:
gtk_adjustment_set_value (arg->value.sfa_adjustment.adj,
arg->default_value.sfa_adjustment.value);
gtk_adjustment_set_value (value->sfa_adjustment.adj,
value->sfa_adjustment.value);
break;
case SF_FILENAME:
case SF_DIRNAME:
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (widget),
arg->default_value.sfa_file.filename);
value->sfa_file.filename);
break;
case SF_FONT:
gimp_font_select_button_set_font (GIMP_FONT_SELECT_BUTTON (widget),
arg->default_value.sfa_font);
value->sfa_font);
break;
case SF_PALETTE:
gimp_palette_select_button_set_palette (GIMP_PALETTE_SELECT_BUTTON (widget),
arg->default_value.sfa_palette);
value->sfa_palette);
break;
case SF_PATTERN:
gimp_pattern_select_button_set_pattern (GIMP_PATTERN_SELECT_BUTTON (widget),
arg->default_value.sfa_pattern);
value->sfa_pattern);
break;
case SF_GRADIENT:
gimp_gradient_select_button_set_gradient (GIMP_GRADIENT_SELECT_BUTTON (widget),
arg->default_value.sfa_gradient);
value->sfa_gradient);
break;
case SF_BRUSH:
gimp_brush_select_button_set_brush (GIMP_BRUSH_SELECT_BUTTON (widget),
arg->default_value.sfa_brush.name,
arg->default_value.sfa_brush.opacity,
arg->default_value.sfa_brush.spacing,
arg->default_value.sfa_brush.paint_mode);
value->sfa_brush.name,
value->sfa_brush.opacity,
value->sfa_brush.spacing,
value->sfa_brush.paint_mode);
break;
case SF_OPTION:
gtk_combo_box_set_active (GTK_COMBO_BOX (widget),
arg->default_value.sfa_option.history);
value->sfa_option.history);
break;
case SF_ENUM:
gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (widget),
arg->default_value.sfa_enum.history);
value->sfa_enum.history);
break;
}
}

View File

@ -30,6 +30,8 @@
#include "script-fu-script.h"
#include "script-fu-scripts.h"
#include "script-fu-intl.h"
/*
* Local Functions
@ -324,6 +326,127 @@ script_fu_script_uninstall_proc (SFScript *script)
gimp_uninstall_temp_proc (script->name);
}
gchar *
script_fu_script_get_title (SFScript *script)
{
gchar *title;
gchar *tmp;
g_return_val_if_fail (script != NULL, NULL);
/* strip mnemonics from the menupath */
title = gimp_strip_uline (gettext (script->menu_path));
/* if this looks like a full menu path, use only the last part */
if (title[0] == '<' && (tmp = strrchr (title, '/')) && tmp[1])
{
tmp = g_strdup (tmp + 1);
g_free (title);
title = tmp;
}
/* cut off ellipsis */
tmp = (strstr (title, "..."));
if (! tmp)
/* U+2026 HORIZONTAL ELLIPSIS */
tmp = strstr (title, "\342\200\246");
if (tmp && tmp == (title + strlen (title) - 3))
*tmp = '\0';
return title;
}
void
script_fu_script_reset (SFScript *script,
gboolean reset_ids)
{
gint i;
g_return_if_fail (script != NULL);
for (i = 0; i < script->n_args; i++)
{
SFArgValue *value = &script->args[i].value;
SFArgValue *default_value = &script->args[i].default_value;
switch (script->args[i].type)
{
case SF_IMAGE:
case SF_DRAWABLE:
case SF_LAYER:
case SF_CHANNEL:
case SF_VECTORS:
case SF_DISPLAY:
if (reset_ids)
value->sfa_image = default_value->sfa_image;
break;
case SF_COLOR:
value->sfa_color = default_value->sfa_color;
break;
case SF_TOGGLE:
value->sfa_toggle = default_value->sfa_toggle;
break;
case SF_VALUE:
case SF_STRING:
case SF_TEXT:
g_free (value->sfa_value);
value->sfa_value = g_strdup (default_value->sfa_value);
break;
case SF_ADJUSTMENT:
value->sfa_adjustment.value = default_value->sfa_adjustment.value;
break;
case SF_FILENAME:
case SF_DIRNAME:
g_free (value->sfa_file.filename);
value->sfa_file.filename = g_strdup (default_value->sfa_file.filename);
break;
case SF_FONT:
g_free (value->sfa_font);
value->sfa_font = g_strdup (default_value->sfa_font);
break;
case SF_PALETTE:
g_free (value->sfa_palette);
value->sfa_palette = g_strdup (default_value->sfa_palette);
break;
case SF_PATTERN:
g_free (value->sfa_pattern);
value->sfa_pattern = g_strdup (default_value->sfa_pattern);
break;
case SF_GRADIENT:
g_free (value->sfa_gradient);
value->sfa_gradient = g_strdup (default_value->sfa_gradient);
break;
case SF_BRUSH:
g_free (value->sfa_brush.name);
value->sfa_brush.name = g_strdup (default_value->sfa_brush.name);
value->sfa_brush.opacity = default_value->sfa_brush.opacity;
value->sfa_brush.spacing = default_value->sfa_brush.spacing;
value->sfa_brush.paint_mode = default_value->sfa_brush.paint_mode;
break;
case SF_OPTION:
value->sfa_option.history = default_value->sfa_option.history;
break;
case SF_ENUM:
value->sfa_enum.history = default_value->sfa_enum.history;
break;
}
}
}
gint
script_fu_script_collect_standard_args (SFScript *script,
gint n_params,

View File

@ -34,6 +34,10 @@ void script_fu_script_install_proc (SFScript *script,
GimpRunProc run_proc);
void script_fu_script_uninstall_proc (SFScript *script);
gchar * script_fu_script_get_title (SFScript *script);
void script_fu_script_reset (SFScript *script,
gboolean reset_ids);
gint script_fu_script_collect_standard_args (SFScript *script,
gint n_params,
const GimpParam *params);

View File

@ -240,7 +240,6 @@ script_fu_add_script (scheme *sc,
arg->default_value.sfa_image =
sc->vptr->ivalue (sc->vptr->pair_car (a));
arg->value.sfa_image = arg->default_value.sfa_image;
break;
case SF_COLOR:
@ -272,8 +271,6 @@ script_fu_add_script (scheme *sc,
{
return foreign_error (sc, "script-fu-register: color defaults must be a list of 3 integers or a color name", 0);
}
arg->value.sfa_color = arg->default_value.sfa_color;
break;
case SF_TOGGLE:
@ -282,7 +279,6 @@ script_fu_add_script (scheme *sc,
arg->default_value.sfa_toggle =
(sc->vptr->ivalue (sc->vptr->pair_car (a))) ? TRUE : FALSE;
arg->value.sfa_toggle = arg->default_value.sfa_toggle;
break;
case SF_VALUE:
@ -291,7 +287,6 @@ script_fu_add_script (scheme *sc,
arg->default_value.sfa_value =
g_strdup (sc->vptr->string_value (sc->vptr->pair_car (a)));
arg->value.sfa_value = g_strdup (arg->default_value.sfa_value);
break;
case SF_STRING:
@ -301,7 +296,6 @@ script_fu_add_script (scheme *sc,
arg->default_value.sfa_value =
g_strdup (sc->vptr->string_value (sc->vptr->pair_car (a)));
arg->value.sfa_value = g_strdup (arg->default_value.sfa_value);
break;
case SF_ADJUSTMENT:
@ -338,10 +332,6 @@ script_fu_add_script (scheme *sc,
adj_list = sc->vptr->pair_cdr (adj_list);
arg->default_value.sfa_adjustment.type =
sc->vptr->ivalue (sc->vptr->pair_car (adj_list));
arg->value.sfa_adjustment.adj = NULL;
arg->value.sfa_adjustment.value =
arg->default_value.sfa_adjustment.value;
}
break;
@ -374,9 +364,6 @@ script_fu_add_script (scheme *sc,
}
}
#endif
arg->value.sfa_file.filename =
g_strdup (arg->default_value.sfa_file.filename);
break;
case SF_FONT:
@ -385,7 +372,6 @@ script_fu_add_script (scheme *sc,
arg->default_value.sfa_font =
g_strdup (sc->vptr->string_value (sc->vptr->pair_car (a)));
arg->value.sfa_font = g_strdup (arg->default_value.sfa_font);
break;
case SF_PALETTE:
@ -394,8 +380,6 @@ script_fu_add_script (scheme *sc,
arg->default_value.sfa_palette =
g_strdup (sc->vptr->string_value (sc->vptr->pair_car (a)));
arg->value.sfa_palette =
g_strdup (arg->default_value.sfa_palette);
break;
case SF_PATTERN:
@ -404,8 +388,6 @@ script_fu_add_script (scheme *sc,
arg->default_value.sfa_pattern =
g_strdup (sc->vptr->string_value (sc->vptr->pair_car (a)));
arg->value.sfa_pattern =
g_strdup (arg->default_value.sfa_pattern);
break;
case SF_BRUSH:
@ -418,26 +400,18 @@ script_fu_add_script (scheme *sc,
brush_list = sc->vptr->pair_car (a);
arg->default_value.sfa_brush.name =
g_strdup (sc->vptr->string_value (sc->vptr->pair_car (brush_list)));
arg->value.sfa_brush.name =
g_strdup (arg->default_value.sfa_brush.name);
brush_list = sc->vptr->pair_cdr (brush_list);
arg->default_value.sfa_brush.opacity =
sc->vptr->rvalue (sc->vptr->pair_car (brush_list));
arg->value.sfa_brush.opacity =
arg->default_value.sfa_brush.opacity;
brush_list = sc->vptr->pair_cdr (brush_list);
arg->default_value.sfa_brush.spacing =
sc->vptr->ivalue (sc->vptr->pair_car (brush_list));
arg->value.sfa_brush.spacing =
arg->default_value.sfa_brush.spacing;
brush_list = sc->vptr->pair_cdr (brush_list);
arg->default_value.sfa_brush.paint_mode =
sc->vptr->ivalue (sc->vptr->pair_car (brush_list));
arg->value.sfa_brush.paint_mode =
arg->default_value.sfa_brush.paint_mode;
}
break;
@ -447,8 +421,6 @@ script_fu_add_script (scheme *sc,
arg->default_value.sfa_gradient =
g_strdup (sc->vptr->string_value (sc->vptr->pair_car (a)));
arg->value.sfa_gradient =
g_strdup (arg->default_value.sfa_gradient);
break;
case SF_OPTION:
@ -467,9 +439,6 @@ script_fu_add_script (scheme *sc,
g_strdup (sc->vptr->string_value
(sc->vptr->pair_car (option_list))));
}
arg->default_value.sfa_option.history = 0;
arg->value.sfa_option.history = 0;
}
break;
@ -512,8 +481,7 @@ script_fu_add_script (scheme *sc,
g_enum_get_value_by_nick (g_type_class_peek (enum_type),
sc->vptr->string_value (sc->vptr->pair_car (option_list)));
if (enum_value)
arg->default_value.sfa_enum.history =
arg->value.sfa_enum.history = enum_value->value;
arg->default_value.sfa_enum.history = enum_value->value;
}
break;
}
@ -526,6 +494,9 @@ script_fu_add_script (scheme *sc,
}
}
/* fill all values from defaults */
script_fu_script_reset (script, TRUE);
script_fu_menu_map (script);
{