Statistics
| Branch: | Revision:

root / src / gallery.c @ 1ecb1bbed16ca46035aa6486b301ab5228791fe5

History | View | Annotate | Download (25.8 kB)

1 ec14b166 kulve
/*
2 ec14b166 kulve
 * Copyright (C) 2006 Tuomas Kulve <tuomas@kulve.fi>
3 ec14b166 kulve
 *
4 ec14b166 kulve
 * This program is free software; you can redistribute it and/or modify
5 ec14b166 kulve
 * it under the terms of the GNU General Public License as published by
6 ec14b166 kulve
 * the Free Software Foundation; either version 2, or (at your option)
7 ec14b166 kulve
 * any later version.
8 ec14b166 kulve
 *
9 ec14b166 kulve
 * This program is distributed in the hope that it will be useful,
10 ec14b166 kulve
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ec14b166 kulve
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 ec14b166 kulve
 * GNU General Public License for more details.
13 ec14b166 kulve
 * 
14 ec14b166 kulve
 * You should have received a copy of the GNU General Public License
15 ec14b166 kulve
 * along with this program; if not, write to the Free Software
16 ec14b166 kulve
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
17 ec14b166 kulve
 * USA.
18 ec14b166 kulve
 */
19 ec14b166 kulve
20 ec14b166 kulve
#ifdef HAVE_CONFIG_H
21 ec14b166 kulve
#  include <config.h>
22 ec14b166 kulve
#endif
23 ec14b166 kulve
24 ec14b166 kulve
#include "main.h"
25 ec14b166 kulve
#include "gallery.h"
26 ec14b166 kulve
#include "image.h"
27 4dab7a7d kulve
#include "magick.h"
28 ec14b166 kulve
#include "widgets.h"
29 537501a3 kulve
#include "vfs.h"
30 537501a3 kulve
#include "xml.h"
31 12d65073 kulve
#include "html.h"
32 ec14b166 kulve
33 ec14b166 kulve
#include <glib.h>
34 ec14b166 kulve
#include <gtk/gtk.h>
35 7885d549 kulve
#include <string.h>        /* memset, strcmp */
36 4dab7a7d kulve
#include <strings.h>       /* rindex */
37 4dab7a7d kulve
38 4dab7a7d kulve
39 4dab7a7d kulve
40 4dab7a7d kulve
static gboolean _make_thumbnails(struct data *data);
41 de03cb65 kulve
static gboolean _make_webimages(struct data *data);
42 ec14b166 kulve
43 ec14b166 kulve
void
44 ec14b166 kulve
gallery_init(struct data *data)
45 ec14b166 kulve
{
46 ec14b166 kulve
47 ec14b166 kulve
        g_assert(data != NULL);
48 ec14b166 kulve
49 537501a3 kulve
    g_debug("in gallery_init");
50 537501a3 kulve
51 537501a3 kulve
        if (data->gal != NULL)
52 ec14b166 kulve
                gallery_free(data);
53 ec14b166 kulve
54 ec14b166 kulve
        data->gal = g_new0(struct gallery, 1);
55 ec14b166 kulve
56 7885d549 kulve
    data->current_img = NULL; /* no currently selected image */
57 7885d549 kulve
58 537501a3 kulve
        data->gal->edited = FALSE;
59 2e27e33c kulve
    data->gal->images = NULL;
60 ec14b166 kulve
61 ec14b166 kulve
        /* Set default values */
62 3372e100 kulve
        data->gal->uri            = g_strdup("");
63 2e27e33c kulve
    data->gal->name           = g_strdup("");
64 2e27e33c kulve
    data->gal->desc           = g_strdup("");
65 407e5261 kulve
        data->gal->base_dir       = g_strdup(data->output_dir);
66 407e5261 kulve
        data->gal->dir_name       = g_strdup("pwgallery");
67 407e5261 kulve
        data->gal->output_dir     = g_strdup_printf("%s/%s", data->gal->base_dir,
68 407e5261 kulve
                                                data->gal->dir_name);
69 2e27e33c kulve
    data->gal->page_gen       = data->page_gen;
70 2e27e33c kulve
    data->gal->page_gen_prog  = g_strdup(data->page_gen_prog);
71 2e27e33c kulve
        data->gal->templ_index    = g_strdup(data->templ_index);
72 ec14b166 kulve
        data->gal->templ_indeximg = g_strdup(data->templ_indeximg);
73 2e27e33c kulve
        data->gal->templ_indexgen = g_strdup(data->templ_indexgen);
74 2e27e33c kulve
        data->gal->templ_image    = g_strdup(data->templ_image);
75 2e27e33c kulve
        data->gal->templ_gen      = g_strdup(data->templ_gen);
76 2e27e33c kulve
        data->gal->thumb_w        = data->thumb_w;
77 2e27e33c kulve
        data->gal->image_h        = data->image_h;
78 2e27e33c kulve
        data->gal->image_h2       = data->image_h2;
79 2e27e33c kulve
        data->gal->image_h3       = data->image_h3;
80 2e27e33c kulve
        data->gal->image_h4       = data->image_h4;
81 2e27e33c kulve
        data->gal->remove_exif    = data->remove_exif;
82 2e27e33c kulve
        data->gal->rename         = data->rename;
83 ec14b166 kulve
}
84 ec14b166 kulve
85 ec14b166 kulve
86 ec14b166 kulve
87 ec14b166 kulve
void
88 ec14b166 kulve
gallery_free(struct data *data)
89 ec14b166 kulve
{
90 ec14b166 kulve
        GSList *list;
91 ec14b166 kulve
        struct image *img;
92 ec14b166 kulve
93 ec14b166 kulve
        g_assert(data != NULL);
94 ec14b166 kulve
95 ec14b166 kulve
        if (data->gal == NULL)
96 ec14b166 kulve
                return;
97 ec14b166 kulve
98 537501a3 kulve
    g_debug("in gallery_free");
99 537501a3 kulve
100 ec14b166 kulve
        /* free images */
101 537501a3 kulve
    if (data->gal->images != NULL)
102 537501a3 kulve
    {
103 537501a3 kulve
        list = data->gal->images;
104 537501a3 kulve
        while (list) 
105 537501a3 kulve
        {
106 537501a3 kulve
            img = list->data;
107 537501a3 kulve
            image_free(img);
108 537501a3 kulve
            list->data = NULL;
109 537501a3 kulve
            list = list->next;
110 537501a3 kulve
        }
111 537501a3 kulve
        g_slist_free(data->gal->images);
112 537501a3 kulve
        data->gal->images = NULL;
113 537501a3 kulve
    }
114 ec14b166 kulve
115 ec14b166 kulve
        /* free other fields */
116 3372e100 kulve
        g_free(data->gal->uri);
117 537501a3 kulve
    data->gal->uri = NULL;
118 537501a3 kulve
119 2e27e33c kulve
        g_free(data->gal->name);
120 537501a3 kulve
    data->gal->name = NULL;
121 537501a3 kulve
122 2e27e33c kulve
        g_free(data->gal->desc);
123 537501a3 kulve
    data->gal->desc = NULL;
124 537501a3 kulve
125 ec14b166 kulve
        g_free(data->gal->output_dir);
126 537501a3 kulve
    data->gal->output_dir = NULL;
127 537501a3 kulve
128 407e5261 kulve
        g_free(data->gal->base_dir);
129 407e5261 kulve
    data->gal->base_dir = NULL;
130 407e5261 kulve
131 407e5261 kulve
        g_free(data->gal->dir_name);
132 407e5261 kulve
    data->gal->dir_name = NULL;
133 407e5261 kulve
134 2e27e33c kulve
        g_free(data->gal->page_gen_prog);
135 537501a3 kulve
    data->gal->page_gen_prog = NULL;
136 537501a3 kulve
137 ec14b166 kulve
        g_free(data->gal->templ_index);
138 537501a3 kulve
    data->gal->templ_index = NULL;
139 537501a3 kulve
140 ec14b166 kulve
        g_free(data->gal->templ_image);
141 537501a3 kulve
    data->gal->templ_image = NULL;
142 537501a3 kulve
143 2e27e33c kulve
        g_free(data->gal->templ_indeximg);
144 537501a3 kulve
    data->gal->templ_indeximg = NULL;
145 537501a3 kulve
146 2e27e33c kulve
        g_free(data->gal->templ_indexgen);
147 537501a3 kulve
    data->gal->templ_indexgen = NULL;
148 537501a3 kulve
149 2e27e33c kulve
        g_free(data->gal->templ_gen);
150 537501a3 kulve
    data->gal->templ_gen = NULL;
151 ec14b166 kulve
152 ec14b166 kulve
        g_free(data->gal);
153 ec14b166 kulve
        data->gal = NULL;
154 ec14b166 kulve
}
155 ec14b166 kulve
156 ec14b166 kulve
157 ec14b166 kulve
158 ec14b166 kulve
void
159 537501a3 kulve
gallery_new(struct data *data)
160 3372e100 kulve
{
161 537501a3 kulve
    int result;
162 537501a3 kulve
    GtkWidget *dialog, *label;
163 537501a3 kulve
164 3372e100 kulve
    g_assert(data != NULL );
165 3372e100 kulve
166 537501a3 kulve
    g_debug("in gallery_new");
167 537501a3 kulve
168 537501a3 kulve
    /* if gallery is modified, ask if it should be saved before
169 537501a3 kulve
     * creating a new one */
170 537501a3 kulve
    if (data->gal->edited == TRUE)
171 537501a3 kulve
    {
172 537501a3 kulve
        dialog = gtk_dialog_new_with_buttons(_("Save changes?"),
173 537501a3 kulve
                                             GTK_WINDOW(data->top_window),
174 537501a3 kulve
                                             GTK_DIALOG_MODAL | 
175 537501a3 kulve
                                             GTK_DIALOG_DESTROY_WITH_PARENT,
176 537501a3 kulve
                                             GTK_STOCK_CANCEL,
177 537501a3 kulve
                                             GTK_RESPONSE_CANCEL,
178 537501a3 kulve
                                             GTK_STOCK_NO,
179 537501a3 kulve
                                             GTK_RESPONSE_NO,
180 537501a3 kulve
                                             GTK_STOCK_YES,
181 537501a3 kulve
                                             GTK_RESPONSE_YES,
182 537501a3 kulve
                                             NULL);
183 537501a3 kulve
184 537501a3 kulve
185 537501a3 kulve
        label = gtk_label_new(_("Gallery has been modified.\n"
186 537501a3 kulve
                                "Save changes before creating "
187 537501a3 kulve
                                "the new gallery?"));
188 537501a3 kulve
   
189 537501a3 kulve
        gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),
190 537501a3 kulve
                           label);
