gimpplugin-progress.h 6.95 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
 */
Sven Neumann's avatar
Sven Neumann committed
18

Elliot Lee's avatar
Elliot Lee committed
19 20 21
#ifndef __PLUG_IN_H__
#define __PLUG_IN_H__

22

23 24 25
#include <time.h>      /* time_t */
#include <sys/types.h> /* pid_t  */

26
#include "pdb/procedural_db.h"  /* ProcRecord */
27

Sven Neumann's avatar
Sven Neumann committed
28

Elliot Lee's avatar
Elliot Lee committed
29 30
#define WRITE_BUFFER_SIZE  512

31 32 33 34 35 36 37 38 39
typedef enum /*< pdb-skip> */ /*< skip> */
{
  PLUG_IN_RGB_IMAGE      = 0x1 << 0,
  PLUG_IN_GRAY_IMAGE     = 0x1 << 1,
  PLUG_IN_INDEXED_IMAGE  = 0x1 << 2,
  PLUG_IN_RGBA_IMAGE     = 0x1 << 3,
  PLUG_IN_GRAYA_IMAGE    = 0x1 << 4,
  PLUG_IN_INDEXEDA_IMAGE = 0x1 << 5
} PlugInImageType;
Elliot Lee's avatar
Elliot Lee committed
40 41 42 43


struct _PlugIn
{
44 45 46 47 48 49 50 51 52 53 54 55
  guint         open : 1;         /* Is the plug-in open* */
  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;
56
#ifdef G_OS_WIN32
57 58
  guint         his_thread_id;    /* Plug-in's thread ID */
  gint          his_read_fd;      /* Plug-in's read pipe fd */
59
#endif
Elliot Lee's avatar
Elliot Lee committed
60

61
  guint32       input_id;         /* Id of input proc */
Elliot Lee's avatar
Elliot Lee committed
62

63 64
  gchar         write_buffer[WRITE_BUFFER_SIZE]; /* Buffer for writing */
  gint          write_buffer_index;              /* Buffer index for writing */
Elliot Lee's avatar
Elliot Lee committed
65

66
  GSList       *temp_proc_defs;   /* Temporary procedures  */
Elliot Lee's avatar
Elliot Lee committed
67

Michael Natterer's avatar
Michael Natterer committed
68
  GimpProgress *progress;         /* Progress dialog */
69

70
  PlugInDef    *user_data;        /* DON'T USE!! */
Elliot Lee's avatar
Elliot Lee committed
71 72 73 74
};

struct _PlugInProcDef
{
75 76 77 78 79 80 81 82 83 84 85 86 87
  gchar           *prog;
  gchar           *menu_path;
  gchar           *accelerator;
  gchar           *extensions;
  gchar           *prefixes;
  gchar           *magics;
  gchar           *image_types;
  PlugInImageType  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
88 89 90 91
};


/* Initialize the plug-ins */
92 93
void            plug_in_init                 (Gimp               *gimp,
                                              GimpInitStatusFunc  status_callback);
Elliot Lee's avatar
Elliot Lee committed
94 95

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

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

101 102 103 104 105
/* 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
106

107 108
/* Add a plug-in definition. */
void            plug_in_def_add              (PlugInDef     *plug_in_def);
Elliot Lee's avatar
Elliot Lee committed
109

110
/* Allocate and free a plug-in definition. */
111
PlugInDef     * plug_in_def_new              (const gchar   *prog);
112 113
void            plug_in_def_free             (PlugInDef     *plug_in_def, 
					      gboolean       free_proc_defs);
114

115 116 117 118 119 120 121 122 123 124 125
void      plug_in_def_set_mtime              (PlugInDef     *plug_in_def,
                                              time_t         mtime);
void      plug_in_def_set_locale_domain_name (PlugInDef     *plug_in_def,
                                              const gchar   *domain_name);
void      plug_in_def_set_locale_domain_path (PlugInDef     *plug_in_def,
                                              const gchar   *domain_path);
void      plug_in_def_set_help_path          (PlugInDef     *plug_in_def,
                                              const gchar   *help_path);
void      plug_in_def_add_proc_def           (PlugInDef     *plug_in_def,
                                              PlugInProcDef *proc_def);

126 127 128 129 130
/* 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
131 132

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

135 136
/*  Destroy a plug-in structure.
 *  This will close the plug-in first if necessary.
Elliot Lee's avatar
Elliot Lee committed
137
 */
138
void            plug_in_destroy              (PlugIn        *plug_in);
Elliot Lee's avatar
Elliot Lee committed
139

140

Manish Singh's avatar
Manish Singh committed
141
/* Open a plug-in. This cause the plug-in to run.
142
 * If returns TRUE, you must destroy the plugin.
143
 * If returns FALSE, you must not destroy the plugin.
Manish Singh's avatar
Manish Singh committed
144
 */
145
gboolean        plug_in_open                 (PlugIn        *plug_in);
Elliot Lee's avatar
Elliot Lee committed
146

147 148 149
/* 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
150 151

/* Run a plug-in as if it were a procedure database procedure */
152 153 154 155 156 157 158 159
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
160 161
 *  are exempt from this "privelege".
 */
162
void            plug_in_repeat               (gboolean       with_interface);
Elliot Lee's avatar
Elliot Lee committed
163

164 165
/* 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
166

167

Elliot Lee's avatar
Elliot Lee committed
168 169 170 171
/* 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
 */
172 173 174 175 176 177 178 179 180
void              plug_in_add_internal         (PlugInProcDef *proc_def);
GSList          * plug_in_extensions_parse     (gchar         *extensions);
PlugInImageType   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);
181

182

183 184 185
extern PlugIn *current_plug_in;
extern GSList *proc_defs;

186

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