~ubuntu-branches/ubuntu/vivid/rawstudio/vivid

« back to all changes in this revision

Viewing changes to src/rs-batch.c

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Baumann
  • Date: 2008-10-18 17:58:00 UTC
  • mfrom: (2.1.9 upstream)
  • Revision ID: james.westby@ubuntu.com-20081018175800-r1s7ke1xwy9wxv5b
Tags: 1.1.1-1
MergingĀ upstreamĀ versionĀ 1.1.1.

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
#include "rs-cache.h"
33
33
#include "rs-color-transform.h"
34
34
#include "rs-image.h"
 
35
#include "rs-photo.h"
35
36
 
36
37
extern GtkWindow *rawstudio_window;
37
38
 
38
 
static gboolean batch_exists_in_queue(RS_QUEUE *queue, const gchar *filename, gint setting_id);
39
39
static GtkWidget *make_batchview(RS_QUEUE *queue);
40
40
static void size_update_infolabel(RS_QUEUE *queue);
41
41
static gchar *batch_queue_filename = NULL;
 
42
static void batch_queue_update_sensivity(RS_QUEUE *queue);
42
43
 
43
44
static void
44
45
batch_queue_save(RS_QUEUE *queue)
200
201
rs_batch_add_to_queue(RS_QUEUE *queue, const gchar *filename, const gint setting_id)
201
202
{
202
203
        gboolean ret = FALSE;
203
 
        if (!batch_exists_in_queue(queue, filename, setting_id))
 
204
        if (!rs_batch_exists_in_queue(queue, filename, setting_id))
204
205
        {
205
206
                gchar *filename_short, *setting_id_abc;
206
207
                RS_FILETYPE *filetype;
229
230
                        missing_thumb = gtk_widget_render_icon(GTK_WIDGET(rawstudio_window),
230
231
                                GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_DIALOG, NULL);
231
232
 
232
 
                        if (filetype->thumb)
233
 
                                pixbuf = filetype->thumb(filename);
 
233
                        pixbuf = rs_load_thumb(filetype, filename);
234
234
                        if (pixbuf)
235
235
                        {
236
236
                                gint w,h,temp,size = 48;
260
260
                        }
261
261
                        g_object_unref(missing_thumb);
262
262
 
263
 
                        if (!batch_exists_in_queue(queue, filename, setting_id))
 
263
                        if (!rs_batch_exists_in_queue(queue, filename, setting_id))
264
264
                        {
265
265
                                GtkTreeIter iter;
266
266
 
281
281
 
282
282
        batch_queue_save(queue);
283
283
 
 
284
        batch_queue_update_sensivity(queue);
 
285
 
284
286
        return ret;
285
287
}
286
288
 
313
315
                                }
314
316
                        }
315
317
                        g_free(filename_temp);
 
318
 
 
319
                        /* Break out of the loop if we got a hit */
 
320
                        if (ret)
 
321
                                break;
316
322
                } while (gtk_tree_model_iter_next(queue->list, &iter));
317
323
        }
318
324
 
319
325
        batch_queue_save(queue);
320
326
 
 
327
        batch_queue_update_sensivity(queue);
 
328
 
321
329
        return ret;
322
330
}
323
331
 
324
 
static gboolean
325
 
batch_exists_in_queue(RS_QUEUE *queue, const gchar *filename, gint setting_id)
 
332
gboolean
 
