gimpplugin-progress.h 6.49 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
 */
#ifndef __PLUG_IN_H__
#define __PLUG_IN_H__

21
#include <sys/types.h>
22

23
#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
typedef enum
40
{
41 42 43
  RUN_INTERACTIVE    = 0,
  RUN_NONINTERACTIVE = 1,
  RUN_WITH_LAST_VALS = 2
44 45 46
} RunModeType;


Elliot Lee's avatar
Elliot Lee committed
47 48
struct _PlugIn
{
49 50 51 52 53 54 55 56 57 58 59 60 61
  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? */
  guint         recurse : 1;      /* Have we called 'gtk_main' recursively? */
  guint         busy : 1;         /* Is the plug-in busy with a temp proc? */
  pid_t         pid;              /* Plug-ins process id */
  gchar        *args[7];          /* Plug-ins command line arguments */

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

67
  guint32       input_id;         /* Id of input proc */
Elliot Lee's avatar
Elliot Lee committed
68

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

72
  GSList       *temp_proc_defs;   /* Temporary procedures  */
Elliot Lee's avatar
Elliot Lee committed
73

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

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

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

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


/* Initialize the plug-ins */
109
void            plug_in_init                 (void);
Elliot Lee's avatar
Elliot Lee committed
110 111

/* Kill all running plug-ins */
112
void            plug_in_kill                 (void);
Elliot Lee's avatar
Elliot Lee committed
113

114 115
/*  Add a plug-in to the list of valid plug-ins and query the plug-in
 *  for information if necessary.
Elliot Lee's avatar
Elliot Lee committed
116
 */
117 118 119
void            plug_in_add                  (gchar         *name,
					      gchar         *menu_path,
					      gchar         *accelerator);
Elliot Lee's avatar
Elliot Lee committed
120

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

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

130 131
/* Add a plug-in definition. */
void            plug_in_def_add              (PlugInDef     *plug_in_def);
Elliot Lee's avatar
Elliot Lee committed
132

133 134 135 136
/* 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);
137

138 139 140 141 142
/* Retrieve a plug-ins menu path */
gchar         * plug_in_menu_path            (gchar         *name);

/* Retrieve a plug-ins help path */
gchar         * plug_in_help_path            (gchar         *prog_name);
Elliot Lee's avatar
Elliot Lee committed
143 144

/* Create a new plug-in structure */
145
PlugIn        * plug_in_new                  (gchar         *name);
Elliot Lee's avatar
Elliot Lee committed
146

147 148
/*  Destroy a plug-in structure.
 *  This will close the plug-in first if necessary.
Elliot Lee's avatar
Elliot Lee committed
149
 */
150
void            plug_in_destroy              (PlugIn        *plug_in);
Elliot Lee's avatar
Elliot Lee committed
151

Manish Singh's avatar
Manish Singh committed
152
/* Open a plug-in. This cause the plug-in to run.
153
 * If returns TRUE, you must destroy the plugin.
154
 * If returns FALSE, you must not destroy the plugin.
Manish Singh's avatar
Manish Singh committed
155
 */
156
gboolean        plug_in_open                 (PlugIn        *plug_in);
Elliot Lee's avatar
Elliot Lee committed
157

158 159 160
/* Close a plug-in. This kills the plug-in and releases its resources. */
void            plug_in_close                (PlugIn        *plug_in,
					      gboolean       kill_it);
Elliot Lee's avatar
Elliot Lee committed
161 162

/* Run a plug-in as if it were a procedure database procedure */
163 164 165 166 167 168 169 170
Argument      * plug_in_run                  (ProcRecord    *proc_rec,
					      Argument      *args,
					      gint           argc,
					      gboolean       synchronous,
					      gboolean       destroy_values,
					      gint           gdisp_ID);

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

175 176
/* Set the sensitivity for plug-in menu items based on the image type. */
void            plug_in_set_menu_sensitivity (GimpImageType  type);
Elliot Lee's avatar
Elliot Lee committed
177 178 179 180 181

/* 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
 */
182 183 184 185 186 187 188 189 190
void            plug_in_add_internal         (PlugInProcDef *proc_def);
GSList        * plug_in_extensions_parse     (gchar         *extensions);
gint            plug_in_image_types_parse    (gchar         *image_types);

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

extern PlugIn *current_plug_in;
extern GSList *proc_defs;

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