1 /* -*- Mode: C; tab-width: 3; indent-tabs-mode: nil; c-basic-offset: 3 -*- */
2 
3 /*
4  * GImageView
5  * Copyright (C) 2001 Takuro Ashie
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  *
21  * $Id: gimv_image_saver.h,v 1.5 2004/09/21 08:44:32 makeinu Exp $
22  */
23 
24 #ifndef __GIMV_IMAGE_SAVER_H__
25 #define __GIMV_IMAGE_SAVER_H__
26 
27 #ifdef HAVE_CONFIG_H
28 #  include "config.h"
29 #endif
30 
31 #include <gtk/gtkobject.h>
32 
33 #include "gimv_image.h"
34 #include "gimv_image_info.h"
35 
36 
37 #define GIMV_TYPE_IMAGE_SAVER            (gimv_image_saver_get_type ())
38 #define GIMV_IMAGE_SAVER(obj)            (GTK_CHECK_CAST (obj, gimv_image_saver_get_type (), GimvImageSaver))
39 #define GIMV_IMAGE_SAVER_CLASS(klass)    (GTK_CHECK_CLASS_CAST (klass, gimv_image_saver_get_type, GimvImageSaverClass))
40 #define GIMV_IS_IMAGE_SAVER(obj)         (GTK_CHECK_TYPE (obj, gimv_image_saver_get_type ()))
41 #define GIMV_IS_IMAGE_SAVER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GIMV_TYPE_IMAGE_SAVER))
42 
43 
44 typedef struct GimvImageSaver_Tag      GimvImageSaver;
45 typedef struct GimvImageSaverPriv_Tag  GimvImageSaverPriv;
46 typedef struct GimvImageSaverClass_Tag GimvImageSaverClass;
47 typedef struct GimvImageSaverText_Tag  GimvImageSaverText;
48 
49 
50 struct GimvImageSaver_Tag
51 {
52    GtkObject parent;
53 
54    GimvImageInfo       *info;
55    GimvImage           *image;
56    gchar               *format;
57    gchar               *filename;
58 
59    GimvImageSaverText  *comments;
60    gint                 n_comments;
61 
62    gpointer             param;
63 
64    GTimer              *timer;
65 
66    GimvImageSaverPriv  *priv;
67 };
68 
69 
70 struct GimvImageSaverClass_Tag
71 {
72    GtkObjectClass parent;
73 
74    void (*save_start)        (GimvImageSaver *saver);
75    void (*progress_update)   (GimvImageSaver *saver);
76    void (*save_end)          (GimvImageSaver *saver);
77 };
78 
79 
80 struct GimvImageSaverText_Tag
81 {
82    gchar *key;
83    gchar *text;
84 };
85 
86 
87 #define GIMV_IMAGE_SAVER_IF_VERSION 2
88 
89 
90 typedef struct GimvImageSaverPlugin_Tag
91 {
92    const guint32  if_version; /* plugin interface version */
93    gchar         *format;
94 
95    gboolean      (*save)             (GimvImageSaver *saver,
96                                       GimvImage      *image,
97                                       const gchar    *filename,
98                                       const gchar    *format);
99    GtkWidget    *(*save_with_dialog) (GimvImageSaver *saver,
100                                       GimvImage      *image,
101                                       const gchar    *filename,
102                                       const gchar    *format);
103 } GimvImageSaverPlugin;
104 
105 
106 GtkType         gimv_image_saver_get_type            (void);
107 GimvImageSaver *gimv_image_saver_new                 (void);
108 GimvImageSaver *gimv_image_saver_new_with_attr       (GimvImage      *image,
109                                                       const gchar    *path,
110                                                       const gchar    *format);
111 
112 GimvImageSaver *gimv_image_saver_ref                 (GimvImageSaver *saver);
113 void            gimv_image_saver_unref               (GimvImageSaver *saver);
114 
115 void            gimv_image_saver_reset               (GimvImageSaver *saver);
116 
117 void            gimv_image_saver_set_image           (GimvImageSaver *saver,
118                                                       GimvImage      *image);
119 void            gimv_image_saver_set_path            (GimvImageSaver *saver,
120                                                       const gchar    *path);
121 void            gimv_image_saver_set_format          (GimvImageSaver *saver,
122                                                       const gchar    *format);
123 void            gimv_image_saver_set_image_info      (GimvImageSaver *saver,
124                                                       GimvImageInfo  *info);
125 void            gimv_image_saver_set_param           (GimvImageSaver *saver,
126                                                       gpointer        param);
127 void            gimv_image_saver_set_comment         (GimvImageSaver *saver,
128                                                       const gchar    *key,
129                                                       const gchar    *value);
130 
131 gboolean        gimv_image_saver_save                (GimvImageSaver *saver);
132 void            gimv_image_saver_save_start          (GimvImageSaver *saver);
133 void            gimv_image_saver_save_stop           (GimvImageSaver *saver);
134 gboolean        gimv_image_saver_is_saving           (GimvImageSaver *saver);
135 
136 
137 /* used by saver */
138 GimvImage      *gimv_image_saver_get_image           (GimvImageSaver *saver);
139 const gchar    *gimv_image_saver_get_path            (GimvImageSaver *saver);
140 const gchar    *gimv_image_saver_get_format          (GimvImageSaver *saver);
141 GimvImageInfo  *gimv_image_saver_get_image_info      (GimvImageSaver *saver);
142 gint            gimv_image_saver_get_n_comments      (GimvImageSaver *saver);
143 gboolean        gimv_image_saver_get_comment         (GimvImageSaver *saver,
144                                                       gint            idx,
145                                                       const gchar **  key,
146                                                       const gchar **  value);
147 gboolean        gimv_image_saver_progress_update     (GimvImageSaver *saver);
148 
149 /*
150  *  for plugin loader
151  */
152 gboolean        gimv_image_saver_plugin_regist       (const gchar *plugin_name,
153                                                       const gchar *module_name,
154                                                       gpointer     impl,
155                                                       gint         size);
156 #endif /* __GIMV_IMAGE_SAVER_H__ */
157