~ubuntu-branches/ubuntu/maverick/gimp/maverick-updates

« back to all changes in this revision

Viewing changes to plug-ins/dbbrowser/gimpprocview.c

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Holbach
  • Date: 2005-12-09 19:44:52 UTC
  • Revision ID: james.westby@ubuntu.com-20051209194452-yggpemjlofpjqyf4
Tags: upstream-2.2.9
ImportĀ upstreamĀ versionĀ 2.2.9

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* The GIMP -- an image manipulation program
 
2
 * Copyright (C) 1995 Spencer Kimball and Peter Mattis
 
3
 *
 
4
 * This program is free software; you can redistribute it and/or modify
 
5
 * it under the terms of the GNU General Public License as published by
 
6
 * the Free Software Foundation; either version 2 of the License, or
 
7
 * (at your option) any later version.
 
8
 *
 
9
 * This program is distributed in the hope that it will be useful,
 
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
 * GNU General Public License for more details.
 
13
 *
 
14
 * You should have received a copy of the GNU General Public License
 
15
 * along with this program; if not, write to the Free Software
 
16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
17
 */
 
18
 
 
19
/*
 
20
 * dbbrowser_utils.c
 
21
 * 0.08  26th sept 97  by Thomas NOEL <thomas@minet.net>
 
22
 *
 
23
 * 98/12/13  Sven Neumann <sven@gimp.org> : added help display
 
24
 */
 
25
 
 
26
#include "config.h"
 
27
 
 
28
#include <string.h>
 
29
 
 
30
#include <gtk/gtk.h>
 
31
 
 
32
#include <libgimp/gimp.h>
 
33
#include <libgimp/gimpui.h>
 
34
 
 
35
#include "gimpprocview.h"
 
36
 
 
37
#include "libgimp/stdplugins-intl.h"
 
38
 
 
39
 
 
40
/*  local function prototypes  */
 
41
 
 
42
static GtkWidget   * gimp_proc_view_create_params (GimpParamDef    *params,
 
43
                                                   gint             n_params,
 
44
                                                   GtkSizeGroup    *name_group,
 
45
                                                   GtkSizeGroup    *type_group,
 
46
                                                   GtkSizeGroup    *desc_group);
 
47
static const gchar * GimpPDBArgType_to_string     (GimpPDBArgType   type);
 
48
static const gchar * GimpPDBProcType_to_string    (GimpPDBProcType  type);
 
49
 
 
50
 
 
51
/*  public functions  */
 
52
 
 
53
GtkWidget *
 
54
gimp_proc_view_new (const gchar     *name,
 
55
                    const gchar     *menu_path,
 
56
                    const gchar     *blurb,
 
57
                    const gchar     *help,
 
58
                    const gchar     *author,
 
59
                    const gchar     *copyright,
 
60
                    const gchar     *date,
 
61
                    GimpPDBProcType  type,
 
62
                    gint             n_params,
 
63
                    gint             n_return_vals,
 
64
                    GimpParamDef    *params,
 
65
                    GimpParamDef    *return_vals)
 
