[gimp] app: move some code in actions/ to new utility file procedure-commands.c
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: move some code in actions/ to new utility file procedure-commands.c
- Date: Fri, 1 Jan 2016 23:39:35 +0000 (UTC)
commit dda06ac0653e818d87619727f63437c7f8b61f0c
Author: Michael Natterer <mitch gimp org>
Date: Sat Jan 2 00:33:45 2016 +0100
app: move some code in actions/ to new utility file procedure-commands.c
app/actions/Makefile.am | 2 +
app/actions/filters-commands.c | 73 +++++++---
app/actions/plug-in-commands.c | 292 ++++++--------------------------------
app/actions/plug-in-commands.h | 5 -
app/actions/procedure-commands.c | 224 +++++++++++++++++++++++++++++
app/actions/procedure-commands.h | 33 +++++
6 files changed, 353 insertions(+), 276 deletions(-)
---
diff --git a/app/actions/Makefile.am b/app/actions/Makefile.am
index 8c573b2..9194b89 100644
--- a/app/actions/Makefile.am
+++ b/app/actions/Makefile.am
@@ -133,6 +133,8 @@ libappactions_a_SOURCES = \
plug-in-actions.h \
plug-in-commands.c \
plug-in-commands.h \
+ procedure-commands.c \
+ procedure-commands.h \
quick-mask-actions.c \
quick-mask-actions.h \
quick-mask-commands.c \
diff --git a/app/actions/filters-commands.c b/app/actions/filters-commands.c
index 82bccdb..434b844 100644
--- a/app/actions/filters-commands.c
+++ b/app/actions/filters-commands.c
@@ -28,16 +28,17 @@
#include "core/gimp-filter-history.h"
#include "core/gimpcontext.h"
#include "core/gimpimage.h"
+#include "core/gimpprogress.h"
#include "core/gimptoolinfo.h"
-#include "pdb/gimpprocedure.h" /* FIXME history */
+#include "pdb/gimpprocedure.h"
#include "tools/gimpoperationtool.h"
#include "tools/tool_manager.h"
#include "actions.h"
#include "filters-commands.h"
-#include "plug-in-commands.h" /* FIXME history */
+#include "procedure-commands.h"
#include "gimp-intl.h"
@@ -117,19 +118,34 @@ filters_repeat_cmd_callback (GtkAction *action,
if (procedure)
{
GimpValueArray *args;
- gint n_args;
- args = gimp_procedure_get_arguments (procedure);
+ args = procedure_commands_get_display_args (procedure, display);
- g_value_set_int (gimp_value_array_index (args, 0), run_mode);
-
- n_args = plug_in_collect_display_args (action, display,
- procedure->args,
- args, 1);
-
- plug_in_procedure_execute (procedure, gimp, display, args, n_args);
-
- gimp_value_array_unref (args);
+ if (args)
+ {
+ GError *error = NULL;
+
+ g_value_set_int (gimp_value_array_index (args, 0), run_mode);
+
+ gimp_procedure_execute_async (procedure, gimp,
+ gimp_get_user_context (gimp),
+ GIMP_PROGRESS (display), args,
+ GIMP_OBJECT (display), &error);
+
+ if (error)
+ {
+ gimp_message_literal (gimp,
+ G_OBJECT (display), GIMP_MESSAGE_ERROR,
+ error->message);
+ g_clear_error (&error);
+ }
+ else
+ {
+ gimp_filter_history_add (gimp, procedure);
+ }
+
+ gimp_value_array_unref (args);
+ }
}
}
@@ -141,19 +157,34 @@ filters_history_cmd_callback (GtkAction *action,
Gimp *gimp;
GimpDisplay *display;
GimpValueArray *args;
- gint n_args;
return_if_no_gimp (gimp, data);
return_if_no_display (display, data);
- args = gimp_procedure_get_arguments (procedure);
+ args = procedure_commands_get_display_args (procedure, display);
+
+ if (args)
+ {
+ GError *error = NULL;
- g_value_set_int (gimp_value_array_index (args, 0), GIMP_RUN_INTERACTIVE);
+ g_value_set_int (gimp_value_array_index (args, 0), GIMP_RUN_INTERACTIVE);
- n_args = plug_in_collect_display_args (action, display,
- procedure->args,
- args, 1);
+ gimp_procedure_execute_async (procedure, gimp,
+ gimp_get_user_context (gimp),
+ GIMP_PROGRESS (display), args,
+ GIMP_OBJECT (display), &error);
- plug_in_procedure_execute (procedure, gimp, display, args, n_args);
+ if (error)
+ {
+ gimp_message_literal (gimp,
+ G_OBJECT (display), GIMP_MESSAGE_ERROR,
+ error->message);
+ g_clear_error (&error);
+ }
+ else
+ {
+ gimp_filter_history_add (gimp, procedure);
+ }
- gimp_value_array_unref (args);
+ gimp_value_array_unref (args);
+ }
}
diff --git a/app/actions/plug-in-commands.c b/app/actions/plug-in-commands.c
index 08b397f..4acd33e 100644
--- a/app/actions/plug-in-commands.c
+++ b/app/actions/plug-in-commands.c
@@ -38,11 +38,11 @@
#include "core/gimpparamspecs.h"
#include "core/gimpprogress.h"
+#include "pdb/gimpprocedure.h"
+
#include "plug-in/gimppluginmanager.h"
#include "plug-in/gimppluginmanager-data.h"
-#include "pdb/gimpprocedure.h"
-
#include "widgets/gimpbufferview.h"
#include "widgets/gimpcontainerview.h"
#include "widgets/gimpdatafactoryview.h"
@@ -57,46 +57,16 @@
#include "actions.h"
#include "plug-in-commands.h"
+#include "procedure-commands.h"
#include "gimp-intl.h"
/* local function prototypes */
-#if 0
-static void plug_in_procedure_execute (GimpProcedure *procedure,
- Gimp *gimp,
- GimpDisplay *display,
- GimpValueArray *args,
- gint n_args);
-#endif
-
-static gint plug_in_collect_data_args (GtkAction *action,
- GimpObject *object,
- GParamSpec **pspecs,
- GimpValueArray *args,
- gint n_args);
-static gint plug_in_collect_image_args (GtkAction *action,
- GimpImage *image,
- GParamSpec **pspecs,
- GimpValueArray *args,
- gint n_args);
-static gint plug_in_collect_item_args (GtkAction *action,
- GimpImage *image,
- GimpItem *item,
- GParamSpec **pspecs,
- GimpValueArray *args,
- gint n_args);
-#if 0
-static gint plug_in_collect_display_args (GtkAction *action,
- GimpDisplay *display,
- GParamSpec **pspecs,
- GimpValueArray *args,
- gint n_args);
-#endif
-static void plug_in_reset_all_response (GtkWidget *dialog,
- gint response_id,
- Gimp *gimp);
+static void plug_in_reset_all_response (GtkWidget *dialog,
+ gint response_id,
+ Gimp *gimp);
/* public functions */
@@ -107,18 +77,10 @@ plug_in_run_cmd_callback (GtkAction *action,
gpointer data)
{
Gimp *gimp;
- GimpValueArray *args;
- gint n_args = 0;
- GimpDisplay *display = NULL;
+ GimpValueArray *args = NULL;
+ GimpDisplay *display = NULL;
return_if_no_gimp (gimp, data);
- args = gimp_procedure_get_arguments (procedure);
-
- /* initialize the first argument */
- g_value_set_int (gimp_value_array_index (args, n_args),
- GIMP_RUN_INTERACTIVE);
- n_args++;
-
switch (procedure->proc_type)
{
case GIMP_EXTENSION:
@@ -141,9 +103,7 @@ plug_in_run_cmd_callback (GtkAction *action,
object = gimp_context_get_by_type (context,
gimp_container_get_children_type (container));
- n_args = plug_in_collect_data_args (action, object,
- procedure->args,
- args, n_args);
+ args = procedure_commands_get_data_args (procedure, object);
}
else if (GIMP_IS_IMAGE_EDITOR (data))
{
@@ -152,9 +112,7 @@ plug_in_run_cmd_callback (GtkAction *action,
image = gimp_image_editor_get_image (editor);
- n_args = plug_in_collect_image_args (action, image,
- procedure->args,
- args, n_args);
+ args = procedure_commands_get_image_args (procedure, image);
}
else if (GIMP_IS_ITEM_TREE_VIEW (data))
{
@@ -169,31 +127,52 @@ plug_in_run_cmd_callback (GtkAction *action,
else
item = NULL;
- n_args = plug_in_collect_item_args (action, image, item,
- procedure->args,
- args, n_args);
+ args = procedure_commands_get_item_args (procedure, image, item);
}
else
{
display = action_data_get_display (data);
- n_args = plug_in_collect_display_args (action,
- display,
- procedure->args,
- args, n_args);
+ args = procedure_commands_get_display_args (procedure, display);
}
break;
case GIMP_INTERNAL:
g_warning ("Unhandled procedure type.");
- n_args = -1;
break;
}
- if (n_args >= 1)
- plug_in_procedure_execute (procedure, gimp, display, args, n_args);
+ if (args)
+ {
+ GError *error = NULL;
+
+ g_value_set_int (gimp_value_array_index (args, 0),
+ GIMP_RUN_INTERACTIVE);
+
+ gimp_procedure_execute_async (procedure, gimp,
+ gimp_get_user_context (gimp),
+ GIMP_PROGRESS (display), args,
+ GIMP_OBJECT (display), &error);
+
+ if (error)
+ {
+ gimp_message_literal (gimp,
+ G_OBJECT (display), GIMP_MESSAGE_ERROR,
+ error->message);
+ g_error_free (error);
+ }
+ else
+ {
+ /* remember only image plug-ins */
+ if (procedure->num_args >= 2 &&
+ GIMP_IS_PARAM_SPEC_IMAGE_ID (procedure->args[1]))
+ {
+ gimp_filter_history_add (gimp, procedure);
+ }
+ }
- gimp_value_array_unref (args);
+ gimp_value_array_unref (args);
+ }
}
void
@@ -229,193 +208,6 @@ plug_in_reset_all_cmd_callback (GtkAction *action,
gtk_widget_show (dialog);
}
-
-/* private functions */
-
-/* FIXME history */
-void
-plug_in_procedure_execute (GimpProcedure *procedure,
- Gimp *gimp,
- GimpDisplay *display,
- GimpValueArray *args,
- gint n_args)
-{
- GError *error = NULL;
-
- gimp_value_array_truncate (args, n_args);
-
- /* run the plug-in procedure */
- gimp_procedure_execute_async (procedure, gimp,
- gimp_get_user_context (gimp),
- GIMP_PROGRESS (display), args,
- GIMP_OBJECT (display), &error);
-
- if (error)
- {
- gimp_message_literal (gimp,
- G_OBJECT (display), GIMP_MESSAGE_ERROR,
- error->message);
- g_error_free (error);
- }
- else
- {
- /* remember only image plug-ins */
- if (procedure->num_args >= 2 &&
- GIMP_IS_PARAM_SPEC_IMAGE_ID (procedure->args[1]))
- {
- gimp_filter_history_add (gimp, procedure);
- }
- }
-}
-
-static gint
-plug_in_collect_data_args (GtkAction *action,
- GimpObject *object,
- GParamSpec **pspecs,
- GimpValueArray *args,
- gint n_args)
-{
- if (gimp_value_array_length (args) > n_args &&
- GIMP_IS_PARAM_SPEC_STRING (pspecs[n_args]))
- {
- if (object)
- {
- g_value_set_string (gimp_value_array_index (args, n_args),
- gimp_object_get_name (object));
- n_args++;
- }
- else
- {
- g_warning ("Uh-oh, no active data object for the plug-in!");
- return -1;
- }
- }
-
- return n_args;
-}
-
-static gint
-plug_in_collect_image_args (GtkAction *action,
- GimpImage *image,
- GParamSpec **pspecs,
- GimpValueArray *args,
- gint n_args)
-{
- if (gimp_value_array_length (args) > n_args &&
- GIMP_IS_PARAM_SPEC_IMAGE_ID (pspecs[n_args]))
- {
- if (image)
- {
- gimp_value_set_image (gimp_value_array_index (args, n_args), image);
- n_args++;
- }
- else
- {
- g_warning ("Uh-oh, no active image for the plug-in!");
- return -1;
- }
- }
-
- return n_args;
-}
-
-static gint
-plug_in_collect_item_args (GtkAction *action,
- GimpImage *image,
- GimpItem *item,
- GParamSpec **pspecs,
- GimpValueArray *args,
- gint n_args)
-{
- if (gimp_value_array_length (args) > n_args &&
- GIMP_IS_PARAM_SPEC_IMAGE_ID (pspecs[n_args]))
- {
- if (image)
- {
- gimp_value_set_image (gimp_value_array_index (args, n_args), image);
- n_args++;
-
- if (gimp_value_array_length (args) > n_args &&
- GIMP_IS_PARAM_SPEC_ITEM_ID (pspecs[n_args]))
- {
- if (item &&
- g_type_is_a (G_TYPE_FROM_INSTANCE (item),
- GIMP_PARAM_SPEC_ITEM_ID (pspecs[n_args])->item_type))
- {
- gimp_value_set_item (gimp_value_array_index (args, n_args),
- item);
- n_args++;
- }
- else
- {
- g_warning ("Uh-oh, no active item for the plug-in!");
- return -1;
- }
- }
- }
- }
-
- return n_args;
-}
-
-/* FIXME history */
-gint
-plug_in_collect_display_args (GtkAction *action,
- GimpDisplay *display,
- GParamSpec **pspecs,
- GimpValueArray *args,
- gint n_args)
-{
- if (gimp_value_array_length (args) > n_args &&
- GIMP_IS_PARAM_SPEC_DISPLAY_ID (pspecs[n_args]))
- {
- if (display)
- {
- gimp_value_set_display (gimp_value_array_index (args, n_args),
- GIMP_OBJECT (display));
- n_args++;
- }
- else
- {
- g_warning ("Uh-oh, no active display for the plug-in!");
- return -1;
- }
- }
-
- if (gimp_value_array_length (args) > n_args &&
- GIMP_IS_PARAM_SPEC_IMAGE_ID (pspecs[n_args]))
- {
- GimpImage *image = display ? gimp_display_get_image (display) : NULL;
-
- if (image)
- {
- gimp_value_set_image (gimp_value_array_index (args, n_args),
- image);
- n_args++;
-
- if (gimp_value_array_length (args) > n_args &&
- GIMP_IS_PARAM_SPEC_DRAWABLE_ID (pspecs[n_args]))
- {
- GimpDrawable *drawable = gimp_image_get_active_drawable (image);
-
- if (drawable)
- {
- gimp_value_set_drawable (gimp_value_array_index (args, n_args),
- drawable);
- n_args++;
- }
- else
- {
- g_warning ("Uh-oh, no active drawable for the plug-in!");
- return -1;
- }
- }
- }
- }
-
- return n_args;
-}
-
static void
plug_in_reset_all_response (GtkWidget *dialog,
gint response_id,
diff --git a/app/actions/plug-in-commands.h b/app/actions/plug-in-commands.h
index 30a1113..e16aaca 100644
--- a/app/actions/plug-in-commands.h
+++ b/app/actions/plug-in-commands.h
@@ -28,11 +28,6 @@ void plug_in_reset_all_cmd_callback (GtkAction *action,
/* FIXME history */
-void plug_in_procedure_execute (GimpProcedure *procedure,
- Gimp *gimp,
- GimpDisplay *display,
- GimpValueArray *args,
- gint n_args);
gint plug_in_collect_display_args (GtkAction *action,
GimpDisplay *display,
GParamSpec **pspecs,
diff --git a/app/actions/procedure-commands.c b/app/actions/procedure-commands.c
new file mode 100644
index 0000000..c45daf8
--- /dev/null
+++ b/app/actions/procedure-commands.c
@@ -0,0 +1,224 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <gegl.h>
+#include <gtk/gtk.h>
+
+#include "libgimpbase/gimpbase.h"
+
+#include "actions-types.h"
+
+#include "core/gimpimage.h"
+#include "core/gimpparamspecs.h"
+
+#include "pdb/gimpprocedure.h"
+
+#include "display/gimpdisplay.h"
+
+#include "procedure-commands.h"
+
+
+GimpValueArray *
+procedure_commands_get_data_args (GimpProcedure *procedure,
+ GimpObject *object)
+{
+ GimpValueArray *args;
+ gint n_args = 0;
+
+ args = gimp_procedure_get_arguments (procedure);
+
+ /* initialize the first argument */
+ g_value_set_int (gimp_value_array_index (args, n_args),
+ GIMP_RUN_INTERACTIVE);
+ n_args++;
+
+ if (gimp_value_array_length (args) > n_args &&
+ GIMP_IS_PARAM_SPEC_STRING (procedure->args[n_args]))
+ {
+ if (object)
+ {
+ g_value_set_string (gimp_value_array_index (args, n_args),
+ gimp_object_get_name (object));
+ n_args++;
+ }
+ else
+ {
+ g_warning ("Uh-oh, no active data object for the plug-in!");
+ gimp_value_array_unref (args);
+ return NULL;
+ }
+ }
+
+ gimp_value_array_truncate (args, n_args);
+
+ return args;
+}
+
+GimpValueArray *
+procedure_commands_get_image_args (GimpProcedure *procedure,
+ GimpImage *image)
+{
+ GimpValueArray *args;
+ gint n_args = 0;
+
+ args = gimp_procedure_get_arguments (procedure);
+
+ /* initialize the first argument */
+ g_value_set_int (gimp_value_array_index (args, n_args),
+ GIMP_RUN_INTERACTIVE);
+ n_args++;
+
+ if (gimp_value_array_length (args) > n_args &&
+ GIMP_IS_PARAM_SPEC_IMAGE_ID (procedure->args[n_args]))
+ {
+ if (image)
+ {
+ gimp_value_set_image (gimp_value_array_index (args, n_args), image);
+ n_args++;
+ }
+ else
+ {
+ g_warning ("Uh-oh, no active image for the plug-in!");
+ gimp_value_array_unref (args);
+ return NULL;
+ }
+ }
+
+ gimp_value_array_truncate (args, n_args);
+
+ return args;
+}
+
+GimpValueArray *
+procedure_commands_get_item_args (GimpProcedure *procedure,
+ GimpImage *image,
+ GimpItem *item)
+{
+ GimpValueArray *args;
+ gint n_args = 0;
+
+ args = gimp_procedure_get_arguments (procedure);
+
+ /* initialize the first argument */
+ g_value_set_int (gimp_value_array_index (args, n_args),
+ GIMP_RUN_INTERACTIVE);
+ n_args++;
+
+ if (gimp_value_array_length (args) > n_args &&
+ GIMP_IS_PARAM_SPEC_IMAGE_ID (procedure->args[n_args]))
+ {
+ if (image)
+ {
+ gimp_value_set_image (gimp_value_array_index (args, n_args), image);
+ n_args++;
+
+ if (gimp_value_array_length (args) > n_args &&
+ GIMP_IS_PARAM_SPEC_ITEM_ID (procedure->args[n_args]))
+ {
+ if (item &&
+ g_type_is_a (G_TYPE_FROM_INSTANCE (item),
+ GIMP_PARAM_SPEC_ITEM_ID (procedure->args[n_args])->item_type))
+ {
+ gimp_value_set_item (gimp_value_array_index (args, n_args),
+ item);
+ n_args++;
+ }
+ else
+ {
+ g_warning ("Uh-oh, no active item for the plug-in!");
+ gimp_value_array_unref (args);
+ return NULL;
+ }
+ }
+ }
+ }
+
+ gimp_value_array_truncate (args, n_args);
+
+ return args;
+}
+
+GimpValueArray *
+procedure_commands_get_display_args (GimpProcedure *procedure,
+ GimpDisplay *display)
+{
+ GimpValueArray *args;
+ gint n_args = 0;
+
+ args = gimp_procedure_get_arguments (procedure);
+
+ /* initialize the first argument */
+ g_value_set_int (gimp_value_array_index (args, n_args),
+ GIMP_RUN_INTERACTIVE);
+ n_args++;
+
+ if (gimp_value_array_length (args) > n_args &&
+ GIMP_IS_PARAM_SPEC_DISPLAY_ID (procedure->args[n_args]))
+ {
+ if (display)
+ {
+ gimp_value_set_display (gimp_value_array_index (args, n_args),
+ GIMP_OBJECT (display));
+ n_args++;
+ }
+ else
+ {
+ g_warning ("Uh-oh, no active display for the plug-in!");
+ gimp_value_array_unref (args);
+ return NULL;
+ }
+ }
+
+ if (gimp_value_array_length (args) > n_args &&
+ GIMP_IS_PARAM_SPEC_IMAGE_ID (procedure->args[n_args]))
+ {
+ GimpImage *image = display ? gimp_display_get_image (display) : NULL;
+
+ if (image)
+ {
+ gimp_value_set_image (gimp_value_array_index (args, n_args),
+ image);
+ n_args++;
+
+ if (gimp_value_array_length (args) > n_args &&
+ GIMP_IS_PARAM_SPEC_DRAWABLE_ID (procedure->args[n_args]))
+ {
+ GimpDrawable *drawable = gimp_image_get_active_drawable (image);
+
+ if (drawable)
+ {
+ gimp_value_set_drawable (gimp_value_array_index (args, n_args),
+ drawable);
+ n_args++;
+ }
+ else
+ {
+ g_warning ("Uh-oh, no active drawable for the plug-in!");
+ gimp_value_array_unref (args);
+ return NULL;
+ }
+ }
+ }
+ }
+
+ gimp_value_array_truncate (args, n_args);
+
+ return args;
+}
+
diff --git a/app/actions/procedure-commands.h b/app/actions/procedure-commands.h
new file mode 100644
index 0000000..9c0743f
--- /dev/null
+++ b/app/actions/procedure-commands.h
@@ -0,0 +1,33 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __PROCEDURE_COMMANDS_H__
+#define __PROCEDURE_COMMANDS_H__
+
+
+GimpValueArray * procedure_commands_get_data_args (GimpProcedure *procedure,
+ GimpObject *object);
+GimpValueArray * procedure_commands_get_image_args (GimpProcedure *procedure,
+ GimpImage *image);
+GimpValueArray * procedure_commands_get_item_args (GimpProcedure *procedure,
+ GimpImage *image,
+ GimpItem *item);
+GimpValueArray * procedure_commands_get_display_args (GimpProcedure *procedure,
+ GimpDisplay *display);
+
+
+#endif /* __PROCEDURE_COMMANDS_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]