191 537501a3 kulve
        gtk_widget_show(label);
192 537501a3 kulve
193 537501a3 kulve
        result = gtk_dialog_run(GTK_DIALOG(dialog));
194 537501a3 kulve
        gtk_widget_destroy (dialog);
195 537501a3 kulve
196 537501a3 kulve
        switch(result)
197 537501a3 kulve
        {
198 537501a3 kulve
        case GTK_RESPONSE_CANCEL:
199 537501a3 kulve
            return;
200 537501a3 kulve
        case GTK_RESPONSE_YES:
201 537501a3 kulve
            gallery_save(data);
202 537501a3 kulve
            break;
203 537501a3 kulve
        default: /* do nothing on NO response */
204 537501a3 kulve
            break;
205 537501a3 kulve
        }
206 537501a3 kulve
    }
207 537501a3 kulve
208 537501a3 kulve
    gallery_free(data);
209 537501a3 kulve
    gallery_init(data);
210 537501a3 kulve
}
211 537501a3 kulve
212 537501a3 kulve
213 537501a3 kulve
214 537501a3 kulve
void
215 537501a3 kulve
gallery_open(struct data *data)
216 537501a3 kulve
{
217 537501a3 kulve
    GtkWidget *dialog;
218 537501a3 kulve
    int result;
219 537501a3 kulve
    gchar *uri;
220 4dab7a7d kulve
    guchar *xml_content;
221 537501a3 kulve
    gsize xml_content_len;
222 537501a3 kulve
223 537501a3 kulve
    g_assert(data != NULL );
224 537501a3 kulve
225 537501a3 kulve
    g_debug("in gallery_open");
226 537501a3 kulve
227 537501a3 kulve
    /* if gallery is modified, ask if it should be saved before
228 537501a3 kulve
     * opening a different one */
229 537501a3 kulve
    if (data->gal->edited == TRUE)
230 537501a3 kulve
    {
231 537501a3 kulve
        GtkWidget *label;
232 537501a3 kulve
        dialog = gtk_dialog_new_with_buttons(_("Save changes?"),
233 537501a3 kulve
                                             GTK_WINDOW(data->top_window),
234 537501a3 kulve
                                             GTK_DIALOG_MODAL | 
235 537501a3 kulve
                                             GTK_DIALOG_DESTROY_WITH_PARENT,
236 537501a3 kulve
                                             GTK_STOCK_CANCEL,
237 537501a3 kulve
                                             GTK_RESPONSE_CANCEL,
238 537501a3 kulve
                                             GTK_STOCK_NO,
239 537501a3 kulve
                                             GTK_RESPONSE_NO,
240 537501a3 kulve
                                             GTK_STOCK_YES,
241 537501a3 kulve
                                             GTK_RESPONSE_YES,
242 537501a3 kulve
                                             NULL);
243 537501a3 kulve
244 537501a3 kulve
245 537501a3 kulve
        label = gtk_label_new(_("Gallery has been modified.\n"
246 537501a3 kulve
                                "Save changes before opening "
247 537501a3 kulve
                                "another gallery?"));
248 537501a3 kulve
   
249 537501a3 kulve
        gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),
250 537501a3 kulve
                           label);
