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
195gchar *dt_tag_get_synonyms(gint tagid);
196
198void dt_tag_set_synonyms(gint tagid, gchar *synonyms);
199
201gint dt_tag_get_flags(gint tagid);
202
204void dt_tag_set_flags(gint tagid, gint flags);
205
208uint32_t dt_tag_get_recent_used(GList **result);
209
211void dt_tag_free_result(GList **result);
212
214uint32_t dt_tag_images_count(gint tagid);
215
217char *dt_tag_get_subtags(const int32_t imgid, const char *category, const int level);
218
220gboolean dt_tag_get_tag_order_by_id(const uint32_t tagid, uint32_t *sort,
221 gboolean *descending);
222
224void dt_tag_set_tag_order_by_id(const uint32_t tagid, const uint32_t sort,
225 const gboolean descending);
226
228uint32_t dt_tag_get_tag_id_by_name(const char * const name);
229
232
234void dt_tags_cleanup(void);
235
236#ifdef __cplusplus
237}
238#endif
239
240// clang-format off
241// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
242// vim: shiftwidth=2 expandtab tabstop=2 cindent
243// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
244// clang-format on
char * name
Definition common/metadata.c:61
dt_mipmap_buffer_dsc_flags flags
Definition mipmap_cache.c:4
Definition tags.h:50
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:1788
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:1464
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:1498
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:1878
gboolean dt_tag_get_tag_order_by_id(const uint32_t tagid, uint32_t *sort, gboolean *descending)
Definition tags.c:1830
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:1899
GList * dt_tag_get_list(int32_t imgid)
Definition tags.c:850
uint32_t dt_tag_import(const char *filename)
Definition tags.c:1581
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:1516
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:1559
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:1482
uint32_t dt_tag_export(const char *filename)
Definition tags.c:1716
uint32_t dt_tag_get_tag_id_by_name(const char *const name)
Definition tags.c:1858
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:1568
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