Statistics
| Branch: | Revision:

root / src / widgets.c @ 1bdb24b436d4969598d148e467569ec0819f0487

History | View | Annotate | Download (29.5 kB)

1
/*
2
 * Copyright (C) 2006 Tuomas Kulve <tuomas@kulve.fi>
3
 *
4
 * This program is free software; you can redistribute it and/or modify
5
 * it under the terms of the GNU General Public License as published by
6
 * the Free Software Foundation; either version 2, or (at your option)
7
 * any later version.
8
 *
9
 * This program is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 * GNU General Public License for more details.
13
 * 
14
 * You should have received a copy of the GNU General Public License
15
 * along with this program; if not, write to the Free Software
16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
17
 * USA.
18
 */
19
20
#ifdef HAVE_CONFIG_H
21
#  include <config.h>
22
#endif
23
24
#include "main.h"
25
#include "widgets.h"
26
#include "configrc.h"
27
28
#include <glib.h>
29
#include <gtk/gtk.h>
30
#include <string.h>     /* memset */
31
32
void
33
widgets_update_table(struct data *data) 
34
{
35
    gint             listlen, current_no;
36
    gint             i;
37
    GSList           *list;
38
        GtkWidget        *table;
39
    GtkWidget        *scrolledwindow;
40
    GtkAdjustment    *adjust;
41
    GValue           value;
42
    gdouble          t;
43
44
    if (!data->use_gui) {
45
        return;
46
    }
47
48
    memset(&value, 0, sizeof(value));
49
50
    g_assert(data);
51
    
52
    table = glade_xml_get_widget( data->glade, "table_thumb");
53
        g_assert(table != NULL);
54
55
    listlen = g_slist_length(data->gal->images);
56
57
    if (data->current_img != NULL)
58
        current_no = g_slist_index(data->gal->images, data->current_img);
59
    else
60
        current_no = 0;
61
62
    g_debug("in widgets_update_table, listlen: %d, current: %d",
63
            listlen, current_no);
64
65
    if (listlen == 0)
66
        return; /* nothing to todo */
67
68
    gtk_widget_hide(GTK_WIDGET(table));
69
    gtk_table_resize(GTK_TABLE(table), listlen, 1);
70
71
    list = data->gal->images;
72
73
    for( i = 0; i < listlen; ++i )
74
    {
75
        struct image *img;
76
77
        img = list->data;
78
        
79
        /* FIXME: what if the current position is used already? */
80
        /* remove button from gtktable before adding it again */
81
        if( gtk_widget_get_parent(img->button) != NULL)
82
            gtk_container_remove(GTK_CONTAINER(table), img->button);
83
        
84
        gtk_table_attach_defaults(GTK_TABLE(table), img->button,
85
                                  0, 1, i, i + 1);
86
        
87
        list = list->next;
88
    }
89
    /* get adjustment */
90
    scrolledwindow = 
91
        glade_xml_get_widget( data->glade, "scrolledwindow_thumbnails");
92
        g_assert(scrolledwindow != NULL);
93
    
94
    adjust = gtk_scrolled_window_get_vadjustment(
95
        GTK_SCROLLED_WINDOW(scrolledwindow));
96
    g_assert(adjust);
97
98
99
    /* scroll where we should be */
100
    {
101
        gint x;
102
        gint y;
103
        gint width;
104
        gint height;
105
        gint depth;
106
        
107
        t =
108
            (gdouble)((current_no) / (gdouble)listlen) * 
109
            ((adjust->upper - adjust->page_size ) - adjust->lower);
110
    
111
        
112
        struct image *img =
113
            g_slist_nth_data(data->gal->images, current_no);
114
        
115
        gdk_window_get_geometry(GDK_WINDOW(GTK_WIDGET(img->button)->window),
116
                                &x,
117
                                &y,
118
                                &width,
119
                                &height,
120
                                &depth);
121
        
122
    
123
        /* scroll thumbnails according to selected image */    
124
        g_debug("in widgets_update_table: t: %.2f, wx: %d, %.2f, %.2f,%.2f",
125
                t, 
126
                -1 * y,
127
                adjust->lower, adjust->upper, adjust->page_size);
128
129
        gtk_adjustment_set_value(adjust, (gdouble)(-1 * y));
130
131
    }
132
    gtk_widget_show(table);
133
}
134
135
136
137
void
138
widgets_set_progress(struct data *data, gfloat fraction, const gchar *text)
139
{
140
    /* FIXME: to use static or to not to use? */
141
        static GtkWidget *pbar = NULL;
142
143
        g_assert(data != NULL);
144
        g_assert(text != NULL);
145
146
    if (!data->use_gui) {
147
        return;
148
    }
149
150
        if (pbar == NULL)
151
                pbar = glade_xml_get_widget( data->glade, "progressbar_status");
152
        g_assert(pbar != NULL);
153
154
        gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pbar), fraction);
