[gimp] libgimp: make gimp_proc_view_new() show both new- and old-style args
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] libgimp: make gimp_proc_view_new() show both new- and old-style args
- Date: Mon, 5 Aug 2019 12:18:38 +0000 (UTC)
commit acbe22942706b4433660d880f26495e600f028ce
Author: Michael Natterer <mitch gimp org>
Date: Mon Aug 5 14:17:18 2019 +0200
libgimp: make gimp_proc_view_new() show both new- and old-style args
And reduce its API to just (proc-name, menu-path), it can look up all
the shit from the PDB itself.
libgimp/gimpprocbrowserdialog.c | 59 +---------
libgimp/gimpproceduraldb.c | 22 ----
libgimp/gimpprocview.c | 242 +++++++++++++++++++++++++++++++--------
libgimp/gimpprocview.h | 14 +--
plug-ins/common/plugin-browser.c | 60 +---------
5 files changed, 206 insertions(+), 191 deletions(-)
---
diff --git a/libgimp/gimpprocbrowserdialog.c b/libgimp/gimpprocbrowserdialog.c
index d804cb0871..10757ba877 100644
--- a/libgimp/gimpprocbrowserdialog.c
+++ b/libgimp/gimpprocbrowserdialog.c
@@ -93,8 +93,6 @@ static void browser_row_activated (GtkTreeView *treeview,
GtkTreePath *path,
GtkTreeViewColumn *column,
GimpProcBrowserDialog *dialog);
-static void browser_show_procedure (GimpProcBrowserDialog *dialog,
- const gchar *proc_name);
static void browser_search (GimpBrowser *browser,
const gchar *query_text,
gint search_type,
@@ -329,7 +327,10 @@ browser_selection_changed (GtkTreeSelection *sel,
gtk_tree_model_get (GTK_TREE_MODEL (dialog->priv->store), &iter,
COLUMN_PROC_NAME, &proc_name,
-1);
- browser_show_procedure (dialog, proc_name);
+
+ gimp_browser_set_widget (GIMP_BROWSER (dialog->priv->browser),
+ gimp_proc_view_new (proc_name, NULL));
+
g_free (proc_name);
}
@@ -345,58 +346,6 @@ browser_row_activated (GtkTreeView *treeview,
g_signal_emit (dialog, dialog_signals[ROW_ACTIVATED], 0);
}
-static void
-browser_show_procedure (GimpProcBrowserDialog *dialog,
- const gchar *proc_name)
-{
- GimpProcBrowserDialogPrivate *priv = GET_PRIVATE (dialog);
- gchar *proc_blurb;
- gchar *proc_help;
- gchar *proc_author;
- gchar *proc_copyright;
- gchar *proc_date;
- GimpPDBProcType proc_type;
- gint n_params;
- gint n_return_vals;
- GimpParamDef *params;
- GimpParamDef *return_vals;
-
- gimp_procedural_db_proc_info (proc_name,
- &proc_blurb,
- &proc_help,
- &proc_author,
- &proc_copyright,
- &proc_date,
- &proc_type,
- &n_params,
- &n_return_vals,
- ¶ms,
- &return_vals);
-
- gimp_browser_set_widget (GIMP_BROWSER (priv->browser),
- gimp_proc_view_new (proc_name,
- NULL,
- proc_blurb,
- proc_help,
- proc_author,
- proc_copyright,
- proc_date,
- proc_type,
- n_params,
- n_return_vals,
- params,
- return_vals));
-
- g_free (proc_blurb);
- g_free (proc_help);
- g_free (proc_author);
- g_free (proc_copyright);
- g_free (proc_date);
-
- gimp_destroy_paramdefs (params, n_params);
- gimp_destroy_paramdefs (return_vals, n_return_vals);
-}
-
static void
browser_search (GimpBrowser *browser,
const gchar *query_text,
diff --git a/libgimp/gimpproceduraldb.c b/libgimp/gimpproceduraldb.c
index ae5caaef6c..4605af18cd 100644
--- a/libgimp/gimpproceduraldb.c
+++ b/libgimp/gimpproceduraldb.c
@@ -82,8 +82,6 @@ gimp_procedural_db_proc_info (const gchar *procedure,
for (i = 0; i < *num_args; i++)
{
- GParamSpec *pspec;
-
if (! gimp_procedural_db_proc_arg (procedure,
i,
&(*args)[i].type,
@@ -95,21 +93,10 @@ gimp_procedural_db_proc_info (const gchar *procedure,
return FALSE;
}
-
- pspec = gimp_procedural_db_proc_argument (procedure, i);
-
- if (pspec)
- {
- g_printerr ("Arg %i of %s: %s\n", i, procedure,
- G_PARAM_SPEC_TYPE_NAME (pspec));
- g_param_spec_unref (pspec);
- }
}
for (i = 0; i < *num_values; i++)
{
- GParamSpec *pspec;
-
if (! gimp_procedural_db_proc_val (procedure,
i,
&(*return_vals)[i].type,
@@ -121,15 +108,6 @@ gimp_procedural_db_proc_info (const gchar *procedure,
return FALSE;
}
-
- pspec = gimp_procedural_db_proc_return_value (procedure, i);
-
- if (pspec)
- {
- g_printerr ("Value %i of %s: %s\n", i, procedure,
- G_PARAM_SPEC_TYPE_NAME (pspec));
- g_param_spec_unref (pspec);
- }
}
}
diff --git a/libgimp/gimpprocview.c b/libgimp/gimpprocview.c
index 9bbeb50063..4a18bcd86d 100644
--- a/libgimp/gimpprocview.c
+++ b/libgimp/gimpprocview.c
@@ -59,6 +59,12 @@ static GtkWidget * gimp_proc_view_create_params (const GimpParamDef *params,
GtkSizeGroup *name_group,
GtkSizeGroup *type_group,
GtkSizeGroup *desc_group);
+static GtkWidget * gimp_proc_view_create_args (const gchar *procedure_name,
+ gint n_args,
+ gboolean return_values,
+ GtkSizeGroup *name_group,
+ GtkSizeGroup *type_group,
+ GtkSizeGroup *desc_group);
/* public functions */
@@ -66,63 +72,68 @@ static GtkWidget * gimp_proc_view_create_params (const GimpParamDef *params,
/**
* gimp_proc_view_new:
- * @name:
- * @menu_path:
- * @blurb:
- * @help:
- * @author:
- * @copyright:
- * @date:
- * @type:
- * @n_params:
- * @n_return_vals:
- * @params:
- * @return_vals:
+ * @procedure_name: The name of a procedure.
+ * @menu_path: (nullable): The procedure's menu path, or %NULL.
*
* Returns: (transfer full): a new widget providing a view on a
- * GIMP procedure
+ * GIMP procedure
*
* Since: 2.4
**/
GtkWidget *
-gimp_proc_view_new (const gchar *name,
- const gchar *menu_path,
- const gchar *blurb,
- const gchar *help,
- const gchar *author,
- const gchar *copyright,
- const gchar *date,
- GimpPDBProcType type,
- gint n_params,
- gint n_return_vals,
- const GimpParamDef *params,
- const GimpParamDef *return_vals)
+gimp_proc_view_new (const gchar *procedure_name,
+ const gchar *menu_path)
{
- GtkWidget *main_vbox;
- GtkWidget *frame;
- GtkWidget *vbox;
- GtkWidget *grid;
- GtkWidget *label;
- GtkSizeGroup *name_group;
- GtkSizeGroup *type_group;
- GtkSizeGroup *desc_group;
- const gchar *type_str;
- gint row;
-
- if (blurb && strlen (blurb) < 2) blurb = NULL;
- if (help && strlen (help) < 2) help = NULL;
- if (author && strlen (author) < 2) author = NULL;
- if (date && strlen (date) < 2) date = NULL;
- if (copyright && strlen (copyright) < 2) copyright = NULL;
+ GtkWidget *main_vbox;
+ GtkWidget *frame;
+ GtkWidget *vbox;
+ GtkWidget *grid;
+ GtkWidget *label;
+ GtkWidget *notebook;
+ GtkSizeGroup *name_group;
+ GtkSizeGroup *type_group;
+ GtkSizeGroup *desc_group;
+ gchar *blurb;
+ gchar *help;
+ gchar *author;
+ gchar *copyright;
+ gchar *date;
+ GimpPDBProcType type;
+ gint n_params;
+ gint n_return_vals;
+ GimpParamDef *params;
+ GimpParamDef *return_vals;
+ const gchar *type_str;
+ gint row;
+
+ g_return_val_if_fail (procedure_name != NULL, NULL);
+
+ gimp_procedural_db_proc_info (procedure_name,
+ &blurb,
+ &help,
+ &author,
+ ©right,
+ &date,
+ &type,
+ &n_params,
+ &n_return_vals,
+ ¶ms,
+ &return_vals);
+
+ if (blurb && strlen (blurb) < 2) g_clear_pointer (&blurb, g_free);
+ if (help && strlen (help) < 2) g_clear_pointer (&help, g_free);
+ if (author && strlen (author) < 2) g_clear_pointer (&author, g_free);
+ if (date && strlen (date) < 2) g_clear_pointer (&date, g_free);
+ if (copyright && strlen (copyright) < 2) g_clear_pointer (©right, g_free);
if (blurb && help && ! strcmp (blurb, help))
- help = NULL;
+ g_clear_pointer (&help, g_free);
main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
/* show the name */
- frame = gimp_frame_new (name);
+ frame = gimp_frame_new (procedure_name);
label = gtk_frame_get_label_widget (GTK_FRAME (frame));
gtk_label_set_selectable (GTK_LABEL (label), TRUE);
gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
@@ -164,6 +175,56 @@ gimp_proc_view_new (const gchar *name,
gtk_widget_show (label);
}
+ notebook = gtk_notebook_new ();
+ gtk_box_pack_start (GTK_BOX (main_vbox), notebook, FALSE, FALSE, 0);
+ gtk_widget_show (notebook);
+
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox,
+ gtk_label_new (_("GValue-based API")));
+ gtk_widget_show (vbox);
+
+ name_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ type_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ desc_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
+ /* in parameters */
+ if (n_params)
+ {
+ frame = gimp_frame_new (_("Parameters"));
+ gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
+ gtk_widget_show (frame);
+
+ grid = gimp_proc_view_create_args (procedure_name, n_params, FALSE,
+ name_group, type_group, desc_group);
+ gtk_container_add (GTK_CONTAINER (frame), grid);
+ gtk_widget_show (grid);
+ }
+
+ /* out parameters */
+ if (n_return_vals)
+ {
+ frame = gimp_frame_new (_("Return Values"));
+ gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
+ gtk_widget_show (frame);
+
+ grid = gimp_proc_view_create_args (procedure_name, n_return_vals, TRUE,
+ name_group, type_group, desc_group);
+ gtk_container_add (GTK_CONTAINER (frame), grid);
+ gtk_widget_show (grid);
+ }
+
+ g_object_unref (name_group);
+ g_object_unref (type_group);
+ g_object_unref (desc_group);
+
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox,
+ gtk_label_new (_("Legacy API")));
+ gtk_widget_show (vbox);
+
name_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
type_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
desc_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
@@ -172,7 +233,7 @@ gimp_proc_view_new (const gchar *name,
if (n_params)
{
frame = gimp_frame_new (_("Parameters"));
- gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
grid = gimp_proc_view_create_params (params, n_params,
@@ -185,7 +246,7 @@ gimp_proc_view_new (const gchar *name,
if (n_return_vals)
{
frame = gimp_frame_new (_("Return Values"));
- gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
grid = gimp_proc_view_create_params (return_vals, n_return_vals,
@@ -194,6 +255,10 @@ gimp_proc_view_new (const gchar *name,
gtk_widget_show (grid);
}
+ g_object_unref (name_group);
+ g_object_unref (type_group);
+ g_object_unref (desc_group);
+
if (! help && ! author && ! date && ! copyright)
return main_vbox;
@@ -219,7 +284,7 @@ gimp_proc_view_new (const gchar *name,
/* show the author & the copyright */
if (! author && ! date && ! copyright)
- return main_vbox;
+ goto out;
grid = gtk_grid_new ();
gtk_grid_set_column_spacing (GTK_GRID (grid), 6);
@@ -268,6 +333,30 @@ gimp_proc_view_new (const gchar *name,
label, 3);
}
+ out:
+
+ g_free (blurb);
+ g_free (help);
+ g_free (author);
+ g_free (copyright);
+ g_free (date);
+
+ while (n_params--)
+ {
+ g_free (params[n_params].name);
+ g_free (params[n_params].description);
+ }
+
+ g_free (params);
+
+ while (n_return_vals--)
+ {
+ g_free (return_vals[n_return_vals].name);
+ g_free (return_vals[n_return_vals].description);
+ }
+
+ g_free (return_vals);
+
return main_vbox;
}
@@ -335,3 +424,64 @@ gimp_proc_view_create_params (const GimpParamDef *params,
return grid;
}
+
+static GtkWidget *
+gimp_proc_view_create_args (const gchar *procedure_name,
+ gint n_args,
+ gboolean return_values,
+ GtkSizeGroup *name_group,
+ GtkSizeGroup *type_group,
+ GtkSizeGroup *desc_group)
+{
+ GtkWidget *grid;
+ gint i;
+
+ grid = gtk_grid_new ();
+ gtk_grid_set_column_spacing (GTK_GRID (grid), 6);
+ gtk_grid_set_row_spacing (GTK_GRID (grid), 4);
+
+ for (i = 0; i < n_args; i++)
+ {
+ GParamSpec *pspec;
+ GtkWidget *label;
+
+ if (return_values)
+ pspec = gimp_procedural_db_proc_return_value (procedure_name, i);
+ else
+ pspec = gimp_procedural_db_proc_argument (procedure_name, i);
+
+ /* name */
+ label = gtk_label_new (g_param_spec_get_name (pspec));
+ gtk_label_set_xalign (GTK_LABEL (label), 0.0);
+ gtk_label_set_yalign (GTK_LABEL (label), 0.0);
+ gtk_size_group_add_widget (name_group, label);
+ gtk_grid_attach (GTK_GRID (grid), label, 0, i, 1, 1);
+ gtk_widget_show (label);
+
+ /* type */
+ label = gtk_label_new (g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec)));
+ gimp_label_set_attributes (GTK_LABEL (label),
+ PANGO_ATTR_FAMILY, "monospace",
+ PANGO_ATTR_STYLE, PANGO_STYLE_ITALIC,
+ -1);
+ gtk_label_set_xalign (GTK_LABEL (label), 0.0);
+ gtk_label_set_yalign (GTK_LABEL (label), 0.0);
+ gtk_size_group_add_widget (type_group, label);
+ gtk_grid_attach (GTK_GRID (grid), label, 1, i, 1, 1);
+ gtk_widget_show (label);
+
+ /* description */
+ label = gtk_label_new (g_param_spec_get_blurb (pspec));
+ gtk_label_set_selectable (GTK_LABEL (label), TRUE);
+ gtk_label_set_xalign (GTK_LABEL (label), 0.0);
+ gtk_label_set_yalign (GTK_LABEL (label), 0.0);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ gtk_size_group_add_widget (desc_group, label);
+ gtk_grid_attach (GTK_GRID (grid), label, 2, i, 1, 1);
+ gtk_widget_show (label);
+
+ g_param_spec_unref (pspec);
+ }
+
+ return grid;
+}
diff --git a/libgimp/gimpprocview.h b/libgimp/gimpprocview.h
index 749929771e..915a0aa562 100644
--- a/libgimp/gimpprocview.h
+++ b/libgimp/gimpprocview.h
@@ -31,18 +31,8 @@ G_BEGIN_DECLS
/* For information look into the C source or the html documentation */
-GtkWidget * gimp_proc_view_new (const gchar *name,
- const gchar *menu_path,
- const gchar *blurb,
- const gchar *help,
- const gchar *author,
- const gchar *copyright,
- const gchar *date,
- GimpPDBProcType type,
- gint n_params,
- gint n_return_vals,
- const GimpParamDef *params,
- const GimpParamDef *return_vals);
+GtkWidget * gimp_proc_view_new (const gchar *procedure_name,
+ const gchar *menu_path);
G_END_DECLS
diff --git a/plug-ins/common/plugin-browser.c b/plug-ins/common/plugin-browser.c
index 8451744b51..801b12f5a2 100644
--- a/plug-ins/common/plugin-browser.c
+++ b/plug-ins/common/plugin-browser.c
@@ -102,8 +102,6 @@ static void browser_list_selection_changed (GtkTreeSelection *selection,
PluginBrowser *browser);
static void browser_tree_selection_changed (GtkTreeSelection *selection,
PluginBrowser *browser);
-static void browser_show_plugin (PluginBrowser *browser,
- PInfo *pinfo);
static gboolean find_existing_mpath (GtkTreeModel *model,
const gchar *mpath,
@@ -784,7 +782,9 @@ browser_list_selection_changed (GtkTreeSelection *selection,
g_free (mpath);
- browser_show_plugin (browser, pinfo);
+ gimp_browser_set_widget (GIMP_BROWSER (browser->browser),
+ gimp_proc_view_new (pinfo->realname,
+ pinfo->menu));
}
static void
@@ -860,59 +860,7 @@ browser_tree_selection_changed (GtkTreeSelection *selection,
g_warning ("Failed to find node in list");
}
- browser_show_plugin (browser, pinfo);
-}
-
-static void
-browser_show_plugin (PluginBrowser *browser,
- PInfo *pinfo)
-{
- gchar *blurb = NULL;
- gchar *help = NULL;
- gchar *author = NULL;
- gchar *copyright = NULL;
- gchar *date = NULL;
- GimpPDBProcType type = 0;
- gint n_params = 0;
- gint n_return_vals = 0;
- GimpParamDef *params = NULL;
- GimpParamDef *return_vals = NULL;
-
- g_return_if_fail (browser != NULL);
- g_return_if_fail (pinfo != NULL);
-
- gimp_procedural_db_proc_info (pinfo->realname,
- &blurb,
- &help,
- &author,
- ©right,
- &date,
- &type,
- &n_params,
- &n_return_vals,
- ¶ms,
- &return_vals);
-
gimp_browser_set_widget (GIMP_BROWSER (browser->browser),
gimp_proc_view_new (pinfo->realname,
- pinfo->menu,
- blurb,
- help,
- author,
- copyright,
- date,
- type,
- n_params,
- n_return_vals,
- params,
- return_vals));
-
- g_free (blurb);
- g_free (help);
- g_free (author);
- g_free (copyright);
- g_free (date);
-
- gimp_destroy_paramdefs (params, n_params);
- gimp_destroy_paramdefs (return_vals, n_return_vals);
+ pinfo->menu));
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]