174 GtkWidget *dialog = gtk_dialog_new_with_buttons(_(
"select tag"), GTK_WINDOW(
d->dialog), GTK_DIALOG_DESTROY_WITH_PARENT,
175 _(
"add"), GTK_RESPONSE_ACCEPT, _(
"done"), GTK_RESPONSE_NONE, NULL);
177 gtk_window_set_default_size(GTK_WINDOW(dialog), 300, -1);
178 GtkWidget *area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
180 gtk_container_set_border_width(GTK_CONTAINER(vbox), 8);
181 gtk_container_add(GTK_CONTAINER(area), vbox);
185 d->sel_entry = entry;
186 gtk_entry_set_text(GTK_ENTRY(entry),
"");
187 gtk_widget_set_tooltip_text(entry, _(
"list filter"));
188 gtk_box_pack_start(GTK_BOX(vbox), entry,
TRUE,
TRUE, 0);
191 GtkWidget *w = gtk_scrolled_window_new(NULL, NULL);
193 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(w), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
195 gtk_box_pack_start(GTK_BOX(vbox), w,
TRUE,
TRUE, 0);
196 GtkTreeView *
view = GTK_TREE_VIEW(gtk_tree_view_new());
198 gtk_container_add(GTK_CONTAINER(w), GTK_WIDGET(
view));
199 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"));
200 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(
view), GTK_SELECTION_SINGLE);
201 GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
202 GtkTreeViewColumn *col = gtk_tree_view_column_new_with_attributes(_(
"tag"), renderer,
"text", 0, NULL);
203 gtk_tree_view_append_column(
view, col);
204 renderer = gtk_cell_renderer_text_new();
205 col = gtk_tree_view_column_new_with_attributes(_(
"type"), renderer,
"text", 1, NULL);
206 gtk_tree_view_append_column(
view, col);
207 GtkListStore *liststore = gtk_list_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
208 GtkTreeModel *
model = gtk_tree_model_filter_new(GTK_TREE_MODEL(liststore), NULL);
212 for(GList *tag =
d->taglist; tag; tag = g_list_next(tag))
215 gtk_list_store_append(liststore, &iter);
216 const char *tagname = tag->data;
217 char *
type = g_strstr_len(tagname, -1,
",");
234 g_object_unref(
model);
237 #ifdef GDK_WINDOWING_QUARTZ
240 gtk_widget_show_all(dialog);
241 while (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
245 gtk_widget_destroy(dialog);
302 GtkWidget *dialog = gtk_dialog_new_with_buttons(_(
"edit metadata exportation"), GTK_WINDOW(win), GTK_DIALOG_DESTROY_WITH_PARENT,
303 _(
"cancel"), GTK_RESPONSE_NONE, _(
"save"), GTK_RESPONSE_ACCEPT, NULL);
307 gtk_window_set_default_size(GTK_WINDOW(dialog), 300, -1);
308 GtkWidget *area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
311 gtk_container_add(GTK_CONTAINER(area), hbox);
315 gtk_container_set_border_width(GTK_CONTAINER(vbox), 8);
316 gtk_container_add(GTK_CONTAINER(hbox), vbox);
317 GtkWidget *label = gtk_label_new(_(
"general settings"));
318 gtk_box_pack_start(GTK_BOX(vbox), label,
FALSE,
TRUE, 0);
320 gtk_box_pack_start(GTK_BOX(vbox), vbox2,
FALSE,
TRUE, 0);
322 GtkWidget *exiftag = gtk_check_button_new_with_label(_(
"EXIF data"));
323 gtk_widget_set_tooltip_text(exiftag, _(
"export EXIF metadata"));
324 gtk_box_pack_start(GTK_BOX(vbox2), exiftag,
FALSE,
TRUE, 0);
325 GtkWidget *dtmetadata = gtk_check_button_new_with_label(_(
"metadata"));
326 gtk_widget_set_tooltip_text(dtmetadata, _(
"export dt xmp metadata (from metadata editor module)"));
327 gtk_box_pack_start(GTK_BOX(vbox2), dtmetadata,
FALSE,
TRUE, 0);
333 gtk_box_pack_start(GTK_BOX(vbox2), box,
FALSE,
TRUE, 0);
335 gtk_box_pack_start(GTK_BOX(box), vbox3,
FALSE,
TRUE, 10);
336 calculated = gtk_check_button_new_with_label(_(
"only embedded"));
337 gtk_widget_set_tooltip_text(calculated, _(
"per default the interface sends some (limited) metadata beside the image to remote storage.\n"
338 "to avoid this and let only image embedded dt xmp metadata, check this flag.\n"
339 "if remote storage doesn't understand dt xmp metadata, you can use calculated metadata instead"));
340 gtk_box_pack_start(GTK_BOX(vbox3), calculated,
FALSE,
TRUE, 0);
343 GtkWidget *geotag = gtk_check_button_new_with_label(_(
"geo tags"));
344 gtk_widget_set_tooltip_text(geotag, _(
"export geo tags"));
345 gtk_box_pack_start(GTK_BOX(vbox2), geotag,
FALSE,
TRUE, 0);
346 GtkWidget *dttag = gtk_check_button_new_with_label(_(
"tags"));
347 gtk_widget_set_tooltip_text(dttag, _(
"export tags (to Xmp.dc.Subject)"));
348 gtk_box_pack_start(GTK_BOX(vbox2), dttag,
FALSE,
TRUE, 0);
349 g_signal_connect(G_OBJECT(dttag),
"clicked", G_CALLBACK(
_tags_toggled), (gpointer)
d);
352 gtk_box_pack_start(GTK_BOX(vbox2), box,
FALSE,
TRUE, 0);
354 gtk_box_pack_start(GTK_BOX(box), vbox3,
FALSE,
TRUE, 10);
355 d->private = gtk_check_button_new_with_label(_(
"private tags"));
356 gtk_widget_set_tooltip_text(
d->private, _(
"export private tags"));
357 gtk_box_pack_start(GTK_BOX(vbox3),
d->private,
FALSE,
TRUE, 0);
358 d->synonyms = gtk_check_button_new_with_label(_(
"synonyms"));
359 gtk_widget_set_tooltip_text(
d->synonyms, _(
"export tags synonyms"));
360 gtk_box_pack_start(GTK_BOX(vbox3),
d->synonyms,
FALSE,
TRUE, 0);
361 d->omithierarchy = gtk_check_button_new_with_label(_(
"omit hierarchy"));
362 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"));
363 gtk_box_pack_start(GTK_BOX(vbox3),
d->omithierarchy,
FALSE,
TRUE, 0);
365 GtkWidget *hierarchical = gtk_check_button_new_with_label(_(
"hierarchical tags"));
366 gtk_widget_set_tooltip_text(hierarchical, _(
"export hierarchical tags (to Xmp.lr.Hierarchical Subject)"));
367 gtk_box_pack_start(GTK_BOX(vbox2), hierarchical,
FALSE,
TRUE, 0);
368 GtkWidget *dthistory = gtk_check_button_new_with_label(_(
"develop history"));
369 gtk_widget_set_tooltip_text(dthistory, _(
"export dt development data (recovery purpose in case of loss of database or xmp file)"));
370 gtk_box_pack_start(GTK_BOX(vbox2), dthistory,
FALSE,
TRUE, 0);
374 gtk_container_set_border_width(GTK_CONTAINER(vbox), 8);
375 gtk_container_add(GTK_CONTAINER(hbox), vbox);
376 label = gtk_label_new(_(
"per metadata settings"));
377 gtk_box_pack_start(GTK_BOX(vbox), label,
FALSE,
TRUE, 0);
379 GtkWidget *w = gtk_scrolled_window_new(NULL, NULL);
381 gtk_widget_set_hexpand(w,
TRUE);
382 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(w), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
384 gtk_box_pack_start(GTK_BOX(vbox), w,
TRUE,
TRUE, 0);
385 GtkTreeView *
view = GTK_TREE_VIEW(gtk_tree_view_new());
387 gtk_container_add(GTK_CONTAINER(w), GTK_WIDGET(
view));
388 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(
view), GTK_SELECTION_SINGLE);
389 GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
390 GtkTreeViewColumn *col = gtk_tree_view_column_new_with_attributes(_(
"redefined tag"), renderer,
"text", 0, NULL);
391 gtk_tree_view_append_column(
view, col);
392 renderer = gtk_cell_renderer_text_new();
393 g_object_set(renderer,
"editable",
TRUE, NULL);
394 g_signal_connect(G_OBJECT(renderer),
"edited", G_CALLBACK(
_formula_edited), (gpointer)
d);
396 col = gtk_tree_view_column_new_with_attributes(_(
"formula"), renderer,
"text", 2, NULL);
397 gtk_tree_view_append_column(
view, col);
398 gtk_widget_set_tooltip_text(GTK_WIDGET(
view),
399 _(
"list of calculated metadata\n"
400 "click on '+' button to select and add new metadata\n"
401 "if formula is empty, the corresponding metadata is removed from exported file,\n"
402 "if formula is \'=\', the EXIF metadata is exported even if EXIF data are disabled\n"
403 "otherwise the corresponding metadata is calculated and added to exported file\n"
404 "click on formula cell to edit\n"
405 "type '$(' to activate the completion and see the list of variables"));
408 GtkListStore *liststore = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
409 d->liststore = liststore;
411 gtk_tree_view_set_model(
view, GTK_TREE_MODEL(liststore));
412 g_object_unref(liststore);
418 char *flags_hexa = list->data;
419 flags = strtol(flags_hexa, NULL, 16);
420 list = g_list_remove(list, flags_hexa);
424 for (GList *tags = list; tags; tags = g_list_next(tags))
427 const char *tagname = (
char *)tags->data;
428 tags = g_list_next(tags);
430 const char *formula = (
char *)tags->data;
431 gtk_list_store_append(
d->liststore, &iter);
443 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dttag),
flags &
DT_META_TAG);
454 gtk_box_pack_start(GTK_BOX(vbox), box,
FALSE,
TRUE, 0);
457 gtk_widget_set_tooltip_text(button, _(
"add an output metadata tag"));
458 gtk_box_pack_end(GTK_BOX(box), button,
FALSE,
TRUE, 0);
462 gtk_widget_set_tooltip_text(button, _(
"delete metadata tag"));
463 gtk_box_pack_end(GTK_BOX(box), button,
FALSE,
TRUE, 0);
466#ifdef GDK_WINDOWING_QUARTZ
469 gtk_widget_show_all(dialog);
471 char *newlist = metadata_presets;
472 if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
474 const gint newflags = (
475 (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(exiftag)) ?
DT_META_EXIF : 0) |
476 (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dtmetadata)) ?
DT_META_METADATA : 0) |
477 (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(geotag)) ?
DT_META_GEOTAG : 0) |
478 (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dttag)) ?
DT_META_TAG : 0) |
483 (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dthistory)) ?
DT_META_DT_HISTORY : 0) |
484 (!ondisk ? (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(calculated)) ?
DT_META_CALCULATED : 0) : 0)
487 newlist = g_strdup_printf(
"%x", newflags);
489 gboolean valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(
d->liststore), &iter);
492 char *tagname, *formula;
499 valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(
d->liststore), &iter);
504 gtk_widget_destroy(dialog);