251 537501a3 kulve
        gtk_widget_show(label);
252 537501a3 kulve
253 537501a3 kulve
        result = gtk_dialog_run(GTK_DIALOG(dialog));
254 537501a3 kulve
        gtk_widget_destroy (dialog);
255 537501a3 kulve
256 537501a3 kulve
        switch(result)
257 537501a3 kulve
        {
258 537501a3 kulve
        case GTK_RESPONSE_CANCEL:
259 537501a3 kulve
            return;
260 537501a3 kulve
        case GTK_RESPONSE_YES:
261 537501a3 kulve
            gallery_save(data);
262 537501a3 kulve
            break;
263 537501a3 kulve
        default: /* do nothing on no-response */
264 537501a3 kulve
            break;
265 537501a3 kulve
        }
266 537501a3 kulve
    }
267 537501a3 kulve
268 537501a3 kulve
    gallery_free(data);
269 537501a3 kulve
    gallery_init(data);
270 537501a3 kulve
271 537501a3 kulve
    dialog = gtk_file_chooser_dialog_new(_("Open Gallery"),
272 537501a3 kulve
                                         GTK_WINDOW(data->top_window),
273 537501a3 kulve
                                         GTK_FILE_CHOOSER_ACTION_OPEN,
274 537501a3 kulve
                                         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
275 537501a3 kulve
                                         GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
276 537501a3 kulve
                                         NULL);
277 537501a3 kulve
278 537501a3 kulve
    gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER(dialog), 
279 537501a3 kulve
                                            data->gal_dir);
280 537501a3 kulve
    gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE);
281 537501a3 kulve
282 537501a3 kulve
    /* cancel pressed, destroy the dialog and return */
283 10759e52 kulve
    if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_ACCEPT)
284 537501a3 kulve
    {
285 537501a3 kulve
        gtk_widget_destroy (dialog);
286 537501a3 kulve
        return;
287 537501a3 kulve
    }
288 537501a3 kulve
289 537501a3 kulve
    uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
290 537501a3 kulve
    g_assert(uri != NULL); /* FIXME: better error handling? */
291 537501a3 kulve
292 537501a3 kulve
    gtk_widget_destroy (dialog);
293 3372e100 kulve
294 3372e100 kulve
    g_free(data->gal->uri);
295 537501a3 kulve
    data->gal->uri = uri;
296 537501a3 kulve
297 537501a3 kulve
    /* read the gallery to memory */
298 537501a3 kulve
    vfs_read_file(data, data->gal->uri, &xml_content, &xml_content_len);
299 537501a3 kulve
300 537501a3 kulve
    /* create a new gallery structure based on xml file */
301 537501a3 kulve
    xml_gal_parse(data, xml_content, xml_content_len);
302 537501a3 kulve
    g_free(xml_content);
303 3372e100 kulve
304 7885d549 kulve
    /* update the image text etc shown in the main window */
305 7885d549 kulve
    widgets_set_image_information(data, data->current_img);
306 7885d549 kulve
307 3372e100 kulve
    /* no need to save an gallery that is just opened */
308 3372e100 kulve
        data->gal->edited = FALSE;
309 3372e100 kulve
310 3372e100 kulve
}
311 3372e100 kulve
312 3372e100 kulve
313 3372e100 kulve
314 3372e100 kulve
void
315 3372e100 kulve
gallery_save(struct data *data)
316 3372e100 kulve
{
317 4dab7a7d kulve
    guchar *xml_content;
318 537501a3 kulve
    gsize xml_content_size;
319 537501a3 kulve
320 3372e100 kulve
    g_assert(data != NULL );
321 3372e100 kulve
322 537501a3 kulve
    g_debug("in gallery_save");
323 537501a3 kulve
324 537501a3 kulve
    /* if uri not set yet, call "save as", and it will call this function
325 537501a3 kulve
     * again with the uri set.. */
326 537501a3 kulve
    if (strlen(data->gal->uri) == 0)
327 537501a3 kulve
    {
328 537501a3 kulve
        gallery_save_as(data);
329 537501a3 kulve
        return;
330 537501a3 kulve
    }
331 537501a3 kulve
332 537501a3 kulve
    xml_content = xml_gal_write(data, &xml_content_size);
333 537501a3 kulve
334 537501a3 kulve
    vfs_write_file(data, data->gal->uri, xml_content, xml_content_size);
335 3372e100 kulve
336 3372e100 kulve
    /* not edited anymore */
337 3372e100 kulve
    data->gal->edited = FALSE;
338 3372e100 kulve
}
339 3372e100 kulve
340 4dab7a7d kulve
341 4dab7a7d kulve
342 537501a3 kulve
void
343 537501a3 kulve
gallery_save_as(struct data *data)
344 537501a3 kulve
{
345 537501a3 kulve
    GtkWidget *dialog;
346 537501a3 kulve
    gchar *uri;
347 537501a3 kulve
348 537501a3 kulve
    g_assert(data != NULL );
349 537501a3 kulve
350 537501a3 kulve
    g_debug("in gallery_save_as");
351 537501a3 kulve
352 537501a3 kulve
    dialog = gtk_file_chooser_dialog_new(_("Save Gallery As"),
353 537501a3 kulve
                                         GTK_WINDOW(data->top_window),
354 537501a3 kulve
                                         GTK_FILE_CHOOSER_ACTION_SAVE,
355 537501a3 kulve
                                         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
356 537501a3 kulve
                                         GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
357 537501a3 kulve
                                         NULL);
358 537501a3 kulve
359 4dab7a7d kulve
    /* FIXME: gtk_file_chooser_set_do_overwrite_confirmation ()? */
360 537501a3 kulve
    gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER(dialog), 
361 537501a3 kulve
                                            data->gal_dir);
362 537501a3 kulve
    gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE);
363 537501a3 kulve
364 537501a3 kulve
    /* cancel, destroy dialog and return */