155
        gtk_progress_bar_set_text(GTK_PROGRESS_BAR(pbar), text);
156
    while (g_main_context_iteration(NULL, FALSE));
157
}
158
159
160
161
void
162
widgets_set_status(struct data *data, const gchar *text)
163
{
164
    /* FIXME: to use static or to not to use? */
165
        static GtkWidget *label = NULL;
166
167
        g_assert(data != NULL);
168
        g_assert(text != NULL);
169
170
    if (!data->use_gui) {
171
        return;
172
    }
173
174
        if (label == NULL)
175
                label = glade_xml_get_widget( data->glade, "label_pwg_status");
176
        g_assert(label != NULL);
177
178
        gtk_label_set_text(GTK_LABEL(label), text);
179
    while (g_main_context_iteration(NULL, FALSE));
180
}
181
182
183
184
gchar *
185
widgets_image_get_text(struct data *data)
186
{
187
    GtkWidget     *textview;
188
    GtkTextBuffer *buffer;
189
    GtkTextIter   end_iter;
190
    GtkTextIter   start_iter;
191
    gchar         *text;
192
193
    g_assert(data != NULL);
194
    g_assert(data->current_img != NULL);
195
196
    textview = glade_xml_get_widget(data->glade, "textview_image_desc");
197
    g_assert(textview);
198
199
    buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
200
    g_assert(buffer);
201
202
    gtk_text_buffer_get_end_iter(buffer, &end_iter);
203
    gtk_text_buffer_get_start_iter(buffer, &start_iter);
204
    text = gtk_text_buffer_get_text(buffer, &end_iter, &start_iter, TRUE);
205
    
206
    return text;
207
}
208
209
210
211
void
212
widgets_prefs_show(struct data *data)
213
{
214
        GtkWidget *dialog = NULL;
215
    GtkWidget *filechooserbutton_pref_img_dir = NULL;
216
    GtkWidget *filechooserbutton_pref_output_dir = NULL;
217
    GtkWidget *filechooserbutton_pref_gal_dir = NULL;
218
    GtkWidget *radiobutton_pref_gen_templ = NULL;
219
    GtkWidget *radiobutton_pref_gen_prog = NULL;
220
    GtkWidget *filechooserbutton_pref_page_gen_prog = NULL;
221
    GtkWidget *filechooserbutton_pref_templ_dir = NULL;
222
    GtkWidget *filechooserbutton_pref_templ_index = NULL;
223
    GtkWidget *filechooserbutton_pref_templ_indeximg = NULL;
224
    GtkWidget *filechooserbutton_pref_templ_indexgen = NULL;
225
    GtkWidget *filechooserbutton_pref_templ_image = NULL;
226
    GtkWidget *filechooserbutton_pref_templ_gen = NULL;
227
    GtkWidget *spinbutton_pref_thumb_w = NULL;
228
    GtkWidget *spinbutton_pref_image_h = NULL;
229
    GtkWidget *spinbutton_pref_image_h2 = NULL;
230
    GtkWidget *spinbutton_pref_image_h3 = NULL;
231
    GtkWidget *spinbutton_pref_image_h4 = NULL;
232
    GtkWidget *togglebutton_pref_hideexif = NULL;
233
    GtkWidget *togglebutton_pref_rename = NULL;
234
    gint result;
235
236
        g_assert(data != NULL);
237
238
    /* Get widgets */
239
    dialog = glade_xml_get_widget( data->glade, "dialog_pref");
240
    filechooserbutton_pref_img_dir = 
241
        glade_xml_get_widget(data->glade, "filechooserbutton_pref_img_dir");
242
    filechooserbutton_pref_output_dir = 
243
        glade_xml_get_widget(data->glade, "filechooserbutton_pref_output_dir");
244
    filechooserbutton_pref_gal_dir = 
245
        glade_xml_get_widget(data->glade,
246
                             "filechooserbutton_pref_gal_dir");
247
    filechooserbutton_pref_templ_dir =
248
        glade_xml_get_widget(data->glade,
249
                             "filechooserbutton_pref_templ_dir");
250
    filechooserbutton_pref_templ_image =
251
        glade_xml_get_widget(data->glade,
252
                             "filechooserbutton_pref_templ_image");
253
    filechooserbutton_pref_templ_indeximg = 
254
        glade_xml_get_widget(data->glade,
255
                             "filechooserbutton_pref_templ_indeximg");
256
    filechooserbutton_pref_templ_indexgen = 
257
        glade_xml_get_widget(data->glade,
258
                             "filechooserbutton_pref_templ_indexgen");
259
    filechooserbutton_pref_templ_index =
260
        glade_xml_get_widget(data->glade,
261
                             "filechooserbutton_pref_templ_index");
262
    filechooserbutton_pref_templ_gen =
263
        glade_xml_get_widget(data->glade,
264
                             "filechooserbutton_pref_templ_gen");
265
    filechooserbutton_pref_page_gen_prog =
266
        glade_xml_get_widget(data->glade,
267
                             "filechooserbutton_pref_page_gen_prog");
268
    spinbutton_pref_thumb_w = 
269
        glade_xml_get_widget(data->glade, "spinbutton_pref_thumb_w");
270
    spinbutton_pref_image_h = 
271
        glade_xml_get_widget(data->glade, "spinbutton_pref_image_h");
272
    spinbutton_pref_image_h2 = 
273
        glade_xml_get_widget(data->glade, "spinbutton_pref_image_h2");
274
    spinbutton_pref_image_h3 = 
275
        glade_xml_get_widget(data->glade, "spinbutton_pref_image_h3");
276
    spinbutton_pref_image_h4 = 
277
        glade_xml_get_widget(data->glade, "spinbutton_pref_image_h4");
278
    radiobutton_pref_gen_templ = 
279
        glade_xml_get_widget(data->glade, "radiobutton_pref_gen_templ");
280
    radiobutton_pref_gen_prog = 
281
        glade_xml_get_widget(data->glade, "radiobutton_pref_gen_prog");
282
    togglebutton_pref_hideexif = 
283
        glade_xml_get_widget(data->glade, "togglebutton_pref_hideexif");
284
    togglebutton_pref_rename = 
285
        glade_xml_get_widget(data->glade, "togglebutton_pref_rename");
286
287
    /* Set values */
288
    gtk_file_chooser_set_uri(
289
        GTK_FILE_CHOOSER(filechooserbutton_pref_img_dir),
290
        data->img_dir);
291
    gtk_file_chooser_set_uri(
292
        GTK_FILE_CHOOSER(filechooserbutton_pref_output_dir),
293
        data->output_dir);
294
    gtk_file_chooser_set_uri(
295
        GTK_FILE_CHOOSER(filechooserbutton_pref_gal_dir),
296
        data->gal_dir);
297
    gtk_file_chooser_set_uri(
298
        GTK_FILE_CHOOSER(filechooserbutton_pref_templ_dir),
299
        data->templ_dir);
300
    gtk_file_chooser_set_uri(
301
        GTK_FILE_CHOOSER(filechooserbutton_pref_templ_index), 
302
        data->templ_index);
303
    gtk_file_chooser_set_uri(
304
        GTK_FILE_CHOOSER(filechooserbutton_pref_templ_indeximg),
305
        data->templ_indeximg);
306
    gtk_file_chooser_set_uri(
307
        GTK_FILE_CHOOSER(filechooserbutton_pref_templ_indexgen),
308
        data->templ_indexgen);
309
    gtk_file_chooser_set_uri(
310
        GTK_FILE_CHOOSER(filechooserbutton_pref_templ_image),
311
        data->templ_image);
312
    gtk_file_chooser_set_uri(
313
        GTK_FILE_CHOOSER(filechooserbutton_pref_templ_gen),
314
        data->templ_gen);
315
    gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton_pref_thumb_w),
