173 GtkWidget *dialog = gtk_dialog_new_with_buttons(_(
"select tag"), GTK_WINDOW(
d->dialog), GTK_DIALOG_DESTROY_WITH_PARENT,
174 _(
"add"), GTK_RESPONSE_ACCEPT, _(
"done"), GTK_RESPONSE_NONE, NULL);
176 gtk_window_set_default_size(GTK_WINDOW(dialog), 300, -1);
177 GtkWidget *area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
179 gtk_container_set_border_width(GTK_CONTAINER(vbox), 8);
180 gtk_container_add(GTK_CONTAINER(area), vbox);
184 d->sel_entry = entry;
185 gtk_entry_set_text(GTK_ENTRY(entry),
"");
186 gtk_widget_set_tooltip_text(entry, _(
"list filter"));
187 gtk_box_pack_start(GTK_BOX(vbox), entry,
TRUE,
TRUE, 0);
190 GtkWidget *w = gtk_scrolled_window_new(NULL, NULL);
192 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(w), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
194 gtk_box_pack_start(GTK_BOX(vbox), w,
TRUE,
TRUE, 0);
195 GtkTreeView *
view = GTK_TREE_VIEW(gtk_tree_view_new());
197 gtk_container_add(GTK_CONTAINER(w), GTK_WIDGET(
view));
198 gtk_widget_set_tooltip_text(GTK_WIDGET(
view), _(
"list of available tags. click 'add' button or double-click on tag to add the selected one"));
199 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(
view), GTK_SELECTION_SINGLE);
200 GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
201 GtkTreeViewColumn *col = gtk_tree_view_column_new_with_attributes(_(
"tag"), renderer,
"text", 0, NULL);
202 gtk_tree_view_append_column(
view, col);
203 renderer = gtk_cell_renderer_text_new();
204 col = gtk_tree_view_column_new_with_attributes(_(
"type"), renderer,
"text", 1, NULL);
205 gtk_tree_view_append_column(
view, col);
206 GtkListStore *liststore = gtk_list_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
207 GtkTreeModel *
model = gtk_tree_model_filter_new(GTK_TREE_MODEL(liststore), NULL);
211 for(GList *tag =
d->taglist; tag; tag = g_list_next(tag))
214 gtk_list_store_append(liststore, &iter);
215 const char *tagname = tag->data;
216 char *
type = g_strstr_len(tagname, -1,
",");
233 g_object_unref(
model);
236 #ifdef GDK_WINDOWING_QUARTZ
239 gtk_widget_show_all(dialog);
240 while (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
244 gtk_widget_destroy(dialog);
301 GtkWidget *dialog = gtk_dialog_new_with_buttons(_(
"edit metadata exportation"), GTK_WINDOW(win), GTK_DIALOG_DESTROY_WITH_PARENT,
302 _(
"cancel"), GTK_RESPONSE_NONE, _(
"save"), GTK_RESPONSE_ACCEPT, NULL);
306 gtk_window_set_default_size(GTK_WINDOW(dialog), 300, -1);
307 GtkWidget *area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
310 gtk_container_add(GTK_CONTAINER(area), hbox);
314 gtk_container_set_border_width(GTK_CONTAINER(vbox), 8);
315 gtk_container_add(GTK_CONTAINER(hbox), vbox);
316 GtkWidget *label = gtk_label_new(_(
"general settings"));
317 gtk_box_pack_start(GTK_BOX(vbox), label,
FALSE,
TRUE, 0);
319 gtk_box_pack_start(GTK_BOX(vbox), vbox2,
FALSE,
TRUE, 0);
321 GtkWidget *exiftag = gtk_check_button_new_with_label(_(
"EXIF data"));
322 gtk_widget_set_tooltip_text(exiftag, _(
"export EXIF metadata"));
323 gtk_box_pack_start(GTK_BOX(vbox2), exiftag,
FALSE,
TRUE, 0);
324 GtkWidget *dtmetadata = gtk_check_button_new_with_label(_(
"metadata"));
325 gtk_widget_set_tooltip_text(dtmetadata, _(
"export dt xmp metadata (from metadata editor module)"));
326 gtk_box_pack_start(GTK_BOX(vbox2), dtmetadata,
FALSE,
TRUE, 0);
332 gtk_box_pack_start(GTK_BOX(vbox2), box,
FALSE,
TRUE, 0);
334 gtk_box_pack_start(GTK_BOX(box), vbox3,
FALSE,
TRUE, 10);
335 calculated = gtk_check_button_new_with_label(_(
"only embedded"));
336 gtk_widget_set_tooltip_text(calculated, _(
"per default the interface sends some (limited) metadata beside the image to remote storage.\n"
337 "to avoid this and let only image embedded dt xmp metadata, check this flag.\n"
338 "if remote storage doesn't understand dt xmp metadata, you can use calculated metadata instead"));
339 gtk_box_pack_start(GTK_BOX(vbox3), calculated,
FALSE,
TRUE, 0);
342 GtkWidget *geotag = gtk_check_button_new_with_label(_(
"geo tags"));
343 gtk_widget_set_tooltip_text(geotag, _(
"export geo tags"));
344 gtk_box_pack_start(GTK_BOX(vbox2), geotag,
FALSE,
TRUE, 0);
345 GtkWidget *dttag = gtk_check_button_new_with_label(_(
"tags"));
346 gtk_widget_set_tooltip_text(dttag, _(
"export tags (to Xmp.dc.Subject)"));
347 gtk_box_pack_start(GTK_BOX(vbox2), dttag,
FALSE,
TRUE, 0);
348 g_signal_connect(G_OBJECT(dttag),
"clicked", G_CALLBACK(
_tags_toggled), (gpointer)
d);
351 gtk_box_pack_start(GTK_BOX(vbox2), box,
FALSE,
TRUE, 0);
353 gtk_box_pack_start(GTK_BOX(box), vbox3,
FALSE,
TRUE, 10);
354 d->private = gtk_check_button_new_with_label(_(
"private tags"));
355 gtk_widget_set_tooltip_text(
d->private, _(
"export private tags"));
356 gtk_box_pack_start(GTK_BOX(vbox3),
d->private,
FALSE,
TRUE, 0);
357 d->synonyms = gtk_check_button_new_with_label(_(
"synonyms"));
358 gtk_widget_set_tooltip_text(
d->synonyms, _(
"export tags synonyms"));
359 gtk_box_pack_start(GTK_BOX(vbox3),
d->synonyms,
FALSE,
TRUE, 0);
360 d->omithierarchy = gtk_check_button_new_with_label(_(
"omit hierarchy"));
361 gtk_widget_set_tooltip_text(
d->omithierarchy, _(
"only the last part of the hierarchical tags is included. can be useful if categories are not used"));
362 gtk_box_pack_start(GTK_BOX(vbox3),
d->omithierarchy,
FALSE,
TRUE, 0);
364 GtkWidget *hierarchical = gtk_check_button_new_with_label(_(
"hierarchical tags"));
365 gtk_widget_set_tooltip_text(hierarchical, _(
"export hierarchical tags (to Xmp.lr.Hierarchical Subject)"));
366 gtk_box_pack_start(GTK_BOX(vbox2), hierarchical,
FALSE,
TRUE, 0);
367 GtkWidget *dthistory = gtk_check_button_new_with_label(_(
"develop history"));
368 gtk_widget_set_tooltip_text(dthistory, _(
"export dt development data (recovery purpose in case of loss of database or xmp file)"));
369 gtk_box_pack_start(GTK_BOX(vbox2), dthistory,
FALSE,
TRUE, 0);
373 gtk_container_set_border_width(GTK_CONTAINER(vbox), 8);
374 gtk_container_add(GTK_CONTAINER(hbox), vbox);
375 label = gtk_label_new(_(
"per metadata settings"));
376 gtk_box_pack_start(GTK_BOX(vbox), label,
FALSE,
TRUE, 0);
378 GtkWidget *w = gtk_scrolled_window_new(NULL, NULL);
380 gtk_widget_set_hexpand(w,
TRUE);
381 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(w), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
383 gtk_box_pack_start(GTK_BOX(vbox), w,
TRUE,
TRUE, 0);
384 GtkTreeView *
view = GTK_TREE_VIEW(gtk_tree_view_new());
386 gtk_container_add(GTK_CONTAINER(w), GTK_WIDGET(
view));
387 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(
view), GTK_SELECTION_SINGLE);
388 GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
389 GtkTreeViewColumn *col = gtk_tree_view_column_new_with_attributes(_(
"redefined tag"), renderer,
"text", 0, NULL);
390 gtk_tree_view_append_column(
view, col);
391 renderer = gtk_cell_renderer_text_new();
392 g_object_set(renderer,
"editable",
TRUE, NULL);
393 g_signal_connect(G_OBJECT(renderer),
"edited", G_CALLBACK(
_formula_edited), (gpointer)
d);
395 col = gtk_tree_view_column_new_with_attributes(_(
"formula"), renderer,
"text", 2, NULL);
396 gtk_tree_view_append_column(
view, col);
397 gtk_widget_set_tooltip_text(GTK_WIDGET(
view),
398 _(
"list of calculated metadata\n"
399 "click on '+' button to select and add new metadata\n"
400 "if formula is empty, the corresponding metadata is removed from exported file,\n"
401 "if formula is \'=\', the EXIF metadata is exported even if EXIF data are disabled\n"
402 "otherwise the corresponding metadata is calculated and added to exported file\n"
403 "click on formula cell to edit\n"
404 "type '$(' to activate the completion and see the list of variables"));
407 GtkListStore *liststore = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
408 d->liststore = liststore;
410 gtk_tree_view_set_model(
view, GTK_TREE_MODEL(liststore));
411 g_object_unref(liststore);
417 char *flags_hexa = list->data;
418 flags = strtol(flags_hexa, NULL, 16);
419 list = g_list_remove(list, flags_hexa);
423 for (GList *tags = list; tags; tags = g_list_next(tags))
426 const char *tagname = (
char *)tags->data;
427 tags = g_list_next(tags);
429 const char *formula = (
char *)tags->data;
430 gtk_list_store_append(
d->liststore, &iter);
442 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dttag),
flags &
DT_META_TAG);
453 gtk_box_pack_start(GTK_BOX(vbox), box,
FALSE,
TRUE, 0);
456 gtk_widget_set_tooltip_text(button, _(
"add an output metadata tag"));
457 gtk_box_pack_end(GTK_BOX(box), button,
FALSE,
TRUE, 0);
461 gtk_widget_set_tooltip_text(button, _(
"delete metadata tag"));
462 gtk_box_pack_end(GTK_BOX(box), button,
FALSE,
TRUE, 0);
465#ifdef GDK_WINDOWING_QUARTZ
468 gtk_widget_show_all(dialog);
470 char *newlist = metadata_presets;
471 if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
473 const gint newflags = (
474 (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(exiftag)) ?
DT_META_EXIF : 0) |
475 (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dtmetadata)) ?
DT_META_METADATA : 0) |
476 (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(geotag)) ?
DT_META_GEOTAG : 0) |
477 (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dttag)) ?
DT_META_TAG : 0) |
482 (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dthistory)) ?
DT_META_DT_HISTORY : 0) |
483 (!ondisk ? (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(calculated)) ?
DT_META_CALCULATED : 0) : 0)
486 newlist = g_strdup_printf(
"%x", newflags);
488 gboolean valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(
d->liststore), &iter);
491 char *tagname, *formula;
498 valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(
d->liststore), &iter);
503 gtk_widget_destroy(dialog);