365 537501a3 kulve
    if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_CANCEL)
366 537501a3 kulve
    {
367 537501a3 kulve
        gtk_widget_destroy (dialog);
368 537501a3 kulve
        return;
369 537501a3 kulve
    }
370 537501a3 kulve
371 537501a3 kulve
    uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
372 537501a3 kulve
    g_assert(uri != NULL); /* CHECKME: better error handling? */
373 537501a3 kulve
374 537501a3 kulve
    gtk_widget_destroy (dialog);
375 537501a3 kulve
376 537501a3 kulve
    g_free(data->gal->uri);
377 537501a3 kulve
378 537501a3 kulve
379 537501a3 kulve
    /* add .xml if it is not written there by the user */
380 537501a3 kulve
    if (g_str_has_suffix(uri, ".xml") == FALSE)
381 537501a3 kulve
        data->gal->uri = g_strdup_printf("%s.xml", uri);
382 537501a3 kulve
    else
383 537501a3 kulve
        data->gal->uri = g_strdup(uri);
384 537501a3 kulve
385 537501a3 kulve
    g_free(uri);
386 537501a3 kulve
387 537501a3 kulve
    /* FIXME: check for existing file */
388 537501a3 kulve
389 537501a3 kulve
    /* now we have the new uri, save the gallery */
390 537501a3 kulve
    gallery_save(data);
391 537501a3 kulve
}
392 537501a3 kulve
393 3372e100 kulve
394 3372e100 kulve
395 3372e100 kulve
void
396 4dab7a7d kulve
gallery_make(struct data *data)
397 4dab7a7d kulve
{
398 4dab7a7d kulve
    GtkWidget *dialog;
399 4dab7a7d kulve
    gint result;
400 4dab7a7d kulve
401 4dab7a7d kulve
    g_assert(data != NULL );
402 4dab7a7d kulve
403 4dab7a7d kulve
    g_debug("in gallery_make");
404 4dab7a7d kulve
405 407e5261 kulve
    /* Make sure that dir_name is non-empty (to avoid e.g. trying to
406 407e5261 kulve
       rename file://tmp */
407 e04a97aa kulve
    if (data->gal->dir_name[0] == '\0') {
408 407e5261 kulve
        GtkWidget *label;
409 407e5261 kulve
        dialog = gtk_dialog_new_with_buttons(_("Specify directory name!"),
410 407e5261 kulve
                                             GTK_WINDOW(data->top_window),
411 407e5261 kulve
                                             GTK_DIALOG_MODAL | 
412 407e5261 kulve
                                             GTK_DIALOG_DESTROY_WITH_PARENT,
413 407e5261 kulve
                                             GTK_STOCK_OK,
414 407e5261 kulve
                                             GTK_RESPONSE_OK,
415 407e5261 kulve
                                             NULL);
416 407e5261 kulve
417 407e5261 kulve
418 407e5261 kulve
        label = gtk_label_new(_("You must specify directory name for the "
419 407e5261 kulve
                                "gallery.\n"
420 407e5261 kulve
                                "Check from menu: Gallery -> Settings.\n"));
421 407e5261 kulve
   
422 407e5261 kulve
        gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),
423 407e5261 kulve
                           label);
424 407e5261 kulve
        gtk_widget_show(label);
425 407e5261 kulve
426 407e5261 kulve
        result = gtk_dialog_run(GTK_DIALOG(dialog));
427 407e5261 kulve
        gtk_widget_destroy (dialog);
428 407e5261 kulve
        
429 407e5261 kulve
        return;
430 407e5261 kulve
    }
431 407e5261 kulve
432 4dab7a7d kulve
    /* if gallery is modified, ask if it should be saved before making
433 4dab7a7d kulve
     * it or cancel the making. */
434 e04a97aa kulve
    if (data->gal->edited == TRUE) {
435 4dab7a7d kulve
        GtkWidget *label;
436 4dab7a7d kulve
        dialog = gtk_dialog_new_with_buttons(_("Save changes?"),
437 4dab7a7d kulve
                                             GTK_WINDOW(data->top_window),
438 4dab7a7d kulve
                                             GTK_DIALOG_MODAL | 
439 4dab7a7d kulve
                                             GTK_DIALOG_DESTROY_WITH_PARENT,
440 4dab7a7d kulve
                                             GTK_STOCK_CANCEL,
441 4dab7a7d kulve
                                             GTK_RESPONSE_CANCEL,
442 4dab7a7d kulve
                                             GTK_STOCK_SAVE,
443 4dab7a7d kulve
                                             GTK_RESPONSE_YES,
444 4dab7a7d kulve
                                             NULL);
445 4dab7a7d kulve
446 4dab7a7d kulve
447 4dab7a7d kulve
        label = gtk_label_new(_("Gallery has been modified.\n"
448 4dab7a7d kulve
                                "Changes must be saved before continuing.\n"));
449 4dab7a7d kulve
   
450 4dab7a7d kulve
        gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),
451 4dab7a7d kulve
                           label);
452 4dab7a7d kulve
        gtk_widget_show(label);
453 4dab7a7d kulve
454 4dab7a7d kulve
        result = gtk_dialog_run(GTK_DIALOG(dialog));
455 4dab7a7d kulve
        gtk_widget_destroy (dialog);
456 4dab7a7d kulve
457 e04a97aa kulve
        switch(result) {
458 4dab7a7d kulve
        case GTK_RESPONSE_CANCEL:
459 4dab7a7d kulve
            return;
460 4dab7a7d kulve
        case GTK_RESPONSE_YES:
461 4dab7a7d kulve
            gallery_save(data);
462 4dab7a7d kulve
            break;
463 4dab7a7d kulve
        default: /* There are only cancel and yes responses.. */
464 4dab7a7d kulve
            g_assert(421 == 0);
465 4dab7a7d kulve
        }
466 4dab7a7d kulve
    }
467 4dab7a7d kulve
468 4dab7a7d kulve
    /* make top level directory for gallery */
469 4dab7a7d kulve
    if (vfs_is_dir(data, data->gal->output_dir) == TRUE) {
470 407e5261 kulve
        gchar *dir;
471 407e5261 kulve
        int i = 1;
472 407e5261 kulve
        do {
473 407e5261 kulve
            dir = g_strdup_printf("%s.%d", data->gal->output_dir, i);
474 407e5261 kulve
            if(vfs_is_dir(data, dir) == FALSE) {
475 407e5261 kulve
                break;
476 407e5261 kulve
            }
477 407e5261 kulve
            g_free(dir);
478 ec67725b kulve
            ++i;
479 407e5261 kulve
        } while(1);
480 407e5261 kulve
481 407e5261 kulve
        vfs_rename(data, data->gal->output_dir, dir);
482 407e5261 kulve
        g_free(dir);
483 4dab7a7d kulve
    }
