![]() |
Ansel 0.0
A darktable fork - bloat + design vision
|
#include "bauhaus/bauhaus.h"#include "common/darktable.h"#include "common/debug.h"#include "common/image_cache.h"#include "common/iop_order.h"#include "control/conf.h"#include "control/control.h"#include "control/signal.h"#include "develop/develop.h"#include "develop/imageop.h"#include "gui/gtk.h"#include "libs/lib.h"#include "libs/lib_api.h"
Include dependency graph for modulegroups.c:Data Structures | |
| struct | dt_lib_modulegroups_t |
Macros | |
| #define | DT_IOP_ORDER_INFO (darktable.unmuted & DT_DEBUG_IOPORDER) |
Typedefs | |
| typedef enum dt_modulesgroups_tabs_t | dt_modulesgroups_tabs_t |
| typedef enum dt_modulesgroups_basic_sections_t | dt_modulesgroups_basic_sections_t |
| typedef struct dt_lib_modulegroups_t | dt_lib_modulegroups_t |
| typedef enum dt_modulegroups_dnd_target_t | dt_modulegroups_dnd_target_t |
Enumerations | |
| enum | dt_modulesgroups_tabs_t { MOD_TAB_ACTIVE = 0 , MOD_TAB_BASIC = 1 , MOD_TAB_REPAIR = 2 , MOD_TAB_SHARPNESS = 3 , MOD_TAB_EFFECTS = 4 , MOD_TAB_TECHNICAL = 5 , MOD_TAB_ALL = 6 , MOD_TAB_LAST } |
| enum | dt_modulesgroups_basic_sections_t { TAB_BASIC_COLOR = 0 , TAB_BASIC_FILM = 1 , TAB_BASIC_TONES = 2 , TAB_BASIC_LAST } |
| enum | dt_modulegroups_dnd_target_t { DT_MODULEGROUPS_DND_TARGET_IOP = 0 } |
Functions | |
| static dt_modulesgroups_tabs_t | _group_to_tab (dt_iop_group_t group) |
| static void | _switch_page (GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data) |
| static gboolean | _update_iop_visibility (gpointer user_data) |
| static void | _lib_modulegroups_signal_set (gpointer instance, gpointer module, gpointer user_data) |
| static void | _lib_modulegroups_refresh (gpointer instance, gpointer user_data) |
| static gboolean | _is_module_in_history (const dt_iop_module_t *module) |
| static void | _modulegroups_setup_drag_source (dt_lib_module_t *self, dt_iop_module_t *module) |
| Attach the module drag source handlers once to an expander widget. | |
| static gboolean | _modulegroups_reorder_target (GtkWidget *target) |
| Reorder one page or subgroup container to match reverse pipeline order. | |
| static void | _modulegroups_sync_section_label_margins (dt_lib_modulegroups_t *d) |
| Align the basic-tab section labels with the module expander margins. | |
| static void | _modulegroups_clear_drop_state (dt_lib_modulegroups_t *d) |
| Remove all drag-and-drop visual feedback from module headers. | |
| static void | _modulegroups_append_visible_expanders (GtkWidget *widget, GList **widgets) |
| Append visible module expanders in display order from a page subtree. | |
| static dt_iop_module_t * | _modulegroups_get_dnd_dest_module (GtkWidget *page, const gint y, dt_iop_module_t *module_src) |
| Find the module header under the current drop position. | |
| static void | _modulegroups_drag_begin (GtkWidget *widget, GdkDragContext *context, gpointer user_data) |
| static void | _modulegroups_drag_end (GtkWidget *widget, GdkDragContext *context, gpointer user_data) |
| static void | _modulegroups_drag_data_get (GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data, guint info, guint time, gpointer user_data) |
| static gboolean | _modulegroups_drag_drop (GtkWidget *widget, GdkDragContext *dc, gint x, gint y, guint time, gpointer user_data) |
| static gboolean | _modulegroups_drag_motion (GtkWidget *widget, GdkDragContext *dc, gint x, gint y, guint time, gpointer user_data) |
| static void | _modulegroups_drag_data_received (GtkWidget *widget, GdkDragContext *dc, gint x, gint y, GtkSelectionData *selection_data, guint info, guint time, gpointer user_data) |
| static void | _modulegroups_drag_leave (GtkWidget *widget, GdkDragContext *dc, guint time, gpointer user_data) |
| static void | _modulegroups_track_widget (GtkWidget **slot, GtkWidget *widget) |
| static void | _ensure_page_widgets (dt_lib_module_t *self) |
| dt_modulesgroups_tabs_t | _modulegroups_cycle_tabs (int tab) |
| static dt_modulesgroups_tabs_t | _get_current_tab (dt_lib_module_t *self) |
| static void | _set_current_tab (dt_lib_module_t *self, dt_modulesgroups_tabs_t tab) |
| static void | _set_current_tab_from_module_group (dt_lib_module_t *self, dt_iop_group_t group) |
| static gboolean | _is_module_in_tab (dt_iop_module_t *module, dt_modulesgroups_tabs_t current_tab) |
| static GtkWidget * | _get_target_container (dt_lib_module_t *self, const dt_iop_module_t *module) |
| Return the GtkBox currently hosting a module for the active tab. | |
| const char * | name (struct dt_lib_module_t *self) |
| const char ** | views (dt_lib_module_t *self) |
| uint32_t | container (dt_lib_module_t *self) |
| int | expandable (dt_lib_module_t *self) |
| int | position () |
| static gboolean | _modulegroups_switch_tab_next (GtkAccelGroup *accel_group, GObject *accelerable, guint keyval, GdkModifierType modifier, gpointer data) |
| static gboolean | _modulegroups_switch_tab_previous (GtkAccelGroup *accel_group, GObject *accelerable, guint keyval, GdkModifierType modifier, gpointer data) |
| static gboolean | _scroll_event (GtkWidget *widget, GdkEventScroll *event, gpointer user_data) |
| static void | _focus_module (dt_iop_module_t *module) |
| static dt_iop_module_t * | _find_first_visible_module (dt_lib_module_t *self) |
| static dt_iop_module_t * | _find_last_visible_module (dt_lib_module_t *self) |
| static gboolean | _focus_previous_module (GtkAccelGroup *accel_group, GObject *accelerable, guint keyval, GdkModifierType modifier, gpointer user_data) |
| static gboolean | _focus_next_module (GtkAccelGroup *accel_group, GObject *accelerable, guint keyval, GdkModifierType modifier, gpointer user_data) |
| static gboolean | _is_valid_widget (GtkWidget *widget) |
| static GList * | _find_next_visible_widget (GList *widgets) |
| static GList * | _find_previous_visible_widget (GList *widgets) |
| static void | _focus_widget (GtkWidget *widget) |
| static gboolean | _focus_next_control () |
| static gboolean | _focus_previous_control () |
| void | gui_init (dt_lib_module_t *self) |
| static gboolean | _modulegroups_move_widget (GtkWidget *widget, GtkWidget *target) |
| void | gui_cleanup (dt_lib_module_t *self) |
Variables | |
| static const GtkTargetEntry | _modulegroups_target_list [] |
| static const guint | _modulegroups_n_targets = G_N_ELEMENTS(_modulegroups_target_list) |
| #define DT_IOP_ORDER_INFO (darktable.unmuted & DT_DEBUG_IOPORDER) |
| typedef struct dt_lib_modulegroups_t dt_lib_modulegroups_t |
| typedef enum dt_modulegroups_dnd_target_t dt_modulegroups_dnd_target_t |
| typedef enum dt_modulesgroups_tabs_t dt_modulesgroups_tabs_t |
|
static |
References _modulegroups_drag_data_received(), _modulegroups_drag_drop(), _modulegroups_drag_leave(), _modulegroups_drag_motion(), _modulegroups_n_targets, _modulegroups_target_list, _modulegroups_track_widget(), d, darktable, dt_lib_module_t::data, DT_UI_CONTAINER_PANEL_RIGHT_CENTER, dt_ui_get_container(), dt_ui_section_label_new(), FALSE, darktable_t::gui, i, IS_NULL_PTR, MOD_TAB_BASIC, MOD_TAB_LAST, TAB_BASIC_COLOR, TAB_BASIC_FILM, TAB_BASIC_LAST, TAB_BASIC_TONES, and dt_gui_gtk_t::ui.
Referenced by _update_iop_visibility().
|
static |
References _get_current_tab(), _is_module_in_tab(), darktable, darktable_t::develop, and dt_develop_t::iop.
Referenced by _focus_previous_module().
|
static |
References _get_current_tab(), _is_module_in_tab(), darktable, darktable_t::develop, and dt_develop_t::iop.
Referenced by _focus_next_module().
|
static |
References _is_valid_widget().
Referenced by _focus_next_control().
|
static |
References _is_valid_widget().
Referenced by _focus_previous_control().
|
static |
References dt_iop_gui_module_is_visible(), dt_iop_gui_set_expanded(), dt_iop_request_focus(), and TRUE.
Referenced by _focus_next_module(), and _focus_previous_module().
|
static |
References _find_next_visible_widget(), _focus_widget(), darktable, darktable_t::develop, DT_GUI_MODULE, FALSE, darktable_t::gui, dt_develop_t::gui_module, dt_gui_gtk_t::has_scroll_focus, m, and TRUE.
Referenced by gui_init().
|
static |
|
static |
References _find_previous_visible_widget(), _focus_widget(), darktable, darktable_t::develop, DT_GUI_MODULE, FALSE, darktable_t::gui, dt_develop_t::gui_module, dt_gui_gtk_t::has_scroll_focus, m, and TRUE.
Referenced by gui_init().
|
static |
References darktable, darktable_t::gui, and dt_gui_gtk_t::has_scroll_focus.
Referenced by _focus_next_control(), and _focus_previous_control().
|
static |
References d, dt_lib_module_t::data, IS_NULL_PTR, and MOD_TAB_ACTIVE.
Referenced by _find_first_visible_module(), _find_last_visible_module(), _focus_next_module(), _focus_previous_module(), _get_target_container(), _lib_modulegroups_signal_set(), _modulegroups_switch_tab_next(), _modulegroups_switch_tab_previous(), _scroll_event(), and _update_iop_visibility().
|
static |
Return the GtkBox currently hosting a module for the active tab.
The basic tab splits its modules into three subgroup containers, while the other tabs each own a single page box.
| d | Modulegroups runtime data. |
| module | Module whose container is requested. |
References _get_current_tab(), d, dt_lib_module_t::data, IOP_GROUP_COLOR, IOP_GROUP_FILM, IOP_GROUP_TONES, IS_NULL_PTR, MOD_TAB_BASIC, TAB_BASIC_COLOR, TAB_BASIC_FILM, and TAB_BASIC_TONES.
Referenced by _update_iop_visibility().
|
static |
References IOP_GROUP_COLOR, IOP_GROUP_EFFECTS, IOP_GROUP_FILM, IOP_GROUP_LAST, IOP_GROUP_NONE, IOP_GROUP_REPAIR, IOP_GROUP_SHARPNESS, IOP_GROUP_TECHNICAL, IOP_GROUP_TONES, MOD_TAB_ACTIVE, MOD_TAB_ALL, MOD_TAB_BASIC, MOD_TAB_EFFECTS, MOD_TAB_REPAIR, MOD_TAB_SHARPNESS, and MOD_TAB_TECHNICAL.
Referenced by _is_module_in_tab(), and _set_current_tab_from_module_group().
|
static |
References darktable, darktable_t::develop, FALSE, dt_develop_t::history, and TRUE.
Referenced by _is_module_in_tab().
|
static |
References _group_to_tab(), _is_module_in_history(), dt_iop_is_hidden(), dt_iop_module_t::enabled, FALSE, IOP_FLAGS_DEPRECATED, IS_NULL_PTR, MOD_TAB_ACTIVE, and MOD_TAB_ALL.
Referenced by _find_first_visible_module(), _find_last_visible_module(), _lib_modulegroups_signal_set(), and _update_iop_visibility().
|
static |
References FALSE, TRUE, and type.
Referenced by _find_next_visible_widget(), and _find_previous_visible_widget().
|
static |
References _update_iop_visibility().
Referenced by gui_cleanup(), and gui_init().
|
static |
References _get_current_tab(), _is_module_in_tab(), _set_current_tab_from_module_group(), _update_iop_visibility(), and IS_NULL_PTR.
Referenced by gui_cleanup(), and gui_init().
Append visible module expanders in display order from a page subtree.
The basic tab nests its sections inside extra boxes, so drag-and-drop must recurse through the visible widget tree and keep only actual module expanders.
| widget | Current widget in the page subtree. |
| widgets | Output list collecting expanders in display order. |
References _modulegroups_append_visible_expanders().
Referenced by _modulegroups_append_visible_expanders(), and _modulegroups_get_dnd_dest_module().
|
static |
Remove all drag-and-drop visual feedback from module headers.
Modulegroups owns the containers hosting the module expanders, so it also owns the temporary drop markers shown while reordering the list.
| d | Modulegroups runtime data. |
References d, darktable, darktable_t::develop, dt_gui_remove_class(), dt_develop_t::iop, and IS_NULL_PTR.
Referenced by _modulegroups_drag_begin(), _modulegroups_drag_data_received(), _modulegroups_drag_end(), _modulegroups_drag_leave(), _modulegroups_drag_motion(), and gui_cleanup().
| dt_modulesgroups_tabs_t _modulegroups_cycle_tabs | ( | int | tab | ) |
References MOD_TAB_LAST.
Referenced by _modulegroups_switch_tab_next(), _modulegroups_switch_tab_previous(), and _scroll_event().
|
static |
References TRUE.
Referenced by _modulegroups_setup_drag_source().
|
static |
References TRUE.
Referenced by _ensure_page_widgets().
|
static |
References _modulegroups_clear_drop_state(), d, and dt_lib_module_t::data.
Referenced by _modulegroups_setup_drag_source().
|
static |
References _modulegroups_clear_drop_state(), d, and dt_lib_module_t::data.
Referenced by _ensure_page_widgets().
|
static |
References _modulegroups_clear_drop_state(), _modulegroups_get_dnd_dest_module(), d, darktable, dt_lib_module_t::data, darktable_t::develop, dt_gui_add_class(), dt_ioppr_check_can_move_after_iop(), dt_ioppr_check_can_move_before_iop(), dt_iop_module_t::expander, FALSE, dt_develop_t::iop, dt_iop_module_t::iop_order, IS_NULL_PTR, and TRUE.
Referenced by _ensure_page_widgets().
|
static |
Find the module header under the current drop position.
The y coordinate is relative to the page widget receiving the drop event. We translate each visible module expander into that same coordinate space so reordering keeps working across nested section containers.
| page | Visible modulegroups page handling the drag. |
| y | Drop coordinate in the page reference frame. |
| module_src | Drag source module. |
References _modulegroups_append_visible_expanders(), dt_iop_module_t::expander, FALSE, dt_iop_module_t::header, and TRUE.
Referenced by _modulegroups_drag_data_received(), and _modulegroups_drag_motion().
Referenced by _update_iop_visibility(), and gui_cleanup().
|
static |
Reorder one page or subgroup container to match reverse pipeline order.
We walk the whole pipeline from last to first and keep only expanders whose current parent is the requested container. This keeps the GUI order consistent regardless of the active tab layout.
| target | Page or subgroup container to reorder. |
References darktable, darktable_t::develop, dt_iop_is_hidden(), FALSE, dt_develop_t::iop, position(), and TRUE.
Referenced by _update_iop_visibility().
|
static |
Attach the module drag source handlers once to an expander widget.
Modulegroups owns module reordering in the darkroom panel, so it also owns the drag source registration for every visible expander.
| self | Modulegroups lib module. |
| module | Module whose expander should become draggable. |
References _modulegroups_drag_begin(), _modulegroups_drag_data_get(), _modulegroups_drag_end(), _modulegroups_n_targets, _modulegroups_target_list, and TRUE.
Referenced by _update_iop_visibility().
|
static |
References _get_current_tab(), _modulegroups_cycle_tabs(), _set_current_tab(), darktable, darktable_t::develop, dt_iop_gui_set_expanded(), dt_iop_request_focus(), FALSE, dt_develop_t::gui_module, and TRUE.
Referenced by gui_init().
|
static |
References _get_current_tab(), _modulegroups_cycle_tabs(), _set_current_tab(), darktable, darktable_t::develop, dt_iop_gui_set_expanded(), dt_iop_request_focus(), FALSE, dt_develop_t::gui_module, and TRUE.
Referenced by gui_init().
|
static |
Align the basic-tab section labels with the module expander margins.
The section label border is drawn on the label widget itself. To make that border line start and end exactly where module boxes do, we copy the current expander margins from the first available module widget.
| d | Modulegroups runtime data. |
References darktable, darktable_t::develop, dt_iop_is_hidden(), and dt_develop_t::iop.
Referenced by _update_iop_visibility().
Referenced by _ensure_page_widgets().
|
static |
References _get_current_tab(), _modulegroups_cycle_tabs(), _set_current_tab(), dt_gui_get_scroll_unit_deltas(), dt_iop_request_focus(), and TRUE.
Referenced by gui_init().
|
static |
References d, dt_lib_module_t::data, and IS_NULL_PTR.
Referenced by _modulegroups_switch_tab_next(), _modulegroups_switch_tab_previous(), _scroll_event(), and _set_current_tab_from_module_group().
|
static |
References _group_to_tab(), and _set_current_tab().
Referenced by _lib_modulegroups_signal_set().
|
static |
References _update_iop_visibility(), dt_lib_module_t::data, dt_conf_set_int(), and IS_NULL_PTR.
Referenced by gui_init().
|
static |
References _ensure_page_widgets(), _get_current_tab(), _get_target_container(), _is_module_in_tab(), _modulegroups_move_widget(), _modulegroups_reorder_target(), _modulegroups_setup_drag_source(), _modulegroups_sync_section_label_margins(), d, darktable, dt_lib_module_t::data, darktable_t::develop, dt_dev_get_history_end_ext(), dt_dev_history_get_last_item_by_module(), dt_dev_modules_update_multishow(), dt_iop_gui_set_expanded(), dt_iop_is_hidden(), dt_iop_request_focus(), dt_pthread_rwlock_rdlock, dt_pthread_rwlock_unlock, dt_iop_module_t::expander, FALSE, darktable_t::gui, dt_develop_t::gui_module, dt_develop_t::history, dt_develop_t::history_mutex, i, dt_develop_t::iop, IS_NULL_PTR, MOD_TAB_BASIC, MOD_TAB_LAST, dt_gui_gtk_t::scroll_to, TAB_BASIC_LAST, and TRUE.
Referenced by _lib_modulegroups_refresh(), _lib_modulegroups_signal_set(), and _switch_page().
| uint32_t container | ( | dt_lib_module_t * | self | ) |
References DT_UI_CONTAINER_PANEL_RIGHT_TOP.
| int expandable | ( | dt_lib_module_t * | self | ) |
| void gui_cleanup | ( | dt_lib_module_t * | self | ) |
References _lib_modulegroups_refresh(), _lib_modulegroups_signal_set(), _modulegroups_clear_drop_state(), _modulegroups_move_widget(), d, darktable, dt_lib_module_t::data, darktable_t::develop, DT_DEBUG_CONTROL_SIGNAL_DISCONNECT, dt_free, DT_UI_CONTAINER_PANEL_RIGHT_CENTER, dt_ui_get_container(), darktable_t::gui, i, dt_develop_t::iop, MOD_TAB_ALL, darktable_t::signals, and dt_gui_gtk_t::ui.
| void gui_init | ( | dt_lib_module_t * | self | ) |
References _focus_next_control(), _focus_next_module(), _focus_previous_control(), _focus_previous_module(), _lib_modulegroups_refresh(), _lib_modulegroups_signal_set(), _modulegroups_switch_tab_next(), _modulegroups_switch_tab_previous(), _scroll_event(), _switch_page(), d, darktable, dt_lib_module_t::data, dt_accels_new_darkroom_action, dt_accels_new_darkroom_locked_action, dt_conf_get_int(), DT_DEBUG_CONTROL_SIGNAL_CONNECT, dt_get_help_url(), dt_gui_add_class(), dt_gui_add_help_link(), DT_SIGNAL_DEVELOP_IMAGE_CHANGED, DT_SIGNAL_DEVELOP_INITIALIZE, DT_SIGNAL_DEVELOP_MODULE_MOVED, DT_SIGNAL_DEVELOP_MODULEGROUPS_SET, FALSE, darktable_t::gui, i, MOD_TAB_LAST, dt_lib_module_t::plugin_name, dt_gui_gtk_t::scroll_mask, darktable_t::signals, TRUE, and dt_lib_module_t::widget.
| const char * name | ( | struct dt_lib_module_t * | self | ) |
| int position | ( | ) |
Referenced by _modulegroups_reorder_target().
| const char ** views | ( | dt_lib_module_t * | self | ) |
References v.
|
static |
Referenced by _ensure_page_widgets(), and _modulegroups_setup_drag_source().
|
static |
Referenced by _ensure_page_widgets(), and _modulegroups_setup_drag_source().