~foxtrotgps-team/foxtrotgps/trunk

« back to all changes in this revision

Viewing changes to src/geo_photos.c

  • Committer: Paul Wise
  • Date: 2018-03-06 03:32:21 UTC
  • Revision ID: pabs3@bonedaddy.net-20180306033221-lzyia8y0cpw95j1b
Remove trailing whitespace

Show diffs side-by-side

added added

removed removed

Lines of Context:
69
69
        photo->lat      = atof(colv[2]);
70
70
        photo->lon      = atof(colv[3]);
71
71
        photo->desc     = g_strdup(colv[4]);
72
 
        
 
72
 
73
73
        photo_list = g_slist_prepend(photo_list, photo);
74
74
 
75
75
        return 0;
84
84
void
85
85
paint_photos()
86
86
{
87
 
        
88
 
        
 
87
 
 
88
 
89
89
        int pixel_x, pixel_y, x, y;
90
90
        float lat, lon;
91
91
        GSList *list;
93
93
        GError  *error = NULL;
94
94
        static GdkPixbuf *photo_icon = NULL;
95
95
        static GdkGC *gc;
96
 
        
97
 
        
 
96
 
 
97
 
98
98
        if (!gc)
99
 
                gc = gdk_gc_new(pixmap); 
 
99
                gc = gdk_gc_new(pixmap);
100
100
        color.green = 0;
101
101
        color.blue = 60000;
102
102
        color.red = 0;
103
103
        gdk_gc_set_rgb_fg_color(gc, &color);
104
 
        
 
104
 
105
105
 
106
106
        if(!photo_icon)
107
107
        {
113
113
        if(global_show_photos)
114
114
        {
115
115
                get_photos();
116
 
                
 
116
 
117
117
                for(list = photo_list; list != NULL; list = list->next)
118
118
                {
119
119
                        photo_t *p = list->data;
120
120
                        GdkPixbuf *thumb = NULL, *pixbuf_ptr;
121
 
                
 
121
 
122
122
                        lat = deg2rad(p->lat);
123
123
                        lon = deg2rad(p->lon);
124
 
                        
125
 
                        
126
 
                        
 
124
 
 
125
 
 
126
 
127
127
                        pixel_x = lon2pixel(global_zoom, lon);
128
128
                        pixel_y = lat2pixel(global_zoom, lat);
129
 
                        
 
129
 
130
130
                        x = pixel_x - global_x;
131
131
                        y = pixel_y - global_y;
132
 
                        
 
132
 
133
133
                        p->screen_x = x;
134
134
                        p->screen_y = y;
135
 
                        
136
 
                        
137
 
                        
 
135
 
 
136
 
 
137
 
138
138
                        if(global_zoom >= 17)
139
139
                        {
140
140
                                thumb = gdk_pixbuf_new_from_file_at_scale (p->filename, 48, 48, FALSE, &error);
141
141
                                if(!thumb)
142
142
                                        printf("could not open %s \n", p->filename);
143
143
                        }
144
 
                        
 
144
 
145
145
                        if(!photo_icon && !thumb)
146
146
                        {
147
147
                                gdk_draw_arc (
148
148
                                        pixmap,
149
 
                                        
 
149
 
150
150
                                        gc,
151
 
                                        TRUE,                   
152
 
                                        x-4, y-4,               
153
 
                                        8,8,                    
154
 
                                        0,23040);               
 
151
                                        TRUE,
 
152
                                        x-4, y-4,
 
153
                                        8,8,
 
154
                                        0,23040);
155
155
                        }
156
156
                        else
157
157
                        {
158
158
                                int icon_size;
159
 
                                
 
159
 
160
160
                                if(global_zoom >= 17 && thumb)
161
161
                                {
162
162
                                        pixbuf_ptr = thumb;
163
163
                                        icon_size = 48;
164
 
                                }       
 
164
                                }
165
165
                                else
166
166
                                {
167
167
                                        pixbuf_ptr = photo_icon;
175
175
                                        x-icon_size/2,y-icon_size/2,
176
176
                                        icon_size,icon_size,
177
177
                                        GDK_RGB_DITHER_NONE, 0, 0);
178
 
                                
 
178
 
179
179
                        }
180
 
                        
 
180
 
181
181
                        gtk_widget_queue_draw_area (
182
 
                                        map_drawable, 
 
182
                                        map_drawable,
183
183
                                        x-18, y-18,
184
184
                                        36,36);
185
185
                }
192
192
{
193
193
        char *sql, *db;
194
194
        bbox_t bbox = get_bbox_deg();
195
 
        
 
195
 
196
196
        db = g_strconcat(foxtrotgps_dir,"/", PHOTO_DB, NULL);
197
 
        
198
 
        
199
 
        
 
197
 
 
198
 
 
199
 
200
200
        if(photo_list)
201
201
                g_slist_free(photo_list);
202
202
        photo_list = NULL;
203
 
        
204
 
        
205
 
        sql = g_strdup_printf(  
 
203
 
 
204
 
 
205
        sql = g_strdup_printf(
206
206
                        "SELECT * FROM photo "
207
207
                        "WHERE lat<%f AND lat>%f AND lon>%f AND lon<%f "
208
208
                        "LIMIT 500;",
209
209
                        bbox.lat1,bbox.lat2,
210
210
                        bbox.lon1, bbox.lon2    );
211
 
        
212
 
        
213
 
        sql_execute(db, sql, sql_cb__photo);            
 
211
 
 
212
 
 
213
        sql_execute(db, sql, sql_cb__photo);
214
214
}
215
215
 
216
216
void
217
217
geo_photos_open_dialog_photo_correlate()
218
 
{               
 
218
{
219
219
        GtkWidget *label1, *label2;
220
220
        char *label_txt;
221
221
        int tmp;
236
236
                                         _(PACKAGE_NAME));
237
237
                gtk_label_set_label (dbinsert_label, label_txt);
238
238
                g_free (label_txt); label_txt = NULL;
239
 
                
 
239
 
240
240
                tmp   = g_settings_get_int(global_settings, "geocode-timezone");
241
241
                geocode_timezone = (tmp) ? tmp - 13 : 0 ;
242
242
                geocode_correction = g_settings_get_int(global_settings, "geocode-correction");
243
 
                
244
 
                
 
243
 
 
244
 
245
245
                label1 = lookup_widget(dialog_photo_correlate, "label172");
246
246
                label2 = lookup_widget(dialog_photo_correlate, "label174");
247
 
                
 
247
 
248
248
                label_txt = g_strdup_printf (ngettext ("  1 second",
249
249
                                                       "  %d seconds",
250
250
                                                       geocode_correction),
251
251
                                             geocode_correction);
252
252
                gtk_label_set_label(GTK_LABEL(label2), label_txt);
253
 
                
 
253
 
254
254
                label_txt = g_strdup_printf (_("  %d:00h"), geocode_timezone);
255
255
                gtk_label_set_label(GTK_LABEL(label1), label_txt);
256
 
                
 
256
 
257
257
        }
258
258
 
259
259
        gtk_widget_show(dialog_photo_correlate);
270
270
                dialog_image_data = glade_xml_get_widget (gladexml,
271
271
                                                          "dialog_image_data");
272
272
                gtk_widget_show(dialog_image_data);
273
 
                
 
273
 
274
274
                combobox = lookup_widget(dialog_image_data, "combobox7");
275
275
                gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), geocode_timezone + 12);