484 407e5261 kulve
485 4dab7a7d kulve
    vfs_mkdir(data, data->gal->output_dir);
486 4dab7a7d kulve
487 e1cc9afb kulve
    widgets_set_progress(data, 0, _("Creating gallery"));
488 e1cc9afb kulve
489 4dab7a7d kulve
    /* make thumbnails */
490 de03cb65 kulve
    if (!_make_thumbnails(data)) {
491 e1cc9afb kulve
        widgets_set_progress(data, 0, _("Failed!"));
492 de03cb65 kulve
        return;
493 de03cb65 kulve
    }
494 4dab7a7d kulve
495 4dab7a7d kulve
    /* make webimages */
496 de03cb65 kulve
    if (!_make_webimages(data)) {
497 e1cc9afb kulve
        widgets_set_progress(data, 0, _("Failed!"));
498 de03cb65 kulve
        return;
499 de03cb65 kulve
    }
500 4dab7a7d kulve
501 4dab7a7d kulve
    /* make index page */
502 12d65073 kulve
    if (!html_make_index_page(data)) {
503 e1cc9afb kulve
        widgets_set_progress(data, 0, _("Failed!"));
504 12d65073 kulve
        return;
505 12d65073 kulve
    }
506 12d65073 kulve
507 4dab7a7d kulve
    /* make image pages */
508 12d65073 kulve
    if (!html_make_image_pages(data)) {
509 e1cc9afb kulve
        widgets_set_progress(data, 0, _("Failed!"));
510 12d65073 kulve
        return;
511 12d65073 kulve
    }
512 e1cc9afb kulve
513 e1cc9afb kulve
    widgets_set_progress(data, 0, _("Idle"));