316
                              (gdouble)data->thumb_w);
317
    gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton_pref_image_h),
318
                              (gdouble)data->image_h);
319
    gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton_pref_image_h2),
320
                              (gdouble)data->image_h2);
321
    gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton_pref_image_h3),
322
                              (gdouble)data->image_h3);
323
    gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton_pref_image_h4),
324
                              (gdouble)data->image_h4);
325
     radiobutton_pref_gen_templ = 
326
        glade_xml_get_widget(data->glade, "radiobutton_pref_gen_templ");
327
    radiobutton_pref_gen_prog = 
328
        glade_xml_get_widget(data->glade, "radiobutton_pref_gen_prog");
329
330
    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(togglebutton_pref_hideexif),
331
                                 data->remove_exif);
332
    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(togglebutton_pref_rename),
333
                                 data->rename);
334
335
    /* show dialog (in a loop because of help dialog) */
336
    do
337
    {
338
        result = gtk_dialog_run(GTK_DIALOG(dialog));    
339
        switch(result)
340
        {
341
        case GTK_RESPONSE_DELETE_EVENT:
342
        case GTK_RESPONSE_CANCEL: /* hide dialog, save nothing, return */
343
            gtk_widget_hide(dialog);
344
            return;
345
        case GTK_RESPONSE_HELP:   /* show help */
346
            widgets_help_show(data, "Help for preferences window.");
347
            break;
348
        default:                  /* save pressed, hide dialog */
349
            gtk_widget_hide(dialog);
350
        }
351
    } while(result != GTK_RESPONSE_OK);
352
    
353
    /* save button pressed */
