75#ifdef GDK_WINDOWING_QUARTZ
123 fprintf(stderr,
"module %s doesn't have views flags\n", module->name(module));
127 const char **
views =
module->views(module);
128 for(
const char **iter =
views; *iter; iter++)
130 if(!strcmp(*iter,
"*") || !strcmp(*iter,
view->module_name))
return TRUE;
145 for(GList *l = presets; l; l = g_list_next(l))
148 if(
p->op_params_size == minfo->
params_size && !memcmp(minfo->
params,
p->op_params,
p->op_params_size))
150 name = g_strdup(
p->name);
168 name = g_strdup(name_in);
174 if(rowid < 0)
return;
183 char *
name = g_object_get_data(G_OBJECT(menuitem),
"dt-preset-name");
185 gint
res = GTK_RESPONSE_YES;
191 = gtk_message_dialog_new(GTK_WINDOW(
window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION,
192 GTK_BUTTONS_YES_NO, _(
"do you really want to update the preset `%s'?"),
name);
193#ifdef GDK_WINDOWING_QUARTZ
196 gtk_window_set_title(GTK_WINDOW(dialog), _(
"update preset?"));
197 res = gtk_dialog_run(GTK_DIALOG(dialog));
198 gtk_widget_destroy(dialog);
201 if(
res == GTK_RESPONSE_YES)
231 if(minfo->module->manage_presets) minfo->module->manage_presets(minfo->module);
239 gint
res = GTK_RESPONSE_YES;
245 = gtk_message_dialog_new(GTK_WINDOW(
window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION,
246 GTK_BUTTONS_YES_NO, _(
"do you really want to delete the preset `%s'?"),
name);
247#ifdef GDK_WINDOWING_QUARTZ
250 gtk_window_set_title(GTK_WINDOW(dialog), _(
"delete preset?"));
251 res = gtk_dialog_run(GTK_DIALOG(dialog));
252 gtk_widget_destroy(dialog);
255 if(
res == GTK_RESPONSE_YES)
273 gchar *tx = g_strdup_printf(
"%s_%d",
preset,
i);
277 gchar *nname = g_strdup_printf(
"%s_%d",
preset,
i);
298 const void *blob =
p->op_params;
299 int length =
p->op_params_size;
300 int writeprotect =
p->writeprotect;
306 if(!strncmp(module->
plugin_name, module_name, 128))
308 gchar *tx = g_strdup_printf(
"plugins/darkroom/%s/last_preset", module_name);
311 res =
module->set_params(module, blob, length);
331 const gchar *desc,
const void *params,
const int32_t
params_size)
340 const char *pn = g_object_get_data(G_OBJECT(menuitem),
"dt-preset-name");
355 if(menu) gtk_widget_destroy(GTK_WIDGET(menu));
359 const gboolean hide_default =
dt_conf_get_bool(
"plugins/lighttable/hide_default_presets");
360 const gboolean default_first =
dt_conf_get_bool(
"modules/default_presets_first");
362 g_signal_connect(G_OBJECT(menu),
"destroy", G_CALLBACK(
free_module_info), minfo);
365 int active_preset = -1, cnt = 0;
366 gboolean selected_writeprotect =
FALSE;
369 TRUE, default_first);
374 for(GList *l = presets; l; l = g_list_next(l))
378 const gboolean writeprotect =
p->writeprotect;
379 if(hide_default && writeprotect)
386 last_wp = writeprotect;
388 else if(last_wp != writeprotect)
390 last_wp = writeprotect;
391 gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new());
394 void *op_params =
p->op_params;
395 int32_t op_params_size =
p->op_params_size;
396 const char *
name =
p->name;
407 if(op_params_size == minfo->
params_size && !memcmp(minfo->
params, op_params, op_params_size))
410 selected_writeprotect = writeprotect;
411 mi = gtk_check_menu_item_new_with_label(
name);
413 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mi),
TRUE);
418 mi = gtk_menu_item_new_with_label((
const char *)
name);
420 g_object_set_data_full(G_OBJECT(mi),
"dt-preset-name", g_strdup(
name), g_free);
421 g_signal_connect(G_OBJECT(mi),
"activate", G_CALLBACK(
pick_callback), minfo);
422 gtk_widget_set_tooltip_text(mi,
p->description);
423 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
430 gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new());
434 if(minfo->module->manage_presets)
436 mi = gtk_menu_item_new_with_label(_(
"manage presets..."));
438 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
441 else if(active_preset >= 0)
443 if(!selected_writeprotect)
445 mi = gtk_menu_item_new_with_label(_(
"edit this preset.."));
447 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
449 mi = gtk_menu_item_new_with_label(_(
"delete this preset"));
451 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
457 mi = gtk_menu_item_new_with_label(_(
"store new preset.."));
460 gtk_widget_set_sensitive(GTK_WIDGET(mi),
FALSE);
461 gtk_widget_set_tooltip_text(mi, _(
"nothing to save"));
465 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
469 char *markup = g_markup_printf_escaped(
"%s <span weight=\"bold\">%s</span>", _(
"update preset"),
471 mi = gtk_menu_item_new_with_label(
"");
472 gtk_widget_set_sensitive(GTK_WIDGET(mi), minfo->
params_size > 0);
473 gtk_label_set_markup(GTK_LABEL(gtk_bin_get_child(GTK_BIN(mi))), markup);
474 g_object_set_data_full(G_OBJECT(mi),
"dt-preset-name", g_strdup(
dt_gui_get_global()->last_preset), g_free);
476 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
482 if(minfo->module->set_preferences)
486 gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new());
488 minfo->module->set_preferences(GTK_MENU_SHELL(menu), minfo->module);
496 const int apos = (am && am->position) ? am->position() : 0;
497 const int bpos = (bm && bm->position) ? bm->position() : 0;
533#define INCLUDE_API_FROM_MODULE_LOAD "lib_load_module"
539 gboolean load =
FALSE;
540 for(
const char **view_m = module->views(module); *view_m; ++view_m)
545 if(!g_strcmp0(
view->module_name, *view_m) || !g_strcmp0(
"*", *view_m) || !g_strcmp0(
"special", *view_m))
558 if(((!module->get_params || !module->set_params)
559 && (module->legacy_params || module->set_params || module->get_params))
560 || (!module->init_presets && module->manage_presets))
562 fprintf(stderr,
"[dt_lib_load_module] illegal method combination in '%s'\n", module->
plugin_name);
565 if(!module->get_params || !module->set_params)
570 module->legacy_params = NULL;
571 module->set_params = NULL;
572 module->get_params = NULL;
573 module->manage_presets = NULL;
576 module->widget = NULL;
577 module->expander = NULL;
578 module->arrow = NULL;
579 module->reset_button = NULL;
580 module->presets_button = NULL;
582 if(module->init)
module->init(module);
585 module->common_fields.name = g_strdup(module->name(module));
586 module->common_fields.view = NULL;
587 module->common_fields.widget_list = NULL;
588 module->common_fields.widget_list_bh = NULL;
589 module->common_fields.focus = module->lib_focus;
590 module->common_fields.deprecated = FALSE;
596 const void *
const old_params,
size_t old_params_size,
int old_version,
597 int target_version,
size_t *new_size)
600 void *params = malloc(old_params_size);
602 memcpy(params, old_params, old_params_size);
603 while(old_version < target_version)
607 void *new_params =
module->legacy_params(module, params, old_params_size, old_version, &version, &size);
611 old_version = version;
612 old_params_size =
size;
614 *new_size = old_params_size;
637 for(GList *l = presets; l; l = g_list_next(l))
640 const int version =
module->version();
642 if(
p->op_version < version)
644 size_t new_params_size = 0;
645 void *new_params = NULL;
647 if(module->legacy_params
648 && (new_params =
_update_params(module,
p->op_params,
p->op_params_size,
p->op_version, version,
653 "[lighttable_init_presets] updating '%s' preset '%s' from version %d to version %d\n",
660 fprintf(stderr,
"[lighttable_init_presets] Can't upgrade '%s' preset '%s' from version %d to %d, "
661 "no legacy_params() implemented or unable to update\n",
671 if(module->init_presets)
672 module->init_presets(module);
680 GdkModifierType modifier, gpointer data)
683 if(!module || !module->focus)
return FALSE;
684 return module->focus(module, FALSE);
695 module->gui_init(module);
699 module->common_fields.view = g_strdup(_("Lighttable"));
701 if(!module->views || (module->expandable && !module->expandable(module)))
return;
708 assert(g_strrstr(clean_name,
"/") == NULL);
710 const char **
views =
module->views(module);
715 GtkAccelGroup *accel_group = NULL;
717 if(!g_strcmp0(*
view,
"darkroom"))
720 label = g_strdup(
"Darkroom/Toolboxes");
722 else if(!g_strcmp0(*
view,
"lighttable"))
725 label = g_strdup(
"Lighttable/Toolboxes");
727 else if(!g_strcmp0(*
view,
"map"))
730 label = g_strdup(
"Map/Toolboxes");
732 else if(!g_strcmp0(*
view,
"print"))
735 label = g_strdup(
"Print/Toolboxes");
737 else if(!g_strcmp0(*
view,
"slideshow"))
740 label = g_strdup(
"Slideshow/Toolboxes");
743 if(accel_group && label)
745 accel_group, label, clean_name, 0, 0,
FALSE,
746 _(
"Focuses the module"));
756 GtkWidget *retained_widget =
module->widget;
763 const char **
views =
module->views(module);
766 const char *scope = NULL;
767 if(!g_strcmp0(*
view,
"darkroom")) scope =
"Darkroom/Toolboxes";
768 else if(!g_strcmp0(*
view,
"lighttable")) scope =
"Lighttable/Toolboxes";
769 else if(!g_strcmp0(*
view,
"map")) scope =
"Map/Toolboxes";
770 else if(!g_strcmp0(*
view,
"print")) scope =
"Print/Toolboxes";
771 else if(!g_strcmp0(*
view,
"slideshow")) scope =
"Slideshow/Toolboxes";
785 g_list_free(
m->widget_list);
786 m->widget_list = NULL;
787 g_list_free(
m->widget_list_bh);
788 m->widget_list_bh = NULL;
795 g_object_ref_sink(expander);
796 gtk_widget_destroy(expander);
797 g_object_unref(expander);
802 g_object_ref_sink(widget);
803 gtk_widget_destroy(widget);
804 g_object_unref(widget);
806 module->expander = NULL;
807 module->widget = NULL;
808 if(!
IS_NULL_PTR(retained_widget) && G_IS_OBJECT(retained_widget))
809 g_object_unref(retained_widget);
811 if(module->module) g_module_close(module->module);
817 module->gui_reset(module);
825 mi->
version =
module->version();
827 mi->
params =
module->get_params ? module->get_params(module, &mi->params_size) : NULL;
845 if(module->
expander == (
GtkWidget *)where_the_object_was)
module->expander = NULL;
859 module->expander = NULL;
878 gtk_widget_grab_focus(GTK_WIDGET(module->
expander));
916 if(!module->expandable(module))
return true;
920 module->expander = NULL;
950 gboolean all_other_closed =
TRUE;
951 uint32_t
container =
module->container(module);
984 if(e->type == GDK_2BUTTON_PRESS || e->type == GDK_3BUTTON_PRESS)
return TRUE;
995 if(!module->expandable(module))
return FALSE;
998 uint32_t
container =
module->container(module);
1004 gtk_widget_grab_focus(GTK_WIDGET(module->
expander));
1011 else if(e->button == 3)
1025 if(!module->expandable(module))
return;
1028 uint32_t
container =
module->container(module);
1042 if(!module->expandable(module))
1050 module->expander = NULL;
1055 gtk_widget_set_name(GTK_WIDGET(header),
"module-header");
1072 gtk_widget_add_events(body_evb, GDK_POINTER_MOTION_MASK);
1079 if(module->expandable(module))
1081 module->arrow = dtgtk_button_new(dtgtk_cairo_paint_arrow, 0, NULL);
1089 GtkWidget *label_evb = gtk_event_box_new();
1090 gtk_container_add(GTK_CONTAINER(label_evb), label);
1091 gchar *mname = g_markup_escape_text(module->name(module), -1);
1093 gtk_label_set_markup(GTK_LABEL(label), mname);
1095 gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
1096 g_object_set(G_OBJECT(label),
"halign", GTK_ALIGN_START,
"xalign", 0.0, (gchar *)0);
1097 gtk_widget_set_name(label,
"lib-panel-label");
1098 gtk_box_pack_start(GTK_BOX(header), label_evb,
FALSE,
FALSE, 0);
1101 module->presets_button = dtgtk_button_new(dtgtk_cairo_paint_presets, 0, NULL);
1103 if(!module->get_params && !module->set_preferences) gtk_widget_set_sensitive(GTK_WIDGET(module->
presets_button),
FALSE);
1107 module->reset_button = dtgtk_button_new(dtgtk_cairo_paint_reset, 0, NULL);
1109 if(!module->gui_reset) gtk_widget_set_sensitive(GTK_WIDGET(module->
reset_button),
FALSE);
1112 gtk_widget_show_all(GTK_WIDGET(module->
widget));
1114 module->expander = expander;
1120 return module->expander;
1138 if(module->gui_cleanup)
1139 module->gui_cleanup(module);
1140 module->data = NULL;
1142 module->common_fields.view = NULL;
1168 g_snprintf(lay,
sizeof(lay),
"%d/", 0);
1170 else if(g_strcmp0(cv->
module_name,
"darkroom") == 0)
1181 gboolean ret =
TRUE;
1200 widget =
module->expander;
1202 widget =
module->widget;
1206 gtk_widget_show(GTK_WIDGET(widget));
1208 gtk_widget_hide(GTK_WIDGET(widget));
1215 static GHashTable *module_names = NULL;
1218 module_names = g_hash_table_new(g_str_hash, g_str_equal);
1219 for(
const GList *lib =
dt_lib_get_global()->plugins; lib; lib = g_list_next(lib))
1222 g_hash_table_insert(module_names, module->
plugin_name, g_strdup(module->name(module)));
1226 return (gchar *)g_hash_table_lookup(module_names, plugin_name);
1240 for(
int k = 0;
k < 4;
k++)
1242 changed |= (sample->
box[
k] != raw_box[
k]);
1243 sample->
box[
k] = raw_box[
k];
1246 if(!changed)
return;
1257 float raw_pos[2] = { pos[0], pos[1] };
1261 || sample->
point[0] != raw_pos[0]
1262 || sample->
point[1] != raw_pos[1];
1264 sample->
point[0] = raw_pos[0];
1265 sample->
point[1] = raw_pos[1];
1267 if(!changed)
return;
1321 return mod->preset_autoapply(mod);
1328 if(
key == GDK_KEY_Return)
1330 gtk_dialog_response(GTK_DIALOG(widget), GTK_RESPONSE_ACCEPT);
1338 gchar *label_copy = g_strdup(label);
1340 GtkWidget *button = gtk_button_new_with_label(label_copy);
1343 gtk_widget_set_valign(GTK_WIDGET(button), GTK_ALIGN_CENTER);
1344 gtk_widget_set_halign(GTK_WIDGET(button), GTK_ALIGN_CENTER);
1345 gtk_widget_set_vexpand(GTK_WIDGET(button),
FALSE);
1346 gtk_widget_set_hexpand(GTK_WIDGET(button),
FALSE);
1348 gtk_label_set_ellipsize(GTK_LABEL(gtk_bin_get_child(GTK_BIN(button))), PANGO_ELLIPSIZE_END);
1352 g_signal_connect(G_OBJECT(button),
"clicked", G_CALLBACK(callback), data);
void dt_accels_remove_shortcut(dt_accels_t *accels, const char *path)
Remove the shortcut object identified by path and all its accels.
gchar * dt_accels_build_path(const gchar *scope, const gchar *feature)
void dt_accels_new_action_shortcut(dt_accels_t *accels, gboolean(*action_callback)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data), gpointer data, GtkWidget *target_widget, GtkAccelGroup *accel_group, const gchar *action_scope, const gchar *action_name, guint key_val, GdkModifierType accel_mods, const gboolean lock, const char *description)
Register a new shortcut for a generic action, setting up its path, default keys and accel group....
GtkWidget * dt_gui_main_window(void)
struct dt_accels_t * dt_gui_get_accels(void)
void dt_gui_store_last_preset(const char *name)
void dt_gui_refocus_center()
size_t params_size(dt_imageio_module_format_t *self)
uint32_t container(dt_lib_module_t *self)
const char ** views(dt_lib_module_t *self)
void dt_iop_color_picker_request_update(void)
@ DT_LIB_COLORPICKER_SIZE_POINT
@ DT_LIB_COLORPICKER_SIZE_BOX
struct _GtkWidget GtkWidget
GtkWidget, opaque, spelled exactly as GTK spells it.
void dt_conf_set_bool(const char *name, int val)
int dt_conf_get_bool(const char *name)
int dt_conf_key_exists(const char *key)
Does key have a value?
int dt_conf_get_int(const char *name)
Integer for name, clamped to the bounds declared in the XML.
void dt_conf_set_string(const char *name, const char *val)
void dt_control_log(const char *msg,...)
void dt_control_queue_redraw()
Request a redraw of the whole workspace.
struct dt_develop_t * dt_dev_get_global(void)
struct dt_lib_t * dt_lib_get_global(void)
struct dt_view_manager_t * dt_view_manager_get_global(void)
struct dt_gui_gtk_t * dt_gui_get_global(void)
void dt_dev_coordinates_image_norm_to_raw_norm(dt_develop_t *dev, float *points, size_t num_points)
GtkWidget * view
the tree view
GtkWidget * dtgtk_expander_get_header_event_box(GtkDarktableExpander *expander)
gboolean dtgtk_expander_get_expanded(GtkDarktableExpander *expander)
GtkWidget * dtgtk_expander_get_body_event_box(GtkDarktableExpander *expander)
GtkWidget * dtgtk_expander_get_frame(GtkDarktableExpander *expander)
void dtgtk_expander_set_expanded(GtkDarktableExpander *expander, gboolean expanded)
GtkWidget * dtgtk_expander_new(GtkWidget *header, GtkWidget *body)
#define DTGTK_EXPANDER(obj)
#define DTGTK_IS_EXPANDER(obj)
static guint dt_keys_mainpad_alternatives(const guint key_val)
Remap keypad keys to usual mainpad ones.
void dt_gui_presets_show_edit_dialog(const char *name_in, const char *module_name, int rowid, GCallback final_callback, gpointer data, gboolean allow_name_change, gboolean allow_desc_change, gboolean allow_remove, GtkWindow *parent)
float dt_boundingbox_t[4]
struct dt_iop_tonecurve_params_t preset
gchar * delete_underscore(const char *s)
gboolean dt_handle_dialog_enter(GtkWidget *widget, GdkEventKey *event, gpointer data)
static gboolean _lib_plugin_header_button_press(GtkWidget *w, GdkEventButton *e, gpointer user_data)
static gboolean default_expandable(dt_lib_module_t *self)
static void dt_lib_gui_reset_callback(GtkButton *button, gpointer user_data)
gboolean dt_lib_presets_can_autoapply(dt_lib_module_t *mod)
static void free_module_info(GtkWidget *widget, gpointer user_data)
static gboolean default_preset_autoapply(dt_lib_module_t *self)
@ DT_ACTION_ELEMENT_RESET
@ DT_ACTION_ELEMENT_PRESETS
static int _lib_plugin_body_button_press(GtkWidget *w, GdkEventButton *e, gpointer user_data)
gint dt_lib_sort_plugins(gconstpointer a, gconstpointer b)
void dt_lib_colorpicker_set_box_area(dt_lib_t *lib, const dt_boundingbox_t box)
void dt_lib_cancel_postponed_update(dt_lib_module_t *mod)
gboolean dt_lib_gui_get_expanded(dt_lib_module_t *module)
void dt_lib_init(dt_lib_t *lib)
void dt_lib_presets_remove(const gchar *preset, const gchar *module_name, int module_version)
void dt_lib_init_presets(dt_lib_module_t *module)
static int dt_lib_load_module(void *m, const char *libname, const char *module_name)
static void menuitem_delete_preset(GtkMenuItem *menuitem, dt_lib_module_info_t *minfo)
GtkWidget * dt_action_button_new(dt_lib_module_t *self, const gchar *label, gpointer callback, gpointer data, const gchar *tooltip, guint accel_key, GdkModifierType mods)
gboolean dt_lib_is_visible_in_view(dt_lib_module_t *module, const dt_view_t *view)
static void expand_callback(GtkButton *button, dt_lib_module_t *module)
static void _lib_module_expander_gone(gpointer user_data, GObject *where_the_object_was)
static void dt_lib_unload_module(dt_lib_module_t *module)
void dt_lib_queue_postponed_update(dt_lib_module_t *mod, void(*update_fn)(dt_lib_module_t *self))
static void _toggle_expanded(dt_lib_module_t *module, gboolean close_all)
static gboolean _postponed_update(gpointer data)
static void dt_lib_presets_popup_menu_show(dt_lib_module_info_t *minfo)
static void menuitem_update_preset(GtkMenuItem *menuitem, dt_lib_module_info_t *minfo)
void dt_lib_presets_add(const char *name, const char *plugin_name, const int32_t version, const void *params, const int32_t params_size, gboolean readonly)
static void menuitem_edit_preset(GtkMenuItem *menuitem, dt_lib_module_info_t *minfo)
gboolean dt_lib_presets_apply(const gchar *preset, const gchar *module_name, int module_version)
void dt_lib_colorpicker_set_point(dt_lib_t *lib, const float pos[2])
static void * _update_params(dt_lib_module_t *module, const void *const old_params, size_t old_params_size, int old_version, int target_version, size_t *new_size)
gboolean dt_lib_is_visible(dt_lib_module_t *module)
static void presets_popup_callback(GtkButton *button, dt_lib_module_t *module)
gchar * dt_lib_presets_duplicate(const gchar *preset, const gchar *module_name, int module_version)
void dt_lib_gui_set_expanded(dt_lib_module_t *module, gboolean expanded)
void dt_lib_presets_update(const gchar *preset, const gchar *module_name, int module_version, const gchar *newname, const gchar *desc, const void *params, const int32_t params_size)
static void menuitem_new_preset(GtkMenuItem *menuitem, dt_lib_module_info_t *minfo)
int default_lib_focus(dt_gui_module_t *m, gboolean toogle)
static gboolean _lib_plugin_focus_accel(GtkAccelGroup *accel_group, GObject *accelerable, guint keyval, GdkModifierType modifier, gpointer data)
dt_lib_module_t * dt_lib_get_module(const char *name)
void dt_lib_set_visible(dt_lib_module_t *module, gboolean visible)
static void menuitem_manage_presets(GtkMenuItem *menuitem, dt_lib_module_info_t *minfo)
static void dt_lib_init_module(void *m)
void dt_lib_cleanup(dt_lib_t *lib)
static gchar * get_active_preset_name(dt_lib_module_info_t *minfo)
static gchar * _get_lib_view_path(dt_lib_module_t *module, char *suffix)
GtkWidget * dt_lib_gui_get_expander(dt_lib_module_t *module)
static void edit_preset(const char *name_in, dt_lib_module_info_t *minfo)
static void pick_callback(GtkMenuItem *menuitem, dt_lib_module_info_t *minfo)
gchar * dt_lib_get_localized_name(const gchar *plugin_name)
float *const restrict const size_t k
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
#define dt_free(ptr)
g_free() ptr and set it to NULL, skipping both if it is already NULL.
GList * dt_module_load_modules(const char *subdir, size_t module_size, int(*load_module_so)(void *module, const char *libname, const char *plugin_name), void(*init_module)(void *module), gint(*sort_modules)(gconstpointer a, gconstpointer b))
Load every module the given directory's manifest lists.
void dt_osx_disallow_fullscreen(GtkWidget *widget)
void dt_preset_repository_delete_module_preset(const char *operation, const int op_version, const char *name)
Delete (operation, op_version, name) unless it is write-protected.
void dt_module_preset_free(gpointer data)
Release one dt_module_preset_t. Suits g_list_free_full().
GList * dt_preset_repository_list_all_versions(const char *operation)
Every preset of operation at ANY version, with rowid and op_version filled in, SHIPPED FIRST then by ...
GList * dt_preset_repository_list_for_module(const char *operation, const int op_version, const gboolean with_description, const gboolean shipped_first)
Every preset of (operation, op_version).
void dt_preset_repository_cleanup(void)
Finalise the cached statements. See dt_colorlabel_repository_cleanup().
dt_module_preset_t * dt_preset_repository_get_module_preset(const char *operation, const int op_version, const char *name)
One preset by name, or NULL. Free with dt_module_preset_free().
void dt_preset_repository_update_params_by_rowid(const int rowid, const int op_version, const void *params, const int params_size)
Replace the parameters of one row, by rowid.
int dt_preset_repository_find_rowid(const char *operation, const int op_version, const char *name)
rowid of (operation, op_version, name), or -1.
void dt_preset_repository_update_module_params(const char *operation, const char *name, const int op_version, const void *params, const int params_size)
Replace the parameters (and version) of (operation, name).
void dt_preset_repository_add_module_preset(const char *name, const char *operation, const int op_version, const void *params, const int params_size)
Create an empty user preset holding params, as the "new preset" menu item does.
void dt_preset_repository_delete_by_rowid(const int rowid)
Delete one row by rowid.
void dt_preset_repository_delete_all_for_module(const char *operation)
Delete every preset of operation, whatever its version or protection.
gboolean dt_preset_repository_module_preset_exists(const char *operation, const int op_version, const char *name)
TRUE when (operation, op_version, name) exists.
void dt_preset_repository_rename_module_preset(const char *operation, const int op_version, const char *old_name, const char *new_name, const char *description, const void *params, const int params_size)
Replace name, description and parameters of (operation, op_version, old_name).
void dt_preset_repository_add_shipped_preset(const char *name, const char *operation, const int op_version, const void *params, const int params_size, const int writeprotect)
Create a preset from code rather than from the menu – the built-in presets a module registers at star...
void dt_preset_repository_duplicate_module_preset(const char *operation, const int op_version, const char *name, const char *new_name)
Copy (operation, op_version, name) to new_name, unprotected.
data.presets: a module's saved parameters, with the conditions under which it auto-applies.
void dt_sentry_record_module_usage(const char *category, const char *name)
#define DT_DEBUG_CONTROL_SIGNAL_RAISE(ctlsig, signal,...)
struct dt_control_signal_t * dt_control_signal_get_global(void)
@ DT_SIGNAL_PRESETS_CHANGED
GtkAccelGroup * slideshow_accels
GtkAccelGroup * map_accels
GtkAccelGroup * print_accels
GtkAccelGroup * lighttable_accels
GtkAccelGroup * darkroom_accels
dt_lib_colorpicker_size_t size
struct dt_colorpicker_sample_t * primary_sample
struct dt_develop_t::@13 color_picker
Authoritative darkroom color-picker state.
GtkMenu * presets_popup_menu
The dt_gui_module_t type is the intersection between a dt_lib_module_t and a dt_iop_module_t structur...
GtkWidget * presets_button
void(* _postponed_update)(struct dt_lib_module_t *self)
dt_gui_module_t common_fields
dt_lib_module_t *gint old_id
struct dt_lib_module_t * gui_module
void dt_telemetry_record_module_usage(const char *category, const char *name)
dt_darkroom_layout_t dt_view_darkroom_get_layout(dt_view_manager_t *vm)
const dt_view_t * dt_view_manager_get_current_view(dt_view_manager_t *vm)
@ DT_UI_CONTAINER_PANEL_RIGHT_CENTER
@ DT_UI_CONTAINER_PANEL_LEFT_CENTER