514 4dab7a7d kulve
}
515 4dab7a7d kulve
516 4dab7a7d kulve
517 4dab7a7d kulve
518 4dab7a7d kulve
void
519 537501a3 kulve
gallery_add_new_images(struct data *data, GSList *uris)
520 ec14b166 kulve
{
521 ec14b166 kulve
        GtkWidget    *pbar;
522 ec14b166 kulve
        struct image *img;
523 ec14b166 kulve
        GSList       *first;
524 ec14b166 kulve
        gint         tot_files, file_counter;
525 ec14b166 kulve
        gchar        p_text[128];
526 ec14b166 kulve
527 ec14b166 kulve
        g_assert(data != NULL);
528 ec14b166 kulve
        g_assert(uris != NULL);
529 ec14b166 kulve
530 7885d549 kulve
    g_debug("in gallery_add_new_images");
531 7885d549 kulve
532 ec14b166 kulve
        first = uris;
533 537501a3 kulve
        tot_files = g_slist_length(uris); /* number of images to add */
534 ec14b166 kulve
        file_counter = 0;
535 ec14b166 kulve
        
536 ec14b166 kulve
        pbar = glade_xml_get_widget( data->glade, "progressbar_status");
537 ec14b166 kulve
        g_assert(pbar != NULL);
538 ec14b166 kulve
539 537501a3 kulve
        widgets_set_status(data, _("Adding images"));
540 ec14b166 kulve
541 537501a3 kulve
        /* Add images */
542 e04a97aa kulve
        while (uris) {
543 ec14b166 kulve
                img = image_open(data, uris->data);
544 e04a97aa kulve
                if (img != NULL) {
545 ec14b166 kulve
                        /* update progress */
546 ec14b166 kulve
                        g_snprintf(p_text, 128, "%d/%d", file_counter++, tot_files);
547 ec14b166 kulve
                        widgets_set_progress(data, (gfloat)file_counter/(gfloat)tot_files,
548 ec14b166 kulve
                                                                 p_text);
549 ec14b166 kulve
                        data->gal->images = g_slist_append(data->gal->images, img);
550 1ecb1bbe kulve
                        
551 ec14b166 kulve
                        gtk_widget_show( img->image );
552 ec14b166 kulve
                        gtk_widget_show( img->button );
553 ec14b166 kulve
                }
554 ec14b166 kulve
                uris = uris->next;
555 ec14b166 kulve
        }
556 e04a97aa kulve
    
557 ec14b166 kulve
        g_slist_free(first);
558 ec14b166 kulve
559 7885d549 kulve
    /* select first image, if there was no images before this addition */
560 06e878bb kulve
    if (data->current_img == NULL) {
561 06e878bb kulve
        if (data->gal->images != NULL) {
562 06e878bb kulve
            data->current_img = (struct image *)(data->gal->images->data);
563 b9296615 kulve
            /* update the image text etc shown in the main window */
564 b9296615 kulve
            widgets_set_image_information(data, data->current_img);
565 06e878bb kulve
        } else {
566 06e878bb kulve
            /* nothing to do, still no images */
567 06e878bb kulve
            return ;
568 06e878bb kulve
        }
569 06e878bb kulve
    }
570 7885d549 kulve
571 7885d549 kulve
    widgets_update_table(data);
572 537501a3 kulve
    
573 537501a3 kulve
    /* total files now in the gallery */
574 537501a3 kulve
        tot_files = g_slist_length(data->gal->images);
575 ec14b166 kulve
576 ec14b166 kulve
        /* set progress and status */
577 ec14b166 kulve
        widgets_set_progress(data, 0, _("Idle"));
578 537501a3 kulve
        g_snprintf(p_text, 128, "%d %s", tot_files, 
579 537501a3 kulve
               tot_files == 1 ? _("Image") : _("Images"));
580 ec14b166 kulve
        widgets_set_status(data, p_text);
581 3372e100 kulve
582 3372e100 kulve
    /* gallery edited */
583 3372e100 kulve
    data->gal->edited = TRUE;
584 3372e100 kulve
585 ec14b166 kulve
}
586 ec14b166 kulve
587 ec14b166 kulve
588 537501a3 kulve
589 537501a3 kulve
void
590 537501a3 kulve
gallery_open_images(struct data *data, GSList *imgs)
591 537501a3 kulve
{
592 537501a3 kulve
        GtkWidget    *pbar;
593 537501a3 kulve
        struct image *img, *tmpimg;
594 537501a3 kulve
        GSList       *first;
595 537501a3 kulve
        gint         tot_files, file_counter;
596 537501a3 kulve
        gchar        p_text[128];
597 537501a3 kulve
598 537501a3 kulve
        g_assert(data != NULL);
599 7885d549 kulve
    /* imgs can be null */
600 7885d549 kulve
601 7885d549 kulve
    g_debug("in gallery_open_images");
602 537501a3 kulve
603 537501a3 kulve
        first = imgs;
604 537501a3 kulve
        tot_files = g_slist_length(imgs); /* number of images to open */
605 537501a3 kulve
        file_counter = 0;
606 537501a3 kulve
        
607 537501a3 kulve
        pbar = glade_xml_get_widget( data->glade, "progressbar_status");
608 537501a3 kulve
        g_assert(pbar != NULL);
609 537501a3 kulve
610 537501a3 kulve
        widgets_set_status(data, _("Opening images"));
611 537501a3 kulve
612 537501a3 kulve
        /* Open images */
613 537501a3 kulve
        while (imgs)
614 537501a3 kulve
        {
615 537501a3 kulve
        tmpimg = imgs->data;
616 7885d549 kulve
                img = image_open(data, g_strdup(tmpimg->uri));
617 537501a3 kulve
                if (img != NULL)
618 537501a3 kulve
                {
619 537501a3 kulve
                        /* update progress */
620 537501a3 kulve
                        g_snprintf(p_text, 128, "%d/%d", file_counter++, tot_files);
621 537501a3 kulve
                        widgets_set_progress(data, (gfloat)file_counter/(gfloat)tot_files,
622 537501a3 kulve
                                                                 p_text);
623 537501a3 kulve
                        data->gal->images = g_slist_append(data->gal->images, img);
624 537501a3 kulve
625 537501a3 kulve
                        gtk_widget_show( img->image );
626 537501a3 kulve
                        gtk_widget_show( img->button );
627 537501a3 kulve
628 537501a3 kulve
            /* set image values from */
629 537501a3 kulve
            g_free(img->text);
630 537501a3 kulve
            img->text     = g_strdup(tmpimg->text);
631 537501a3 kulve
            img->gamma    = tmpimg->gamma;
632 537501a3 kulve
            img->rotate   = tmpimg->rotate;
633 537501a3 kulve
            img->nomodify = tmpimg->nomodify;
634 537501a3 kulve
            
635 537501a3 kulve
                }
636 7885d549 kulve
        image_free(tmpimg);
637 537501a3 kulve
                imgs = imgs->next;
638 537501a3 kulve
        }
639 537501a3 kulve
640 537501a3 kulve
        g_slist_free(first);
641 537501a3 kulve
642 7885d549 kulve
    /* select first image of the gallery */
643 7885d549 kulve
    data->current_img = (struct image *)(data->gal->images->data);
644 7885d549 kulve
645 537501a3 kulve
        widgets_update_table(data);
646 537501a3 kulve
    
647 537501a3 kulve
    /* total files now in the gallery */
648 537501a3 kulve
        tot_files = g_slist_length(data->gal->images);
649 537501a3 kulve
650 537501a3 kulve
        /* set progress and status */
651 537501a3 kulve
        widgets_set_progress(data, 0, _("Idle"));
652 537501a3 kulve
        g_snprintf(p_text, 128, "%d %s", tot_files, 
653 537501a3 kulve
               tot_files == 1 ? _("Image") : _("Images"));
654 537501a3 kulve
        widgets_set_status(data, p_text);
655 537501a3 kulve
656 537501a3 kulve
    /* data->gal->edited is set in gallery_open() */
657 537501a3 kulve
}
658 537501a3 kulve
659 537501a3 kulve
660 537501a3 kulve
661 7885d549 kulve
void
662 7885d549 kulve
gallery_remove_image(struct data *data, struct image *img)
663 7885d549 kulve
{
664 7885d549 kulve
    gint current_no;
665 7885d549 kulve
    gint tot_files;
666 7885d549 kulve
         gchar p_text[128];
667 7885d549 kulve
    GSList *tmplist;
668 7885d549 kulve
669 7885d549 kulve
        g_assert(data != NULL);
670 7885d549 kulve
        g_assert(img != NULL);
671 7885d549 kulve
672 7885d549 kulve
    g_debug("in gallery_remove_image");
673 7885d549 kulve
674 7885d549 kulve
    /* get the index number of the currently selected image */
675 7885d549 kulve
    current_no = g_slist_index(data->gal->images, img);
676 7885d549 kulve
    g_assert(current_no > -1);
677 7885d549 kulve
678 7885d549 kulve
    /* free image and remove it from the list */
679 7885d549 kulve
    data->gal->images = g_slist_remove(data->gal->images, img);
680 7885d549 kulve
    image_free(img);
681 7885d549 kulve
682 7885d549 kulve
    /* set currently selected image to the next one of the deleted image */
683 7885d549 kulve
    tmplist = g_slist_nth(data->gal->images, current_no);
684 7885d549 kulve
685 7885d549 kulve
    /* select the last image if deleted one was the last one */
686 7885d549 kulve
    if (tmplist != NULL)
687 7885d549 kulve
    {
688 7885d549 kulve
        data->current_img = tmplist->data;
689 7885d549 kulve
    }
690 7885d549 kulve
    else
691 7885d549 kulve
    {
692 7885d549 kulve
        tmplist = g_slist_last(data->gal->images);
693 7885d549 kulve
        if (tmplist != NULL)
694 7885d549 kulve
            data->current_img = tmplist->data;
695 7885d549 kulve
        else
696 7885d549 kulve
            data->current_img = NULL;
697 7885d549 kulve
    }
698 7885d549 kulve
699 7885d549 kulve
    /* update the thumbnail list */
700 7885d549 kulve
        widgets_update_table(data);
701 7885d549 kulve
702 7885d549 kulve
   /* total files now in the gallery */
703 7885d549 kulve
        tot_files = g_slist_length(data->gal->images);
704 7885d549 kulve
705 7885d549 kulve
    /* update the image text etc shown in the main window */
706 7885d549 kulve
    widgets_set_image_information(data, data->current_img);
707 7885d549 kulve
708 7885d549 kulve
        /* set progress and status */
709 7885d549 kulve
        g_snprintf(p_text, 128, "%d %s", tot_files, 
710 7885d549 kulve
               tot_files == 1 ? _("Image") : _("Images"));
711 7885d549 kulve
        widgets_set_status(data, p_text);
712 7885d549 kulve
713 7885d549 kulve
    data->gal->edited = TRUE;
714 7885d549 kulve
}
715 7885d549 kulve
716 7885d549 kulve
717 7885d549 kulve
718 7885d549 kulve
gboolean
719 7885d549 kulve
gallery_image_selected(GtkWidget *widget,
720 7885d549 kulve
                       GdkEventButton *event,
721 7885d549 kulve
                       gpointer user_data)
