static void pick_callback(GtkMenuItem *menuitem, dt_lib_module_info_t *minfo) { // apply preset via set_params gchar *pn = get_preset_name(menuitem); sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2( dt_database_get(darktable.db), "SELECT op_params, writeprotect FROM data.presets WHERE operation = ?1 AND op_version = ?2 AND name = ?3", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, minfo->plugin_name, -1, SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_INT(stmt, 2, minfo->version); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 3, pn, -1, SQLITE_TRANSIENT); int res = 0; if(sqlite3_step(stmt) == SQLITE_ROW) { const void *blob = sqlite3_column_blob(stmt, 0); int length = sqlite3_column_bytes(stmt, 0); int writeprotect = sqlite3_column_int(stmt, 1); if(blob) { GList *it = darktable.lib->plugins; while(it) { dt_lib_module_t *module = (dt_lib_module_t *)it->data; if(!strncmp(module->plugin_name, minfo->plugin_name, 128)) { res = module->set_params(module, blob, length); break; } it = g_list_next(it); } } if(!writeprotect) dt_gui_store_last_preset(pn); } sqlite3_finalize(stmt); if(res) { dt_control_log(_("deleting preset for obsolete module")); DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "DELETE FROM data.presets WHERE operation = ?1 AND op_version = ?2 AND name = ?3", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, minfo->plugin_name, -1, SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_INT(stmt, 2, minfo->version); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 3, pn, -1, SQLITE_TRANSIENT); sqlite3_step(stmt); sqlite3_finalize(stmt); } g_free(pn); }
static void menuitem_pick_preset(GtkMenuItem *menuitem, dt_iop_module_t *module) { gchar *name = get_preset_name(menuitem); sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "select op_params, enabled, blendop_params, blendop_version, writeprotect from " "presets where operation = ?1 and op_version = ?2 and name = ?3", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, module->op, -1, SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_INT(stmt, 2, module->version()); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 3, name, -1, SQLITE_TRANSIENT); if(sqlite3_step(stmt) == SQLITE_ROW) { const void *op_params = sqlite3_column_blob(stmt, 0); int op_length = sqlite3_column_bytes(stmt, 0); int enabled = sqlite3_column_int(stmt, 1); const void *blendop_params = sqlite3_column_blob(stmt, 2); int bl_length = sqlite3_column_bytes(stmt, 2); int blendop_version = sqlite3_column_int(stmt, 3); int writeprotect = sqlite3_column_int(stmt, 4); if(op_params && (op_length == module->params_size)) { memcpy(module->params, op_params, op_length); module->enabled = enabled; } if(blendop_params && (blendop_version == dt_develop_blend_version()) && (bl_length == sizeof(dt_develop_blend_params_t))) { memcpy(module->blend_params, blendop_params, sizeof(dt_develop_blend_params_t)); } else if(blendop_params && dt_develop_blend_legacy_params(module, blendop_params, blendop_version, module->blend_params, dt_develop_blend_version(), bl_length) == 0) { // do nothing } else { memcpy(module->blend_params, module->default_blendop_params, sizeof(dt_develop_blend_params_t)); } if(!writeprotect) dt_gui_store_last_preset(name); } sqlite3_finalize(stmt); g_free(name); dt_iop_gui_update(module); dt_dev_add_history_item(darktable.develop, module, FALSE); gtk_widget_queue_draw(module->widget); }
static void menuitem_update_preset (GtkMenuItem *menuitem, dt_lib_module_info_t *minfo) { gchar *name = get_preset_name(menuitem); // commit all the module fields sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "update presets set operation=?1, op_version=?2, op_params=?3 where name=?4", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, minfo->plugin_name, strlen(minfo->plugin_name), SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_INT(stmt, 2, minfo->version); DT_DEBUG_SQLITE3_BIND_BLOB(stmt, 3, minfo->params, minfo->params_size, SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 4, name, strlen(name), SQLITE_TRANSIENT); sqlite3_step(stmt); sqlite3_finalize(stmt); }
static void menuitem_update_preset(GtkMenuItem *menuitem, dt_iop_module_t *module) { gchar *name = get_preset_name(menuitem); // commit all the module fields sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "UPDATE presets SET op_version=?2, op_params=?3, enabled=?4, " "blendop_params=?5, blendop_version=?6 WHERE name=?7 AND operation=?1", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, module->op, -1, SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_INT(stmt, 2, module->version()); DT_DEBUG_SQLITE3_BIND_BLOB(stmt, 3, module->params, module->params_size, SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_INT(stmt, 4, module->enabled); DT_DEBUG_SQLITE3_BIND_BLOB(stmt, 5, module->blend_params, sizeof(dt_develop_blend_params_t), SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_INT(stmt, 6, dt_develop_blend_version()); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 7, name, -1, SQLITE_TRANSIENT); sqlite3_step(stmt); sqlite3_finalize(stmt); }