File: plug_in.h

package info (click to toggle)
gimp 1.0.2-3
  • links: PTS
  • area: main
  • in suites: slink
  • size: 17,116 kB
  • ctags: 16,070
  • sloc: ansic: 226,067; lisp: 8,497; sh: 4,965; makefile: 4,543
file content (170 lines) | stat: -rw-r--r-- 5,084 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/* The GIMP -- an 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 2 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, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */
#ifndef __PLUG_IN_H__
#define __PLUG_IN_H__


#include "gtk/gtk.h"
#include "procedural_db.h"


#define WRITE_BUFFER_SIZE  512

#define RGB_IMAGE       0x01
#define GRAY_IMAGE      0x02
#define INDEXED_IMAGE   0x04
#define RGBA_IMAGE      0x08
#define GRAYA_IMAGE     0x10
#define INDEXEDA_IMAGE  0x20


typedef struct _PlugIn             PlugIn;
typedef struct _PlugInDef          PlugInDef;
typedef struct _PlugInProcDef      PlugInProcDef;

struct _PlugIn
{
  unsigned int open : 1;                 /* Is the plug-in open */
  unsigned int destroy : 1;              /* Should the plug-in by destroyed */
  unsigned int query : 1;                /* Are we querying the plug-in? */
  unsigned int synchronous : 1;          /* Is the plug-in running synchronously or not */
  unsigned int recurse : 1;              /* Have we called 'gtk_main' recursively? */
  unsigned int busy : 1;                 /* Is the plug-in busy with a temp proc? */
  pid_t pid;                             /* Plug-ins process id */
  char *args[7];                         /* Plug-ins command line arguments */

  int my_read, my_write;                 /* Apps read and write file descriptors */
  int his_read, his_write;               /* Plug-ins read and write file descriptors */

  guint32 input_id;                      /* Id of input proc */

  char write_buffer[WRITE_BUFFER_SIZE];  /* Buffer for writing */
  int write_buffer_index;                /* Buffer index for writing */

  GSList *temp_proc_defs;                /* Temporary procedures  */

  GtkWidget *progress;                   /* Progress dialog */
  GtkWidget *progress_label;
  GtkWidget *progress_bar;

  gpointer user_data;                    /* Handle for hanging data onto */
};

struct _PlugInDef
{
  char *prog;
  GSList *proc_defs;
  time_t mtime;
  int query;
};

struct _PlugInProcDef
{
  char *prog;
  char *menu_path;
  char *accelerator;
  char *extensions;
  char *prefixes;
  char *magics;
  char *image_types;
  int   image_types_val;
  ProcRecord db_info;
  GSList *extensions_list;
  GSList *prefixes_list;
  GSList *magics_list;
};


/* Initialize the plug-ins */
void plug_in_init (void);

/* Kill all running plug-ins */
void plug_in_kill (void);

/* Add a plug-in to the list of valid plug-ins
 *  and query the plug-in for information if
 *  necessary.
 */
void plug_in_add (char *name,
		  char *menu_path,
		  char *accelerator);

/* Get the "image_types" the plug-in works on.
 */
char* plug_in_image_types (char *name);

/* Add in the file load/save handler fields procedure.
 */
PlugInProcDef* plug_in_file_handler (char *name,
				     char *extensions,
				     char *prefixes,
				     char *magics);

/* Add a plug-in definition.
 */
void plug_in_def_add (PlugInDef *plug_in_def);

/* Retrieve a plug-ins menu path
 */
char* plug_in_menu_path (char *name);

/* Create a new plug-in structure */
PlugIn* plug_in_new (char *name);

/* Destroy a plug-in structure. This will close the plug-in
 *  first if necessary.
 */
void plug_in_destroy (PlugIn *plug_in);

/* Open a plug-in. This cause the plug-in to run.
 * If returns 1, you must destroy the plugin.  If returns 0 you
 * may not destroy the plugin.
 */
int plug_in_open (PlugIn *plug_in);

/* Close a plug-in. This kills the plug-in and releases
 *  its resources.
 */
void plug_in_close (PlugIn *plug_in,
		    int     kill_it);

/* Run a plug-in as if it were a procedure database procedure */
Argument* plug_in_run (ProcRecord *proc_rec,
		       Argument   *args,
		       int         synchronous,
		       int         destroy_values);

/* Run the last plug-in again with the same arguments. Extensions
 *  are exempt from this "privelege".
 */
void plug_in_repeat (int with_interface);

/* Set the sensitivity for plug-in menu items based on the image
 *  base type.
 */
void plug_in_set_menu_sensitivity (int base_type);

/* Register an internal plug-in.  This is for file load-save
 * handlers, which are organized around the plug-in data structure.
 * This could all be done a little better, but oh well.  -josh
 */
void plug_in_add_internal (PlugInProcDef* proc_def);
GSList* plug_in_extensions_parse  (char     *extensions);
int     plug_in_image_types_parse (char     *image_types);

#endif /* __PLUG_IN_H__ */