722 7885d549 kulve
{
723 7885d549 kulve
    GSList *imgs;
724 7885d549 kulve
    struct data *data;
725 7885d549 kulve
    struct image *img = NULL;
726 7885d549 kulve
727 7885d549 kulve
        g_assert(widget != NULL);
728 7885d549 kulve
        g_assert(event != NULL);
729 7885d549 kulve
        g_assert(user_data != NULL);
730 7885d549 kulve
731 7885d549 kulve
    g_debug("in gallery_image_selected");
732 7885d549 kulve
733 7885d549 kulve
    data = user_data;
734 7885d549 kulve
735 1ecb1bbe kulve
    /* on doubleclick we already have set everything on first
736 1ecb1bbe kulve
     * click. Now just show the web image */
737 1ecb1bbe kulve
    if (event->type == GDK_2BUTTON_PRESS)
738 1ecb1bbe kulve
    {
739 1ecb1bbe kulve
        widgets_set_status(data, "Showing preview..");        
740 1ecb1bbe kulve
        magick_show_preview(data, data->current_img,  data->gal->image_h);
741 1ecb1bbe kulve
        widgets_set_status(data, "Idle");
742 1ecb1bbe kulve
        return FALSE;
743 1ecb1bbe kulve
    }
744 1ecb1bbe kulve
745 7885d549 kulve
    /* Find out which button was pressed by going through all image
746 7885d549 kulve
     * buttons and matching pointer address.
747 7885d549 kulve
     * CHECKME: This should be probably implemented in some more sane way 
748 7885d549 kulve
     */
749 7885d549 kulve
    imgs = data->gal->images;
750 7885d549 kulve
    while (imgs)
751 7885d549 kulve
    {
752 7885d549 kulve
        img = imgs->data;
753 7885d549 kulve
        if ((GtkWidget*)(img->button) == widget)
754 7885d549 kulve
            break;
755 7885d549 kulve
        imgs = imgs->next;
756 7885d549 kulve
    }
757 7885d549 kulve
758 7885d549 kulve
    /* the image must be found since it was clicked.. */
759 7885d549 kulve
    g_assert(img != NULL);
760 7885d549 kulve
761 7885d549 kulve
    /* save previously selected image's (if any) text */
762 7885d549 kulve
    gallery_image_save_text(data);
763 7885d549 kulve
764 7885d549 kulve
    data->current_img = img;
765 7885d549 kulve
    
766 7885d549 kulve
    /* update the image text etc shown in the main window */
767 7885d549 kulve
    widgets_set_image_information(data, data->current_img);
768 7885d549 kulve
769 7885d549 kulve
    return FALSE; /* let others handle the click too */
770 7885d549 kulve
}
771 7885d549 kulve
772 7885d549 kulve
773 7885d549 kulve
774 7885d549 kulve
void
775 7885d549 kulve
gallery_image_save_text(struct data *data)
776 7885d549 kulve
{
777 7885d549 kulve
    gchar *new_text;
778 7885d549 kulve
    g_assert(data != NULL);
779 7885d549 kulve
780 7885d549 kulve
    g_debug("in gallery_image_save_text");
781 7885d549 kulve
782 7885d549 kulve
    /* nothing to save if no images */
783 7885d549 kulve
    if (data->current_img == NULL)
784 7885d549 kulve
        return;
785 7885d549 kulve
786 7885d549 kulve
    new_text = widgets_image_get_text(data);
787 7885d549 kulve
788 7885d549 kulve
    /* if the text is not changed */
789 7885d549 kulve
    if (strcmp(new_text, data->current_img->text) == 0)
790 7885d549 kulve
    {
791 7885d549 kulve
        g_free(new_text);
792 7885d549 kulve
        return;
793 7885d549 kulve
    }
794 7885d549 kulve
795 7885d549 kulve
    /* replace old text with the new one and mark gallery as edited */
796 7885d549 kulve
    g_free(data->current_img->text);
797 7885d549 kulve
    data->current_img->text = new_text;
798 7885d549 kulve
    data->gal->edited = TRUE;
799 7885d549 kulve
}
800 7885d549 kulve
801 4dab7a7d kulve
802 4dab7a7d kulve
/*
803 4dab7a7d kulve
 *
804 4dab7a7d kulve
 * Static functions
805 4dab7a7d kulve
 *
806 4dab7a7d kulve
 */
807 4dab7a7d kulve
808 4dab7a7d kulve
/*
809 de03cb65 kulve
 * Make thumbnails for the gallery.
810 4dab7a7d kulve
 */
811 4dab7a7d kulve
static gboolean
812 4dab7a7d kulve
_make_thumbnails(struct data *data)
813 4dab7a7d kulve
{
814 4dab7a7d kulve
    gchar       *dir_uri;
815 4dab7a7d kulve
    GSList      *images;  
816 e1cc9afb kulve
    gint        tot, i;
817 4dab7a7d kulve
818 4dab7a7d kulve
    g_assert(data != NULL);
819 4dab7a7d kulve
820 4dab7a7d kulve
    g_debug("in _make_thumbnails");
821 4dab7a7d kulve
822 e1cc9afb kulve
    tot = g_slist_length(data->gal->images);
823 e1cc9afb kulve
    i = 0;
824 e1cc9afb kulve
825 4dab7a7d kulve
    /* make the thumbnail directory */
826 4dab7a7d kulve
    dir_uri = g_strdup_printf("%s/thumbnails", data->gal->output_dir);
827 4dab7a7d kulve
    vfs_mkdir(data, dir_uri);
828 4dab7a7d kulve
829 4dab7a7d kulve
    /* make the thumbnails for all images in gallery */
830 4dab7a7d kulve
    images = data->gal->images;
831 4dab7a7d kulve
    while(images != NULL) {
832 12d65073 kulve
        gchar *thumb_uri;
833 4dab7a7d kulve
        struct image *image = images->data;
834 e1cc9afb kulve
        gfloat frac;
835 e1cc9afb kulve
        gchar progress[256];
836 4dab7a7d kulve
837 e04a97aa kulve
        thumb_uri = g_strdup_printf("%s/%s.%s", dir_uri, 
838 e04a97aa kulve
                                    image->basefilename, image->ext);
839 4dab7a7d kulve
        
840 4dab7a7d kulve
        /* make the thumbnail and save it to a file */
841 4dab7a7d kulve
        if (magick_make_thumbnail(data, image, thumb_uri) == FALSE) {
842 4dab7a7d kulve
            g_free(thumb_uri);
843 de03cb65 kulve
            g_free(dir_uri);
844 4dab7a7d kulve
            return FALSE;
845 4dab7a7d kulve
        }
846 4dab7a7d kulve
        g_free(thumb_uri);
847 4dab7a7d kulve
848 4dab7a7d kulve
        images = images->next;
849 e1cc9afb kulve
        /* update status */
850 e1cc9afb kulve
        ++i;
851 e1cc9afb kulve
        snprintf(progress, 256, "%s: %d/%d", _("Creating thumbnails"), i, tot);
852 e1cc9afb kulve
        frac = (gfloat)i/(gfloat)tot;
853 e1cc9afb kulve
        g_debug("frac: %f", frac);
854 e1cc9afb kulve
        widgets_set_progress(data, frac, progress);
855 4dab7a7d kulve
    }
856 de03cb65 kulve
    g_free(dir_uri);
857 4dab7a7d kulve
858 4dab7a7d kulve
    return TRUE;
859 4dab7a7d kulve
}
860 4dab7a7d kulve
861 4dab7a7d kulve
862 4dab7a7d kulve
863 de03cb65 kulve
/*
864 de03cb65 kulve
 * Make webimages for the gallery.
865 de03cb65 kulve
 */
