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:

committed by
Michael Natterer

parent
39e7f1016f
commit
cb702ebd1e
16
ChangeLog
16
ChangeLog
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
{
|
||||
|
Reference in New Issue
Block a user