annotate src/bar_exif.c @ 276:4f526d436873

Implement secure rc file saving. First data is written to a temporary file, then if nothing was wrong, this file is renamed to the final name. This way the risk of corrupted rc file is greatly reduced. The code is borrowed from ELinks (http://elinks.cz).
author zas_
date Tue, 08 Apr 2008 21:55:58 +0000
parents 395d7115df14
children 9995c5fb202a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1 /*
196
f6e307c7bad6 rename GQview -> Geeqie over the code
nadvornik
parents: 188
diff changeset
2 * Geeqie
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3 * (C) 2004 John Ellis
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
4 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
5 * Author: John Ellis
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
6 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
7 * This software is released under the GNU General Public License (GNU GPL).
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
8 * Please read the included file COPYING for more information.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
9 * This software comes with no warranty of any kind, use at your own risk!
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
10 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
11
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
12
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
13 #include "gqview.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
14 #include "bar_exif.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
15
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
16 #include "exif.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
17 #include "ui_bookmark.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
18 #include "ui_misc.h"
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 114
diff changeset
19 #include "filelist.h"
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
20
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
21 #include <math.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
22
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
23 #define EXIF_BAR_SIZE_INCREMENT 48
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
24 #define EXIF_BAR_ARROW_SIZE 7
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
25
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
26 #define EXIF_BAR_CUSTOM_COUNT 20
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
27
48
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
28 #define BAR_EXIF_DATA_COLUMN_WIDTH 250
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
29
95
eb9bb29cbd65 Fri Nov 3 11:40:48 2006 John Ellis <johne@verizon.net>
gqview
parents: 48
diff changeset
30 static const gchar *bar_exif_key_list_real[] = {
182
8a417f10ba09 more exiv2 fixes
nadvornik
parents: 181
diff changeset
31 "fCamera",
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
32 "fDateTime",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
33 "fShutterSpeed",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
34 "fAperture",
181
c01dd7c9c7dc unified tag names between exiv2 and internal rxif parser
nadvornik
parents: 179
diff changeset
35 "Exif.Photo.ExposureProgram",
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
36 "fExposureBias",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
37 "fISOSpeedRating",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
38 "fFocalLength",
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
39 "fFocalLength35mmFilm",
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
40 "fSubjectDistance",
181
c01dd7c9c7dc unified tag names between exiv2 and internal rxif parser
nadvornik
parents: 179
diff changeset
41 "Exif.Photo.MeteringMode",
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
42 "fFlash",
181
c01dd7c9c7dc unified tag names between exiv2 and internal rxif parser
nadvornik
parents: 179
diff changeset
43 "Exif.Photo.LightSource",
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
44 "fResolution",
181
c01dd7c9c7dc unified tag names between exiv2 and internal rxif parser
nadvornik
parents: 179
diff changeset
45 "Exif.Image.Orientation",
c01dd7c9c7dc unified tag names between exiv2 and internal rxif parser
nadvornik
parents: 179
diff changeset
46 "Exif.Image.ImageDescription",
182
8a417f10ba09 more exiv2 fixes
nadvornik
parents: 181
diff changeset
47 "Exif.Image.Copyright"
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
48 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
49
95
eb9bb29cbd65 Fri Nov 3 11:40:48 2006 John Ellis <johne@verizon.net>
gqview
parents: 48
diff changeset
50 const gchar **bar_exif_key_list = bar_exif_key_list_real;
eb9bb29cbd65 Fri Nov 3 11:40:48 2006 John Ellis <johne@verizon.net>
gqview
parents: 48
diff changeset
51 const gint bar_exif_key_count = (sizeof(bar_exif_key_list_real) / sizeof(gchar *));
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
52
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
53 ExifUI ExifUIList[]={
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
54 { 0, 0, EXIF_UI_ON, "fCamera"},
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
55 { 0, 0, EXIF_UI_ON, "fDateTime"},
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
56 { 0, 0, EXIF_UI_ON, "fShutterSpeed"},
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
57 { 0, 0, EXIF_UI_ON, "fAperture"},
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
58 { 0, 0, EXIF_UI_IFSET, "fExposureBias"},
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
59 { 0, 0, EXIF_UI_IFSET, "fISOSpeedRating"},
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
60 { 0, 0, EXIF_UI_ON, "fFocalLength"},
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
61 { 0, 0, EXIF_UI_IFSET, "fFocalLength35mmFilm"},
258
395d7115df14 Change default exif order a bit to move up common and useful
zas_
parents: 233
diff changeset
62 { 0, 0, EXIF_UI_ON, "fFlash"},
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
63 { 0, 0, EXIF_UI_IFSET, "fSubjectDistance"},
258
395d7115df14 Change default exif order a bit to move up common and useful
zas_
parents: 233
diff changeset
64 { 0, 0, EXIF_UI_IFSET, "Exif.Photo.ExposureProgram"},
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
65 { 0, 0, EXIF_UI_IFSET, "Exif.Photo.MeteringMode"},
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
66 { 0, 0, EXIF_UI_IFSET, "Exif.Photo.LightSource"},
258
395d7115df14 Change default exif order a bit to move up common and useful
zas_
parents: 233
diff changeset
67 { 0, 0, EXIF_UI_IFSET, "fSubjectDistance"},
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
68 { 0, 0, EXIF_UI_OFF, "fResolution"},
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
69 { 0, 0, EXIF_UI_IFSET, "Exif.Image.Orientation"},
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
70 { 0, 0, EXIF_UI_IFSET, "Exif.Image.ImageDescription"},
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
71 { 0, 0, EXIF_UI_IFSET, "Exif.Image.Copyright"},
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
72 { 0, 0, EXIF_UI_OFF, NULL}
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
73 };
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
74
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
75
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
76 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
77 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
78 * table util
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
79 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
80 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
81
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
82 static void table_add_line_custom(GtkWidget *table, gint x, gint y,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
83 const gchar *text1, const gchar *text2,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
84 GtkWidget **label1, GtkWidget **label2)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
85 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
86 GtkWidget *label;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
87 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
88
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
89 buf = g_strconcat((text1) ? text1 : "fixme", ":", NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
90 if (!text2) text2 = "";
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
91
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
92 label = gtk_label_new(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
93 gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
94 pref_label_bold(label, TRUE, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
95 gtk_table_attach(GTK_TABLE(table), label,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
96 x, x + 1, y, y + 1,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
97 GTK_FILL, GTK_FILL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
98 2, 2);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
99 *label1 = label;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
100
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
101 label = gtk_label_new(text2);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
102 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
103 gtk_table_attach(GTK_TABLE(table), label,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
104 x + 1, x + 2, y, y + 1,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
105 GTK_FILL, GTK_FILL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
106 2, 2);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
107 *label2 = label;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
108
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
109 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
110 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
111
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
112 static GtkWidget *table_add_line(GtkWidget *table, gint x, gint y,
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
113 const gchar *description, const gchar *text,
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
114 GtkWidget **keyret)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
115 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
116 GtkWidget *key;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
117 GtkWidget *label;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
118
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
119 table_add_line_custom(table, x, y, description, text, &key, &label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
120 gtk_widget_show(key);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
121 gtk_widget_show(label);
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
122 if (keyret) *keyret = key;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
123
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
124 return label;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
125 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
126
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
127
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
128 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
129 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
130 * EXIF bar
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
131 *-------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
132 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
133
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
134 typedef struct _ExifBar ExifBar;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
135 struct _ExifBar
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
136 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
137 GtkWidget *vbox;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
138 GtkWidget *scrolled;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
139 GtkWidget *table;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
140 GtkWidget *advanced_scrolled;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
141 GtkWidget *listview;
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
142 GtkWidget **keys;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
143 GtkWidget **labels;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
144
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
145 GtkWidget *custom_sep;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
146 GtkWidget *custom_name[EXIF_BAR_CUSTOM_COUNT];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
147 GtkWidget *custom_value[EXIF_BAR_CUSTOM_COUNT];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
148
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 114
diff changeset
149 FileData *fd;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
150
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
151 gint allow_search;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
152 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
153
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
154 enum {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
155 EXIF_ADVCOL_ENABLED = 0,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
156 EXIF_ADVCOL_TAG,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
157 EXIF_ADVCOL_NAME,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
158 EXIF_ADVCOL_VALUE,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
159 EXIF_ADVCOL_FORMAT,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
160 EXIF_ADVCOL_ELEMENTS,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
161 EXIF_ADVCOL_DESCRIPTION,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
162 EXIF_ADVCOL_COUNT
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
163 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
164
95
eb9bb29cbd65 Fri Nov 3 11:40:48 2006 John Ellis <johne@verizon.net>
gqview
parents: 48
diff changeset
165 gchar *bar_exif_validate_text(gchar *text)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
166 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
167 if (text && !g_utf8_validate(text, strlen(text), NULL))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
168 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
169 gchar *tmp = text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
170 text = g_convert(tmp, strlen(tmp), "UTF-8", "ISO-8859-1", NULL, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
171 g_free(tmp);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
172 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
173 return text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
174 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
175
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
176 static void bar_exif_sensitive(ExifBar *eb, gint enable)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
177 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
178 gtk_widget_set_sensitive(eb->table, enable);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
179 if (eb->advanced_scrolled) gtk_widget_set_sensitive(eb->advanced_scrolled, enable);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
180 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
181
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
182 static gint bar_exif_row_enabled(const gchar *name)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
183 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
184 GList *list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
185
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
186 list = history_list_get_by_key("exif_extras");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
187 while (list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
188 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
189 if (name && strcmp(name, (gchar *)(list->data)) == 0) return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
190 list = list->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
191 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
192
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
193 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
194 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
195
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
196 static void bar_exif_update(ExifBar *eb)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
197 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
198 ExifData *exif;
233
f9634d21ad35 Remove unused variable declarations.
zas_
parents: 222
diff changeset
199 gint i;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
200
188
0584cb78aa14 write comment and keywords to xmp, sidecars are used if exist
nadvornik
parents: 185
diff changeset
201 exif = exif_read_fd(eb->fd, FALSE);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
202
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
203 if (!exif)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
204 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
205 bar_exif_sensitive(eb, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
206 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
207 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
208
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
209 bar_exif_sensitive(eb, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
210
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
211 if (GTK_WIDGET_VISIBLE(eb->scrolled))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
212 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
213 GList *list;
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
214 for (i = 0; ExifUIList[i].key; i++)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
215 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
216 gchar *text;
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
217
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
218 if (ExifUIList[i].current == EXIF_UI_OFF)
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
219 {
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
220 gtk_widget_hide(eb->labels[i]);
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
221 gtk_widget_hide(eb->keys[i]);
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
222 continue;
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
223 }
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
224 text = exif_get_data_as_text(exif, ExifUIList[i].key);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
225 text = bar_exif_validate_text(text);
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
226 if (ExifUIList[i].current == EXIF_UI_IFSET
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
227 && (!text || !*text))
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
228 {
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
229 gtk_widget_hide(eb->labels[i]);
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
230 gtk_widget_hide(eb->keys[i]);
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
231 continue;
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
232 }
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
233 gtk_widget_show(eb->labels[i]);
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
234 gtk_widget_show(eb->keys[i]);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
235 gtk_label_set_text(GTK_LABEL(eb->labels[i]), text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
236 g_free(text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
237 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
238
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
239 list = g_list_last(history_list_get_by_key("exif_extras"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
240 if (list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
241 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
242 gtk_widget_show(eb->custom_sep);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
243 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
244 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
245 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
246 gtk_widget_hide(eb->custom_sep);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
247 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
248 i = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
249 while (list && i < EXIF_BAR_CUSTOM_COUNT)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
250 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
251 gchar *text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
252 gchar *name;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
253 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
254
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
255 name = list->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
256 list = list->prev;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
257
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
258 text = exif_get_data_as_text(exif, name);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
259 text = bar_exif_validate_text(text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
260
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
261 buf = g_strconcat(name, ":", NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
262 gtk_label_set_text(GTK_LABEL(eb->custom_name[i]), buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
263 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
264 gtk_label_set_text(GTK_LABEL(eb->custom_value[i]), text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
265 g_free(text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
266
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
267 gtk_widget_show(eb->custom_name[i]);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
268 gtk_widget_show(eb->custom_value[i]);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
269
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
270 i++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
271 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
272 while (i < EXIF_BAR_CUSTOM_COUNT)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
273 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
274 gtk_widget_hide(eb->custom_name[i]);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
275 gtk_widget_hide(eb->custom_value[i]);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
276 i++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
277 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
278 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
279
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
280 if (eb->advanced_scrolled && GTK_WIDGET_VISIBLE(eb->advanced_scrolled))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
281 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
282 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
283 GtkTreeIter iter;
176
695e1ad3b169 simplified exif.h, moved implementation-specific stuff to exif-int.h
nadvornik
parents: 138
diff changeset
284 ExifItem *item;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
285
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
286 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(eb->listview)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
287 gtk_list_store_clear(store);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
288
176
695e1ad3b169 simplified exif.h, moved implementation-specific stuff to exif-int.h
nadvornik
parents: 138
diff changeset
289 item = exif_get_first_item(exif);
695e1ad3b169 simplified exif.h, moved implementation-specific stuff to exif-int.h
nadvornik
parents: 138
diff changeset
290 while (item)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
291 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
292 gchar *tag;
185
354da67a7ca2 read also iptc and xmp
nadvornik
parents: 182
diff changeset
293 gchar *tag_name;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
294 gchar *text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
295 const gchar *format;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
296 gchar *elements;
185
354da67a7ca2 read also iptc and xmp
nadvornik
parents: 182
diff changeset
297 gchar *description;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
298
176
695e1ad3b169 simplified exif.h, moved implementation-specific stuff to exif-int.h
nadvornik
parents: 138
diff changeset
299 tag = g_strdup_printf("0x%04x", exif_item_get_tag_id(item));
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
300 tag_name = exif_item_get_tag_name(item);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
301 format = exif_item_get_format_name(item, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
302 text = exif_item_get_data_as_text(item);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
303 text = bar_exif_validate_text(text);
176
695e1ad3b169 simplified exif.h, moved implementation-specific stuff to exif-int.h
nadvornik
parents: 138
diff changeset
304 elements = g_strdup_printf("%d", exif_item_get_elements(item));
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
305 description = exif_item_get_description(item);
182
8a417f10ba09 more exiv2 fixes
nadvornik
parents: 181
diff changeset
306 if (!description) description = g_strdup("");
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
307 gtk_list_store_append(store, &iter);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
308 gtk_list_store_set(store, &iter,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
309 EXIF_ADVCOL_ENABLED, bar_exif_row_enabled(tag_name),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
310 EXIF_ADVCOL_TAG, tag,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
311 EXIF_ADVCOL_NAME, tag_name,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
312 EXIF_ADVCOL_VALUE, text,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
313 EXIF_ADVCOL_FORMAT, format,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
314 EXIF_ADVCOL_ELEMENTS, elements,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
315 EXIF_ADVCOL_DESCRIPTION, description, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
316 g_free(tag);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
317 g_free(text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
318 g_free(elements);
182
8a417f10ba09 more exiv2 fixes
nadvornik
parents: 181
diff changeset
319 g_free(description);
185
354da67a7ca2 read also iptc and xmp
nadvornik
parents: 182
diff changeset
320 g_free(tag_name);
176
695e1ad3b169 simplified exif.h, moved implementation-specific stuff to exif-int.h
nadvornik
parents: 138
diff changeset
321 item = exif_get_next_item(exif);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
322 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
323 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
324
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
325 exif_free(exif);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
326 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
327
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
328 static void bar_exif_clear(ExifBar *eb)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
329 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
330 gint i;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
331
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
332 if (!GTK_WIDGET_SENSITIVE(eb->labels[0])) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
333
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
334 for (i = 0; ExifUIList[i].key; i++)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
335 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
336 gtk_label_set_text(GTK_LABEL(eb->labels[i]), "");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
337 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
338 for (i = 0; i < EXIF_BAR_CUSTOM_COUNT; i++)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
339 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
340 gtk_label_set_text(GTK_LABEL(eb->custom_value[i]), "");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
341 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
342
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
343 if (eb->listview)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
344 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
345 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
346
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
347 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(eb->listview)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
348 gtk_list_store_clear(store);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
349 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
350 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
351
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 114
diff changeset
352 void bar_exif_set(GtkWidget *bar, FileData *fd)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
353 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
354 ExifBar *eb;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
355
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
356 eb = g_object_get_data(G_OBJECT(bar), "bar_exif_data");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
357 if (!eb) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
358
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
359 /* store this, advanced view toggle needs to reload data */
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 114
diff changeset
360 file_data_unref(eb->fd);
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 114
diff changeset
361 eb->fd = file_data_ref(fd);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
362
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
363 bar_exif_clear(eb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
364 bar_exif_update(eb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
365 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
366
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
367 static void bar_exif_row_toggled_cb(GtkCellRendererToggle *toggle, const gchar *path, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
368 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
369 GtkWidget *listview = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
370 GtkTreeModel *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
371 GtkTreeIter iter;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
372 GtkTreePath *tpath;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
373 gchar *name = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
374 gboolean active;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
375
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
376 store = gtk_tree_view_get_model(GTK_TREE_VIEW(listview));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
377
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
378 tpath = gtk_tree_path_new_from_string(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
379 gtk_tree_model_get_iter(store, &iter, tpath);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
380 gtk_tree_path_free(tpath);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
381
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
382 gtk_tree_model_get(store, &iter, EXIF_ADVCOL_ENABLED, &active,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
383 EXIF_ADVCOL_NAME, &name, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
384 active = (!active);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
385
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
386 if (active &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
387 g_list_length(history_list_get_by_key("exif_extras")) >= EXIF_BAR_CUSTOM_COUNT)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
388 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
389 active = FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
390 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
391
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
392 gtk_list_store_set(GTK_LIST_STORE(store), &iter, EXIF_ADVCOL_ENABLED, active, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
393
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
394 if (active)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
395 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
396 history_list_add_to_key("exif_extras", name, EXIF_BAR_CUSTOM_COUNT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
397 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
398 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
399 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
400 history_list_item_change("exif_extras", name, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
401 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
402
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
403 g_free(name);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
404 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
405
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
406 static void bar_exif_add_column_check(GtkWidget *listview, const gchar *title, gint n)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
407 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
408 GtkTreeViewColumn *column;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
409 GtkCellRenderer *renderer;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
410
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
411 column = gtk_tree_view_column_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
412 gtk_tree_view_column_set_title(column, title);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
413 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
414
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
415 renderer = gtk_cell_renderer_toggle_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
416 gtk_tree_view_column_pack_start(column, renderer, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
417 gtk_tree_view_column_add_attribute(column, renderer, "active", n);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
418 gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
419
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
420 g_signal_connect(G_OBJECT(renderer), "toggled",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
421 G_CALLBACK(bar_exif_row_toggled_cb), listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
422 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
423
48
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
424 static void bar_exif_add_column(GtkWidget *listview, const gchar *title, gint n, gint sizable)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
425 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
426 GtkTreeViewColumn *column;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
427 GtkCellRenderer *renderer;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
428
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
429 column = gtk_tree_view_column_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
430 gtk_tree_view_column_set_title(column, title);
48
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
431
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
432 if (sizable)
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
433 {
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
434 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
435 gtk_tree_view_column_set_fixed_width(column, BAR_EXIF_DATA_COLUMN_WIDTH);
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
436 gtk_tree_view_column_set_resizable(column, TRUE);
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
437 }
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
438 else
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
439 {
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
440 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
441 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
442
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
443 renderer = gtk_cell_renderer_text_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
444 gtk_tree_view_column_pack_start(column, renderer, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
445 gtk_tree_view_column_add_attribute(column, renderer, "text", n);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
446 gtk_tree_view_append_column(GTK_TREE_VIEW(listview), column);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
447 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
448
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
449 static void bar_exif_advanced_build_view(ExifBar *eb)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
450 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
451 GtkListStore *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
452
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
453 if (eb->listview) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
454
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
455 store = gtk_list_store_new(7, G_TYPE_BOOLEAN,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
456 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
457 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
458 eb->listview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
459 g_object_unref(store);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
460
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
461 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(eb->listview), TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
462 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(eb->listview), TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
463
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
464 if (eb->allow_search)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
465 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
466 gtk_tree_view_set_search_column(GTK_TREE_VIEW(eb->listview), EXIF_ADVCOL_NAME);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
467 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
468 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
469 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
470 gtk_tree_view_set_enable_search(GTK_TREE_VIEW(eb->listview), FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
471 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
472
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
473 bar_exif_add_column_check(eb->listview, "", EXIF_ADVCOL_ENABLED);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
474
48
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
475 bar_exif_add_column(eb->listview, _("Tag"), EXIF_ADVCOL_TAG, FALSE);
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
476 bar_exif_add_column(eb->listview, _("Name"), EXIF_ADVCOL_NAME, FALSE);
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
477 bar_exif_add_column(eb->listview, _("Value"), EXIF_ADVCOL_VALUE, TRUE);
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
478 bar_exif_add_column(eb->listview, _("Format"), EXIF_ADVCOL_FORMAT, FALSE);
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
479 bar_exif_add_column(eb->listview, _("Elements"), EXIF_ADVCOL_ELEMENTS, FALSE);
6948407f52a5 Fri Jun 3 18:43:46 2005 John Ellis <johne@verizon.net>
gqview
parents: 9
diff changeset
480 bar_exif_add_column(eb->listview, _("Description"), EXIF_ADVCOL_DESCRIPTION, FALSE);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
481
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
482 eb->advanced_scrolled = gtk_scrolled_window_new(NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
483 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(eb->advanced_scrolled), GTK_SHADOW_IN);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
484 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(eb->advanced_scrolled),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
485 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
486 gtk_box_pack_start(GTK_BOX(eb->vbox), eb->advanced_scrolled, TRUE, TRUE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
487 gtk_container_add(GTK_CONTAINER(eb->advanced_scrolled), eb->listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
488 gtk_widget_show(eb->listview);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
489 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
490
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
491 static void bar_exif_advanced_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
492 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
493 ExifBar *eb = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
494 gint advanced;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
495
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
496 advanced = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
497
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
498 if (advanced)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
499 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
500 gtk_widget_hide(eb->scrolled);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
501 bar_exif_advanced_build_view(eb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
502 gtk_widget_show(eb->advanced_scrolled);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
503 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
504 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
505 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
506 gtk_widget_hide(eb->advanced_scrolled);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
507 gtk_widget_show(eb->scrolled);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
508 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
509
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
510 bar_exif_update(eb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
511 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
512
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
513 gint bar_exif_is_advanced(GtkWidget *bar)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
514 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
515 ExifBar *eb;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
516
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
517 eb = g_object_get_data(G_OBJECT(bar), "bar_exif_data");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
518 if (!eb) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
519
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
520 return (eb->advanced_scrolled && GTK_WIDGET_VISIBLE(eb->advanced_scrolled));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
521 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
522
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
523 void bar_exif_close(GtkWidget *bar)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
524 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
525 ExifBar *eb;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
526
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
527 eb = g_object_get_data(G_OBJECT(bar), "bar_exif_data");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
528 if (!eb) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
529
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
530 gtk_widget_destroy(eb->vbox);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
531 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
532
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
533 static void bar_exif_size(ExifBar *eb, gint val)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
534 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
535 gint size;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
536
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
537 size = eb->vbox->allocation.width;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
538 size = CLAMP(size + val, EXIF_BAR_SIZE_INCREMENT * 2, EXIF_BAR_SIZE_INCREMENT * 16);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
539
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
540 gtk_widget_set_size_request(eb->vbox, size, -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
541 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
542
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
543 static void bar_exif_larger(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
544 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
545 ExifBar *eb = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
546
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
547 bar_exif_size(eb, EXIF_BAR_SIZE_INCREMENT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
548 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
549
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
550 static void bar_exif_smaller(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
551 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
552 ExifBar *eb = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
553
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
554 bar_exif_size(eb, -EXIF_BAR_SIZE_INCREMENT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
555 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
556
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
557 static void bar_exif_destroy(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
558 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
559 ExifBar *eb = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
560
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
561 g_free(eb->keys);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
562 g_free(eb->labels);
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 114
diff changeset
563 file_data_unref(eb->fd);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
564 g_free(eb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
565 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
566
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 114
diff changeset
567 GtkWidget *bar_exif_new(gint show_title, FileData *fd, gint advanced, GtkWidget *bounding_widget)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
568 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
569 ExifBar *eb;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
570 GtkWidget *table;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
571 GtkWidget *viewport;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
572 GtkWidget *hbox;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
573 GtkWidget *button;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
574 gint i;
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
575 gint exif_len;
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
576
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
577 for (exif_len = 0; ExifUIList[exif_len].key; exif_len++)
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
578 ;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
579
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
580 eb = g_new0(ExifBar, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
581
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
582 eb->keys = g_new0(GtkWidget *, exif_len);
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
583 eb->labels = g_new0(GtkWidget *, exif_len);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
584
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
585 eb->vbox = gtk_vbox_new(FALSE, PREF_PAD_GAP);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
586 g_object_set_data(G_OBJECT(eb->vbox), "bar_exif_data", eb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
587 g_signal_connect_after(G_OBJECT(eb->vbox), "destroy",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
588 G_CALLBACK(bar_exif_destroy), eb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
589
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
590 eb->allow_search = !show_title;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
591
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
592 if (show_title)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
593 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
594 GtkWidget *box;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
595 GtkWidget *label;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
596 GtkWidget *button;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
597 GtkWidget *arrow;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
598
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
599 box = gtk_hbox_new(FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
600
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
601 label = sizer_new(eb->vbox, bounding_widget, SIZER_POS_LEFT);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
602 sizer_set_limits(label, EXIF_BAR_SIZE_INCREMENT * 2, -1, -1 , -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
603 gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
604 gtk_widget_show(label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
605
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
606 label = gtk_label_new(_("Exif"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
607 pref_label_bold(label, TRUE, FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
608 gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
609 gtk_widget_show(label);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
610
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
611 button = gtk_button_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
612 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
613 g_signal_connect(G_OBJECT(button), "clicked",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
614 G_CALLBACK(bar_exif_smaller), eb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
615 gtk_box_pack_end(GTK_BOX(box), button, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
616 arrow = gtk_arrow_new(GTK_ARROW_RIGHT, GTK_SHADOW_NONE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
617 gtk_widget_set_size_request(arrow, EXIF_BAR_ARROW_SIZE, EXIF_BAR_ARROW_SIZE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
618 gtk_container_add(GTK_CONTAINER(button), arrow);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
619 gtk_widget_show(arrow);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
620 gtk_widget_show(button);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
621
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
622 button = gtk_button_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
623 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
624 g_signal_connect(G_OBJECT(button), "clicked",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
625 G_CALLBACK(bar_exif_larger), eb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
626 gtk_box_pack_end(GTK_BOX(box), button, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
627 arrow = gtk_arrow_new(GTK_ARROW_LEFT, GTK_SHADOW_NONE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
628 gtk_widget_set_size_request(arrow, EXIF_BAR_ARROW_SIZE, EXIF_BAR_ARROW_SIZE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
629 gtk_container_add(GTK_CONTAINER(button), arrow);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
630 gtk_widget_show(arrow);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
631 gtk_widget_show(button);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
632
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
633 gtk_box_pack_start(GTK_BOX(eb->vbox), box, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
634 gtk_widget_show(box);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
635 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
636
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
637
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
638 table = gtk_table_new(2, exif_len + 1 + EXIF_BAR_CUSTOM_COUNT, FALSE);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
639
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
640 eb->table = table;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
641
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
642 for (i = 0; ExifUIList[i].key; i++)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
643 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
644 const gchar *text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
645
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
646 text = exif_get_description_by_key(ExifUIList[i].key);
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
647 eb->labels[i] = table_add_line(table, 0, i, text, NULL,
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
648 &eb->keys[i]);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
649 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
650
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
651 eb->custom_sep = gtk_hseparator_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
652 gtk_table_attach(GTK_TABLE(table), eb->custom_sep, 0, 1,
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
653 exif_len, exif_len + 1,
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
654 GTK_FILL, GTK_FILL, 2, 2);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
655
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
656 for (i = 0; i < EXIF_BAR_CUSTOM_COUNT; i++)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
657 {
222
77f1bcc6c161 various exif improvements based on patch by Uwe Ohse
nadvornik
parents: 204
diff changeset
658 table_add_line_custom(table, 0, exif_len + 1 + i,
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
659 "", "", &eb->custom_name[i], &eb->custom_value[i]);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
660 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
661
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
662 eb->scrolled = gtk_scrolled_window_new(NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
663 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(eb->scrolled),
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
664 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
665
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
666 viewport = gtk_viewport_new(NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
667 gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_NONE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
668 gtk_container_add(GTK_CONTAINER(eb->scrolled), viewport);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
669 gtk_widget_show(viewport);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
670
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
671 gtk_container_add(GTK_CONTAINER(viewport), table);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
672 gtk_widget_show(table);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
673
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
674 gtk_box_pack_start(GTK_BOX(eb->vbox), eb->scrolled, TRUE, TRUE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
675
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
676 hbox = gtk_hbox_new(FALSE, PREF_PAD_SPACE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
677 gtk_box_pack_end(GTK_BOX(eb->vbox), hbox, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
678 gtk_widget_show(hbox);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
679
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
680 button = gtk_check_button_new_with_label(_("Advanced view"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
681 if (advanced) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
682 g_signal_connect(G_OBJECT(button), "toggled",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
683 G_CALLBACK(bar_exif_advanced_cb), eb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
684 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
685 gtk_widget_show(button);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
686
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
687 eb->advanced_scrolled = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
688 eb->listview = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
689
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
690 if (advanced)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
691 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
692 bar_exif_advanced_build_view(eb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
693 gtk_widget_show(eb->advanced_scrolled);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
694 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
695 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
696 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
697 gtk_widget_show(eb->scrolled);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
698 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
699
138
71e1ebee420e replaced gchar* path with FileData *fd
nadvornik
parents: 114
diff changeset
700 eb->fd = file_data_ref(fd);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
701 bar_exif_update(eb);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
702
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
703 return eb->vbox;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
704 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
705