333
rs_batch_exists_in_queue(RS_QUEUE *queue, const gchar *filename, gint setting_id)
326
334
{
327
335
        gboolean ret = FALSE;
328
336
        GtkTreeIter iter;
372
380
rs_batch_process(RS_QUEUE *queue)
373
381
{
374
382
        RS_PHOTO *photo = NULL;
375
 
        RS_FILETYPE *filetype;
376
383
        RS_IMAGE16 *image;
377
384
        GtkTreeIter iter;
378
385
        gchar *filename_in;
390
397
        GtkWidget *cancel;
391
398
        gboolean abort_render = FALSE;
392
399
        gboolean fullscreen = FALSE;
393
 
        RS_COLOR_TRANSFORM *rct = rs_color_transform_new();
 
400
        RSColorTransform *rct = rs_color_transform_new();
394
401
        GTimeVal start_time;
395
402
        GTimeVal now_time = {0,0};
396
403
        gint time, eta;
476
483
                        RS_QUEUE_ELEMENT_FILENAME, &filename_in,
477
484
                        RS_QUEUE_ELEMENT_SETTING_ID, &setting_id,
478
485
                        -1);
479
 
                if ((filetype = rs_filetype_get(filename_in, TRUE)))
 
486
                if (rs_filetype_get(filename_in, TRUE))
480
487
                {
481
488
                        basename = g_path_get_basename(filename_in);
482
489
                        g_string_printf(status, _("Loading %s ..."), basename);
484
491
                        while (gtk_events_pending()) gtk_main_iteration();
485
492
                        g_free(basename);
486
493
 
487
 
                        photo = filetype->load(filename_in, FALSE);
 
494
                        photo = rs_photo_load_from_file(filename_in, FALSE);
488
495
                        rs_image16_demosaic(photo->input, RS_DEMOSAIC_PPG);
489
496
                        if (photo)
490
497
                        {
491
 
                                if (filetype->load_meta)
492
 
                                        filetype->load_meta(filename_in, photo->metadata);
 
498
                                rs_metadata_load(filename_in, photo->metadata);
493
499
                                filename = g_string_new(queue->directory);
494
500
                                g_string_append(filename, G_DIR_SEPARATOR_S);
495
501
                                g_string_append(filename, queue->filename);
523
529
 
524
530
                                /* Render preview image */
525
531
                                rs_color_transform_set_from_settings(rct, photo->settings[setting_id], MASK_ALL);
526
 
                                rct->transform(rct, image->w, image->h, image->pixels,
 
532
                                rs_color_transform_transform(rct, image->w, image->h, image->pixels,
527
533
                                        image->rowstride, gdk_pixbuf_get_pixels(pixbuf),
528
534
                                        gdk_pixbuf_get_rowstride(pixbuf));
529
535
                                gtk_image_set_from_pixbuf((GtkImage *) preview, pixbuf);
548
554
 
549
555
                g_get_current_time(&now_time);
550
556
        }
551
 
        rs_color_transform_free(rct);
 
557
        g_object_unref(rct);
552
558
        gtk_widget_destroy(window);
553
559
 
554
560
        /* Restore fullscreen state if needed */
555
561
        if (fullscreen) 
556
562
                gtk_window_fullscreen(rawstudio_window);
557
563
        gtk_widget_show_all(GTK_WIDGET(rawstudio_window));
 
564
 
 
565
        batch_queue_update_sensivity(queue);
558
566
}
559
567
 
560
 
void
561
 
rs_batch_start_queue(RS_QUEUE *queue)
 
568
static void
 
569
cursor_changed(GtkTreeView *tree_view, gpointer user_data)
562
570
{
563
 
        rs_batch_process(queue);
564
 
        return;
 
571
        batch_queue_update_sensivity((RS_QUEUE *) user_data);
565
572
}
566
573
 
567
574
static GtkWidget *
609
616
        gtk_tree_view_append_column (GTK_TREE_VIEW (view), column_filename);
610
617
        gtk_tree_view_append_column (GTK_TREE_VIEW (view), column_setting_id);
611
618
 
 
619
        g_signal_connect(G_OBJECT(view), "cursor-changed", G_CALLBACK(cursor_changed), queue);
612
620
        gtk_tree_view_set_headers_visible(GTK_TREE_VIEW (view), FALSE);
613
621
 
614
622
        return scroller;
632
640
                        batch_queue_save(queue);
633
641
                }
634
642
        }
 
643
        batch_queue_update_sensivity(queue);
635
644
        return;
636
645
}
637
646
 
640
649
{
641
650
        gtk_list_store_clear(GTK_LIST_STORE(queue->list));
642
651
        batch_queue_save(queue);
 
652
        batch_queue_update_sensivity(queue);
643
653
        return;
644
654
}
645
655
 
646
656
static void
647
657
batch_button_start_clicked(GtkWidget *button, RS_QUEUE *queue)
648
658
{
649
 
        rs_batch_start_queue(queue);
 
659
        rs_batch_process(queue);
650
660
        return;
651
661
}
652
662
 
 
663
static void
 
664
batch_queue_update_sensivity(RS_QUEUE *queue)
 
