74
78
void dt_gui_presets_add_generic(const char *name, dt_dev_operation_t op, const void *params, const int32_t params_size, const int32_t enabled)
76
80
sqlite3_stmt *stmt;
81
dt_develop_blend_params_t default_blendop_params = {DEVELOP_BLEND_DISABLED,100.0,0};
77
82
DT_DEBUG_SQLITE3_PREPARE_V2(darktable.db, "delete from presets where name=?1 and operation=?2", -1, &stmt, NULL);
78
83
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, name, strlen(name), SQLITE_TRANSIENT);
79
84
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 2, op, strlen(op), SQLITE_TRANSIENT);
80
85
sqlite3_step(stmt);
81
86
sqlite3_finalize(stmt);
82
DT_DEBUG_SQLITE3_PREPARE_V2(darktable.db, "insert into presets values (?1, '', ?2, ?3, ?4, '%', '%', '%', 0, 51200, 0, 10000000, 0, 100000000, 0, 1000, 1, 0, 0, 0, 0)", -1, &stmt, NULL);
87
DT_DEBUG_SQLITE3_PREPARE_V2(darktable.db, "insert into presets (name, description ,operation, op_params, enabled, blendop_params, model, maker, lens, "
88
"iso_min, iso_max, exposure_min, exposure_max, aperture_min, aperture_max, focal_length_min, focal_length_max, "
89
"writeprotect, autoapply, filter, def, isldr) "
90
"values (?1, '', ?2, ?3, ?4, ?5, '%', '%', '%', 0, 51200, 0, 10000000, 0, 100000000, 0, 1000, 1, 0, 0, 0, 0)", -1, &stmt, NULL);
83
91
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, name, strlen(name), SQLITE_TRANSIENT);
84
92
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 2, op, strlen(op), SQLITE_TRANSIENT);
85
93
DT_DEBUG_SQLITE3_BIND_BLOB(stmt, 3, params, params_size, SQLITE_TRANSIENT);
86
94
DT_DEBUG_SQLITE3_BIND_INT(stmt, 4, enabled);
95
DT_DEBUG_SQLITE3_BIND_BLOB(stmt, 5, &default_blendop_params, sizeof(dt_develop_blend_params_t), SQLITE_TRANSIENT);
87
96
sqlite3_step(stmt);
88
97
sqlite3_finalize(stmt);
151
163
// commit all the user input fields
152
164
sqlite3_stmt *stmt;
153
DT_DEBUG_SQLITE3_PREPARE_V2(darktable.db, "insert into presets values (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, 0, ?17, ?18, 0, 0)", -1, &stmt, NULL);
165
DT_DEBUG_SQLITE3_PREPARE_V2(darktable.db, "insert into presets (name, description, operation, op_params, enabled, blendop_params, "
166
"model, maker, lens, iso_min, iso_max, exposure_min, exposure_max, aperture_min, aperture_max, "
167
"focal_length_min, focal_length_max, writeprotect, autoapply, filter, def, isldr) "
168
"values (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17, 0, ?18, ?19, 0, 0)", -1, &stmt, NULL);
154
169
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, gtk_entry_get_text(g->name), strlen(gtk_entry_get_text(g->name)), SQLITE_TRANSIENT);
155
170
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 2, gtk_entry_get_text(g->description), strlen(gtk_entry_get_text(g->description)), SQLITE_TRANSIENT);
156
171
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 3, g->module->op, strlen(g->module->op), SQLITE_TRANSIENT);
157
172
DT_DEBUG_SQLITE3_BIND_BLOB(stmt, 4, g->module->params, g->module->params_size, SQLITE_TRANSIENT);
158
173
DT_DEBUG_SQLITE3_BIND_INT(stmt, 5, g->module->enabled);
159
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 6, gtk_entry_get_text(g->model), strlen(gtk_entry_get_text(g->model)), SQLITE_TRANSIENT);
160
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 7, gtk_entry_get_text(g->maker), strlen(gtk_entry_get_text(g->maker)), SQLITE_TRANSIENT);
161
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 8, gtk_entry_get_text(g->lens), strlen(gtk_entry_get_text(g->lens)), SQLITE_TRANSIENT);
162
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 9, gtk_spin_button_get_value(g->iso_min));
163
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 10, gtk_spin_button_get_value(g->iso_max));
164
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 11, dt_gui_presets_exposure_value[gtk_combo_box_get_active(g->exposure_min)]);
165
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 12, dt_gui_presets_exposure_value[gtk_combo_box_get_active(g->exposure_max)]);
166
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 13, dt_gui_presets_aperture_value[gtk_combo_box_get_active(g->aperture_min)]);
167
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 14, dt_gui_presets_aperture_value[gtk_combo_box_get_active(g->aperture_max)]);
168
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 15, gtk_spin_button_get_value(g->focal_length_min));
169
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 16, gtk_spin_button_get_value(g->focal_length_max));
170
DT_DEBUG_SQLITE3_BIND_INT(stmt, 17, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(g->autoapply)));
171
DT_DEBUG_SQLITE3_BIND_INT(stmt, 18, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(g->filter)));
174
DT_DEBUG_SQLITE3_BIND_BLOB(stmt, 6, g->module->blend_params, sizeof(dt_develop_blend_params_t), SQLITE_TRANSIENT);
175
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 7, gtk_entry_get_text(g->model), strlen(gtk_entry_get_text(g->model)), SQLITE_TRANSIENT);
176
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 8, gtk_entry_get_text(g->maker), strlen(gtk_entry_get_text(g->maker)), SQLITE_TRANSIENT);
177
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 9, gtk_entry_get_text(g->lens), strlen(gtk_entry_get_text(g->lens)), SQLITE_TRANSIENT);
178
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 10, gtk_spin_button_get_value(g->iso_min));
179
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 11, gtk_spin_button_get_value(g->iso_max));
180
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 12, dt_gui_presets_exposure_value[gtk_combo_box_get_active(g->exposure_min)]);
181
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 13, dt_gui_presets_exposure_value[gtk_combo_box_get_active(g->exposure_max)]);
182
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 14, dt_gui_presets_aperture_value[gtk_combo_box_get_active(g->aperture_min)]);
183
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 15, dt_gui_presets_aperture_value[gtk_combo_box_get_active(g->aperture_max)]);
184
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 16, gtk_spin_button_get_value(g->focal_length_min));
185
DT_DEBUG_SQLITE3_BIND_DOUBLE(stmt, 17, gtk_spin_button_get_value(g->focal_length_max));
186
DT_DEBUG_SQLITE3_BIND_INT(stmt, 18, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(g->autoapply)));
187
DT_DEBUG_SQLITE3_BIND_INT(stmt, 19, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(g->filter)));
172
188
sqlite3_step(stmt);
173
189
sqlite3_finalize(stmt);
230
246
g->name = GTK_ENTRY(gtk_entry_new());
231
247
gtk_entry_set_text(g->name, name);
232
248
gtk_box_pack_start(box, GTK_WIDGET(g->name), FALSE, FALSE, 0);
233
gtk_object_set(GTK_OBJECT(g->name), "tooltip-text", _("name of the preset"), (char *)NULL);
249
g_object_set(G_OBJECT(g->name), "tooltip-text", _("name of the preset"), (char *)NULL);
235
251
g->description = GTK_ENTRY(gtk_entry_new());
236
252
gtk_box_pack_start(box, GTK_WIDGET(g->description), FALSE, FALSE, 0);
237
gtk_object_set(GTK_OBJECT(g->description), "tooltip-text", _("description or further information"), (char *)NULL);
253
g_object_set(G_OBJECT(g->description), "tooltip-text", _("description or further information"), (char *)NULL);
239
255
g->autoapply = GTK_CHECK_BUTTON(gtk_check_button_new_with_label(_("auto apply this preset to matching images")));
240
256
gtk_box_pack_start(box, GTK_WIDGET(g->autoapply), FALSE, FALSE, 0);
241
257
g->filter = GTK_CHECK_BUTTON(gtk_check_button_new_with_label(_("only show this preset for matching images")));
242
gtk_object_set(GTK_OBJECT(g->filter), "tooltip-text", _("be very careful with this option. this might be the last time you see your preset."), (char *)NULL);
258
g_object_set(G_OBJECT(g->filter), "tooltip-text", _("be very careful with this option. this might be the last time you see your preset."), (char *)NULL);
243
259
gtk_box_pack_start(box, GTK_WIDGET(g->filter), FALSE, FALSE, 0);
244
260
g_signal_connect(G_OBJECT(g->autoapply), "toggled", G_CALLBACK(check_buttons_activated), g);
245
261
g_signal_connect(G_OBJECT(g->filter), "toggled", G_CALLBACK(check_buttons_activated), g);
255
271
// model, maker, lens
256
272
g->model = GTK_ENTRY(gtk_entry_new());
257
gtk_object_set(GTK_OBJECT(g->model), "tooltip-text", _("string to match model (use % as wildcard)"), (char *)NULL);
273
g_object_set(G_OBJECT(g->model), "tooltip-text", _("string to match model (use % as wildcard)"), (char *)NULL);
258
274
label = gtk_label_new(_("model"));
259
275
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
260
276
gtk_box_pack_start(vbox2, label, FALSE, FALSE, 0);
261
277
gtk_box_pack_start(vbox3, GTK_WIDGET(g->model), FALSE, FALSE, 0);
262
278
gtk_box_pack_start(vbox4, gtk_label_new(""), FALSE, FALSE, 0);
263
279
g->maker = GTK_ENTRY(gtk_entry_new());
264
gtk_object_set(GTK_OBJECT(g->maker), "tooltip-text", _("string to match maker (use % as wildcard)"), (char *)NULL);
280
g_object_set(G_OBJECT(g->maker), "tooltip-text", _("string to match maker (use % as wildcard)"), (char *)NULL);
265
281
label = gtk_label_new(_("maker"));
266
282
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
267
283
gtk_box_pack_start(vbox2, label, FALSE, FALSE, 0);
268
284
gtk_box_pack_start(vbox3, GTK_WIDGET(g->maker), FALSE, FALSE, 0);
269
285
gtk_box_pack_start(vbox4, gtk_label_new(""), FALSE, FALSE, 0);
270
286
g->lens = GTK_ENTRY(gtk_entry_new());
271
gtk_object_set(GTK_OBJECT(g->lens), "tooltip-text", _("string to match lens (use % as wildcard)"), (char *)NULL);
287
g_object_set(G_OBJECT(g->lens), "tooltip-text", _("string to match lens (use % as wildcard)"), (char *)NULL);
272
288
label = gtk_label_new(_("lens"));
273
289
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
274
290
gtk_box_pack_start(vbox2, label, FALSE, FALSE, 0);
280
296
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
281
297
gtk_box_pack_start(vbox2, label, FALSE, FALSE, 0);
282
298
g->iso_min = GTK_SPIN_BUTTON(gtk_spin_button_new_with_range(0, 51200, 100));
283
gtk_object_set(GTK_OBJECT(g->iso_min), "tooltip-text", _("minimum iso value"), (char *)NULL);
299
g_object_set(G_OBJECT(g->iso_min), "tooltip-text", _("minimum iso value"), (char *)NULL);
284
300
gtk_spin_button_set_digits(g->iso_min, 0);
285
301
gtk_box_pack_start(vbox3, GTK_WIDGET(g->iso_min), FALSE, FALSE, 0);
286
302
g->iso_max = GTK_SPIN_BUTTON(gtk_spin_button_new_with_range(0, 51200, 100));
287
gtk_object_set(GTK_OBJECT(g->iso_max), "tooltip-text", _("maximum iso value"), (char *)NULL);
303
g_object_set(G_OBJECT(g->iso_max), "tooltip-text", _("maximum iso value"), (char *)NULL);
288
304
gtk_spin_button_set_digits(g->iso_max, 0);
289
305
gtk_box_pack_start(vbox4, GTK_WIDGET(g->iso_max), FALSE, FALSE, 0);
326
342
gtk_spin_button_set_digits(g->focal_length_min, 0);
327
343
gtk_box_pack_start(vbox3, GTK_WIDGET(g->focal_length_min), FALSE, FALSE, 0);
328
344
g->focal_length_max = GTK_SPIN_BUTTON(gtk_spin_button_new_with_range(0, 1000, 10));
329
gtk_object_set(GTK_OBJECT(g->focal_length_min), "tooltip-text", _("minimum focal length"), (char *)NULL);
330
gtk_object_set(GTK_OBJECT(g->focal_length_max), "tooltip-text", _("maximum focal length"), (char *)NULL);
345
g_object_set(G_OBJECT(g->focal_length_min), "tooltip-text", _("minimum focal length"), (char *)NULL);
346
g_object_set(G_OBJECT(g->focal_length_max), "tooltip-text", _("maximum focal length"), (char *)NULL);
331
347
gtk_spin_button_set_digits(g->focal_length_max, 0);
332
348
gtk_box_pack_start(vbox4, GTK_WIDGET(g->focal_length_max), FALSE, FALSE, 0);
394
410
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 2, module->op, strlen(module->op), SQLITE_TRANSIENT);
395
411
sqlite3_step(stmt);
396
412
sqlite3_finalize(stmt);
397
DT_DEBUG_SQLITE3_PREPARE_V2(darktable.db, "insert into presets values (?1, '', ?2, ?3, ?4, '%', '%', '%', 0, 51200, 0, 100000000, 0, 100000000, 0, 1000, 0, 0, 0, 0, 0)", -1, &stmt, NULL);
413
DT_DEBUG_SQLITE3_PREPARE_V2(darktable.db, "insert into presets (name, description, operation, op_params, enabled, "
414
"blendop_params, model, maker, lens, iso_min, iso_max, exposure_min, exposure_max, aperture_min, aperture_max, "
415
"focal_length_min, focal_length_max, writeprotect, autoapply, filter, def, isldr) "
416
"values (?1, '', ?2, ?3, ?4, ?5, '%', '%', '%', 0, 51200, 0, 100000000, 0, 100000000, 0, 1000, 0, 0, 0, 0, 0)", -1, &stmt, NULL);
398
417
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, _("new preset"), strlen(_("new preset")), SQLITE_STATIC);
399
418
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 2, module->op, strlen(module->op), SQLITE_TRANSIENT);
400
419
DT_DEBUG_SQLITE3_BIND_BLOB(stmt, 3, module->params, module->params_size, SQLITE_TRANSIENT);
401
420
DT_DEBUG_SQLITE3_BIND_INT(stmt, 4, module->enabled);
421
DT_DEBUG_SQLITE3_BIND_BLOB(stmt, 5, module->blend_params, sizeof(dt_develop_blend_params_t), SQLITE_TRANSIENT);
402
422
sqlite3_step(stmt);
403
423
sqlite3_finalize(stmt);
404
424
// then show edit dialog
411
431
gchar *name = get_preset_name(menuitem);
412
432
sqlite3_stmt *stmt;
413
DT_DEBUG_SQLITE3_PREPARE_V2(darktable.db, "select op_params, enabled from presets where operation = ?1 and name = ?2", -1, &stmt, NULL);
433
DT_DEBUG_SQLITE3_PREPARE_V2(darktable.db, "select op_params, enabled, blendop_params from presets where operation = ?1 and name = ?2", -1, &stmt, NULL);
414
434
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, module->op, strlen(module->op), SQLITE_TRANSIENT);
415
435
DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 2, name, strlen(name), SQLITE_TRANSIENT);
417
437
if(sqlite3_step(stmt) == SQLITE_ROW)
419
const void *blob = sqlite3_column_blob(stmt, 0);
420
int length = sqlite3_column_bytes(stmt, 0);
439
const void *op_params = sqlite3_column_blob(stmt, 0);
440
int op_length = sqlite3_column_bytes(stmt, 0);
421
441
int enabled = sqlite3_column_int(stmt, 1);
422
if(blob && (length == module->params_size))
442
const void *blendop_params = sqlite3_column_blob(stmt, 2);
443
int bl_length = sqlite3_column_bytes(stmt, 2);
444
if(op_params && (op_length == module->params_size))
424
memcpy(module->params, blob, length);
446
memcpy(module->params, op_params, op_length);
425
447
module->enabled = enabled;
449
if (blendop_params && (bl_length == sizeof(dt_develop_blend_params_t)))
451
memcpy(module->blend_params, blendop_params, sizeof(dt_develop_blend_params_t));
455
memcpy(module->blend_params, module->default_blendop_params, sizeof(dt_develop_blend_params_t));
428
458
sqlite3_finalize(stmt);
508
538
void *op_params = (void *)sqlite3_column_blob(stmt, 1);
509
539
int32_t op_params_size = sqlite3_column_bytes(stmt, 1);
540
void *blendop_params = (void *)sqlite3_column_blob(stmt, 4);
541
int32_t bl_params_size = sqlite3_column_bytes(stmt, 4);
510
542
int32_t isdefault = 0;
511
if(module && !memcmp(module->default_params, op_params, MIN(op_params_size, module->params_size))) isdefault = 1;
512
if(!memcmp(params, op_params, MIN(op_params_size, params_size)))
543
if(module && !memcmp(module->default_params, op_params, MIN(op_params_size, module->params_size)) &&
544
!memcmp(module->default_blendop_params, blendop_params, MIN(bl_params_size, sizeof(dt_develop_blend_params_t)))) isdefault = 1;
545
if(!memcmp(params, op_params, MIN(op_params_size, params_size)) &&
546
!memcmp(bl_params, blendop_params, MIN(bl_params_size, sizeof(dt_develop_blend_params_t))))
514
548
active_preset = cnt;
515
549
writeprotect = sqlite3_column_int(stmt, 2);
592
void dt_gui_presets_popup_menu_show_for_params(dt_dev_operation_t op, void *params, int32_t params_size, dt_image_t *image, void (*pick_callback)(GtkMenuItem*,void*), void *callback_data)
626
void dt_gui_presets_popup_menu_show_for_params(dt_dev_operation_t op, void *params, int32_t params_size, void *blendop_params, dt_image_t *image, void (*pick_callback)(GtkMenuItem*,void*), void *callback_data)
594
dt_gui_presets_popup_menu_show_internal(op, params, params_size, NULL, image, pick_callback, callback_data);
628
dt_gui_presets_popup_menu_show_internal(op, params, params_size, blendop_params, NULL, image, pick_callback, callback_data);
597
631
void dt_gui_presets_popup_menu_show_for_module(dt_iop_module_t *module)
599
dt_gui_presets_popup_menu_show_internal(module->op, module->params, module->params_size, module, module->dev->image, NULL, NULL);
633
dt_gui_presets_popup_menu_show_internal(module->op, module->params, module->params_size, module->blend_params, module, module->dev->image, NULL, NULL);
602
636
void dt_gui_presets_update_mml(const char *name, dt_dev_operation_t op, const char *maker, const char *model, const char *lens)