354
355
    /* get values */
356
    g_free(data->img_dir);
357
    data->img_dir = gtk_file_chooser_get_uri(
358
        GTK_FILE_CHOOSER(filechooserbutton_pref_img_dir));
359
    g_assert(data->img_dir != NULL);
360
361
    g_free(data->output_dir);
362
    data->output_dir = gtk_file_chooser_get_uri(
363
        GTK_FILE_CHOOSER(filechooserbutton_pref_output_dir));
364
    g_assert(data->output_dir != NULL);
365
366
    g_free(data->gal_dir);
367
    data->gal_dir = gtk_file_chooser_get_uri(
368
        GTK_FILE_CHOOSER(filechooserbutton_pref_gal_dir));
369
    g_assert(data->gal_dir != NULL);
370
371
    g_free(data->templ_dir);
372
    data->templ_dir = gtk_file_chooser_get_uri(
373
        GTK_FILE_CHOOSER(filechooserbutton_pref_templ_dir));
374
    g_assert(data->templ_dir != NULL);
375
376
    g_free(data->templ_index);
377
    data->templ_index = gtk_file_chooser_get_uri(
378
        GTK_FILE_CHOOSER(filechooserbutton_pref_templ_index));
379
    g_assert(data->templ_index != NULL);
380
    
381
    g_free(data->templ_indeximg);
382
    data->templ_indeximg = gtk_file_chooser_get_uri(
383
        GTK_FILE_CHOOSER(filechooserbutton_pref_templ_indeximg));
384
    g_assert(data->templ_indeximg != NULL);
385
386
    g_free(data->templ_indexgen);
387
    data->templ_indexgen = gtk_file_chooser_get_uri(
388
        GTK_FILE_CHOOSER(filechooserbutton_pref_templ_indexgen));
389
    g_assert(data->templ_indexgen != NULL);
390
391
    g_free(data->templ_image);
392
    data->templ_image = gtk_file_chooser_get_uri(
393
        GTK_FILE_CHOOSER(filechooserbutton_pref_templ_image));
394
    g_assert(data->templ_image != NULL);
395
396
    g_free(data->templ_gen);
397
    data->templ_gen = gtk_file_chooser_get_uri(
398
        GTK_FILE_CHOOSER(filechooserbutton_pref_templ_gen));
399
    g_assert(data->templ_gen != NULL);
400
401
    data->thumb_w = (gint)gtk_spin_button_get_value(
402
        GTK_SPIN_BUTTON(spinbutton_pref_thumb_w));
403
404
    data->image_h = gtk_spin_button_get_value(
405
        GTK_SPIN_BUTTON(spinbutton_pref_image_h));
406
    data->image_h2 = gtk_spin_button_get_value(
407
        GTK_SPIN_BUTTON(spinbutton_pref_image_h2));
408
    data->image_h3 = gtk_spin_button_get_value(
409
        GTK_SPIN_BUTTON(spinbutton_pref_image_h3));
410
    data->image_h4 = gtk_spin_button_get_value(
411
        GTK_SPIN_BUTTON(spinbutton_pref_image_h4));
412
413
    if (gtk_toggle_button_get_active(
414
            GTK_TOGGLE_BUTTON(radiobutton_pref_gen_templ)) == TRUE)
415
        data->page_gen = PWGALLERY_PAGE_GEN_TEMPL;
416
    else
417
        data->page_gen = PWGALLERY_PAGE_GEN_PROG;
418
419
420
    g_free(data->page_gen_prog);
421
    data->page_gen_prog = gtk_file_chooser_get_uri(
422
        GTK_FILE_CHOOSER(filechooserbutton_pref_page_gen_prog));
423
    /* FIXME: this is not implemented yet, so it can be NULL.. */
424
    if (data->gal->page_gen_prog == NULL)
425
        data->gal->page_gen_prog = g_strdup("file:///tmp/unimplemented.sh");
426
427
    data->remove_exif = gtk_toggle_button_get_active(
428
        GTK_TOGGLE_BUTTON(togglebutton_pref_hideexif));
429
430
    data->rename = gtk_toggle_button_get_active(
431
        GTK_TOGGLE_BUTTON(togglebutton_pref_rename));
432
433
    /* save to disk */
434
    configrc_save(data);