66
{
 
67
  GtkWidget    *main_vbox;
 
68
  GtkWidget    *frame;
 
69
  GtkWidget    *vbox;
 
70
  GtkWidget    *table;
 
71
  GtkWidget    *label;
 
72
  GtkSizeGroup *name_group;
 
73
  GtkSizeGroup *type_group;
 
74
  GtkSizeGroup *desc_group;
 
75
  gint          row;
 
76
 
 
77
  if (blurb     && strlen (blurb) < 2)     blurb     = NULL;
 
78
  if (help      && strlen (help) < 2)      help      = NULL;
 
79
  if (author    && strlen (author) < 2)    author    = NULL;
 
80
  if (date      && strlen (date) < 2)      date      = NULL;
 
81
  if (copyright && strlen (copyright) < 2) copyright = NULL;
 
82
 
 
83
  if (blurb && help && ! strcmp (blurb, help))
 
84
    help = NULL;
 
85
 
 
86
  main_vbox = gtk_vbox_new (FALSE, 12);
 
87
 
 
88
  /* show the name */
 
89
 
 
90
  frame = gimp_frame_new (name);
 
91
  label = gtk_frame_get_label_widget (GTK_FRAME (frame));
 
92
  gtk_label_set_selectable (GTK_LABEL (label), TRUE);
 
93
  gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
 
94
  gtk_widget_show (frame);
 
95
 
 
96
  vbox = gtk_vbox_new (FALSE, 8);
 
97
  gtk_container_add (GTK_CONTAINER (frame), vbox);
 
98
  gtk_widget_show (vbox);
 
99
 
 
100
  label = gtk_label_new (GimpPDBProcType_to_string (type));
 
101
  gimp_label_set_attributes (GTK_LABEL (label),
 
102
                             PANGO_ATTR_STYLE, PANGO_STYLE_ITALIC,
 
103
                             -1);
 
104
  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
 
105
  gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
 
106
  gtk_widget_show (label);
 
107
 
 
108
  if (menu_path)
 
109
    {
 
110
      label = gtk_label_new_with_mnemonic (menu_path);
 
111
      gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
 
112
      gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
 
113
      gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
 
114
      gtk_widget_show (label);
 
115
    }
 
116
 
 
117
  if (blurb)
 
118
    {
 
119
      label = gtk_label_new (blurb);
 
120
      gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
 
121
      gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
 
122
      gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
 
123
      gtk_widget_show (label);
 
124
    }
 
125
 
 
126
  name_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
 
127
  type_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
 
128
  desc_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
 
129
 
 
130
  /* in parameters */
 
131
  if (n_params)
 
132
    {
 
133
      frame = gimp_frame_new (_("Parameters"));
 
134
      gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
 
135
      gtk_widget_show (frame);
 
136
 
 
137
      table = gimp_proc_view_create_params (params, n_params,
 
138
                                            name_group, type_group, desc_group);
 
139
      gtk_container_add (GTK_CONTAINER (frame), table);
 
140
      gtk_widget_show (table);
 
141
    }
 
142
 
 
143
  /* out parameters */
 
144
  if (n_return_vals)
 
145
    {
 
146
      frame = gimp_frame_new (_("Return Values"));
 
147
      gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
 
148
      gtk_widget_show (frame);
 
149
 
 
150
      table = gimp_proc_view_create_params (return_vals, n_return_vals,
 
151
                                            name_group, type_group, desc_group);
 
152
      gtk_container_add (GTK_CONTAINER (frame), table);
 
153
      gtk_widget_show (table);
 
154
    }
 
155
 
 
156
  if (! help && ! author && ! date && ! copyright)
 
157
    return main_vbox;
 
158
 
 
159
  frame = gimp_frame_new (_("Additional Information"));
 
160
  gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
 
161
  gtk_widget_show (frame);
 
162
 
 
163
  vbox = gtk_vbox_new (FALSE, 8);
 
164
  gtk_container_add (GTK_CONTAINER (frame), vbox);
 
165
  gtk_widget_show (vbox);
 
166
 
 
167
  /* show the help */
 
168
  if (help)
 
169
    {
 
170
      label = gtk_label_new (help);
 
171
      gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
 
172
      gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
 
173
      gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
 
174
      gtk_widget_show (label);
 
175
    }
 
176
 
 
177
  /* show the author & the copyright */
 
178
 
 
179
  if (! author && ! date && ! copyright)
 
180
    return main_vbox;
 
181
 
 
182
  table = gtk_table_new ((author != 0) + (date != 0) + (copyright != 0), 2,
 
183
                         FALSE);
 
184
  gtk_table_set_col_spacings (GTK_TABLE (table), 6);
 
185
  gtk_table_set_row_spacings (GTK_TABLE (table), 4);
 
186
  gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
 
187
  gtk_widget_show (table);
 
188
 
 
189
  row = 0;
 
190
 
 
191
  if (author)
 
192
    {
 
193
      label = gtk_label_new (author);
 
194
      gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
 
195
      gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
 
196
 
 
197
      gimp_table_attach_aligned (GTK_TABLE (table), 0, row++,
 
198
                                 _("Author:"), 0.0, 0.0,
 
199
                                 label, 3, FALSE);
 
200
    }
 
201
 
 
202
  if (date)
 
203
    {
 
204
      label = gtk_label_new (date);
 
205
      gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
 
206
      gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
 
207
 
 
208
      gimp_table_attach_aligned (GTK_TABLE (table), 0, row++,
 
209
                                 _("Date:"), 0.0, 0.0,
 
210
                                 label, 3, FALSE);
 
211
    }
 
212
 
 
213
  if (copyright)
 
214
    {
 
215
      label = gtk_label_new (copyright);
 
216
      gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
 
217
      gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
 
218
 
 
219
      gimp_table_attach_aligned (GTK_TABLE (table), 0, row++,
 
220
                                 _("Copyright:"), 0.0, 0.0,
 
221
                                 label, 3, FALSE);
 
222
    }
 
223
 
 
224
  return main_vbox;
 
225
}
 
226
 
 
227
 
 
228
/*  private functions  */
 
229
 
 
230
static GtkWidget *
 
231
gimp_proc_view_create_params (GimpParamDef *params,
 
232
                              gint          n_params,
 
233
                              GtkSizeGroup *name_group,
 
234
                              GtkSizeGroup *type_group,
 
235
                              GtkSizeGroup *desc_group)
 
