static void menuitem_new_preset (GtkMenuItem *menuitem, dt_lib_module_info_t *minfo) { // add new preset sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "delete from presets where name=?1 and operation=?2 and op_version=?3", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, _("new preset"), strlen(_("new preset")), SQLITE_STATIC); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 2, minfo->plugin_name, strlen(minfo->plugin_name), SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_INT(stmt, 3, minfo->version); sqlite3_step(stmt); sqlite3_finalize(stmt); DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "insert into presets (name, description, operation, op_version, op_params, blendop_params, blendop_version, enabled, model, maker, lens, " "iso_min, iso_max, exposure_min, exposure_max, aperture_min, aperture_max, focal_length_min, focal_length_max, writeprotect, " "autoapply, filter, def, isldr) values (?1, '', ?2, ?3, ?4, null, 0, 1, '%', '%', '%', 0, 51200, 0, 100000000, 0, 100000000, 0, 1000, 0, 0, 0, 0, 0)", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, _("new preset"), strlen(_("new preset")), SQLITE_STATIC); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 2, minfo->plugin_name, strlen(minfo->plugin_name), SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_INT(stmt, 3, minfo->version); DT_DEBUG_SQLITE3_BIND_BLOB(stmt, 4, minfo->params, minfo->params_size, SQLITE_TRANSIENT); sqlite3_step(stmt); sqlite3_finalize(stmt); // create a shortcut for the new entry char path[1024]; snprintf(path,1024,"%s/%s",_("preset"), _("new preset")); dt_accel_register_lib(minfo->module,path,0,0); dt_accel_connect_preset_lib(minfo->module,_("new preset")); // then show edit dialog edit_preset (_("new preset"), minfo); }
void dt_accel_rename_preset_lib(dt_lib_module_t *module,const gchar *path,const gchar *new_path) { dt_accel_t *accel; GSList * l = module->accel_closures; char build_path[1024]; dt_accel_path_lib(build_path, 1024, module->plugin_name, path); while(l) { accel = (dt_accel_t*)l->data; if(!strncmp(accel->path, build_path, 1024)) { GtkAccelKey tmp_key = *(gtk_accel_group_find(darktable.control->accelerators,find_accel_internal,accel->closure)); dt_accel_deregister_lib(module,path); snprintf(build_path,1024,"%s/%s",_("preset"),new_path); dt_accel_register_lib(module,build_path,tmp_key.accel_key,tmp_key.accel_mods); dt_accel_connect_preset_lib(module,new_path); l = NULL; } else { l = g_slist_next(l); } } }
void dt_lib_connect_common_accels(dt_lib_module_t *module) { if(module->reset_button) dt_accel_connect_button_lib(module, "reset module parameters", module->reset_button); if(module->presets_button) dt_accel_connect_button_lib(module, "show preset menu", module->presets_button); if(module->init_presets) { sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "select name from presets where operation=?1 and op_version=?2 order by writeprotect desc, rowid", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, module->plugin_name, -1, SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_INT(stmt, 2, module->version()); while(sqlite3_step(stmt) == SQLITE_ROW) { char path[1024]; snprintf(path,1024,"%s/%s", _("preset"), (char *)sqlite3_column_text(stmt, 0)); dt_accel_register_lib(module,path,0,0); dt_accel_connect_preset_lib(module,(char *)sqlite3_column_text(stmt, 0)); } sqlite3_finalize(stmt); } }