665
{
 
666
        GtkTreePath *selected_path;
 
667
        GtkTreeIter iter;
 
668
 
 
669
        /* If we have any entries, enable "Start" and "Remove all" */
 
670
        if (gtk_tree_model_get_iter_first(queue->list, &iter))
 
671
        {
 
672
                gtk_widget_set_sensitive(queue->start_button, TRUE);
 
673
                gtk_widget_set_sensitive(queue->remove_all_button, TRUE);
 
674
        }
 
675
        else
 
676
        {
 
677
                gtk_widget_set_sensitive(queue->start_button, FALSE);
 
678
                gtk_widget_set_sensitive(queue->remove_all_button, FALSE);
 
679
        }
 
680
 
 
681
        /* If anything is selected, enable "Remove" */
 
682
        gtk_tree_view_get_cursor(queue->view, &selected_path, NULL);
 
683
        if(selected_path)
 
684
        {
 
685
                gtk_widget_set_sensitive(queue->remove_button, TRUE);
 
686
                gtk_tree_path_free(selected_path);
 
687
        }
 
688
        else
 
689
                gtk_widget_set_sensitive(queue->remove_button, FALSE);
 
690
}
 
691
 
653
692
GtkWidget *
654
693
make_batchbuttons(RS_QUEUE *queue)
655
694
{
656
695
                GtkWidget *box;
657
 
                GtkWidget *start_button;
658
 
                GtkWidget *remove_button;
659
 
                GtkWidget *remove_all_button;
660
696
 
661
697
                box = gtk_hbox_new(FALSE,4);
662
698
 
663
 
                start_button = gtk_button_new_with_label(_("Start"));
664
 
                g_signal_connect ((gpointer) start_button, "clicked", G_CALLBACK (batch_button_start_clicked), queue);
665
 
 
666
 
                remove_button = gtk_button_new();
667
 
                gtk_button_set_label(GTK_BUTTON(remove_button), _("Remove"));
668
 
                g_signal_connect ((gpointer) remove_button, "clicked", G_CALLBACK (batch_button_remove_clicked), queue);
669
 
 
670
 
                remove_all_button = gtk_button_new();
671
 
                gtk_button_set_label(GTK_BUTTON(remove_all_button), _("Remove all"));
672
 
                g_signal_connect ((gpointer) remove_all_button, "clicked", G_CALLBACK (batch_button_remove_all_clicked), queue);
673
 
 
674
 
                gtk_box_pack_start(GTK_BOX (box), start_button, FALSE, FALSE, 0);
675
 
                gtk_box_pack_start(GTK_BOX (box), remove_button, FALSE, FALSE, 0);
676
 
                gtk_box_pack_start(GTK_BOX (box), remove_all_button, FALSE, FALSE, 0);
 
699
                queue->start_button = gui_button_new_from_stock_with_label(GTK_STOCK_EXECUTE, _("Start"));
 
700
                g_signal_connect ((gpointer) queue->start_button, "clicked", G_CALLBACK (batch_button_start_clicked), queue);
 
701
 
 
702
                queue->remove_button = gui_button_new_from_stock_with_label(GTK_STOCK_REMOVE, _("Remove"));
 
703
                g_signal_connect ((gpointer) queue->remove_button, "clicked", G_CALLBACK (batch_button_remove_clicked), queue);
 
704
 
 
705
                queue->remove_all_button = gui_button_new_from_stock_with_label(GTK_STOCK_REMOVE, _("Remove all"));
 
706
                g_signal_connect ((gpointer) queue->remove_all_button, "clicked", G_CALLBACK (batch_button_remove_all_clicked), queue);
 
707
 
 
708
                gtk_box_pack_start(GTK_BOX (box), queue->start_button, FALSE, FALSE, 0);
 
709
                gtk_box_pack_start(GTK_BOX (box), queue->remove_button, FALSE, FALSE, 0);
 
710
                gtk_box_pack_start(GTK_BOX (box), queue->remove_all_button, FALSE, FALSE, 0);
677
711
 
678
712
                return box;
679
713
}
945
979
        gtk_box_pack_start (GTK_BOX (batchbox), make_batchbuttons(queue), FALSE, FALSE, 0);
946
980
        batch_queue_load(queue);
947
981
 
 
982
        batch_queue_update_sensivity(queue);
 
983
 
948
984
        return batchbox;
949
985
}
950
986