236
{
 
237
  GtkWidget   *table;
 
238
  GtkWidget   *label;
 
239
  const gchar *type;
 
240
  gint         i;
 
241
 
 
242
  table = gtk_table_new (n_params, 3, FALSE);
 
243
  gtk_table_set_col_spacings (GTK_TABLE (table), 6);
 
244
  gtk_table_set_row_spacings (GTK_TABLE (table), 4);
 
245
 
 
246
  for (i = 0; i < n_params; i++)
 
247
    {
 
248
      /* name */
 
249
      label = gtk_label_new (params[i].name);
 
250
      gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
 
251
      gtk_size_group_add_widget (name_group, label);
 
252
      gtk_table_attach (GTK_TABLE (table), label,
 
253
                        0, 1, i, i + 1, GTK_FILL, GTK_FILL, 0, 0);
 
254
      gtk_widget_show (label);
 
255
 
 
256
      /* type */
 
257
      type = GimpPDBArgType_to_string (params[i].type);
 
258
      label = gtk_label_new (type);
 
259
      gimp_label_set_attributes (GTK_LABEL (label),
 
260
                                 PANGO_ATTR_FAMILY, "monospace",
 
261
                                 PANGO_ATTR_STYLE,  PANGO_STYLE_ITALIC,
 
262
                                 -1);
 
263
      gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
 
264
      gtk_size_group_add_widget (type_group, label);
 
265
      gtk_table_attach (GTK_TABLE (table), label,
 
266
                        1, 2, i, i + 1, GTK_FILL, GTK_FILL, 0, 0);
 
267
      gtk_widget_show (label);
 
268
 
 
269
      /* description */
 
270
      label = gtk_label_new (params[i].description);
 
271
      gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
 
272
      gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
 
273
      gtk_size_group_add_widget (desc_group, label);
 
274
      gtk_table_attach (GTK_TABLE (table), label,
 
275
                        2, 3, i, i + 1, GTK_SHRINK | GTK_FILL, GTK_FILL, 0, 0);
 
276
      gtk_widget_show (label);
 
277
    }
 
278
 
 
279
  return table;
 
280
}
 
281
 
 
282
static const gchar *
 
283
GimpPDBArgType_to_string (GimpPDBArgType type)
 
284
{
 
285
  switch (type)
 
286
    {
 
287
    case GIMP_PDB_INT32:       return "INT32";
 
288
    case GIMP_PDB_INT16:       return "INT16";
 
289
    case GIMP_PDB_INT8:        return "INT8";
 
290
    case GIMP_PDB_FLOAT:       return "FLOAT";
 
291
    case GIMP_PDB_STRING:      return "STRING";
 
292
    case GIMP_PDB_INT32ARRAY:  return "INT32ARRAY";
 
293
    case GIMP_PDB_INT16ARRAY:  return "INT16ARRAY";
 
294
    case GIMP_PDB_INT8ARRAY:   return "INT8ARRAY";
 
295
    case GIMP_PDB_FLOATARRAY:  return "FLOATARRAY";
 
296
    case GIMP_PDB_STRINGARRAY: return "STRINGARRAY";
 
297
    case GIMP_PDB_COLOR:       return "COLOR";
 
298
    case GIMP_PDB_REGION:      return "REGION";
 
299
    case GIMP_PDB_DISPLAY:     return "DISPLAY";
 
300
    case GIMP_PDB_IMAGE:       return "IMAGE";
 
301
    case GIMP_PDB_LAYER:       return "LAYER";
 
302
    case GIMP_PDB_CHANNEL:     return "CHANNEL";
 
303
    case GIMP_PDB_DRAWABLE:    return "DRAWABLE";
 
304
    case GIMP_PDB_SELECTION:   return "SELECTION";
 
305
    case GIMP_PDB_BOUNDARY:    return "BOUNDARY";
 
306
    case GIMP_PDB_PATH:        return "PATH";
 
307
    case GIMP_PDB_PARASITE:    return "PARASITE";
 
308
    case GIMP_PDB_STATUS:      return "STATUS";
 
309
    case GIMP_PDB_END:         return "END";
 
310
    default:                   return "UNKNOWN?";
 
311
    }
 
312
}
 
313
 
 
314
static const gchar *
 
315
GimpPDBProcType_to_string (GimpPDBProcType type)
 
316
{
 
317
  switch (type)
 
318
    {
 
319
    case GIMP_INTERNAL:  return _("Internal GIMP procedure");
 
320
    case GIMP_PLUGIN:    return _("GIMP Plug-In");
 
321
    case GIMP_EXTENSION: return _("GIMP Extension");
 
322
    case GIMP_TEMPORARY: return _("Temporary Procedure");
 
323
    default:             return "UNKNOWN";
 
324
    }
 
325
}