Statistics
| Branch: | Revision:

root / src / widgets.c @ 1ecb1bbed16ca46035aa6486b301ab5228791fe5

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