435
436
}
437
438
439
440
void
441
widgets_gal_settings_show(struct data *data)
442
{
443
        GtkWidget *dialog;
444
    GtkWidget *entry_gal_name;
445
    GtkWidget *entry_gal_dir_name;
446
    GtkWidget *textview_gal_desc;
447
    GtkWidget *filechooserbutton_gal_dest_dir;
448
    GtkWidget *spinbutton_gal_thumb_w;
449
    GtkWidget *spinbutton_gal_image_h;
450
    GtkWidget *spinbutton_gal_image_h2;
451
    GtkWidget *spinbutton_gal_image_h3;
452
    GtkWidget *spinbutton_gal_image_h4;
453
    GtkWidget *radiobutton_gal_gen_templ;
454
    GtkWidget *radiobutton_gal_gen_prog;
455
    GtkWidget *filechooserbutton_gal_page_gen_prog;
456
    GtkWidget *filechooserbutton_gal_templ_index;
457
    GtkWidget *filechooserbutton_gal_templ_indeximg;
458
    GtkWidget *filechooserbutton_gal_templ_indexgen;
459
    GtkWidget *filechooserbutton_gal_templ_image;
460
    GtkWidget *filechooserbutton_gal_templ_gen;
461
    GtkWidget *togglebutton_gal_hideexif;
462
    GtkWidget *togglebutton_gal_rename;
463
464
    GtkTextIter end_iter;
465
    GtkTextIter start_iter;
466
    GtkTextBuffer *textview_buffer;
467
    gint result;
468
469
        g_assert(data != NULL);
470
471
    /* Get widgets */
472
    dialog = glade_xml_get_widget(data->glade, "dialog_gal");
473
    entry_gal_name = 
474
        glade_xml_get_widget(data->glade, "entry_gal_name");
475
    entry_gal_dir_name = 
476
        glade_xml_get_widget(data->glade, "entry_gal_dir_name");
477
    textview_gal_desc = 
478
        glade_xml_get_widget(data->glade, "textview_gal_desc");
479
    filechooserbutton_gal_dest_dir = 
480
        glade_xml_get_widget(data->glade, "filechooserbutton_gal_dest_dir");
481
    spinbutton_gal_thumb_w = 
482
        glade_xml_get_widget(data->glade, "spinbutton_gal_thumb_w");
483
    spinbutton_gal_image_h = 
484
        glade_xml_get_widget(data->glade, "spinbutton_gal_image_h");
485
    spinbutton_gal_image_h2 = 
486
        glade_xml_get_widget(data->glade, "spinbutton_gal_image_h2");
487
    spinbutton_gal_image_h3 = 
488
        glade_xml_get_widget(data->glade, "spinbutton_gal_image_h3");
489
    spinbutton_gal_image_h4 = 
490
        glade_xml_get_widget(data->glade, "spinbutton_gal_image_h4");
491
    radiobutton_gal_gen_templ = 
492
        glade_xml_get_widget(data->glade, "radiobutton_gal_gen_templ");
493
    radiobutton_gal_gen_prog = 
494
        glade_xml_get_widget(data->glade, "radiobutton_gal_gen_prog");
495
    filechooserbutton_gal_page_gen_prog = 
496
        glade_xml_get_widget( 
497
            data->glade, "filechooserbutton_gal_page_gen_prog");
498
    filechooserbutton_gal_templ_index = 
499
        glade_xml_get_widget(data->glade, "filechooserbutton_gal_templ_index");
500
    filechooserbutton_gal_templ_indeximg = 
501
        glade_xml_get_widget( 
502
            data->glade, "filechooserbutton_gal_templ_indeximg");
503
    filechooserbutton_gal_templ_indexgen = 
504
        glade_xml_get_widget( 
505
            data->glade, "filechooserbutton_gal_templ_indexgen");
506
    filechooserbutton_gal_templ_image = 
507
        glade_xml_get_widget(data->glade, "filechooserbutton_gal_templ_image");
508
    filechooserbutton_gal_templ_gen = 
509
        glade_xml_get_widget(data->glade, "filechooserbutton_gal_templ_gen");
510
    togglebutton_gal_hideexif = 
511
        glade_xml_get_widget(data->glade, "togglebutton_gal_hideexif");
512
    togglebutton_gal_rename = 
513
        glade_xml_get_widget(data->glade, "togglebutton_gal_rename");
514
515
516
    /* Set values */
517
    gtk_entry_set_text(GTK_ENTRY(entry_gal_name), data->gal->name);
518
    gtk_entry_set_text(GTK_ENTRY(entry_gal_dir_name), data->gal->dir_name);
519
    textview_buffer = 
520
        gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview_gal_desc));
521
    gtk_text_buffer_set_text(textview_buffer, data->gal->desc, -1);
522
    gtk_file_chooser_set_uri(
523
        GTK_FILE_CHOOSER(filechooserbutton_gal_dest_dir),
524
        data->gal->base_dir);
525
    gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton_gal_thumb_w),
526
                              (gdouble)data->gal->thumb_w);
527
    gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton_gal_image_h),
528
                              (gdouble)data->gal->image_h);
529
    gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton_gal_image_h2),
530
                              (gdouble)data->gal->image_h2);
531
    gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton_gal_image_h3),
532
                              (gdouble)data->gal->image_h3);