276
276
                entry = lookup_widget(dialog_image_data, "entry28");
278
278
 
279
279
                geo_photo_dialog_image_data_next(dialog_image_data, NULL, GEOPHOTO_FIRST);
280
280
        }
281
 
        
 
281
 
282
282
        gtk_widget_show(dialog_image_data);
283
283
        gtk_widget_hide(dialog_photo_correlate);
284
284
}
285
285
 
286
 
        
 
286
 
287
287
 
288
288
void
289
289
geo_photos_geocode_track_select_dialog (GtkButton       *button,
294
294
 
295
295
 
296
296
 
297
 
        
 
297
 
298
298
        widget = gtk_file_chooser_dialog_new (
299
299
                        "Select a GPS track log",
300
300
                        NULL,
303
303
                        GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
304
304
                        NULL);
305
305
 
306
 
        
307
 
        gtk_file_chooser_set_action (GTK_FILE_CHOOSER(widget), GTK_FILE_CHOOSER_ACTION_OPEN );  
 
306
 
 
307
        gtk_file_chooser_set_action (GTK_FILE_CHOOSER(widget), GTK_FILE_CHOOSER_ACTION_OPEN );
308
308
        gtk_file_chooser_set_select_multiple  (GTK_FILE_CHOOSER(widget), FALSE);
309
309
        gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(widget),global_track_dir);
310
 
        
311
 
        
 