866 de03cb65 kulve
static gboolean
867 de03cb65 kulve
_make_webimages(struct data *data)
868 de03cb65 kulve
{
869 de03cb65 kulve
    gint image_index = 0;
870 e1cc9afb kulve
    gint tot, i;
871 de03cb65 kulve
872 de03cb65 kulve
    g_assert(data != NULL);
873 de03cb65 kulve
874 de03cb65 kulve
    g_debug("in _make_webimages");
875 de03cb65 kulve
876 e1cc9afb kulve
    tot = g_slist_length(data->gal->images);
877 e1cc9afb kulve
878 de03cb65 kulve
    /* go through all sizes */
879 de03cb65 kulve
    while(++image_index < 5) {
880 de03cb65 kulve
        gchar       *dir_uri;
881 e04a97aa kulve
        GSList      *images;
882 de03cb65 kulve
        gint        image_h = -1;
883 de03cb65 kulve
884 e1cc9afb kulve
        i = 0; /* zero image counter */
885 e1cc9afb kulve
886 de03cb65 kulve
        /* FIXME: ugly. Sizes should be in a list */
887 de03cb65 kulve
        switch(image_index) {
888 de03cb65 kulve
        case 1:
889 de03cb65 kulve
            image_h = data->gal->image_h;
890 de03cb65 kulve
            break;
891 de03cb65 kulve
        case 2:
892 de03cb65 kulve
            image_h = data->gal->image_h2;
893 de03cb65 kulve
            break;
894 de03cb65 kulve
        case 3:
895 de03cb65 kulve
            image_h = data->gal->image_h3;
896 de03cb65 kulve
            break;
897 de03cb65 kulve
        case 4:
898 de03cb65 kulve
            image_h = data->gal->image_h4;
899 de03cb65 kulve
            break;
900 de03cb65 kulve
        default: 
901 de03cb65 kulve
            /* we shouldn't be here */
902 e04a97aa kulve
            g_error("_make_webimages: Too many image sizes");
903 de03cb65 kulve
        }
904 de03cb65 kulve
        
905 de03cb65 kulve
        /* make only images with specified size */
906 de03cb65 kulve
        if (image_h == 0) {
907 de03cb65 kulve
            continue;
908 de03cb65 kulve
        }
909 e04a97aa kulve
910 de03cb65 kulve
        /* make the webimage directory */
911 de03cb65 kulve
        if (image_index == 1) {
912 de03cb65 kulve
            /* default size images to "images" dir for backward compability */
913 de03cb65 kulve
            dir_uri = g_strdup_printf("%s/images", data->gal->output_dir);
914 de03cb65 kulve
        } else {
915 de03cb65 kulve
            dir_uri = g_strdup_printf("%s/images_%d", 
916 de03cb65 kulve
                                      data->gal->output_dir, image_h);
917 de03cb65 kulve
        }
918 de03cb65 kulve
        vfs_mkdir(data, dir_uri);
919 de03cb65 kulve
920 de03cb65 kulve
        /* make the webimages for all images in gallery */
921 de03cb65 kulve
        images = data->gal->images;
922 de03cb65 kulve
        while(images != NULL) {
923 e1cc9afb kulve
924 e04a97aa kulve
            gchar *img_uri;
925 de03cb65 kulve
            struct image *image = images->data;
926 e1cc9afb kulve
            gfloat frac;
927 e1cc9afb kulve
            gchar progress[256];
928 de03cb65 kulve
            
929 e04a97aa kulve
            img_uri = g_strdup_printf("%s/%s.%s", dir_uri, image->basefilename, 
930 e04a97aa kulve
                                      image->ext);
931 de03cb65 kulve
            
932 de03cb65 kulve
            /* make the webimage and save it to a file */
933 de03cb65 kulve
            if (magick_make_webimage(data, image, img_uri, image_h) == FALSE) {
934 de03cb65 kulve
                g_free(img_uri);
935 de03cb65 kulve
                g_free(dir_uri);
936 de03cb65 kulve
                return FALSE;
937 de03cb65 kulve
            }
938 de03cb65 kulve
            g_free(img_uri);
939 de03cb65 kulve
            
940 de03cb65 kulve
            images = images->next;
941 e1cc9afb kulve
942 e1cc9afb kulve
            /* update status */
943 e1cc9afb kulve
            ++i;
944 e1cc9afb kulve
            snprintf(progress, 256, "%s %d: %d/%d", 
945 e1cc9afb kulve
                     _("Creating images"), image_h, i, tot);
946 e1cc9afb kulve
            frac = (gfloat)i/(gfloat)tot;
947 e1cc9afb kulve
            g_debug("frac: %f", frac);
948 e1cc9afb kulve
            widgets_set_progress(data, frac, progress);
949 de03cb65 kulve
        }
950 de03cb65 kulve
        g_free(dir_uri);
951 de03cb65 kulve
    }
952 de03cb65 kulve
    return TRUE;
953 de03cb65 kulve
}
954 de03cb65 kulve
955 de03cb65 kulve
956 12d65073 kulve
957 ec14b166 kulve
/* Emacs indentatation information
958 ec14b166 kulve
   Local Variables:
959 ec14b166 kulve
   indent-tabs-mode:nil
960 ec14b166 kulve
   tab-width:4
961 ec14b166 kulve
   c-set-offset:4
962 ec14b166 kulve
   c-basic-offset:4
963 ec14b166 kulve
   End: 
964 ec14b166 kulve
*/