Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
tags.h
Go to the documentation of this file.
1/*
2 This file is part of darktable,
3 Copyright (C) 2010-2011 Henrik Andersson.
4 Copyright (C) 2010-2012 johannes hanika.
5 Copyright (C) 2010 Pascal de Bruijn.
6 Copyright (C) 2012 Ivan Tarozzi.
7 Copyright (C) 2012 José Carlos García Sogo.
8 Copyright (C) 2012 Richard Wonka.
9 Copyright (C) 2012-2013 Simon Spannagel.
10 Copyright (C) 2012, 2014, 2016-2017 Tobias Ellinghaus.
11 Copyright (C) 2013 Dennis Gnad.
12 Copyright (C) 2013 Jérémy Rosen.
13 Copyright (C) 2016 Roman Lebedev.
14 Copyright (C) 2017, 2019, 2021 luzpaz.
15 Copyright (C) 2019 Edgardo Hoszowski.
16 Copyright (C) 2019-2021 Philippe Weyland.
17 Copyright (C) 2020 Aldric Renaudin.
18 Copyright (C) 2020-2021 Pascal Obry.
19 Copyright (C) 2021 Hubert Kowalski.
20 Copyright (C) 2022 Martin Bařinka.
21 Copyright (C) 2022 Miloš Komarčević.
22 Copyright (C) 2025 Alynx Zhou.
23 Copyright (C) 2025-2026 Aurélien PIERRE.
24
25 darktable is free software: you can redistribute it and/or modify
26 it under the terms of the GNU General Public License as published by
27 the Free Software Foundation, either version 3 of the License, or
28 (at your option) any later version.
29
30 darktable is distributed in the hope that it will be useful,
31 but WITHOUT ANY WARRANTY; without even the implied warranty of
32 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33 GNU General Public License for more details.
34
35 You should have received a copy of the GNU General Public License
36 along with darktable. If not, see <http://www.gnu.org/licenses/>.
37*/
38
39#ifndef DT_METADATA_TAGS_H
40#define DT_METADATA_TAGS_H
41
42#include <glib.h>
43#include <sqlite3.h>
44#include <stdint.h>
45
46#ifdef __cplusplus
47extern "C" {
48#endif
49
50typedef struct dt_tag_t
51{
52 guint id;
53 gchar *tag;
54 gchar *leave;
55 gchar *synonym;
56 guint count;
57 guint select;
58 gint flags;
60
61typedef enum dt_tag_flags_t
62{
64 DT_TF_CATEGORY = 1 << 0, // this tag (or path) is not a keyword to be exported
65 DT_TF_PRIVATE = 1 << 1, // this tag is private. Will be exported only on demand
66 DT_TF_ORDER_SET = 1 << 2, // set if the tag has got an images order
67 DT_TF_DESCENDING = 1U << 31,
69
70#define DT_TF_ALL (DT_TF_CATEGORY | DT_TF_PRIVATE | DT_TF_ORDER_SET)
71
73{
74 DT_TS_NO_IMAGE = 0, // no selection or no tag not attached
75 DT_TS_SOME_IMAGES, // tag attached on some selected images
76 DT_TS_ALL_IMAGES // tag attached on all selected images
78
82gboolean dt_tag_new(const char *name, guint *tagid);
83
88gboolean dt_tag_new_from_gui(const char *name, guint *tagid);
89
90// read/import tags from a txt file as written by Lightroom. returns the number of imported tags
91// or -1 if an error occurred.
92uint32_t dt_tag_import(const char *filename);
93
94// export all tags to a txt file as written by Lightroom. returns the number of exported tags
95// or -1 if an error occurred.
96uint32_t dt_tag_export(const char *filename);
97
99gchar *dt_tag_get_name(const guint tagid);
100
103guint dt_tag_remove(const guint tagid, gboolean final);
104
106guint dt_tag_remove_list(GList *tag_list);
107
109void dt_tag_rename(const guint tagid, const gchar *new_tagname);
110
112gboolean dt_tag_exists(const char *name, guint *tagid);
113
116gboolean dt_tag_attach_images(const guint tagid, const GList *img, const gboolean undo_on);
119gboolean dt_tag_attach(const guint tagid, const int32_t imgid, const gboolean undo_on, const gboolean group_on);
120
122gboolean dt_is_tag_attached(const guint tagid, const int32_t imgid);
123
127gboolean dt_tag_set_tags(const GList *tags, const GList *img, const gboolean ignore_dt_tags,
128 const gboolean clear_on, const gboolean undo_on);
129
132gboolean dt_tag_attach_string_list(const gchar *tags, const GList *img, const gboolean undo_on);
133
136gboolean dt_tag_detach_images(const guint tagid, const GList *img, const gboolean undo_on);
139gboolean dt_tag_detach(const guint tagid, const int32_t imgid, const gboolean undo_on, const gboolean group_on);
140
142gboolean dt_tag_detach_by_string(const char *name, const int32_t imgid, const gboolean undo_on,
143 const gboolean group_on);
144
146uint32_t dt_tag_get_attached(const int32_t imgid, GList **result, const gboolean ignore_dt_tags);
147
149GList *dt_sort_tag(GList *tags, gboolean byname);
150
154GList *dt_tag_get_list(int32_t imgid);
155
158GList *dt_tag_get_list_export(int32_t imgid, int32_t flags);
159
162GList *dt_tag_get_hierarchical(int32_t imgid);
163
166GList *dt_tag_get_hierarchical_export(int32_t imgid, int32_t flags);
167
169GList *dt_tag_get_tags(const int32_t imgid, const gboolean ignore_dt_tags);
170
172GList *dt_tag_get_images(const gint tagid);
173
175GList *dt_tag_get_images_from_list(const GList *img, const gint tagid);
176
180uint32_t dt_tag_get_suggestions(GList **result);
181
184void dt_tag_count_tags_images(const gchar *keyword, int *tag_count, int *img_count);
185
188void dt_tag_get_tags_images(const gchar *keyword, GList **tag_list, GList **img_list);
189
193uint32_t dt_tag_get_with_usage(GList **result);
194
199uint32_t dt_tag_get_collection_tags(GList **result);
200
202gchar *dt_tag_get_synonyms(gint tagid);
203
205void dt_tag_set_synonyms(gint tagid, gchar *synonyms);
206
208gint dt_tag_get_flags(gint tagid);
209
211void dt_tag_set_flags(gint tagid, gint flags);
212
215uint32_t dt_tag_get_recent_used(GList **result);
216
218void dt_tag_free_result(GList **result);
219
221uint32_t dt_tag_images_count(gint tagid);
222
224char *dt_tag_get_subtags(const int32_t imgid, const char *category, const int level);
225
227gboolean dt_tag_get_tag_order_by_id(const uint32_t tagid, uint32_t *sort,
228 gboolean *descending);
229
231void dt_tag_set_tag_order_by_id(const uint32_t tagid, const uint32_t sort,
232 const gboolean descending);
233
235uint32_t dt_tag_get_tag_id_by_name(const char * const name);
236
239
241void dt_tags_cleanup(void);
242
243#ifdef __cplusplus
244}
245#endif
246
247#endif // DT_METADATA_TAGS_H
248
249// clang-format off
250// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
251// vim: shiftwidth=2 expandtab tabstop=2 cindent
252// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
253// clang-format on
dt_mipmap_buffer_dsc_flags flags
Definition mipmap_cache.c:4
const char * name
Definition pdf.h:90
gchar * synonym
Definition tags.h:55
gchar * tag
Definition tags.h:53
guint id
Definition tags.h:52
guint count
Definition tags.h:56
gchar * leave
Definition tags.h:54
guint select
Definition tags.h:57
gint flags
Definition tags.h:58
GList * dt_tag_get_images_from_list(const GList *img, const gint tagid)
Definition tags.c:834
GList * dt_tag_get_images(const gint tagid)
Definition tags.c:829
GList * dt_tag_get_list_export(int32_t imgid, int32_t flags)
Definition tags.c:720
void dt_tag_get_tags_images(const gchar *keyword, GList **tag_list, GList **img_list)
Definition tags.c:880
guint dt_tag_remove_list(GList *tag_list)
Definition tags.c:211
gboolean dt_tag_attach(const guint tagid, const int32_t imgid, const gboolean undo_on, const gboolean group_on)
Definition tags.c:377
gboolean dt_tag_set_tags(const GList *tags, const GList *img, const gboolean ignore_dt_tags, const gboolean clear_on, const gboolean undo_on)
Definition tags.c:398
uint32_t dt_tag_get_suggestions(GList **result)
Definition tags.c:852
char * dt_tag_get_subtags(const int32_t imgid, const char *category, const int level)
Definition tags.c:1232
uint32_t dt_tag_get_attached(const int32_t imgid, GList **result, const gboolean ignore_dt_tags)
Definition tags.c:515
gboolean dt_tag_attach_images(const guint tagid, const GList *img, const gboolean undo_on)
Definition tags.c:355
void dt_set_darktable_tags()
Definition tags.c:510
gchar * dt_tag_get_synonyms(gint tagid)
Definition tags.c:956
gboolean dt_tag_detach(const guint tagid, const int32_t imgid, const gboolean undo_on, const gboolean group_on)
Definition tags.c:485
gint dt_tag_get_flags(gint tagid)
Definition tags.c:970
dt_tag_selection_t
Definition tags.h:73
@ DT_TS_ALL_IMAGES
Definition tags.h:76
@ DT_TS_NO_IMAGE
Definition tags.h:74
@ DT_TS_SOME_IMAGES
Definition tags.h:75
gboolean dt_tag_attach_string_list(const gchar *tags, const GList *img, const gboolean undo_on)
Definition tags.c:418
uint32_t dt_tag_images_count(gint tagid)
Definition tags.c:885
gboolean dt_tag_detach_by_string(const char *name, const int32_t imgid, const gboolean undo_on, const gboolean group_on)
Definition tags.c:500
gboolean dt_is_tag_attached(const guint tagid, const int32_t imgid)
Definition tags.c:824
gboolean dt_tag_new(const char *name, guint *tagid)
Definition tags.c:164
void dt_tag_set_tag_order_by_id(const uint32_t tagid, const uint32_t sort, const gboolean descending)
Definition tags.c:1288
uint32_t dt_tag_get_collection_tags(GList **result)
Definition tags.c:910
gboolean dt_tag_get_tag_order_by_id(const uint32_t tagid, uint32_t *sort, gboolean *descending)
Definition tags.c:1266
void dt_tag_rename(const guint tagid, const gchar *new_tagname)
Definition tags.c:247
dt_tag_flags_t
Definition tags.h:62
@ DT_TF_NONE
Definition tags.h:63
@ DT_TF_ORDER_SET
Definition tags.h:66
@ DT_TF_DESCENDING
Definition tags.h:67
@ DT_TF_CATEGORY
Definition tags.h:64
@ DT_TF_PRIVATE
Definition tags.h:65
gchar * dt_tag_get_name(const guint tagid)
Definition tags.c:242
void dt_tags_cleanup(void)
Definition tags.c:1296
GList * dt_tag_get_list(int32_t imgid)
Definition tags.c:623
uint32_t dt_tag_import(const char *filename)
Definition tags.c:1025
GList * dt_tag_get_hierarchical_export(int32_t imgid, int32_t flags)
Definition tags.c:800
void dt_tag_set_flags(gint tagid, gint flags)
Definition tags.c:975
guint dt_tag_remove(const guint tagid, gboolean final)
Definition tags.c:195
gboolean dt_tag_detach_images(const guint tagid, const GList *img, const gboolean undo_on)
Definition tags.c:462
GList * dt_tag_get_hierarchical(int32_t imgid)
Definition tags.c:667
GList * dt_tag_get_tags(const int32_t imgid, const gboolean ignore_dt_tags)
Definition tags.c:707
void dt_tag_free_result(GList **result)
Definition tags.c:1003
gboolean dt_tag_exists(const char *name, guint *tagid)
Definition tags.c:255
GList * dt_sort_tag(GList *tags, gboolean byname)
void dt_tag_set_synonyms(gint tagid, gchar *synonyms)
Definition tags.c:961
uint32_t dt_tag_export(const char *filename)
Definition tags.c:1160
uint32_t dt_tag_get_tag_id_by_name(const char *const name)
Definition tags.c:1282
gboolean dt_tag_new_from_gui(const char *name, guint *tagid)
Definition tags.c:187
uint32_t dt_tag_get_recent_used(GList **result)
Definition tags.c:1012
void dt_tag_count_tags_images(const gchar *keyword, int *tag_count, int *img_count)
Definition tags.c:875
uint32_t dt_tag_get_with_usage(GList **result)
Definition tags.c:890