static void menuitem_delete_preset (GtkMenuItem *menuitem, dt_lib_module_info_t *minfo) { sqlite3_stmt *stmt; gchar *name = get_active_preset_name(minfo); if(name == NULL) return; GtkWidget *window = dt_ui_main_window(darktable.gui->ui); GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("do you really want to delete the preset `%s'?"), name); gtk_window_set_title(GTK_WINDOW (dialog), _("delete preset?")); if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_YES) { char tmp_path[1024]; snprintf(tmp_path,1024,"%s/%s",_("preset"), name); dt_accel_deregister_lib(minfo->module,tmp_path); DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "delete from presets where name=?1 and operation=?2 and op_version=?3 and writeprotect=0", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, name, strlen(name), SQLITE_TRANSIENT); 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); } g_free(name); gtk_widget_destroy (dialog); }
static void edit_preset(const char *name_in, dt_iop_module_t *module) { gchar *name = NULL; if(name_in == NULL) { name = get_active_preset_name(module); if(name == NULL) return; } else name = g_strdup(name_in); GtkWidget *dialog; /* Create the widgets */ char title[1024]; GtkWidget *window = dt_ui_main_window(darktable.gui->ui); snprintf(title, sizeof(title), _("edit `%s' for module `%s'"), name, module->name()); dialog = gtk_dialog_new_with_buttons(title, GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, _("_ok"), GTK_RESPONSE_ACCEPT, _("_cancel"), GTK_RESPONSE_REJECT, NULL); GtkContainer *content_area = GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); GtkBox *box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 5)); gtk_widget_set_margin_start(GTK_WIDGET(box), DT_PIXEL_APPLY_DPI(10)); gtk_widget_set_margin_end(GTK_WIDGET(box), DT_PIXEL_APPLY_DPI(10)); gtk_widget_set_margin_top(GTK_WIDGET(box), DT_PIXEL_APPLY_DPI(10)); gtk_widget_set_margin_bottom(GTK_WIDGET(box), DT_PIXEL_APPLY_DPI(10)); gtk_container_add(content_area, GTK_WIDGET(box)); GtkWidget *label; dt_gui_presets_edit_dialog_t *g = (dt_gui_presets_edit_dialog_t *)malloc(sizeof(dt_gui_presets_edit_dialog_t)); g->old_id = -1; g->original_name = name; g->module = module; g->name = GTK_ENTRY(gtk_entry_new()); gtk_entry_set_text(g->name, name); gtk_box_pack_start(box, GTK_WIDGET(g->name), FALSE, FALSE, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(g->name), _("name of the preset")); g->description = GTK_ENTRY(gtk_entry_new()); gtk_box_pack_start(box, GTK_WIDGET(g->description), FALSE, FALSE, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(g->description), _("description or further information")); g->autoapply = GTK_CHECK_BUTTON(gtk_check_button_new_with_label(_("auto apply this preset to matching images"))); gtk_box_pack_start(box, GTK_WIDGET(g->autoapply), FALSE, FALSE, 0); g->filter = GTK_CHECK_BUTTON(gtk_check_button_new_with_label(_("only show this preset for matching images"))); gtk_widget_set_tooltip_text(GTK_WIDGET(g->filter), _("be very careful with this option. " "this might be the last time you see your preset.")); gtk_box_pack_start(box, GTK_WIDGET(g->filter), FALSE, FALSE, 0); g_signal_connect(G_OBJECT(g->autoapply), "toggled", G_CALLBACK(check_buttons_activated), g); g_signal_connect(G_OBJECT(g->filter), "toggled", G_CALLBACK(check_buttons_activated), g); int line = 0; g->details = gtk_grid_new(); gtk_grid_set_row_spacing(GTK_GRID(g->details), DT_PIXEL_APPLY_DPI(5)); gtk_grid_set_column_spacing(GTK_GRID(g->details), DT_PIXEL_APPLY_DPI(10)); gtk_box_pack_start(box, GTK_WIDGET(g->details), TRUE, TRUE, 0); // model, maker, lens g->model = gtk_entry_new(); gtk_widget_set_hexpand(GTK_WIDGET(g->model), TRUE); gtk_widget_set_tooltip_text(g->model, _("string to match model (use % as wildcard)")); label = gtk_label_new(_("model")); gtk_widget_set_halign(label, GTK_ALIGN_START); gtk_grid_attach(GTK_GRID(g->details), label, 0, line++, 1, 1); gtk_grid_attach_next_to(GTK_GRID(g->details), g->model, label, GTK_POS_RIGHT, 2, 1); g->maker = gtk_entry_new(); gtk_widget_set_tooltip_text(g->maker, _("string to match maker (use % as wildcard)")); label = gtk_label_new(_("maker")); gtk_widget_set_halign(label, GTK_ALIGN_START); gtk_grid_attach(GTK_GRID(g->details), label, 0, line++, 1, 1); gtk_grid_attach_next_to(GTK_GRID(g->details), g->maker, label, GTK_POS_RIGHT, 2, 1); g->lens = gtk_entry_new(); gtk_widget_set_tooltip_text(g->lens, _("string to match lens (use % as wildcard)")); label = gtk_label_new(_("lens")); gtk_widget_set_halign(label, GTK_ALIGN_START); gtk_grid_attach(GTK_GRID(g->details), label, 0, line++, 1, 1); gtk_grid_attach_next_to(GTK_GRID(g->details), g->lens, label, GTK_POS_RIGHT, 2, 1); // iso label = gtk_label_new(_("ISO")); gtk_widget_set_halign(label, GTK_ALIGN_START); g->iso_min = gtk_spin_button_new_with_range(0, 51200, 100); gtk_widget_set_tooltip_text(g->iso_min, _("minimum ISO value")); gtk_spin_button_set_digits(GTK_SPIN_BUTTON(g->iso_min), 0); g->iso_max = gtk_spin_button_new_with_range(0, 51200, 100); gtk_widget_set_tooltip_text(g->iso_max, _("maximum ISO value")); gtk_spin_button_set_digits(GTK_SPIN_BUTTON(g->iso_max), 0); gtk_grid_attach(GTK_GRID(g->details), label, 0, line++, 1, 1); gtk_grid_attach_next_to(GTK_GRID(g->details), g->iso_min, label, GTK_POS_RIGHT, 1, 1); gtk_grid_attach_next_to(GTK_GRID(g->details), g->iso_max, g->iso_min, GTK_POS_RIGHT, 1, 1); // exposure label = gtk_label_new(_("exposure")); gtk_widget_set_halign(label, GTK_ALIGN_START); g->exposure_min = dt_bauhaus_combobox_new(NULL); g->exposure_max = dt_bauhaus_combobox_new(NULL); gtk_widget_set_tooltip_text(g->exposure_min, _("minimum exposure time")); gtk_widget_set_tooltip_text(g->exposure_max, _("maximum exposure time")); for(int k = 0; k < dt_gui_presets_exposure_value_cnt; k++) dt_bauhaus_combobox_add(g->exposure_min, dt_gui_presets_exposure_value_str[k]); for(int k = 0; k < dt_gui_presets_exposure_value_cnt; k++) dt_bauhaus_combobox_add(g->exposure_max, dt_gui_presets_exposure_value_str[k]); gtk_grid_attach(GTK_GRID(g->details), label, 0, line++, 1, 1); gtk_grid_attach_next_to(GTK_GRID(g->details), g->exposure_min, label, GTK_POS_RIGHT, 1, 1); gtk_grid_attach_next_to(GTK_GRID(g->details), g->exposure_max, g->exposure_min, GTK_POS_RIGHT, 1, 1); // aperture label = gtk_label_new(_("aperture")); gtk_widget_set_halign(label, GTK_ALIGN_START); g->aperture_min = dt_bauhaus_combobox_new(NULL); g->aperture_max = dt_bauhaus_combobox_new(NULL); gtk_widget_set_tooltip_text(g->aperture_min, _("minimum aperture value")); gtk_widget_set_tooltip_text(g->aperture_max, _("maximum aperture value")); for(int k = 0; k < dt_gui_presets_aperture_value_cnt; k++) dt_bauhaus_combobox_add(g->aperture_min, dt_gui_presets_aperture_value_str[k]); for(int k = 0; k < dt_gui_presets_aperture_value_cnt; k++) dt_bauhaus_combobox_add(g->aperture_max, dt_gui_presets_aperture_value_str[k]); gtk_grid_attach(GTK_GRID(g->details), label, 0, line++, 1, 1); gtk_grid_attach_next_to(GTK_GRID(g->details), g->aperture_min, label, GTK_POS_RIGHT, 1, 1); gtk_grid_attach_next_to(GTK_GRID(g->details), g->aperture_max, g->aperture_min, GTK_POS_RIGHT, 1, 1); // focal length label = gtk_label_new(_("focal length")); gtk_widget_set_halign(label, GTK_ALIGN_START); g->focal_length_min = gtk_spin_button_new_with_range(0, 1000, 10); gtk_spin_button_set_digits(GTK_SPIN_BUTTON(g->focal_length_min), 0); g->focal_length_max = gtk_spin_button_new_with_range(0, 1000, 10); gtk_spin_button_set_digits(GTK_SPIN_BUTTON(g->focal_length_max), 0); gtk_widget_set_tooltip_text(g->focal_length_min, _("minimum focal length")); gtk_widget_set_tooltip_text(g->focal_length_max, _("maximum focal length")); gtk_grid_attach(GTK_GRID(g->details), label, 0, line++, 1, 1); gtk_grid_attach_next_to(GTK_GRID(g->details), g->focal_length_min, label, GTK_POS_RIGHT, 1, 1); gtk_grid_attach_next_to(GTK_GRID(g->details), g->focal_length_max, g->focal_length_min, GTK_POS_RIGHT, 1, 1); // raw/hdr/ldr label = gtk_label_new(_("format")); gtk_widget_set_halign(label, GTK_ALIGN_START); gtk_grid_attach(GTK_GRID(g->details), label, 0, line, 1, 1); for(int i = 0; i < 3; i++) { g->format_btn[i] = gtk_check_button_new_with_label(_(dt_gui_presets_format_value_str[i])); gtk_grid_attach(GTK_GRID(g->details), g->format_btn[i], 1, line + i, 2, 1); } gtk_widget_set_no_show_all(GTK_WIDGET(g->details), TRUE); sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "SELECT rowid, description, model, maker, lens, iso_min, iso_max, " "exposure_min, exposure_max, aperture_min, aperture_max, focal_length_min, " "focal_length_max, autoapply, filter, format FROM presets WHERE name = ?1 AND " "operation = ?2 AND op_version = ?3", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, name, -1, SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 2, module->op, -1, SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_INT(stmt, 3, module->version()); if(sqlite3_step(stmt) == SQLITE_ROW) { g->old_id = sqlite3_column_int(stmt, 0); gtk_entry_set_text(GTK_ENTRY(g->description), (const char *)sqlite3_column_text(stmt, 1)); gtk_entry_set_text(GTK_ENTRY(g->model), (const char *)sqlite3_column_text(stmt, 2)); gtk_entry_set_text(GTK_ENTRY(g->maker), (const char *)sqlite3_column_text(stmt, 3)); gtk_entry_set_text(GTK_ENTRY(g->lens), (const char *)sqlite3_column_text(stmt, 4)); gtk_spin_button_set_value(GTK_SPIN_BUTTON(g->iso_min), sqlite3_column_double(stmt, 5)); gtk_spin_button_set_value(GTK_SPIN_BUTTON(g->iso_max), sqlite3_column_double(stmt, 6)); float val = sqlite3_column_double(stmt, 7); int k = 0; for(; k < dt_gui_presets_exposure_value_cnt && val > dt_gui_presets_exposure_value[k]; k++) ; dt_bauhaus_combobox_set(g->exposure_min, k); val = sqlite3_column_double(stmt, 8); for(k = 0; k < dt_gui_presets_exposure_value_cnt && val > dt_gui_presets_exposure_value[k]; k++) ; dt_bauhaus_combobox_set(g->exposure_max, k); val = sqlite3_column_double(stmt, 9); for(k = 0; k < dt_gui_presets_aperture_value_cnt && val > dt_gui_presets_aperture_value[k]; k++) ; dt_bauhaus_combobox_set(g->aperture_min, k); val = sqlite3_column_double(stmt, 10); for(k = 0; k < dt_gui_presets_aperture_value_cnt && val > dt_gui_presets_aperture_value[k]; k++) ; dt_bauhaus_combobox_set(g->aperture_max, k); gtk_spin_button_set_value(GTK_SPIN_BUTTON(g->focal_length_min), sqlite3_column_double(stmt, 11)); gtk_spin_button_set_value(GTK_SPIN_BUTTON(g->focal_length_max), sqlite3_column_double(stmt, 12)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->autoapply), sqlite3_column_int(stmt, 13)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->filter), sqlite3_column_int(stmt, 14)); const int format = sqlite3_column_int(stmt, 15); for(k = 0; k < 3; k++) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->format_btn[k]), format & (dt_gui_presets_format_flag[k])); } else { gtk_entry_set_text(GTK_ENTRY(g->description), ""); gtk_entry_set_text(GTK_ENTRY(g->model), "%"); gtk_entry_set_text(GTK_ENTRY(g->maker), "%"); gtk_entry_set_text(GTK_ENTRY(g->lens), "%"); gtk_spin_button_set_value(GTK_SPIN_BUTTON(g->iso_min), 0); gtk_spin_button_set_value(GTK_SPIN_BUTTON(g->iso_max), 51200); float val = 0; int k = 0; for(; k < dt_gui_presets_exposure_value_cnt && val > dt_gui_presets_exposure_value[k]; k++) ; dt_bauhaus_combobox_set(g->exposure_min, k); val = 100000000; for(k = 0; k < dt_gui_presets_exposure_value_cnt && val > dt_gui_presets_exposure_value[k]; k++) ; dt_bauhaus_combobox_set(g->exposure_max, k); val = 0; for(k = 0; k < dt_gui_presets_aperture_value_cnt && val > dt_gui_presets_aperture_value[k]; k++) ; dt_bauhaus_combobox_set(g->aperture_min, k); val = 100000000; for(k = 0; k < dt_gui_presets_aperture_value_cnt && val > dt_gui_presets_aperture_value[k]; k++) ; dt_bauhaus_combobox_set(g->aperture_max, k); gtk_spin_button_set_value(GTK_SPIN_BUTTON(g->focal_length_min), 0); gtk_spin_button_set_value(GTK_SPIN_BUTTON(g->focal_length_max), 1000); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->autoapply), 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->filter), 0); for(k = 0; k < 3; k++) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->format_btn[k]), TRUE); } sqlite3_finalize(stmt); g_signal_connect(dialog, "response", G_CALLBACK(edit_preset_response), g); gtk_widget_show_all(dialog); }
static void edit_preset (const char *name_in, dt_lib_module_info_t *minfo) { gchar *name = NULL; if(name_in == NULL) { name = get_active_preset_name(minfo); if(name == NULL) return; } else name = g_strdup(name_in); GtkWidget *dialog; /* Create the widgets */ char title[1024]; GtkWidget *window = dt_ui_main_window(darktable.gui->ui); snprintf(title, 1024, _("edit `%s'"), name); dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); GtkContainer *content_area = GTK_CONTAINER(gtk_dialog_get_content_area (GTK_DIALOG (dialog))); GtkWidget *alignment = gtk_alignment_new(0.5, 0.5, 1.0, 1.0); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 5, 5, 5, 5); gtk_container_add (content_area, alignment); GtkBox *box = GTK_BOX(gtk_vbox_new(FALSE, 5)); gtk_container_add (GTK_CONTAINER(alignment), GTK_WIDGET(box)); dt_lib_presets_edit_dialog_t *g = (dt_lib_presets_edit_dialog_t *)g_malloc0(sizeof(dt_lib_presets_edit_dialog_t)); g->old_id = -1; g_strlcpy(g->plugin_name, minfo->plugin_name, 128); g->version = minfo->version; g->params_size = minfo->params_size; g->params = minfo->params; g->name = GTK_ENTRY(gtk_entry_new()); g->module = minfo->module; g->original_name = name; gtk_entry_set_text(g->name, name); gtk_box_pack_start(box, GTK_WIDGET(g->name), FALSE, FALSE, 0); g_object_set(G_OBJECT(g->name), "tooltip-text", _("name of the preset"), (char *)NULL); g->description = GTK_ENTRY(gtk_entry_new()); gtk_box_pack_start(box, GTK_WIDGET(g->description), FALSE, FALSE, 0); g_object_set(G_OBJECT(g->description), "tooltip-text", _("description or further information"), (char *)NULL); sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "select rowid, description from presets where name = ?1 and operation = ?2 and op_version = ?3", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, name, strlen(name), SQLITE_TRANSIENT); 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); if(sqlite3_step(stmt) == SQLITE_ROW) { g->old_id = sqlite3_column_int(stmt, 0); gtk_entry_set_text(g->description, (const char *)sqlite3_column_text(stmt, 1)); } sqlite3_finalize(stmt); g_signal_connect (dialog, "response", G_CALLBACK (edit_preset_response), g); gtk_widget_show_all (dialog); }
static void edit_preset(const char *name_in, dt_lib_module_info_t *minfo) { gchar *name = NULL; if(name_in == NULL) { name = get_active_preset_name(minfo); if(name == NULL) return; } else name = g_strdup(name_in); GtkWidget *dialog; /* Create the widgets */ char title[1024]; GtkWidget *window = dt_ui_main_window(darktable.gui->ui); snprintf(title, sizeof(title), _("edit `%s'"), name); dialog = gtk_dialog_new_with_buttons(title, GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, _("_ok"), GTK_RESPONSE_ACCEPT, _("_cancel"), GTK_RESPONSE_REJECT, NULL); GtkContainer *content_area = GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); GtkBox *box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 5)); gtk_widget_set_margin_start(GTK_WIDGET(box), DT_PIXEL_APPLY_DPI(10)); gtk_widget_set_margin_end(GTK_WIDGET(box), DT_PIXEL_APPLY_DPI(10)); gtk_widget_set_margin_top(GTK_WIDGET(box), DT_PIXEL_APPLY_DPI(10)); gtk_widget_set_margin_bottom(GTK_WIDGET(box), DT_PIXEL_APPLY_DPI(10)); gtk_container_add(content_area, GTK_WIDGET(box)); dt_lib_presets_edit_dialog_t *g = (dt_lib_presets_edit_dialog_t *)g_malloc0(sizeof(dt_lib_presets_edit_dialog_t)); g->old_id = -1; g_strlcpy(g->plugin_name, minfo->plugin_name, sizeof(g->plugin_name)); g->version = minfo->version; g->params_size = minfo->params_size; g->params = minfo->params; g->name = GTK_ENTRY(gtk_entry_new()); g->module = minfo->module; g->original_name = name; gtk_entry_set_text(g->name, name); gtk_box_pack_start(box, GTK_WIDGET(g->name), FALSE, FALSE, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(g->name), _("name of the preset")); g->description = GTK_ENTRY(gtk_entry_new()); gtk_box_pack_start(box, GTK_WIDGET(g->description), FALSE, FALSE, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(g->description), _("description or further information")); sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2( dt_database_get(darktable.db), "SELECT rowid, description FROM data.presets WHERE name = ?1 AND operation = ?2 AND op_version = ?3", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, name, -1, SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 2, minfo->plugin_name, -1, SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_INT(stmt, 3, minfo->version); if(sqlite3_step(stmt) == SQLITE_ROW) { g->old_id = sqlite3_column_int(stmt, 0); gtk_entry_set_text(g->description, (const char *)sqlite3_column_text(stmt, 1)); } sqlite3_finalize(stmt); g_signal_connect(dialog, "response", G_CALLBACK(edit_preset_response), g); gtk_widget_show_all(dialog); }