310
 
 
311
 
312
312
        filter = gtk_file_filter_new ();
313
313
        gtk_file_filter_add_pattern (filter, "*.gpx");
314
314
        gtk_file_filter_add_pattern (filter, "*.GPX");
321
321
        if (gtk_dialog_run (GTK_DIALOG (widget)) == GTK_RESPONSE_ACCEPT)
322
322
        {
323
323
                char *filename;
324
 
                
 
324
 
325
325
                filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget));
326
326
 
327
327
                geocode_set_trackname(filename, GTK_WIDGET(button));
342
342
        GtkWidget *widget;
343
343
 
344
344
 
345
 
        
 
345
 
346
346
        widget = gtk_file_chooser_dialog_new (
347
347
                        "Choose the directory containing your photos",
348
348
                        NULL,
349
 
                        GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, 
 
349
                        GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
350
350
                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
351
351
                        GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
352
352
                        NULL);
353
353
 
354
 
        
 
354
 
355
355
        gtk_file_chooser_set_select_multiple  (GTK_FILE_CHOOSER(widget), FALSE);
356
 
        
357
 
 
358
 
 
359
 
        
 
356
 
 
357
 
 
358
 
 
359
 
360
360
        if (gtk_dialog_run (GTK_DIALOG (widget)) == GTK_RESPONSE_ACCEPT)
361
361
        {
362
362
                char *filename;
363
 
                
 
363
 
364
364
                filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget));
365
365
 
366
366
                geocode_set_photodir(filename, GTK_WIDGET(button));
367
 
                
 
367
 
368
368
                g_free (filename);
369
369
        }
370
370
 
377
377
geocode_set_trackname(char *trackname, GtkWidget *widget)
378
378
{
379
379
        GtkWidget *label, *image, *button;
380
 
        
 
380
 
381
381
        geocode_trackname = g_strdup(trackname);
382
 
        
 
382
 
383
383
        image = gtk_image_new_from_stock("gtk-open", GTK_ICON_SIZE_BUTTON);
384
384
        gtk_button_set_image(GTK_BUTTON(widget), image);
385
385
        label = lookup_widget(widget, "label154");
386
386
        gtk_label_set_label (GTK_LABEL(label),
387
387
                             _("<span color=\"#090\"><b>ok</b></span>"));
388
388
        gtk_button_set_label(GTK_BUTTON(widget), get_basename(geocode_trackname));
389
 
        
 
389
 
390
390
        button = lookup_widget(widget, "okbutton8");
391
391
        if(geocode_photodir)
392
392
                gtk_widget_set_sensitive(button, TRUE);
397
397
geocode_set_photodir(char *photodir, GtkWidget *widget)
398
398
{
399
399
        GtkWidget *label, *image, *button;
400
 
        
 
400
 
401
401
        geocode_photodir = g_strdup(photodir);
402
 
        
 
402
 
403
403
        if(geocode_photo_list)
404
404
        {
405
405
                g_list_free(geocode_photo_list);
407
407
                gtk_widget_destroy(dialog_image_data);
408
408
                dialog_image_data = NULL;
409
409
        }
410
 
        
 
410
 
411
411
        geocode_photo_list = get_entries_from_dir(geocode_photodir);
412
 
        
 
412
 
413
413
        image = gtk_image_new_from_stock("gtk-open", GTK_ICON_SIZE_BUTTON);
414
414
        gtk_button_set_image(GTK_BUTTON(widget), image);
415
415
        label = lookup_widget(widget, "label155");
416
416
        gtk_label_set_label (GTK_LABEL(label),
417
417
                             _("<span color=\"#090\"><b>ok</b></span>"));
418
418
        gtk_button_set_label(GTK_BUTTON(widget), get_basename(geocode_photodir));
419
 
        
 
419
 
420
420
        button = lookup_widget(widget, "button44");
421
421
        gtk_widget_set_sensitive(button, TRUE);
422
 
                
423
 
        
 
422
 
 
423
 
424
424
        button = lookup_widget(widget, "okbutton8");
425
425
        if(geocode_trackname)
426
426
                gtk_widget_set_sensitive(button, TRUE);
427
427
 
428
 
                
 
428
 
429
429
 
430
430
}
431
431
 
433
433
void
434
434
geo_photos_dialog_image_data_next()
435
435
{
436
 
        
 
436
 
437
437
}
438
438
 
439
439
char *
442
442
        char **array;
443
443
        char *basename;
444
444
        int i = 0;
445
 
        
 
445
 
446
446
        array = g_strsplit(file, "/", -1);
447
447
        while (array[i]) i++;
448
 
                
 
448
 
449
449
        basename = g_strdup(array[i-1]);
450
450
        g_strfreev(array);
451
 
        
 
451
 
452
452
        return basename;
453
453
}
454
454
 