533
    gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton_gal_image_h4),
534
                              (gdouble)data->gal->image_h4);
535
    if (data->gal->page_gen == PWGALLERY_PAGE_GEN_TEMPL)
536
        gtk_toggle_button_set_active(
537
            GTK_TOGGLE_BUTTON(radiobutton_gal_gen_templ), TRUE);
538
    else
539
        gtk_toggle_button_set_active(
540
            GTK_TOGGLE_BUTTON(radiobutton_gal_gen_prog), TRUE);
541
    gtk_file_chooser_set_uri(
542
        GTK_FILE_CHOOSER(filechooserbutton_gal_page_gen_prog),
543
        data->gal->page_gen_prog);
544
    gtk_file_chooser_set_uri(
545
        GTK_FILE_CHOOSER(filechooserbutton_gal_templ_index), 
546
        data->gal->templ_index);
547
    gtk_file_chooser_set_uri(
548
        GTK_FILE_CHOOSER(filechooserbutton_gal_templ_indeximg),
549
        data->gal->templ_indeximg);
550
    gtk_file_chooser_set_uri(
551
        GTK_FILE_CHOOSER(filechooserbutton_gal_templ_indexgen),
552
        data->gal->templ_indexgen);
553
    gtk_file_chooser_set_uri(
554
        GTK_FILE_CHOOSER(filechooserbutton_gal_templ_image),
555
        data->gal->templ_image);
556
    gtk_file_chooser_set_uri(
557
        GTK_FILE_CHOOSER(filechooserbutton_gal_templ_gen),
558
        data->gal->templ_gen);
559
    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(togglebutton_gal_hideexif),
560
                                 data->gal->remove_exif);
561
    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(togglebutton_gal_rename),
562
                                 data->gal->rename);
563
564
    /* show dialog (in a loop because of help dialog) */
565
    do
566
    {
567
        result = gtk_dialog_run(GTK_DIALOG(dialog));    
568
        switch(result)
569
        {
570
        case GTK_RESPONSE_DELETE_EVENT:
571
        case GTK_RESPONSE_CANCEL: /* hide dialog, save nothing, return */
572
            gtk_widget_hide(dialog);
573
            return;
574
        case GTK_RESPONSE_HELP:   /* show help */
575
            widgets_help_show(data, "Help for settings window.");
576
            break;
577
        default:                  /* ok pressed, hide dialog */
578
            gtk_widget_hide(dialog);
579
        }
580
    } while(result != GTK_RESPONSE_OK);
581
    
582
    /* save button pressed */
583
584
    /* get values */
585
    g_free(data->gal->name);
586
    data->gal->name = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry_gal_name)));
587
588
    g_free(data->gal->dir_name);
589
    data->gal->dir_name = 
590
        g_strdup(gtk_entry_get_text(GTK_ENTRY(entry_gal_dir_name)));
591
592
    g_free(data->gal->desc);
593
    gtk_text_buffer_get_end_iter(textview_buffer, &end_iter);
594
    gtk_text_buffer_get_start_iter(textview_buffer, &start_iter);
595
    data->gal->desc = gtk_text_buffer_get_text(textview_buffer,
596
                                               &end_iter, &start_iter, TRUE);
597
    g_free(data->gal->base_dir);
598
    data->gal->base_dir = gtk_file_chooser_get_uri(
599
        GTK_FILE_CHOOSER(filechooserbutton_gal_dest_dir));
600
    g_assert(data->gal->base_dir != NULL);
601
602
    g_free(data->gal->output_dir);
603
    data->gal->output_dir = g_strdup_printf("%s/%s", data->gal->base_dir, 
604
                                            data->gal->dir_name);
605
606
    data->gal->thumb_w = (gint)gtk_spin_button_get_value(
607
        GTK_SPIN_BUTTON(spinbutton_gal_thumb_w));
608
609
    data->gal->image_h = gtk_spin_button_get_value(
610
        GTK_SPIN_BUTTON(spinbutton_gal_image_h));
611
    data->gal->image_h2 = gtk_spin_button_get_value(
612
        GTK_SPIN_BUTTON(spinbutton_gal_image_h2));
613
    data->gal->image_h3 = gtk_spin_button_get_value(
614
        GTK_SPIN_BUTTON(spinbutton_gal_image_h3));
615
    data->gal->image_h4 = gtk_spin_button_get_value(
616
        GTK_SPIN_BUTTON(spinbutton_gal_image_h4));
617
618
    if (gtk_toggle_button_get_active(
619
            GTK_TOGGLE_BUTTON(radiobutton_gal_gen_templ)) == TRUE)
620
        data->gal->page_gen = PWGALLERY_PAGE_GEN_TEMPL;
621
    else
622
        data->gal->page_gen = PWGALLERY_PAGE_GEN_PROG;
