76#ifdef GDK_WINDOWING_QUARTZ
124 fprintf(stderr,
"module %s doesn't have views flags\n", module->name(module));
128 const char **
views =
module->views(module);
129 for(
const char **iter =
views; *iter; iter++)
131 if(!strcmp(*iter,
"*") || !strcmp(*iter,
view->module_name))
return TRUE;
146 for(GList *l = presets; l; l = g_list_next(l))
149 if(
p->op_params_size == minfo->
params_size && !memcmp(minfo->
params,
p->op_params,
p->op_params_size))
151 name = g_strdup(
p->name);
169 name = g_strdup(name_in);
175 if(rowid < 0)
return;
184 char *
name = g_object_get_data(G_OBJECT(menuitem),
"dt-preset-name");
186 gint
res = GTK_RESPONSE_YES;
192 = gtk_message_dialog_new(GTK_WINDOW(
window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION,
193 GTK_BUTTONS_YES_NO, _(
"do you really want to update the preset `%s'?"),
name);
194#ifdef GDK_WINDOWING_QUARTZ
197 gtk_window_set_title(GTK_WINDOW(dialog), _(
"update preset?"));
198 res = gtk_dialog_run(GTK_DIALOG(dialog));
199 gtk_widget_destroy(dialog);
202 if(
res == GTK_RESPONSE_YES)
232 if(minfo->module->manage_presets) minfo->module->manage_presets(minfo->module);
240 gint
res = GTK_RESPONSE_YES;
246 = gtk_message_dialog_new(GTK_WINDOW(
window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION,
247 GTK_BUTTONS_YES_NO, _(
"do you really want to delete the preset `%s'?"),
name);
248#ifdef GDK_WINDOWING_QUARTZ
251 gtk_window_set_title(GTK_WINDOW(dialog), _(
"delete preset?"));
252 res = gtk_dialog_run(GTK_DIALOG(dialog));
253 gtk_widget_destroy(dialog);
256 if(
res == GTK_RESPONSE_YES)
274 gchar *tx = g_strdup_printf(
"%s_%d",
preset,
i);
278 gchar *nname = g_strdup_printf(
"%s_%d",
preset,
i);
299 const void *blob =
p->op_params;
300 int length =
p->op_params_size;
301 int writeprotect =
p->writeprotect;
307 if(!strncmp(module->
plugin_name, module_name, 128))
309 gchar *tx = g_strdup_printf(
"plugins/darkroom/%s/last_preset", module_name);
312 res =
module->set_params(module, blob, length);
341 const char *pn = g_object_get_data(G_OBJECT(menuitem),
"dt-preset-name");
356 if(menu) gtk_widget_destroy(GTK_WIDGET(menu));
360 const gboolean hide_default =
dt_conf_get_bool(
"plugins/lighttable/hide_default_presets");
361 const gboolean default_first =
dt_conf_get_bool(
"modules/default_presets_first");
363 g_signal_connect(G_OBJECT(menu),
"destroy", G_CALLBACK(
free_module_info), minfo);
366 int active_preset = -1, cnt = 0;
367 gboolean selected_writeprotect =
FALSE;
370 TRUE, default_first);
375 for(GList *l = presets; l; l = g_list_next(l))
379 const gboolean writeprotect =
p->writeprotect;
380 if(hide_default && writeprotect)
387 last_wp = writeprotect;
389 else if(last_wp != writeprotect)
391 last_wp = writeprotect;
392 gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new());
395 void *op_params =
p->op_params;
396 int32_t op_params_size =
p->op_params_size;
397 const char *
name =
p->name;
408 if(op_params_size == minfo->
params_size && !memcmp(minfo->
params, op_params, op_params_size))
411 selected_writeprotect = writeprotect;
412 mi = gtk_check_menu_item_new_with_label(
name);
414 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mi),
TRUE);
419 mi = gtk_menu_item_new_with_label((
const char *)
name);
421 g_object_set_data_full(G_OBJECT(mi),
"dt-preset-name", g_strdup(
name), g_free);
422 g_signal_connect(G_OBJECT(mi),
"activate", G_CALLBACK(
pick_callback), minfo);
423 gtk_widget_set_tooltip_text(mi,
p->description);
424 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
431 gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new());
435 if(minfo->module->manage_presets)
437 mi = gtk_menu_item_new_with_label(_(
"manage presets..."));
439 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
442 else if(active_preset >= 0)
444 if(!selected_writeprotect)
446 mi = gtk_menu_item_new_with_label(_(
"edit this preset.."));
448 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
450 mi = gtk_menu_item_new_with_label(_(
"delete this preset"));
452 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
458 mi = gtk_menu_item_new_with_label(_(
"store new preset.."));
461 gtk_widget_set_sensitive(GTK_WIDGET(mi),
FALSE);
462 gtk_widget_set_tooltip_text(mi, _(
"nothing to save"));
466 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
470 char *markup = g_markup_printf_escaped(
"%s <span weight=\"bold\">%s</span>", _(
"update preset"),
472 mi = gtk_menu_item_new_with_label(
"");
473 gtk_widget_set_sensitive(GTK_WIDGET(mi), minfo->
params_size > 0);
474 gtk_label_set_markup(GTK_LABEL(gtk_bin_get_child(GTK_BIN(mi))), markup);
475 g_object_set_data_full(G_OBJECT(mi),
"dt-preset-name", g_strdup(
dt_gui_get_global()->last_preset), g_free);
477 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
483 if(minfo->module->set_preferences)
487 gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new());
489 minfo->module->set_preferences(GTK_MENU_SHELL(menu), minfo->module);
497 const int apos = (am && am->position) ? am->position() : 0;
498 const int bpos = (bm && bm->position) ? bm->position() : 0;
534#define INCLUDE_API_FROM_MODULE_LOAD "lib_load_module"
540 gboolean load =
FALSE;
541 for(
const char **view_m = module->views(module); *view_m; ++view_m)
546 if(!g_strcmp0(
view->module_name, *view_m) || !g_strcmp0(
"*", *view_m) || !g_strcmp0(
"special", *view_m))
559 if(((!module->get_params || !module->set_params)
560 && (module->legacy_params || module->set_params || module->get_params))
561 || (!module->init_presets && module->manage_presets))
563 fprintf(stderr,
"[dt_lib_load_module] illegal method combination in '%s'\n", module->
plugin_name);
566 if(!module->get_params || !module->set_params)
571 module->legacy_params = NULL;
572 module->set_params = NULL;
573 module->get_params = NULL;
574 module->manage_presets = NULL;
577 module->widget = NULL;
578 module->expander = NULL;
579 module->arrow = NULL;
580 module->reset_button = NULL;
581 module->presets_button = NULL;
583 if(module->init)
module->init(module);
586 module->common_fields.name = g_strdup(module->name(module));
587 module->common_fields.view = NULL;
588 module->common_fields.widget_list = NULL;
589 module->common_fields.widget_list_bh = NULL;
590 module->common_fields.focus = module->lib_focus;
591 module->common_fields.deprecated = FALSE;
597 const void *
const old_params,
size_t old_params_size,
int old_version,
598 int target_version,
size_t *new_size)
601 void *
params = malloc(old_params_size);
603 memcpy(
params, old_params, old_params_size);
604 while(old_version < target_version)
608 void *new_params =
module->legacy_params(module, params, old_params_size, old_version, &version, &size);
612 old_version = version;
613 old_params_size =
size;
615 *new_size = old_params_size;
638 for(GList *l = presets; l; l = g_list_next(l))
641 const int version =
module->version();
643 if(
p->op_version < version)
645 size_t new_params_size = 0;
646 void *new_params = NULL;
648 if(module->legacy_params
649 && (new_params =
_update_params(module,
p->op_params,
p->op_params_size,
p->op_version, version,
654 "[lighttable_init_presets] updating '%s' preset '%s' from version %d to version %d\n",
661 fprintf(stderr,
"[lighttable_init_presets] Can't upgrade '%s' preset '%s' from version %d to %d, "
662 "no legacy_params() implemented or unable to update\n",
672 if(module->init_presets)
673 module->init_presets(module);
681 GdkModifierType modifier, gpointer data)
684 if(!module || !module->focus)
return FALSE;
685 return module->focus(module, FALSE);
696 module->gui_init(module);
700 module->common_fields.view = g_strdup(_("Lighttable"));
702 if(!module->views || (module->expandable && !module->expandable(module)))
return;
708 const char **
views =
module->views(module);
713 GtkAccelGroup *accel_group = NULL;
715 if(!g_strcmp0(*
view,
"darkroom"))
718 label = g_strdup(
"Darkroom/Toolboxes");
720 else if(!g_strcmp0(*
view,
"lighttable"))
723 label = g_strdup(
"Lighttable/Toolboxes");
725 else if(!g_strcmp0(*
view,
"map"))
728 label = g_strdup(
"Map/Toolboxes");
730 else if(!g_strcmp0(*
view,
"print"))
733 label = g_strdup(
"Print/Toolboxes");
735 else if(!g_strcmp0(*
view,
"slideshow"))
738 label = g_strdup(
"Slideshow/Toolboxes");
741 if(accel_group && label)
743 accel_group, label, clean_name, 0, 0,
FALSE,
744 _(
"Focuses the module"));
754 GtkWidget *retained_widget =
module->widget;
761 const char **
views =
module->views(module);
764 const char *scope = NULL;
765 if(!g_strcmp0(*
view,
"darkroom")) scope =
"Darkroom/Toolboxes";
766 else if(!g_strcmp0(*
view,
"lighttable")) scope =
"Lighttable/Toolboxes";
767 else if(!g_strcmp0(*
view,
"map")) scope =
"Map/Toolboxes";
768 else if(!g_strcmp0(*
view,
"print")) scope =
"Print/Toolboxes";
769 else if(!g_strcmp0(*
view,
"slideshow")) scope =
"Slideshow/Toolboxes";
783 g_list_free(
m->widget_list);
784 m->widget_list = NULL;
785 g_list_free(
m->widget_list_bh);
786 m->widget_list_bh = NULL;
793 g_object_ref_sink(expander);
794 gtk_widget_destroy(expander);
795 g_object_unref(expander);
800 g_object_ref_sink(widget);
801 gtk_widget_destroy(widget);
802 g_object_unref(widget);
804 module->expander = NULL;
805 module->widget = NULL;
806 if(!
IS_NULL_PTR(retained_widget) && G_IS_OBJECT(retained_widget))
807 g_object_unref(retained_widget);
809 if(module->module) g_module_close(module->module);
815 module->gui_reset(module);
823 mi->
version =
module->version();
825 mi->
params =
module->get_params ? module->get_params(module, &mi->params_size) : NULL;
843 if(module->
expander == (
GtkWidget *)where_the_object_was)
module->expander = NULL;
857 module->expander = NULL;
876 gtk_widget_grab_focus(GTK_WIDGET(module->
expander));
914 if(!module->expandable(module))
return true;
918 module->expander = NULL;
948 gboolean all_other_closed =
TRUE;
949 uint32_t
container =
module->container(module);
985 const uint32_t
container =
module->container(module);
1000 if(e->type == GDK_2BUTTON_PRESS || e->type == GDK_3BUTTON_PRESS)
return TRUE;
1011 if(!module->expandable(module))
return FALSE;
1015 gtk_widget_grab_focus(GTK_WIDGET(module->
expander));
1022 else if(e->button == 3)
1036 if(!module->expandable(module))
return;
1039 uint32_t
container =
module->container(module);
1053 if(!module->expandable(module))
1061 module->expander = NULL;
1066 gtk_widget_set_name(GTK_WIDGET(header),
"module-header");
1083 gtk_widget_add_events(body_evb, GDK_POINTER_MOTION_MASK);
1090 if(module->expandable(module))
1092 module->arrow = dtgtk_button_new(dtgtk_cairo_paint_arrow, 0, NULL);
1100 GtkWidget *label_evb = gtk_event_box_new();
1101 gtk_container_add(GTK_CONTAINER(label_evb), label);
1102 gchar *mname = g_markup_escape_text(module->name(module), -1);
1104 gtk_label_set_markup(GTK_LABEL(label), mname);
1106 gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
1107 g_object_set(G_OBJECT(label),
"halign", GTK_ALIGN_START,
"xalign", 0.0, (gchar *)0);
1108 gtk_widget_set_name(label,
"lib-panel-label");
1109 gtk_box_pack_start(GTK_BOX(header), label_evb,
FALSE,
FALSE, 0);
1112 module->presets_button = dtgtk_button_new(dtgtk_cairo_paint_presets, 0, NULL);
1114 if(!module->get_params && !module->set_preferences) gtk_widget_set_sensitive(GTK_WIDGET(module->
presets_button),
FALSE);
1118 module->reset_button = dtgtk_button_new(dtgtk_cairo_paint_reset, 0, NULL);
1120 if(!module->gui_reset) gtk_widget_set_sensitive(GTK_WIDGET(module->
reset_button),
FALSE);
1123 gtk_widget_show_all(GTK_WIDGET(module->
widget));
1125 module->expander = expander;
1131 return module->expander;
1149 if(module->gui_cleanup)
1150 module->gui_cleanup(module);
1151 module->data = NULL;
1153 module->common_fields.view = NULL;
1179 g_snprintf(lay,
sizeof(lay),
"%d/", 0);
1181 else if(g_strcmp0(cv->
module_name,
"darkroom") == 0)
1192 gboolean ret =
TRUE;
1211 widget =
module->expander;
1213 widget =
module->widget;
1217 gtk_widget_show(GTK_WIDGET(widget));
1219 gtk_widget_hide(GTK_WIDGET(widget));
1226 static GHashTable *module_names = NULL;
1229 module_names = g_hash_table_new(g_str_hash, g_str_equal);
1230 for(
const GList *lib =
dt_lib_get_global()->plugins; lib; lib = g_list_next(lib))
1233 g_hash_table_insert(module_names, module->
plugin_name, g_strdup(module->name(module)));
1237 return (gchar *)g_hash_table_lookup(module_names, plugin_name);
1251 for(
int k = 0;
k < 4;
k++)
1253 changed |= (sample->
box[
k] != raw_box[
k]);
1254 sample->
box[
k] = raw_box[
k];
1257 if(!changed)
return;
1268 float raw_pos[2] = { pos[0], pos[1] };
1272 || sample->
point[0] != raw_pos[0]
1273 || sample->
point[1] != raw_pos[1];
1275 sample->
point[0] = raw_pos[0];
1276 sample->
point[1] = raw_pos[1];
1278 if(!changed)
return;
1332 return mod->preset_autoapply(mod);
1339 if(
key == GDK_KEY_Return)
1341 gtk_dialog_response(GTK_DIALOG(widget), GTK_RESPONSE_ACCEPT);
1349 gchar *label_copy = g_strdup(label);
1351 GtkWidget *button = gtk_button_new_with_label(label_copy);
1354 gtk_widget_set_valign(GTK_WIDGET(button), GTK_ALIGN_CENTER);
1355 gtk_widget_set_halign(GTK_WIDGET(button), GTK_ALIGN_CENTER);
1356 gtk_widget_set_vexpand(GTK_WIDGET(button),
FALSE);
1357 gtk_widget_set_hexpand(GTK_WIDGET(button),
FALSE);
1359 gtk_label_set_ellipsize(GTK_LABEL(gtk_bin_get_child(GTK_BIN(button))), PANGO_ELLIPSIZE_END);
1363 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)
Build the accel path of feature under scope.
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)
static const dt_iop_drawlayer_params_t * params
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)
static void _scroll_to_module(dt_lib_module_t *module)
Queue the module's expander as the scroll target of the panel that holds it.
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