73#ifdef GDK_WINDOWING_QUARTZ
140 fprintf(stderr,
"module %s doesn't have views flags\n", module->name(module));
144 const char **
views =
module->views(module);
145 for(
const char **iter =
views; *iter; iter++)
147 if(!strcmp(*iter,
"*") || !strcmp(*iter,
view->module_name))
return TRUE;
161 "SELECT name, op_params, writeprotect"
163 " WHERE operation=?1 AND op_version=?2",
170 while(sqlite3_step(stmt) == SQLITE_ROW)
172 void *op_params = (
void *)sqlite3_column_blob(stmt, 1);
173 int32_t op_params_size = sqlite3_column_bytes(stmt, 1);
174 if(op_params_size == minfo->
params_size && !memcmp(minfo->
params, op_params, op_params_size))
176 name = g_strdup((
char *)sqlite3_column_text(stmt, 0));
180 sqlite3_finalize(stmt);
194 name = g_strdup(name_in);
203 " WHERE name = ?1 AND operation = ?2 AND op_version = ?3",
209 if(sqlite3_step(stmt) == SQLITE_ROW)
211 rowid = sqlite3_column_int(stmt, 0);
213 sqlite3_finalize(stmt);
216 if(rowid < 0)
return;
225 char *
name = g_object_get_data(G_OBJECT(menuitem),
"dt-preset-name");
227 gint res = GTK_RESPONSE_YES;
233 = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION,
234 GTK_BUTTONS_YES_NO, _(
"do you really want to update the preset `%s'?"),
name);
235#ifdef GDK_WINDOWING_QUARTZ
238 gtk_window_set_title(GTK_WINDOW(dialog), _(
"update preset?"));
239 res = gtk_dialog_run(GTK_DIALOG(dialog));
240 gtk_widget_destroy(dialog);
243 if(res == GTK_RESPONSE_YES)
249 "UPDATE data.presets"
250 " SET op_version=?2, op_params=?3"
251 " WHERE name=?4 AND operation=?1",
260 sqlite3_finalize(stmt);
275 "INSERT INTO data.presets (name, description, operation, op_version, op_params,"
276 " blendop_params, blendop_version, enabled, model, maker, lens,"
277 " iso_min, iso_max, exposure_min, exposure_max, aperture_min, aperture_max,"
278 " focal_length_min, focal_length_max, writeprotect, "
279 " autoapply, filter, def, format)"
280 " VALUES (?1, '', ?2, ?3, ?4, NULL, 0, 1, '%', "
281 " '%', '%', 0, 340282346638528859812000000000000000000, 0, 100000000, 0, 100000000,"
282 " 0, 1000, 0, 0, 0, 0, 0)",
290 sqlite3_finalize(stmt);
304 if(minfo->module->manage_presets) minfo->module->manage_presets(minfo->module);
312 gint res = GTK_RESPONSE_YES;
318 = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION,
319 GTK_BUTTONS_YES_NO, _(
"do you really want to delete the preset `%s'?"),
name);
320#ifdef GDK_WINDOWING_QUARTZ
323 gtk_window_set_title(GTK_WINDOW(dialog), _(
"delete preset?"));
324 res = gtk_dialog_run(GTK_DIALOG(dialog));
325 gtk_widget_destroy(dialog);
328 if(res == GTK_RESPONSE_YES)
348 gchar *tx = g_strdup_printf(
"%s_%d",
preset,
i);
354 " WHERE operation = ?1 AND op_version = ?2 AND name = ?3", -1, &stmt, NULL);
359 if(sqlite3_step(stmt) != SQLITE_ROW) ko =
FALSE;
360 sqlite3_finalize(stmt);
363 gchar *nname = g_strdup_printf(
"%s_%d",
preset,
i);
369 "INSERT INTO data.presets"
370 " (name, description, operation, op_version, op_params, "
371 " blendop_params, blendop_version, enabled, model, maker, lens, "
372 " iso_min, iso_max, exposure_min, exposure_max, aperture_min, aperture_max, "
373 " focal_length_min, focal_length_max, writeprotect, "
374 " autoapply, filter, def, format) "
375 "SELECT ?1, description, operation, op_version, op_params, "
376 " blendop_params, blendop_version, enabled, model, maker, lens, "
377 " iso_min, iso_max, exposure_min, exposure_max, aperture_min, aperture_max, "
378 " focal_length_min, focal_length_max, 0, "
379 " autoapply, filter, def, format"
381 " WHERE operation = ?2 AND op_version = ?3 AND name = ?4",
389 sqlite3_finalize(stmt);
401 "DELETE FROM data.presets"
408 sqlite3_clear_bindings(stmt);
422 "SELECT op_params, writeprotect"
424 " WHERE operation = ?1 AND op_version = ?2 AND name = ?3",
432 if(sqlite3_step(stmt) == SQLITE_ROW)
434 const void *blob = sqlite3_column_blob(stmt, 0);
435 int length = sqlite3_column_bytes(stmt, 0);
436 int writeprotect = sqlite3_column_int(stmt, 1);
442 if(!strncmp(module->
plugin_name, module_name, 128))
444 gchar *tx = g_strdup_printf(
"plugins/darkroom/%s/last_preset", module_name);
447 res =
module->set_params(module, blob, length);
457 sqlite3_finalize(stmt);
467 const gchar *desc,
const void *params,
const int32_t
params_size)
472 "UPDATE data.presets"
473 " SET name = ?1, description = ?2, op_params = ?3"
474 " WHERE operation = ?4 AND op_version = ?5 AND name = ?6",
484 sqlite3_finalize(stmt);
490 const char *pn = g_object_get_data(G_OBJECT(menuitem),
"dt-preset-name");
505 if(menu) gtk_widget_destroy(GTK_WIDGET(menu));
509 const gboolean hide_default =
dt_conf_get_bool(
"plugins/lighttable/hide_default_presets");
510 const gboolean default_first =
dt_conf_get_bool(
"modules/default_presets_first");
512 g_signal_connect(G_OBJECT(menu),
"destroy", G_CALLBACK(
free_module_info), minfo);
515 int active_preset = -1, cnt = 0;
516 gboolean selected_writeprotect =
FALSE;
520 gchar *query = g_strdup_printf(
"SELECT name, op_params, writeprotect, description"
522 " WHERE operation=?1 AND op_version=?2"
523 " ORDER BY writeprotect %s, LOWER(name), rowid",
524 default_first ?
"DESC" :
"ASC");
534 while(sqlite3_step(stmt) == SQLITE_ROW)
537 const gboolean writeprotect = sqlite3_column_int(stmt, 2);
538 if(hide_default && writeprotect)
545 last_wp = writeprotect;
547 else if(last_wp != writeprotect)
549 last_wp = writeprotect;
550 gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new());
553 void *op_params = (
void *)sqlite3_column_blob(stmt, 1);
554 int32_t op_params_size = sqlite3_column_bytes(stmt, 1);
555 const char *
name = (
char *)sqlite3_column_text(stmt, 0);
566 if(op_params_size == minfo->
params_size && !memcmp(minfo->
params, op_params, op_params_size))
569 selected_writeprotect = writeprotect;
570 mi = gtk_check_menu_item_new_with_label(
name);
572 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mi),
TRUE);
577 mi = gtk_menu_item_new_with_label((
const char *)
name);
579 g_object_set_data_full(G_OBJECT(mi),
"dt-preset-name", g_strdup(
name), g_free);
580 g_signal_connect(G_OBJECT(mi),
"activate", G_CALLBACK(
pick_callback), minfo);
581 gtk_widget_set_tooltip_text(mi, (
const char *)sqlite3_column_text(stmt, 3));
582 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
585 sqlite3_finalize(stmt);
589 gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new());
593 if(minfo->module->manage_presets)
595 mi = gtk_menu_item_new_with_label(_(
"manage presets..."));
597 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
600 else if(active_preset >= 0)
602 if(!selected_writeprotect)
604 mi = gtk_menu_item_new_with_label(_(
"edit this preset.."));
606 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
608 mi = gtk_menu_item_new_with_label(_(
"delete this preset"));
610 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
616 mi = gtk_menu_item_new_with_label(_(
"store new preset.."));
619 gtk_widget_set_sensitive(GTK_WIDGET(mi),
FALSE);
620 gtk_widget_set_tooltip_text(mi, _(
"nothing to save"));
624 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
628 char *markup = g_markup_printf_escaped(
"%s <span weight=\"bold\">%s</span>", _(
"update preset"),
630 mi = gtk_menu_item_new_with_label(
"");
631 gtk_widget_set_sensitive(GTK_WIDGET(mi), minfo->
params_size > 0);
632 gtk_label_set_markup(GTK_LABEL(gtk_bin_get_child(GTK_BIN(mi))), markup);
635 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi);
641 if(minfo->module->set_preferences)
645 gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new());
647 minfo->module->set_preferences(GTK_MENU_SHELL(menu), minfo->module);
655 const int apos = (am && am->position) ? am->position() : 0;
656 const int bpos = (bm && bm->position) ? bm->position() : 0;
692#define INCLUDE_API_FROM_MODULE_LOAD "lib_load_module"
698 gboolean load =
FALSE;
699 for(
const char **view_m = module->views(module); *view_m; ++view_m)
704 if(!g_strcmp0(
view->module_name, *view_m) || !g_strcmp0(
"*", *view_m) || !g_strcmp0(
"special", *view_m))
717 if(((!module->get_params || !module->set_params)
718 && (module->legacy_params || module->set_params || module->get_params))
719 || (!module->init_presets && module->manage_presets))
721 fprintf(stderr,
"[dt_lib_load_module] illegal method combination in '%s'\n", module->
plugin_name);
724 if(!module->get_params || !module->set_params)
729 module->legacy_params = NULL;
730 module->set_params = NULL;
731 module->get_params = NULL;
732 module->manage_presets = NULL;
735 module->widget = NULL;
736 module->expander = NULL;
737 module->arrow = NULL;
738 module->reset_button = NULL;
739 module->presets_button = NULL;
741 if(module->init)
module->init(module);
744 module->common_fields.name = g_strdup(module->name(module));
745 module->common_fields.view = NULL;
746 module->common_fields.widget_list = NULL;
747 module->common_fields.widget_list_bh = NULL;
748 module->common_fields.focus = module->lib_focus;
749 module->common_fields.deprecated = FALSE;
755 const void *
const old_params,
size_t old_params_size,
int old_version,
756 int target_version,
size_t *new_size)
759 void *params = malloc(old_params_size);
761 memcpy(params, old_params, old_params_size);
762 while(old_version < target_version)
766 void *new_params =
module->legacy_params(module, params, old_params_size, old_version, &version, &size);
770 old_version = version;
771 old_params_size =
size;
773 *new_size = old_params_size;
795 "DELETE FROM data.presets"
796 " WHERE operation=?1", -1,
802 sqlite3_clear_bindings(stmt);
812 "SELECT rowid, op_version, op_params, name"
814 " WHERE operation=?1",
820 sqlite3_clear_bindings(stmt);
822 while(sqlite3_step(stmt) == SQLITE_ROW)
824 int rowid = sqlite3_column_int(stmt, 0);
825 int op_version = sqlite3_column_int(stmt, 1);
826 void *op_params = (
void *)sqlite3_column_blob(stmt, 2);
827 size_t op_params_size = sqlite3_column_bytes(stmt, 2);
828 const char *
name = (
char *)sqlite3_column_text(stmt, 3);
830 int version =
module->version();
832 if(op_version < version)
834 size_t new_params_size = 0;
835 void *new_params = NULL;
837 if(module->legacy_params
838 && (new_params =
_update_params(module, op_params, op_params_size, op_version, version, &new_params_size)))
842 "[lighttable_init_presets] updating '%s' preset '%s' from version %d to version %d\n",
844 sqlite3_stmt *innerstmt;
847 "UPDATE data.presets"
848 " SET op_version=?1, op_params=?2"
849 " WHERE rowid=?3", -1,
855 sqlite3_step(innerstmt);
856 sqlite3_finalize(innerstmt);
861 fprintf(stderr,
"[lighttable_init_presets] Can't upgrade '%s' preset '%s' from version %d to %d, "
862 "no legacy_params() implemented or unable to update\n",
864 sqlite3_stmt *innerstmt;
867 "DELETE FROM data.presets"
868 " WHERE rowid=?1", -1,
872 sqlite3_step(innerstmt);
873 sqlite3_finalize(innerstmt);
881 if(module->init_presets)
882 module->init_presets(module);
890 GdkModifierType modifier, gpointer data)
893 if(!module || !module->focus)
return FALSE;
894 return module->focus(module, FALSE);
905 module->gui_init(module);
909 module->common_fields.view = g_strdup(_("Lighttable"));
911 if(!module->views || (module->expandable && !module->expandable(module)))
return;
918 assert(g_strrstr(clean_name,
"/") == NULL);
920 const char **
views =
module->views(module);
925 GtkAccelGroup *accel_group = NULL;
927 if(!g_strcmp0(*
view,
"darkroom"))
930 label = g_strdup(
"Darkroom/Toolboxes");
932 else if(!g_strcmp0(*
view,
"lighttable"))
935 label = g_strdup(
"Lighttable/Toolboxes");
937 else if(!g_strcmp0(*
view,
"map"))
940 label = g_strdup(
"Map/Toolboxes");
942 else if(!g_strcmp0(*
view,
"print"))
945 label = g_strdup(
"Print/Toolboxes");
947 else if(!g_strcmp0(*
view,
"slideshow"))
950 label = g_strdup(
"Slideshow/Toolboxes");
953 if(accel_group && label)
955 accel_group, label, clean_name, 0, 0,
FALSE,
956 _(
"Focuses the module"));
966 GtkWidget *retained_widget =
module->widget;
973 const char **
views =
module->views(module);
976 const char *scope = NULL;
977 if(!g_strcmp0(*
view,
"darkroom")) scope =
"Darkroom/Toolboxes";
978 else if(!g_strcmp0(*
view,
"lighttable")) scope =
"Lighttable/Toolboxes";
979 else if(!g_strcmp0(*
view,
"map")) scope =
"Map/Toolboxes";
980 else if(!g_strcmp0(*
view,
"print")) scope =
"Print/Toolboxes";
981 else if(!g_strcmp0(*
view,
"slideshow")) scope =
"Slideshow/Toolboxes";
995 g_list_free(
m->widget_list);
996 m->widget_list = NULL;
997 g_list_free(
m->widget_list_bh);
998 m->widget_list_bh = NULL;
1005 g_object_ref_sink(expander);
1006 gtk_widget_destroy(expander);
1007 g_object_unref(expander);
1012 g_object_ref_sink(widget);
1013 gtk_widget_destroy(widget);
1014 g_object_unref(widget);
1016 module->expander = NULL;
1017 module->widget = NULL;
1018 if(!
IS_NULL_PTR(retained_widget) && G_IS_OBJECT(retained_widget))
1019 g_object_unref(retained_widget);
1021 if(module->module) g_module_close(module->module);
1027 module->gui_reset(module);
1035 mi->
version =
module->version();
1036 mi->module =
module;
1037 mi->
params =
module->get_params ? module->get_params(module, &mi->params_size) : NULL;
1055 if(module->
expander == (
GtkWidget *)where_the_object_was)
module->expander = NULL;
1069 module->expander = NULL;
1088 gtk_widget_grab_focus(GTK_WIDGET(module->
expander));
1121 if(!module->expandable(module))
return true;
1125 module->expander = NULL;
1151 gboolean all_other_closed =
TRUE;
1152 uint32_t
container =
module->container(module);
1166 if(all_other_closed)
1185 if(e->type == GDK_2BUTTON_PRESS || e->type == GDK_3BUTTON_PRESS)
return TRUE;
1196 if(!module->expandable(module))
return FALSE;
1199 uint32_t
container =
module->container(module);
1205 gtk_widget_grab_focus(GTK_WIDGET(module->
expander));
1212 else if(e->button == 3)
1226 if(!module->expandable(module))
return;
1229 uint32_t
container =
module->container(module);
1243 if(!module->expandable(module))
1251 module->expander = NULL;
1256 gtk_widget_set_name(GTK_WIDGET(header),
"module-header");
1273 gtk_widget_add_events(body_evb, GDK_POINTER_MOTION_MASK);
1280 if(module->expandable(module))
1282 module->arrow = dtgtk_button_new(dtgtk_cairo_paint_arrow, 0, NULL);
1290 GtkWidget *label_evb = gtk_event_box_new();
1291 gtk_container_add(GTK_CONTAINER(label_evb), label);
1292 gchar *mname = g_markup_escape_text(module->name(module), -1);
1294 gtk_label_set_markup(GTK_LABEL(label), mname);
1296 gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
1297 g_object_set(G_OBJECT(label),
"halign", GTK_ALIGN_START,
"xalign", 0.0, (gchar *)0);
1298 gtk_widget_set_name(label,
"lib-panel-label");
1299 gtk_box_pack_start(GTK_BOX(header), label_evb,
FALSE,
FALSE, 0);
1302 module->presets_button = dtgtk_button_new(dtgtk_cairo_paint_presets, 0, NULL);
1304 if(!module->get_params && !module->set_preferences) gtk_widget_set_sensitive(GTK_WIDGET(module->
presets_button),
FALSE);
1308 module->reset_button = dtgtk_button_new(dtgtk_cairo_paint_reset, 0, NULL);
1310 if(!module->gui_reset) gtk_widget_set_sensitive(GTK_WIDGET(module->
reset_button),
FALSE);
1313 gtk_widget_show_all(GTK_WIDGET(module->
widget));
1315 module->expander = expander;
1321 return module->expander;
1339 if(module->gui_cleanup)
1340 module->gui_cleanup(module);
1341 module->data = NULL;
1343 module->common_fields.view = NULL;
1362 "INSERT INTO data.presets"
1363 " (name, description, operation, op_version, op_params, "
1364 " blendop_params, blendop_version, enabled, model, maker, lens, "
1365 " iso_min, iso_max, exposure_min, exposure_max, aperture_min, aperture_max, "
1366 " focal_length_min, focal_length_max, writeprotect, "
1367 " autoapply, filter, def, format)"
1369 " (?1, '', ?2, ?3, ?4, NULL, 0, 1, '%', "
1370 " '%', '%', 0, 340282346638528859812000000000000000000, 0, 10000000, 0, 100000000, 0,"
1371 " 1000, ?5, 0, 0, 0, 0)",
1376 sqlite3_reset(stmt);
1377 sqlite3_clear_bindings(stmt);
1395 g_snprintf(lay,
sizeof(lay),
"%d/", 0);
1397 else if(g_strcmp0(cv->
module_name,
"darkroom") == 0)
1408 gboolean ret =
TRUE;
1427 widget =
module->expander;
1429 widget =
module->widget;
1433 gtk_widget_show(GTK_WIDGET(widget));
1435 gtk_widget_hide(GTK_WIDGET(widget));
1442 static GHashTable *module_names = NULL;
1445 module_names = g_hash_table_new(g_str_hash, g_str_equal);
1449 g_hash_table_insert(module_names, module->
plugin_name, g_strdup(module->name(module)));
1453 return (gchar *)g_hash_table_lookup(module_names, plugin_name);
1467 for(
int k = 0;
k < 4;
k++)
1469 changed |= (sample->
box[
k] != raw_box[
k]);
1470 sample->
box[
k] = raw_box[
k];
1473 if(!changed)
return;
1484 float raw_pos[2] = { pos[0], pos[1] };
1488 || sample->
point[0] != raw_pos[0]
1489 || sample->
point[1] != raw_pos[1];
1491 sample->
point[0] = raw_pos[0];
1492 sample->
point[1] = raw_pos[1];
1494 if(!changed)
return;
1548 return mod->preset_autoapply(mod);
1555 if(
key == GDK_KEY_Return)
1557 gtk_dialog_response(GTK_DIALOG(widget), GTK_RESPONSE_ACCEPT);
1565 gchar *label_copy = g_strdup(label);
1567 GtkWidget *button = gtk_button_new_with_label(label_copy);
1570 gtk_widget_set_valign(GTK_WIDGET(button), GTK_ALIGN_CENTER);
1571 gtk_widget_set_halign(GTK_WIDGET(button), GTK_ALIGN_CENTER);
1572 gtk_widget_set_vexpand(GTK_WIDGET(button),
FALSE);
1573 gtk_widget_set_hexpand(GTK_WIDGET(button),
FALSE);
1575 gtk_label_set_ellipsize(GTK_LABEL(gtk_bin_get_child(GTK_BIN(button))), PANGO_ELLIPSIZE_END);
1579 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, 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....
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
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)
int dt_conf_get_int(const char *name)
void dt_conf_set_string(const char *name, const char *val)
void dt_control_log(const char *msg,...)
void dt_control_queue_redraw()
request redraw of the workspace. This redraws the whole workspace within a gdk critical section to pr...
uint32_t view(const dt_view_t *self)
float dt_boundingbox_t[4]
static gchar * delete_underscore(const char *s)
static gboolean dt_modifier_is(const GdkModifierType state, const GdkModifierType desired_modifier_mask)
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
sqlite3 * dt_database_get(const dt_database_t *db)
#define DT_DEBUG_SQLITE3_BIND_BLOB(a, b, c, d, e)
#define DT_DEBUG_SQLITE3_PREPARE_V2(a, b, c, d, e)
#define DT_DEBUG_SQLITE3_BIND_TEXT(a, b, c, d, e)
#define DT_DEBUG_SQLITE3_BIND_INT(a, b, c)
void dt_dev_coordinates_image_norm_to_raw_norm(dt_develop_t *dev, float *points, size_t num_points)
void dtgtk_cairo_paint_arrow(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
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_menu_popup(GtkMenu *menu, GtkWidget *button, GdkGravity widget_anchor, GdkGravity menu_anchor)
void dt_gui_remove_class(GtkWidget *widget, const gchar *class_name)
void dt_capitalize_label(gchar *text)
void dt_gui_store_last_preset(const char *name)
void dt_gui_refocus_center()
void dt_gui_add_class(GtkWidget *widget, const gchar *class_name)
GtkWidget * dt_ui_main_window(dt_ui_t *ui)
get the main window widget
#define DT_GUI_BOX_SPACING
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)
struct dt_iop_tonecurve_params_t preset
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 sqlite3_stmt * _lib_presets_select_stmt
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 sqlite3_stmt * _lib_presets_remove_stmt
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)
static sqlite3_stmt * _lib_presets_add_stmt
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)
static void _lib_presets_stmt_cleanup(void)
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)
static sqlite3_stmt * _lib_presets_delete_operation_stmt
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
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))
void dt_osx_disallow_fullscreen(GtkWidget *widget)
void dt_sentry_record_module_usage(const char *category, const char *name)
#define DT_DEBUG_CONTROL_SIGNAL_RAISE(ctlsig, signal,...)
@ DT_SIGNAL_PRESETS_CHANGED
struct _GtkWidget GtkWidget
struct dt_gui_gtk_t * gui
const struct dt_database_t * db
struct dt_control_signal_t * signals
struct dt_develop_t * develop
struct dt_view_manager_t * view_manager
GtkAccelGroup * slideshow_accels
GtkAccelGroup * map_accels
GtkAccelGroup * print_accels
GtkAccelGroup * lighttable_accels
GtkAccelGroup * darkroom_accels
dt_lib_colorpicker_size_t size
struct dt_develop_t::@19 color_picker
Authoritative darkroom color-picker state.
struct dt_colorpicker_sample_t * primary_sample
GtkMenu * presets_popup_menu
GtkWidget * has_scroll_focus
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