623
624
625
    g_free(data->gal->page_gen_prog);
626
    data->gal->page_gen_prog = gtk_file_chooser_get_uri(
627
        GTK_FILE_CHOOSER(filechooserbutton_gal_page_gen_prog));
628
    /* FIXME: this is not implemented yet, so it can be NULL.. */
629
    if (data->gal->page_gen_prog == NULL)
630
        data->gal->page_gen_prog = g_strdup("file:///tmp/unimplemented.sh");
631
632
633
    g_free(data->gal->templ_index);
634
    data->gal->templ_index = gtk_file_chooser_get_uri(
635
        GTK_FILE_CHOOSER(filechooserbutton_gal_templ_index));
636
    g_assert(data->gal->templ_index != NULL);
637
638
    g_free(data->gal->templ_indeximg);
639
    data->gal->templ_indeximg = gtk_file_chooser_get_uri(
640
        GTK_FILE_CHOOSER(filechooserbutton_gal_templ_indeximg));
641
    g_assert(data->gal->templ_indeximg != NULL);
642
643
    g_free(data->gal->templ_indexgen);
644
    data->gal->templ_indexgen = gtk_file_chooser_get_uri(
645
        GTK_FILE_CHOOSER(filechooserbutton_gal_templ_indexgen));
646
    g_assert(data->gal->templ_indexgen != NULL);
647
648
    g_free(data->gal->templ_image);
649
    data->gal->templ_image = gtk_file_chooser_get_uri(
650
        GTK_FILE_CHOOSER(filechooserbutton_gal_templ_image));
651
    g_assert(data->templ_image != NULL);
652
653
    g_free(data->gal->templ_gen);
654
    data->gal->templ_gen = gtk_file_chooser_get_uri(
655
        GTK_FILE_CHOOSER(filechooserbutton_gal_templ_gen));
656
    g_assert(data->templ_gen != NULL);
657
658
    data->gal->remove_exif = gtk_toggle_button_get_active(
659
        GTK_TOGGLE_BUTTON(togglebutton_gal_hideexif));
660
661
    data->gal->rename = gtk_toggle_button_get_active(
662
        GTK_TOGGLE_BUTTON(togglebutton_gal_rename));
663
664
    /* gallery (settings) has been now edited */
665
    data->gal->edited = TRUE;
666
}
667
668
669
670
void widgets_about_show(struct data *data)
671
{
672
    GtkWidget *dialog;
673
674
    g_assert(data != NULL);
675
676
    dialog = glade_xml_get_widget( data->glade, "aboutdialog");
677
        g_assert(dialog != NULL);
678
679
    gtk_dialog_run(GTK_DIALOG(dialog));
680
    gtk_widget_hide(dialog);
681
}
682
683
684
685
void
686
widgets_help_show(struct data *data, const gchar *helptext)
687
{
688
        GtkWidget     *dialog;
689
    GtkWidget     *textview;
690
    GtkTextBuffer *buffer;
691
    gint          result;
692
693
        g_assert(data != NULL);
694
        g_assert(helptext != NULL);
695
696
    /* Get widgets */
697
    dialog = glade_xml_get_widget( data->glade, "dialog_help");
698
    textview = glade_xml_get_widget( data->glade, "textview_help");
699
700
    /* Set values */
701
    buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
702
    gtk_text_buffer_set_text(buffer, helptext, -1);
703
704
    /* show help dialog */
705
    result = gtk_dialog_run(GTK_DIALOG(dialog));    
706
    gtk_widget_hide(dialog);
707
}
708
709
710
711
void
712
widgets_set_image_information(struct data *data, struct image *img)
713
{
714
715
        GtkWidget     *label_filename = NULL;
716
        GtkWidget     *entry_gal_img_rename = NULL;
717
        GtkWidget     *textview_image_desc = NULL;
718
        GtkWidget     *check_settings_nomodify = NULL;
719
        GtkWidget     *radiobutton_rotate_0 = NULL;
720
        GtkWidget     *radiobutton_rotate_90 = NULL;
721
        GtkWidget     *radiobutton_rotate_180 = NULL;
722
        GtkWidget     *radiobutton_rotate_270 = NULL;
723
        GtkWidget     *radiobutton_rotate_other = NULL;
724
        GtkWidget     *radiobutton_gal_img_image = NULL;
725
        GtkWidget     *radiobutton_gal_img_generic = NULL;
726
    GtkTextBuffer *buffer;
727
728
        g_assert(data != NULL);
729
730
    if (!data->use_gui) {
731
        return;
732
    }
733
734
    /* if img == null, clear the info */
735
736
    /* Get widgets */
737
    label_filename = 
738
        glade_xml_get_widget( data->glade, "label_filename");
739
    entry_gal_img_rename = 
740
        glade_xml_get_widget( data->glade, "entry_gal_img_rename");
741
    textview_image_desc = 
742
        glade_xml_get_widget( data->glade, "textview_image_desc");
743
    check_settings_nomodify = 
744
        glade_xml_get_widget( data->glade, "check_settings_nomodify");
745
    radiobutton_rotate_0 = 
746
        glade_xml_get_widget( data->glade, "radiobutton_rotate_0");
747
    radiobutton_rotate_90 = 
748
        glade_xml_get_widget( data->glade, "radiobutton_rotate_90");
749
    radiobutton_rotate_180 = 
750
        glade_xml_get_widget( data->glade, "radiobutton_rotate_180");
751
    radiobutton_rotate_270 = 
752
        glade_xml_get_widget( data->glade, "radiobutton_rotate_270");
753
    radiobutton_rotate_other = 
754
        glade_xml_get_widget( data->glade, "radiobutton_rotate_other");
755
    radiobutton_gal_img_image = 
756
        glade_xml_get_widget( data->glade, "radiobutton_gal_img_image");
757
    radiobutton_gal_img_generic = 
758
        glade_xml_get_widget( data->glade, "radiobutton_gal_img_generic");
759
760
    if (img != NULL)
761
    {
762
        /* Set values */
763
        gtk_label_set_text(GTK_LABEL(label_filename), img->uri);
764
        
765
        /* not implemented */
766
        /*gtk_entry_set_text(GTK_ENTRY(entry_gal_img_rename), img->rename*/
767
        
768
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_settings_nomodify),
769
                                     img->nomodify);
