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#pragma once
40
41#include <glib.h>
42#include <sqlite3.h>
43#include <stdint.h>
44
45#ifdef __cplusplus
46extern "C" {
47#endif
48
49typedef struct dt_tag_t
50{
51 guint id;
52 gchar *tag;
53 gchar *leave;
54 gchar *synonym;
55 guint count;
56 guint select;
57 gint flags;
59
60typedef enum dt_tag_flags_t
61{
63 DT_TF_CATEGORY = 1 << 0, // this tag (or path) is not a keyword to be exported
64 DT_TF_PRIVATE = 1 << 1, // this tag is private. Will be exported only on demand
65 DT_TF_ORDER_SET = 1 << 2, // set if the tag has got an images order
66 DT_TF_DESCENDING = 1U << 31,
68
69#define DT_TF_ALL (DT_TF_CATEGORY | DT_TF_PRIVATE | DT_TF_ORDER_SET)
70
72{
73 DT_TS_NO_IMAGE = 0, // no selection or no tag not attached
74 DT_TS_SOME_IMAGES, // tag attached on some selected images
75 DT_TS_ALL_IMAGES // tag attached on all selected images
77
81gboolean dt_tag_new(const char *name, guint *tagid);
82
87gboolean dt_tag_new_from_gui(const char *name, guint *tagid);
88
89// read/import tags from a txt file as written by Lightroom. returns the number of imported tags
90// or -1 if an error occurred.
91uint32_t dt_tag_import(const char *filename);
92
93// export all tags to a txt file as written by Lightroom. returns the number of exported tags
94// or -1 if an error occurred.
95uint32_t dt_tag_export(const char *filename);
96
98gchar *dt_tag_get_name(const guint tagid);
99
102guint dt_tag_remove(const guint tagid, gboolean final);
103
105guint dt_tag_remove_list(GList *tag_list);
106
108void dt_tag_rename(const guint tagid, const gchar *new_tagname);
109
111gboolean dt_tag_exists(const char *name, guint *tagid);
112
115gboolean dt_tag_attach_images(const guint tagid, const GList *img, const gboolean undo_on);
118gboolean dt_tag_attach(const guint tagid, const int32_t imgid, const gboolean undo_on, const gboolean group_on);
119
121gboolean dt_is_tag_attached(const guint tagid, const int32_t imgid);
122
126gboolean dt_tag_set_tags(const GList *tags, const GList *img, const gboolean ignore_dt_tags,
127 const gboolean clear_on, const gboolean undo_on);
128
131gboolean dt_tag_attach_string_list(const gchar *tags, const GList *img, const gboolean undo_on);
132
135gboolean dt_tag_detach_images(const guint tagid, const GList *img, const gboolean undo_on);
138gboolean dt_tag_detach(const guint tagid, const int32_t imgid, const gboolean undo_on, const gboolean group_on);
139
141gboolean dt_tag_detach_by_string(const char *name, const int32_t imgid, const gboolean undo_on,
142 const gboolean group_on);
143
145uint32_t dt_tag_get_attached(const int32_t imgid, GList **result, const gboolean ignore_dt_tags);
146
148GList *dt_sort_tag(GList *tags, gboolean byname);
149
153GList *dt_tag_get_list(int32_t imgid);
154
157GList *dt_tag_get_list_export(int32_t imgid, int32_t flags);
158
161GList *dt_tag_get_hierarchical(int32_t imgid);
162
165GList *dt_tag_get_hierarchical_export(int32_t imgid, int32_t flags);
166
168GList *dt_tag_get_tags(const int32_t imgid, const gboolean ignore_dt_tags);
169
171GList *dt_tag_get_images(const gint tagid);
172
174GList *dt_tag_get_images_from_list(const GList *img, const gint tagid);
175
179uint32_t dt_tag_get_suggestions(GList **result);
180
183void dt_tag_count_tags_images(const gchar *keyword, int *tag_count, int *img_count);
184
187void dt_tag_get_tags_images(const gchar *keyword, GList **tag_list, GList **img_list);
188
192uint32_t dt_tag_get_with_usage(GList **result);
193
198uint32_t dt_tag_get_collection_tags(GList **result);
199
201gchar *dt_tag_get_synonyms(gint tagid);
202
204void dt_tag_set_synonyms(gint tagid, gchar *synonyms);
205
207gint dt_tag_get_flags(gint tagid);
208
210void dt_tag_set_flags(gint tagid, gint flags);
211
214uint32_t dt_tag_get_recent_used(GList **result);
215
217void dt_tag_free_result(GList **result);
218
220uint32_t dt_tag_images_count(gint tagid);
221
223char *dt_tag_get_subtags(const int32_t imgid, const char *category, const int level);
224
226gboolean dt_tag_get_tag_order_by_id(const uint32_t tagid, uint32_t *sort,
227 gboolean *descending);
228
230void dt_tag_set_tag_order_by_id(const uint32_t tagid, const uint32_t sort,
231 const gboolean descending);
232
234uint32_t dt_tag_get_tag_id_by_name(const char * const name);
235
238
240void dt_tags_cleanup(void);
241
242#ifdef __cplusplus
243}
244#endif
245
246// clang-format off
247// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
248// vim: shiftwidth=2 expandtab tabstop=2 cindent
249// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
250// clang-format on
char * name
dt_mipmap_buffer_dsc_flags flags
Definition mipmap_cache.c:4
gchar * synonym
Definition tags.h:54
gchar * tag
Definition tags.h:52
guint id
Definition tags.h:51
guint count
Definition tags.h:55
gchar * leave
Definition tags.h:53
guint select
Definition tags.h:56
gint flags
Definition tags.h:57
GList * dt_tag_get_images_from_list(const GList *img, const gint tagid)
Definition tags.c:1107
GList * dt_tag_get_images(const gint tagid)
Definition tags.c:1084
GList * dt_tag_get_list_export(int32_t imgid, int32_t flags)
Definition tags.c:963
void dt_tag_get_tags_images(const gchar *keyword, GList **tag_list, GList **img_list)
Definition tags.c:1302
guint dt_tag_remove_list(GList *tag_list)
Definition tags.c:294
gboolean dt_tag_attach(const guint tagid, const int32_t imgid, const gboolean undo_on, const gboolean group_on)
Definition tags.c:485
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:506
uint32_t dt_tag_get_suggestions(GList **result)
Definition tags.c:1141
char * dt_tag_get_subtags(const int32_t imgid, const char *category, const int level)
Definition tags.c:1821
uint32_t dt_tag_get_attached(const int32_t imgid, GList **result, const gboolean ignore_dt_tags)
Definition tags.c:635
gboolean dt_tag_attach_images(const guint tagid, const GList *img, const gboolean undo_on)
Definition tags.c:463
void dt_set_darktable_tags()
Definition tags.c:618
gchar * dt_tag_get_synonyms(gint tagid)
Definition tags.c:1497
gboolean dt_tag_detach(const guint tagid, const int32_t imgid, const gboolean undo_on, const gboolean group_on)
Definition tags.c:593
gint dt_tag_get_flags(gint tagid)
Definition tags.c:1531
dt_tag_selection_t
Definition tags.h:72
@ DT_TS_ALL_IMAGES
Definition tags.h:75
@ DT_TS_NO_IMAGE
Definition tags.h:73
@ DT_TS_SOME_IMAGES
Definition tags.h:74
gboolean dt_tag_attach_string_list(const gchar *tags, const GList *img, const gboolean undo_on)
Definition tags.c:526
uint32_t dt_tag_images_count(gint tagid)
Definition tags.c:1359
gboolean dt_tag_detach_by_string(const char *name, const int32_t imgid, const gboolean undo_on, const gboolean group_on)
Definition tags.c:608
gboolean dt_is_tag_attached(const guint tagid, const int32_t imgid)
Definition tags.c:1067
gboolean dt_tag_new(const char *name, guint *tagid)
Definition tags.c:179
void dt_tag_set_tag_order_by_id(const uint32_t tagid, const uint32_t sort, const gboolean descending)
Definition tags.c:1911
uint32_t dt_tag_get_collection_tags(GList **result)
Definition tags.c:1436
gboolean dt_tag_get_tag_order_by_id(const uint32_t tagid, uint32_t *sort, gboolean *descending)
Definition tags.c:1863
void dt_tag_rename(const guint tagid, const gchar *new_tagname)
Definition tags.c:340
dt_tag_flags_t
Definition tags.h:61
@ DT_TF_NONE
Definition tags.h:62
@ DT_TF_ORDER_SET
Definition tags.h:65
@ DT_TF_DESCENDING
Definition tags.h:66
@ DT_TF_CATEGORY
Definition tags.h:63
@ DT_TF_PRIVATE
Definition tags.h:64
gchar * dt_tag_get_name(const guint tagid)
Definition tags.c:325
void dt_tags_cleanup(void)
Definition tags.c:1932
GList * dt_tag_get_list(int32_t imgid)
Definition tags.c:850
uint32_t dt_tag_import(const char *filename)
Definition tags.c:1614
GList * dt_tag_get_hierarchical_export(int32_t imgid, int32_t flags)
Definition tags.c:1043
void dt_tag_set_flags(gint tagid, gint flags)
Definition tags.c:1549
guint dt_tag_remove(const guint tagid, gboolean final)
Definition tags.c:236
gboolean dt_tag_detach_images(const guint tagid, const GList *img, const gboolean undo_on)
Definition tags.c:570
GList * dt_tag_get_hierarchical(int32_t imgid)
Definition tags.c:894
GList * dt_tag_get_tags(const int32_t imgid, const gboolean ignore_dt_tags)
Definition tags.c:950
void dt_tag_free_result(GList **result)
Definition tags.c:1592
gboolean dt_tag_exists(const char *name, guint *tagid)
Definition tags.c:356
GList * dt_sort_tag(GList *tags, gboolean byname)
void dt_tag_set_synonyms(gint tagid, gchar *synonyms)
Definition tags.c:1515
uint32_t dt_tag_export(const char *filename)
Definition tags.c:1749
uint32_t dt_tag_get_tag_id_by_name(const char *const name)
Definition tags.c:1891
gboolean dt_tag_new_from_gui(const char *name, guint *tagid)
Definition tags.c:228
uint32_t dt_tag_get_recent_used(GList **result)
Definition tags.c:1601
void dt_tag_count_tags_images(const gchar *keyword, int *tag_count, int *img_count)
Definition tags.c:1254
uint32_t dt_tag_get_with_usage(GList **result)
Definition tags.c:1377