gimpplugin-progress.h 5.67 KB
Newer Older
Elliot Lee's avatar
Elliot Lee committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/* 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
16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Elliot Lee's avatar
Elliot Lee committed
17 18 19 20 21
 */
#ifndef __PLUG_IN_H__
#define __PLUG_IN_H__


22 23
#include <sys/types.h>
#include <gtk/gtk.h>
24

Elliot Lee's avatar
Elliot Lee committed
25
#include "procedural_db.h"
26
#include "gimpprogress.h"
27
#include "drawable.h"
Elliot Lee's avatar
Elliot Lee committed
28 29 30

#define WRITE_BUFFER_SIZE  512

31 32 33 34 35 36
#define PLUG_IN_RGB_IMAGE       0x01
#define PLUG_IN_GRAY_IMAGE      0x02
#define PLUG_IN_INDEXED_IMAGE   0x04
#define PLUG_IN_RGBA_IMAGE      0x08
#define PLUG_IN_GRAYA_IMAGE     0x10
#define PLUG_IN_INDEXEDA_IMAGE  0x20
Elliot Lee's avatar
Elliot Lee committed
37 38


39

40
typedef enum
41
{
42 43 44
  RUN_INTERACTIVE    = 0,
  RUN_NONINTERACTIVE = 1,
  RUN_WITH_LAST_VALS = 2
45 46 47
} RunModeType;


Elliot Lee's avatar
Elliot Lee committed
48 49
struct _PlugIn
{
50 51 52 53 54 55
  guint open : 1;                        /* Is the plug-in open */
  guint destroy : 1;                     /* Should the plug-in by destroyed */
  guint query : 1;                       /* Are we querying the plug-in? */
  guint synchronous : 1;                 /* Is the plug-in running synchronously or not */
  guint recurse : 1;                     /* Have we called 'gtk_main' recursively? */
  guint busy : 1;                        /* Is the plug-in busy with a temp proc? */
Elliot Lee's avatar
Elliot Lee committed
56
  pid_t pid;                             /* Plug-ins process id */
57
  gchar *args[7];                         /* Plug-ins command line arguments */
Elliot Lee's avatar
Elliot Lee committed
58

59 60
  GIOChannel *my_read, *my_write;        /* App's read and write channels */
  GIOChannel *his_read, *his_write;      /* Plug-in's read and write channels */
61
#ifdef G_OS_WIN32
62
  guint his_thread_id;			 /* Plug-in's thread ID */
63
  gint his_read_fd;			 /* Plug-in's read pipe fd */
64
#endif
Elliot Lee's avatar
Elliot Lee committed
65 66 67

  guint32 input_id;                      /* Id of input proc */

68 69
  gchar write_buffer[WRITE_BUFFER_SIZE]; /* Buffer for writing */
  gint write_buffer_index;               /* Buffer index for writing */
Elliot Lee's avatar
Elliot Lee committed
70 71 72

  GSList *temp_proc_defs;                /* Temporary procedures  */

73
  gimp_progress *progress;               /* Progress dialog */
74

Elliot Lee's avatar
Elliot Lee committed
75 76 77 78 79
  gpointer user_data;                    /* Handle for hanging data onto */
};

struct _PlugInDef
{
80
  gchar  *prog;
Elliot Lee's avatar
Elliot Lee committed
81
  GSList *proc_defs;
82 83 84 85
  gchar  *locale_domain;
  gchar  *locale_path;
  time_t  mtime;
  gint    query;
Elliot Lee's avatar
Elliot Lee committed
86 87 88 89
};

struct _PlugInProcDef
{
90 91 92 93 94 95 96 97
  gchar  *prog;
  gchar  *menu_path;
  gchar  *accelerator;
  gchar  *extensions;
  gchar  *prefixes;
  gchar  *magics;
  gchar  *image_types;
  gint    image_types_val;
Elliot Lee's avatar
Elliot Lee committed
98 99 100 101
  ProcRecord db_info;
  GSList *extensions_list;
  GSList *prefixes_list;
  GSList *magics_list;
102
  time_t  mtime;
Elliot Lee's avatar
Elliot Lee committed
103 104 105 106 107 108 109 110 111 112 113 114 115
};


/* 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.
 */
116 117 118
void plug_in_add (gchar *name,
		  gchar *menu_path,
		  gchar *accelerator);
Elliot Lee's avatar
Elliot Lee committed
119 120 121

/* Get the "image_types" the plug-in works on.
 */
122
gchar* plug_in_image_types (gchar *name);
Elliot Lee's avatar
Elliot Lee committed
123 124 125

/* Add in the file load/save handler fields procedure.
 */
126 127 128 129
PlugInProcDef* plug_in_file_handler (gchar *name,
				     gchar *extensions,
				     gchar *prefixes,
				     gchar *magics);
Elliot Lee's avatar
Elliot Lee committed
130 131 132 133 134

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

135 136 137 138 139 140
/* Allocate and free a plug-in definition.
 */
PlugInDef * plug_in_def_new  (gchar     *prog);
void        plug_in_def_free (PlugInDef *plug_in_def, 
			      gboolean   free_proc_defs);

Elliot Lee's avatar
Elliot Lee committed
141 142
/* Retrieve a plug-ins menu path
 */
143
gchar* plug_in_menu_path (gchar *name);
Elliot Lee's avatar
Elliot Lee committed
144 145

/* Create a new plug-in structure */
146
PlugIn* plug_in_new (gchar *name);
Elliot Lee's avatar
Elliot Lee committed
147 148 149 150 151 152

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

Manish Singh's avatar
Manish Singh committed
153
/* Open a plug-in. This cause the plug-in to run.
154 155
 * If returns TRUE, you must destroy the plugin.  
 * If returns FALSE, you must not destroy the plugin.
Manish Singh's avatar
Manish Singh committed
156
 */
157
gboolean plug_in_open (PlugIn *plug_in);
Elliot Lee's avatar
Elliot Lee committed
158 159 160 161 162 163 164 165 166 167

/* 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,
168 169 170 171
		       gint        argc,
		       gboolean    synchronous,
		       gboolean    destroy_values,
		       gint        gdisp_ID);
Elliot Lee's avatar
Elliot Lee committed
172 173 174 175

/* Run the last plug-in again with the same arguments. Extensions
 *  are exempt from this "privelege".
 */
176
void plug_in_repeat (gboolean with_interface);
Elliot Lee's avatar
Elliot Lee committed
177 178

/* Set the sensitivity for plug-in menu items based on the image
179
 * type.
Elliot Lee's avatar
Elliot Lee committed
180
 */
181
void plug_in_set_menu_sensitivity (GimpImageType type);
Elliot Lee's avatar
Elliot Lee committed
182 183 184 185 186

/* 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
 */
187 188 189
void    plug_in_add_internal      (PlugInProcDef *proc_def);
GSList* plug_in_extensions_parse  (gchar *extensions);
gint    plug_in_image_types_parse (gchar *image_types);
Elliot Lee's avatar
Elliot Lee committed
190

191 192
void plug_in_progress_init   (PlugIn *plug_in, gchar *message, gint gdisp_ID);
void plug_in_progress_update (PlugIn *plug_in, gdouble percentage);
193 194 195 196

extern PlugIn *current_plug_in;
extern GSList *proc_defs;

Elliot Lee's avatar
Elliot Lee committed
197
#endif /* __PLUG_IN_H__ */