770
        gtk_toggle_button_set_active
771
            (GTK_TOGGLE_BUTTON(radiobutton_rotate_0), FALSE);
772
        gtk_toggle_button_set_active(
773
            GTK_TOGGLE_BUTTON(radiobutton_rotate_90), FALSE);
774
        gtk_toggle_button_set_active(
775
            GTK_TOGGLE_BUTTON(radiobutton_rotate_180), FALSE);
776
        gtk_toggle_button_set_active(
777
            GTK_TOGGLE_BUTTON(radiobutton_rotate_270), FALSE);
778
        gtk_toggle_button_set_active(
779
            GTK_TOGGLE_BUTTON(radiobutton_rotate_other), FALSE);
780
781
        switch(img->rotate)
782
        {
783
        case 0:
784
            gtk_toggle_button_set_active(
785
                GTK_TOGGLE_BUTTON(radiobutton_rotate_0), TRUE);
786
            break;
787
        case 90:
788
            gtk_toggle_button_set_active(
789
                GTK_TOGGLE_BUTTON(radiobutton_rotate_90), TRUE);
790
            break;
791
        case 180:
792
            gtk_toggle_button_set_active(
793
                GTK_TOGGLE_BUTTON(radiobutton_rotate_180), TRUE);
794
        break;
795
        case 270:
796
            gtk_toggle_button_set_active(
797
                GTK_TOGGLE_BUTTON(radiobutton_rotate_270), TRUE);
798
            break;
799
        default:
800
            gtk_toggle_button_set_active(
801
                GTK_TOGGLE_BUTTON(radiobutton_rotate_other), TRUE);
802
            break;
803
        }
804
        
805
        buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview_image_desc));
806
        gtk_text_buffer_set_text(buffer, img->text, -1);
807
808
        /* FIXME: add page gen */
809
    }
810
    else
811
    {
812
        /* Set values */
813
        gtk_label_set_text(GTK_LABEL(label_filename), _("Filename"));
814
        
815
        gtk_entry_set_text(GTK_ENTRY(entry_gal_img_rename), "");
816
        
817
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_settings_nomodify),
818
                                     FALSE);
819
820
        gtk_toggle_button_set_active
821
            (GTK_TOGGLE_BUTTON(radiobutton_rotate_0), TRUE);
822
        gtk_toggle_button_set_active(
823
            GTK_TOGGLE_BUTTON(radiobutton_rotate_90), FALSE);
824
        gtk_toggle_button_set_active(
825
            GTK_TOGGLE_BUTTON(radiobutton_rotate_180), FALSE);
826
        gtk_toggle_button_set_active(
827
            GTK_TOGGLE_BUTTON(radiobutton_rotate_270), FALSE);
828
        gtk_toggle_button_set_active(
829
            GTK_TOGGLE_BUTTON(radiobutton_rotate_other), FALSE);
830
        
831
        buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview_image_desc));
832
        gtk_text_buffer_set_text(buffer, "", -1);
833
834
        /* FIXME: add page gen */
835
836
    }
837
}
838
839
/* Emacs indentatation information
840
   Local Variables:
841
   indent-tabs-mode:nil
842
   tab-width:4
843
   c-set-offset:4
844
   c-basic-offset:4
845
   End: 
846
*/