![]() |
Ansel 0.0
A darktable fork - bloat + design vision
|
#include "common/history_merge_gui.h"#include "common/darktable.h"#include "common/debug.h"#include "common/iop_order.h"#include "common/topological_sort.h"#include "develop/blend.h"#include "develop/dev_history.h"#include "develop/develop.h"#include "develop/imageop.h"#include "develop/masks.h"#include "gui/gtk.h"#include <glib.h>#include <string.h>
Include dependency graph for history_merge_gui.c:Go to the source code of this file.
Data Structures | |
| struct | _hm_id_info_t |
| struct | _hm_report_reorder_ctx_t |
| struct | dt_hm_drag_hint_align_t |
| struct | _hm_label_t |
Typedefs | |
| typedef enum dt_hm_report_col_t | dt_hm_report_col_t |
Functions | |
| static gchar * | _hm_clean_module_name (const dt_iop_module_t *mod) |
| static gchar * | _hm_module_label_short (const dt_iop_module_t *mod) |
| static gchar * | _hm_pretty_id (const char *id) |
| static gchar * | _hm_pretty_id_from_id_ht (const char *id, GHashTable *id_ht, const gboolean prefer_dest) |
| static gchar * | _hm_cycle_node_label (const dt_digraph_node_t *n, GHashTable *id_ht) |
| static void | _hm_append_cycle_label (GString *out, const char *s, const gboolean bold) |
| dt_hm_constraint_choice_t | _hm_ask_user_constraints_choice (GHashTable *id_ht, const char *faulty_id, const char *src_prev, const char *src_next, const char *dst_prev, const char *dst_next) |
| gboolean | _hm_warn_missing_raster_producers (const GList *mod_list) |
| void | _hm_show_toposort_cycle_popup (GList *cycle_nodes, GHashTable *id_ht) |
| static gchar * | _hm_module_row_label (const dt_iop_module_t *mod) |
| static gboolean | _hm_history_masks_match (const dt_dev_history_item_t *a, const dt_dev_history_item_t *b) |
| static gboolean | _hm_history_items_match (const dt_dev_history_item_t *a, const dt_dev_history_item_t *b) |
| static gint | _hm_label_cmp (gconstpointer a, gconstpointer b) |
| GPtrArray * | _hm_collect_labels_from_history_map (GHashTable *last_by_id, const GHashTable *mod_list_ids, GPtrArray **out_styles) |
| static dt_iop_module_t * | _hm_module_from_id (dt_develop_t *dev, const char *id) |
| static gboolean | _hm_module_visible_in_report (const dt_iop_module_t *mod, const GHashTable *mod_list_ids) |
| static gchar * | _hm_report_dest_label (const dt_iop_module_t *mod, GHashTable *dst_last_by_id, const GHashTable *orig_ids) |
| static GPtrArray * | _hm_collect_enabled_modules_gui_order (const dt_develop_t *dev, const GHashTable *mod_list_ids) |
| static void | _hm_report_resync_history_iop_order (dt_develop_t *dev) |
| static GPtrArray * | _hm_report_collect_dest_ids (GtkTreeModel *model) |
| static GPtrArray * | _hm_report_build_desired_visible_order (dt_develop_t *dev_dest, GtkTreeModel *model) |
| static GList * | _hm_report_build_ordered_modules (dt_develop_t *dev_dest, const GPtrArray *visible_order, const GHashTable *mod_list_ids) |
| static gboolean | _hm_report_apply_visible_order (dt_develop_t *dev_dest, const GPtrArray *visible_order, const GHashTable *mod_list_ids) |
| static GHashTable * | _hm_report_build_moved_set (dt_develop_t *dev_src, GtkTreeModel *model, const GHashTable *mod_list_ids) |
| static void | _hm_report_update_move_styles (GtkListStore *store, dt_develop_t *dev_src, const GHashTable *mod_list_ids) |
| static void | _hm_report_update_arrows (GtkListStore *store, GHashTable *override, GHashTable *dst_last_by_id, GHashTable *dst_last_before_by_id) |
| static void | _hm_report_keep_input_row_at_bottom (GtkListStore *store) |
| static void | _hm_report_update_dest_labels (GtkListStore *store, dt_develop_t *dev_dest, GHashTable *dst_last_by_id, const GHashTable *orig_ids, const GHashTable *override) |
| static void | _hm_report_apply_store_order (_hm_report_reorder_ctx_t *ctx) |
| static void | _hm_report_drag_begin (GtkWidget *widget, GdkDragContext *context, gpointer user_data) |
| static void | _hm_report_drag_data_get (GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data, guint info, guint time, gpointer user_data) |
| static void | _hm_report_drag_data_received (GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint time, gpointer user_data) |
| static GHashTable * | _hm_build_override_map (const dt_develop_t *dev_dest, GHashTable *src_last_by_id, GHashTable *dst_last_before_by_id) |
| static void | _hm_report_align_drag_hint (GtkWidget *widget, GtkAllocation *allocation, gpointer user_data) |
| gboolean | _hm_show_merge_report_popup (dt_develop_t *dev_dest, dt_develop_t *dev_src, const gboolean merge_iop_order, const gboolean used_source_order, const dt_history_merge_strategy_t strategy, GHashTable *src_last_by_id, GHashTable *dst_last_before_by_id, const GPtrArray *orig_labels, const GPtrArray *orig_styles, const GHashTable *orig_ids, const GHashTable *mod_list_ids, const char *source_label, dt_hm_batch_state_t *batch) |
| gboolean | dt_gui_merge_options_dialog (const char *title, const char *mode_key, const char *iop_order_key, const char *ask_key, const gboolean iop_order_available) |
| Show a modal dialog to pick merge mode and pipeline order before a paste or style apply. | |
Variables | |
| static const char *const | HM_REPORT_DISABLED_FG = "#282828" |
| static const char *const | HM_REPORT_EXISTING_DST_FG = "#bbb" |
| typedef enum dt_hm_report_col_t dt_hm_report_col_t |
| enum dt_hm_report_col_t |
Definition at line 391 of file history_merge_gui.c.
|
static |
Definition at line 116 of file history_merge_gui.c.
Referenced by _hm_show_toposort_cycle_popup().
| dt_hm_constraint_choice_t _hm_ask_user_constraints_choice | ( | GHashTable * | id_ht, |
| const char * | faulty_id, | ||
| const char * | src_prev, | ||
| const char * | src_next, | ||
| const char * | dst_prev, | ||
| const char * | dst_next | ||
| ) |
Definition at line 124 of file history_merge_gui.c.
References _hm_pretty_id_from_id_ht(), darktable, dt_free, DT_HM_CONSTRAINTS_PREFER_DEST, DT_HM_CONSTRAINTS_PREFER_SRC, dt_ui_main_window(), FALSE, darktable_t::gui, IS_NULL_PTR, TRUE, and dt_gui_gtk_t::ui.
Referenced by _hm_topo_resolve_incompatible_constraints().
|
static |
Definition at line 1210 of file history_merge_gui.c.
References _hm_history_items_match(), _hm_make_node_id(), dt_dev_get_history_end_ext(), dt_dev_history_get_last_item_by_module(), dt_free, dt_free_gpointer(), dt_develop_t::history, dt_develop_t::iop, dt_iop_module_t::multi_name, and dt_iop_module_t::op.
Referenced by _hm_show_merge_report_popup().
|
static |
Definition at line 47 of file history_merge_gui.c.
References delete_underscore(), dt_capitalize_label(), and dt_iop_module_t::op.
Referenced by _hm_module_label_short(), _hm_module_row_label(), and _hm_pretty_id_from_id_ht().
|
static |
Definition at line 563 of file history_merge_gui.c.
References _hm_module_visible_in_report(), dt_develop_t::iop, and IS_NULL_PTR.
Referenced by _hm_show_merge_report_popup().
| GPtrArray * _hm_collect_labels_from_history_map | ( | GHashTable * | last_by_id, |
| const GHashTable * | mod_list_ids, | ||
| GPtrArray ** | out_styles | ||
| ) |
Definition at line 455 of file history_merge_gui.c.
References _hm_label_cmp(), _hm_module_row_label(), dt_free, dt_iop_module_needs_mask_history(), dt_dev_history_item_t::enabled, IOP_FLAGS_NO_HISTORY_STACK, _hm_label_t::iop_order, dt_dev_history_item_t::iop_order, IS_NULL_PTR, key, _hm_label_t::label, _hm_label_t::style, TRUE, and value.
Referenced by _hm_backup_dest().
|
static |
Definition at line 110 of file history_merge_gui.c.
References _hm_pretty_id_from_id_ht(), n, and TRUE.
Referenced by _hm_show_toposort_cycle_popup().
|
static |
Definition at line 362 of file history_merge_gui.c.
References _hm_history_masks_match(), dt_dev_history_item_t::blend_params, dt_dev_history_item_t::enabled, FALSE, dt_dev_history_item_t::iop_order, IS_NULL_PTR, dt_dev_history_item_t::multi_name, dt_dev_history_item_t::multi_priority, dt_dev_history_item_t::op_name, dt_dev_history_item_t::params, dt_dev_history_item_t::params_size, and TRUE.
Referenced by _hm_build_override_map().
|
static |
Definition at line 338 of file history_merge_gui.c.
References dt_dev_history_item_t::blend_params, dt_masks_get_from_id_ext(), dt_masks_group_get_hash(), FALSE, dt_dev_history_item_t::forms, IS_NULL_PTR, dt_develop_blend_params_t::mask_id, and TRUE.
Referenced by _hm_history_items_match(), and _hm_report_update_arrows().
|
static |
Definition at line 448 of file history_merge_gui.c.
References _hm_label_t::iop_order.
Referenced by _hm_collect_labels_from_history_map().
|
static |
Definition at line 504 of file history_merge_gui.c.
References _hm_id_to_op_name(), dt_iop_get_module_by_instance_name(), dt_iop_get_module_by_op_priority(), dt_develop_t::iop, IS_NULL_PTR, and name.
Referenced by _hm_report_build_desired_visible_order(), and _hm_report_update_dest_labels().
|
static |
Definition at line 55 of file history_merge_gui.c.
References _hm_clean_module_name(), dt_free, IS_NULL_PTR, dt_iop_module_t::multi_name, name, and out.
Referenced by _hm_warn_missing_raster_producers().
|
static |
Definition at line 323 of file history_merge_gui.c.
References _hm_clean_module_name(), dt_free, dt_iop_module_t::iop_order, dt_iop_module_t::multi_name, name, and out.
Referenced by _hm_collect_labels_from_history_map(), _hm_report_dest_label(), and _hm_show_merge_report_popup().
|
static |
Definition at line 517 of file history_merge_gui.c.
References _hm_make_node_id(), dt_free, dt_iop_module_t::enabled, FALSE, IOP_FLAGS_NO_HISTORY_STACK, IS_NULL_PTR, dt_iop_module_t::multi_name, dt_iop_module_t::op, and TRUE.
Referenced by _hm_collect_enabled_modules_gui_order(), _hm_report_build_moved_set(), and _hm_report_build_ordered_modules().
|
static |
Definition at line 68 of file history_merge_gui.c.
References _hm_id_to_op_name(), IS_NULL_PTR, and name.
Referenced by _hm_pretty_id_from_id_ht().
|
static |
Definition at line 80 of file history_merge_gui.c.
References _hm_clean_module_name(), _hm_pretty_id(), _hm_id_info_t::dst_iop, dt_free, IS_NULL_PTR, _hm_id_info_t::mod_list, dt_iop_module_t::multi_name, name, out, and _hm_id_info_t::src_iop.
Referenced by _hm_ask_user_constraints_choice(), and _hm_cycle_node_label().
|
static |
Align the drag hint with the destination column once GTK knows column widths.
The hint is packed after the legend in the same horizontal footer, so the margin is the start of the destination column minus the current legend width.
Definition at line 1248 of file history_merge_gui.c.
References dt_hm_drag_hint_align_t::arrow_column, dt_hm_drag_hint_align_t::filet_column, dt_hm_drag_hint_align_t::hint, dt_hm_drag_hint_align_t::legend, MAX, dt_hm_drag_hint_align_t::orig_column, and dt_hm_drag_hint_align_t::src_column.
Referenced by _hm_show_merge_report_popup().
|
static |
Definition at line 978 of file history_merge_gui.c.
References _hm_report_apply_visible_order(), _hm_report_build_desired_visible_order(), _hm_report_keep_input_row_at_bottom(), _hm_report_resync_history_iop_order(), _hm_report_update_arrows(), _hm_report_update_dest_labels(), _hm_report_update_move_styles(), _hm_report_reorder_ctx_t::dev_dest, _hm_report_reorder_ctx_t::dev_src, _hm_report_reorder_ctx_t::dst_last_before_by_id, _hm_report_reorder_ctx_t::dst_last_by_id, FALSE, _hm_report_reorder_ctx_t::in_reorder, _hm_report_reorder_ctx_t::mod_list_ids, _hm_report_reorder_ctx_t::orig_ids, _hm_report_reorder_ctx_t::override, _hm_report_reorder_ctx_t::store, and TRUE.
Referenced by _hm_report_drag_data_received().
|
static |
Definition at line 683 of file history_merge_gui.c.
References _hm_report_build_ordered_modules(), dt_ioppr_rebuild_iop_order_from_modules(), FALSE, IS_NULL_PTR, and TRUE.
Referenced by _hm_report_apply_store_order().
|
static |
Definition at line 612 of file history_merge_gui.c.
References _hm_module_from_id(), _hm_report_collect_dest_ids(), DT_DEBUG_HISTORY, dt_print(), i, model, and TRUE.
Referenced by _hm_report_apply_store_order().
|
static |
Definition at line 696 of file history_merge_gui.c.
References _hm_make_node_id(), _hm_module_visible_in_report(), _hm_report_collect_dest_ids(), dt_free, dt_free_gpointer(), FALSE, i, dt_develop_t::iop, IS_NULL_PTR, model, dt_iop_module_t::multi_name, dt_iop_module_t::op, and TRUE.
Referenced by _hm_report_update_move_styles().
|
static |
Definition at line 641 of file history_merge_gui.c.
References _hm_module_visible_in_report(), DT_DEBUG_HISTORY, dt_print(), dt_develop_t::iop, and IS_NULL_PTR.
Referenced by _hm_report_apply_visible_order().
|
static |
Definition at line 588 of file history_merge_gui.c.
References dt_free, FALSE, HM_REPORT_COL_DST_ID, HM_REPORT_COL_IS_INPUT, and model.
Referenced by _hm_report_build_desired_visible_order(), and _hm_report_build_moved_set().
|
static |
Definition at line 530 of file history_merge_gui.c.
References _hm_make_node_id(), _hm_module_row_label(), dt_free, dt_iop_module_needs_mask_history(), IS_NULL_PTR, dt_iop_module_t::multi_name, and dt_iop_module_t::op.
Referenced by _hm_report_update_dest_labels(), and _hm_show_merge_report_popup().
|
static |
Definition at line 999 of file history_merge_gui.c.
References _hm_report_reorder_ctx_t::drag_path.
Referenced by _hm_show_merge_report_popup().
|
static |
Definition at line 1014 of file history_merge_gui.c.
References _hm_report_reorder_ctx_t::drag_path, dt_free, FALSE, HM_REPORT_COL_DST_ID, HM_REPORT_COL_IS_INPUT, IS_NULL_PTR, and _hm_report_reorder_ctx_t::store.
Referenced by _hm_show_merge_report_popup().
|
static |
Definition at line 1052 of file history_merge_gui.c.
References _hm_report_apply_store_order(), dt_free, FALSE, HM_REPORT_COL_DST_ID, HM_REPORT_COL_IS_INPUT, i, IS_NULL_PTR, row, _hm_report_reorder_ctx_t::store, TRUE, and x.
Referenced by _hm_show_merge_report_popup().
|
static |
Definition at line 910 of file history_merge_gui.c.
References FALSE, HM_REPORT_COL_IS_INPUT, and store().
Referenced by _hm_report_apply_store_order().
|
static |
Definition at line 577 of file history_merge_gui.c.
References dt_develop_t::history, and dt_dev_history_item_t::iop_order.
Referenced by _hm_report_apply_store_order().
|
static |
Definition at line 820 of file history_merge_gui.c.
References _hm_history_masks_match(), delta, dt_free, dt_free_gpointer(), dt_iop_module_needs_mask_history(), FALSE, HM_REPORT_COL_ARROW, HM_REPORT_COL_DST_ID, HM_REPORT_COL_IS_INPUT, HM_REPORT_COL_SRC_ID, IS_NULL_PTR, row, and store().
Referenced by _hm_report_apply_store_order(), and _hm_show_merge_report_popup().
|
static |
Definition at line 938 of file history_merge_gui.c.
References _hm_module_from_id(), _hm_report_dest_label(), dt_free, dt_iop_module_needs_mask_history(), dt_iop_module_t::enabled, FALSE, HM_REPORT_COL_DST, HM_REPORT_COL_DST_FG, HM_REPORT_COL_DST_FG_SET, HM_REPORT_COL_DST_ID, HM_REPORT_COL_DST_STYLE, HM_REPORT_COL_IS_INPUT, HM_REPORT_DISABLED_FG, HM_REPORT_EXISTING_DST_FG, IS_NULL_PTR, and store().
Referenced by _hm_report_apply_store_order().
|
static |
Definition at line 785 of file history_merge_gui.c.
References _hm_report_build_moved_set(), dt_free, FALSE, HM_REPORT_COL_DST_DISABLED, HM_REPORT_COL_DST_FG, HM_REPORT_COL_DST_FG_SET, HM_REPORT_COL_DST_ID, HM_REPORT_COL_DST_STYLE, HM_REPORT_COL_DST_WEIGHT, HM_REPORT_COL_IS_INPUT, HM_REPORT_COL_SRC_ID, HM_REPORT_COL_SRC_WEIGHT, and store().
Referenced by _hm_report_apply_store_order(), and _hm_show_merge_report_popup().
| gboolean _hm_show_merge_report_popup | ( | dt_develop_t * | dev_dest, |
| dt_develop_t * | dev_src, | ||
| const gboolean | merge_iop_order, | ||
| const gboolean | used_source_order, | ||
| const dt_history_merge_strategy_t | strategy, | ||
| GHashTable * | src_last_by_id, | ||
| GHashTable * | dst_last_before_by_id, | ||
| const GPtrArray * | orig_labels, | ||
| const GPtrArray * | orig_styles, | ||
| const GHashTable * | orig_ids, | ||
| const GHashTable * | mod_list_ids, | ||
| const char * | source_label, | ||
| dt_hm_batch_state_t * | batch | ||
| ) |
Definition at line 1263 of file history_merge_gui.c.
References _hm_build_last_history_by_id(), _hm_build_override_map(), _hm_collect_enabled_modules_gui_order(), _hm_make_node_id(), _hm_module_row_label(), _hm_report_align_drag_hint(), _hm_report_dest_label(), _hm_report_drag_begin(), _hm_report_drag_data_get(), _hm_report_drag_data_received(), _hm_report_update_arrows(), _hm_report_update_move_styles(), dt_hm_drag_hint_align_t::arrow_column, darktable, dt_hm_batch_state_t::decision, _hm_report_reorder_ctx_t::dev_dest, _hm_report_reorder_ctx_t::dev_src, _hm_report_reorder_ctx_t::drag_path, _hm_report_reorder_ctx_t::dst_last_before_by_id, _hm_report_reorder_ctx_t::dst_last_by_id, dt_free, dt_gui_add_class(), DT_HISTORY_MERGE_APPEND, DT_HISTORY_MERGE_PREPEND, DT_HM_BATCH_ACCEPT, DT_HM_BATCH_REVERT, dt_iop_module_needs_mask_history(), DT_PIXEL_APPLY_DPI, dt_ui_main_window(), dt_iop_module_t::enabled, FALSE, dt_image_t::filename, dt_hm_drag_hint_align_t::filet_column, darktable_t::gui, dt_hm_drag_hint_align_t::hint, HM_REPORT_COL_ARROW, HM_REPORT_COL_COUNT, HM_REPORT_COL_DST, HM_REPORT_COL_DST_DISABLED, HM_REPORT_COL_DST_FG, HM_REPORT_COL_DST_FG_SET, HM_REPORT_COL_DST_ID, HM_REPORT_COL_DST_STYLE, HM_REPORT_COL_DST_WEIGHT, HM_REPORT_COL_FILET, HM_REPORT_COL_IS_INPUT, HM_REPORT_COL_ORIG, HM_REPORT_COL_ORIG_FG, HM_REPORT_COL_ORIG_FG_SET, HM_REPORT_COL_SRC, HM_REPORT_COL_SRC_FG, HM_REPORT_COL_SRC_FG_SET, HM_REPORT_COL_SRC_ID, HM_REPORT_COL_SRC_WEIGHT, HM_REPORT_DISABLED_FG, HM_REPORT_EXISTING_DST_FG, dt_image_t::id, dt_develop_t::image_storage, IS_NULL_PTR, dt_hm_drag_hint_align_t::legend, MAX, _hm_report_reorder_ctx_t::mod_list_ids, dt_iop_module_t::multi_name, dt_iop_module_t::op, dt_hm_drag_hint_align_t::orig_column, _hm_report_reorder_ctx_t::orig_ids, _hm_report_reorder_ctx_t::override, r, row, scrolled(), dt_hm_drag_hint_align_t::src_column, _hm_report_reorder_ctx_t::store, store(), TRUE, and dt_gui_gtk_t::ui.
Referenced by dt_history_merge().
| void _hm_show_toposort_cycle_popup | ( | GList * | cycle_nodes, |
| GHashTable * | id_ht | ||
| ) |
Definition at line 258 of file history_merge_gui.c.
References _hm_append_cycle_label(), _hm_cycle_node_label(), darktable, dt_free, dt_ui_main_window(), FALSE, darktable_t::gui, i, IS_NULL_PTR, n, TRUE, and dt_gui_gtk_t::ui.
Referenced by _hm_topo_sort_constraints().
| gboolean _hm_warn_missing_raster_producers | ( | const GList * | mod_list | ) |
Definition at line 181 of file history_merge_gui.c.
References _hm_module_label_short(), darktable, dt_free, dt_ui_main_window(), FALSE, darktable_t::gui, IS_NULL_PTR, dt_iop_module_t::raster_mask, dt_iop_module_t::sink, dt_iop_module_t::source, TRUE, and dt_gui_gtk_t::ui.
Referenced by dt_history_merge().
| gboolean dt_gui_merge_options_dialog | ( | const char * | title, |
| const char * | mode_key, | ||
| const char * | iop_order_key, | ||
| const char * | ask_key, | ||
| gboolean | iop_order_available | ||
| ) |
Show a modal dialog to pick merge mode and pipeline order before a paste or style apply.
Reads the current saved settings from mode_key and iop_order_key, lets the user adjust them, and writes back on OK. Returns TRUE when the user confirmed (proceed), FALSE when they cancelled (abort the operation).
| title | Window title string (already translated). |
| mode_key | Conf key for the dt_history_merge_strategy_t value (int). |
| iop_order_key | Conf key for the "use incoming pipeline order" boolean. |
| ask_key | Conf key for the "show this dialog next time" boolean. |
| iop_order_available | Whether the source has a stored pipeline order to offer. When FALSE the pipeline-order checkbox is disabled. |
Definition at line 1623 of file history_merge_gui.c.
References darktable, dt_conf_get_bool(), dt_conf_get_int(), dt_conf_set_bool(), dt_conf_set_int(), DT_HISTORY_MERGE_APPEND, DT_HISTORY_MERGE_PREPEND, DT_HISTORY_MERGE_REPLACE, dt_ui_main_window(), FALSE, darktable_t::gui, IS_NULL_PTR, TRUE, and dt_gui_gtk_t::ui.
Referenced by _styles_apply_callback(), paste_all_callback(), and paste_parts_callback().
|
static |
Definition at line 414 of file history_merge_gui.c.
Referenced by _hm_report_update_dest_labels(), and _hm_show_merge_report_popup().
|
static |
Definition at line 415 of file history_merge_gui.c.
Referenced by _hm_report_update_dest_labels(), and _hm_show_merge_report_popup().