460
460
        GList *list = NULL;
461
461
        gboolean isfile;
462
462
        GError *error;
463
 
        
 
463
 
464
464
        dir = g_dir_open(dirname, 0, &error);
465
465
        if(!dir)
466
466
                return NULL;
467
 
        
 
467
 
468
468
        file = g_dir_read_name(dir);
469
 
        
 
469
 
470
470
        while (file)
471
471
        {
472
472
                char *fullfile = g_strconcat(dirname,"/",file,NULL);
473
 
                
 
473
 
474
474
                isfile = g_file_test(fullfile, G_FILE_TEST_IS_REGULAR);
475
475
                if(isfile &&
476
476
                   (file_type_test(fullfile,"jpg") || file_type_test(fullfile,"JPG") ||
477
 
                    file_type_test(fullfile,"jpeg")  || file_type_test(fullfile,"JPEG"))        
 
477
                    file_type_test(fullfile,"jpeg")  || file_type_test(fullfile,"JPEG"))
478
478
                )
479
 
                {               
 
479
                {
480
480
                        list = g_list_insert_sorted(list, g_strconcat(dirname, "/", file, NULL), (GCompareFunc)g_strcmp0);
481
481
                }
482
482
                file = g_dir_read_name(dir);
483
483
        }
484
 
        
 
484
 
485
485
        g_dir_close(dir);
486
486
 
487
487
        return list;
493
493
{
494
494
        char **arr;
495
495
        int i = 0;
496
 
        
 
496
 
497
497
        arr = g_strsplit(file, ".", -1);
498
498
        while (arr[i]) i++;
499
 
        
 
499
 
500
500
        if (g_strcmp0(arr[i-1], type))
501
501
                return FALSE;
502
 
        
 
502
 
503
503
        return TRUE;
504
504
}
505
505
 
516
516
        gboolean fullsize = FALSE;
517
517
        const char *datetime;
518
518
        ExifData *ed;
519
 
        
 
519
 
520
520
        image = lookup_widget(widget, "image5");
521
521
        viewport = lookup_widget(widget, "viewport8");
522
522
        label = lookup_widget(widget, "label163");
525
525
        first_button = lookup_widget(widget, "button47");
526
526
        last_button = lookup_widget(widget, "button48");
527
527
        zoom_button = lookup_widget(widget, "button50");
528
 
        
 
528
 
529
529
        height = viewport->allocation.height;
530
 
        
 
530
 
531
531
        switch (move)
532
 
        {       
 
532
        {
533
533
          case  GEOPHOTO_NEXT:
534
534
                if(geocode_photo_list->next)
535
535
                {
580
580
 
581
581
        if (pixbuf)
582
582
                g_object_unref (pixbuf);
583
 
        
 
583
 
584
584
        if(!fullsize)
585
585
        {
586
586
                pixbuf = gdk_pixbuf_new_from_file_at_scale((const gchar *) geocode_photo_list->data, -1, height, TRUE, &err);
587
587
                if(!pixbuf)
588
588
                        printf (_("%s loading pixbuf failed - actually this should not happen\n"), __PRETTY_FUNCTION__);
589
 
                
 
589
 
590
590
                gtk_image_set_from_pixbuf(GTK_IMAGE(image), pixbuf);
591
591
        }
592
592
        else
594
594
                gtk_image_set_from_file(GTK_IMAGE(image), (const gchar *) geocode_photo_list->data);
595
595
                img_width = gdk_pixbuf_get_width(gtk_image_get_pixbuf(GTK_IMAGE(image)));
596
596
        }
597
 
                
 
597
 
598
598
        ed = exif_data_new_from_file((const gchar *) geocode_photo_list->data);
599
599
        if (!ed) {
600
600
                printf("File not readable or no EXIF data in file %s\n", (const gchar *) geocode_photo_list->data);
603
603
 
604
604
        datetime = show_tag(ed, EXIF_IFD_0, EXIF_TAG_DATE_TIME);
605
605
        strptime(datetime, "%Y:%m:%d %H:%M:%S", &tm_photo);
606
 
        
 
606
 
607
607
        gtk_label_set_label(GTK_LABEL(label), datetime);
608
608
        update_gps_time_label();
609
 
        
 
609
 
610
610
        gtk_widget_show (image);
611
611
}
612
612
 
617
617
        GtkWidget *entry, *label1, *label2, *combobox;
618
618
        const char *txt;
619
619
        char *label_txt;
620
 
        
 
620
 
621
621
        entry = lookup_widget(dialog_image_data, "entry28");
622
622
        combobox = lookup_widget(dialog_image_data, "combobox7");
623
 
        
 
623
 
624
624
        geocode_timezone = gtk_combo_box_get_active(GTK_COMBO_BOX(combobox))-12;
625
 
        
 
625
 
626
626
        label1 = lookup_widget(dialog_photo_correlate, "label172");
627
627
        label2 = lookup_widget(dialog_photo_correlate, "label174");
628
 
        
 
628
 
629
629
        txt = gtk_entry_get_text(GTK_ENTRY(entry));
630
630
        geocode_correction = atoi(txt);
631
 
        
 
631
 
632
632
        label_txt = g_strdup_printf (ngettext ("  1 second",
633
633
                                               "  %d seconds",
634
634
                                               geocode_correction),
635
635
                                     geocode_correction);
636
636
        gtk_label_set_label(GTK_LABEL(label2), label_txt);
637
 
        
 
637
 
638
638
        label_txt = g_strdup_printf (_("  %d:00h"), geocode_timezone);
639
639
        gtk_label_set_label(GTK_LABEL(label1), label_txt);
640
 
        
 
640
 
641
641
        g_settings_set_int(global_settings, "geocode-correction", geocode_correction);
642
642
        g_settings_set_int(global_settings, "geocode-timezone", geocode_timezone+13);
643
 
        
 
643
 
644
644
        gtk_widget_hide(dialog_image_data);
645
645
        gtk_widget_show(dialog_photo_correlate);
646
646
}
649
649
geo_photo_cancel_dialog_image_data()
650
650
{
651
651
        gtk_widget_hide(dialog_image_data);
652
 
        gtk_widget_show(dialog_photo_correlate);        
 
652
        gtk_widget_show(dialog_photo_correlate);
653
653
}
654
654
 
655
655
 
707
707
        time_t time;
708
708
        struct tm *tm_gps;
709
709
        char buf[1024];
710
 
        
711
 
        
 
710
 
 
711
 
712
712
        label = lookup_widget(dialog_image_data, "label171");
713
713
        entry = lookup_widget(dialog_image_data, "entry28");
714
714
        combobox = lookup_widget(dialog_image_data, "combobox7");
715
 
        
 
715
 
716
716
        correction = atoi(gtk_entry_get_text(GTK_ENTRY(entry)));
717
717
        timezone = gtk_combo_box_get_active(GTK_COMBO_BOX(combobox))-12;
718
718
 
721
721
        tm_gps = localtime(&time);
722
722
 
723
723
        strftime(buf, sizeof(buf), "<span color=\"#009\">%a %Y-%m-%d %H:%M:%S</span>", tm_gps);
724
 
        
 
724
 
725
725
        gtk_label_set_label(GTK_LABEL(label), buf);
726
726
}
727
727
 
831
831
        res = g_spawn_sync (NULL, argv, NULL,
832
832
                            G_SPAWN_SEARCH_PATH,
833
833
                            NULL, NULL,
834
 
                            &standard_output, 
 
834
                            &standard_output,
835
835
                            &standard_error,
836
836
                            &exit_status,
837
837
                            &err);
838
838
 
839
839
        g_free (timezone);
840
840
        g_free (correction);
841
 
        
 
841
 
842
842
        if(!res)
843
843
        {
844
844
                fprintf (stderr, _("Error running \"%s\": %s\n"),
847
847
        }
848
848
 
849
849
        gdk_threads_enter();
850
 
        
 
850
 
851
851
        label = lookup_widget(dialog_geocode_result, "label177");
852
852
        gtk_label_set_text(GTK_LABEL(label), g_strdup(standard_output));
853
 
        
 
853
 
854
854
        if(add_to_database)
855
855
        {
856
856
                GList *photos;
874
874
                item = lookup_widget(menu1, "item9");
875
875
                gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(item), TRUE);
876
876
        }
877
 
        
 
877
 
878
878
        gdk_threads_leave();
879
879
 
880
880
        return NULL;