diff options
author | Julian Eisel <julian@blender.org> | 2021-07-09 22:46:55 +0300 |
---|---|---|
committer | Sybren A. Stüvel <sybren@blender.org> | 2021-07-15 17:12:36 +0300 |
commit | ae1dc8f5f98d045b11312401d6f93d0eae15ddc5 (patch) | |
tree | d65a6ec175ecc87c0483ec4ddf39beec3847bafd /source/blender/editors/interface/interface_templates.c | |
parent | 00c7ea68a88e3da0b920f436114f7160d354f6c6 (diff) |
UI: Internal support for custom UI list item drag & activate operators
For pose libraries, we need to be able to apply a pose whenever
activating (clicking) an item in the Pose Library asset view and blend
it by dragging (press & move). And since we want to allow Python scripts
to define what happens at least when activating an asset (so they can
define for example a custom "Apply" operator for preset assets), it
makes sense to just let them pass an operator name to the asset view
template. The template will be introduced in a following commit.
Diffstat (limited to 'source/blender/editors/interface/interface_templates.c')
-rw-r--r-- | source/blender/editors/interface/interface_templates.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 9fbaa62b77f..548852b407e 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -5835,6 +5835,15 @@ static void uilist_free_dyn_data(uiList *ui_list) return; } + if (dyn_data->custom_activate_opptr) { + WM_operator_properties_free(dyn_data->custom_activate_opptr); + MEM_freeN(dyn_data->custom_activate_opptr); + } + if (dyn_data->custom_drag_opptr) { + WM_operator_properties_free(dyn_data->custom_drag_opptr); + MEM_freeN(dyn_data->custom_drag_opptr); + } + MEM_SAFE_FREE(dyn_data->items_filter_flags); MEM_SAFE_FREE(dyn_data->items_filter_neworder); MEM_SAFE_FREE(dyn_data->customdata); @@ -6848,6 +6857,46 @@ void uiTemplateList(uiLayout *layout, NULL); } +/** + * \return: A RNA pointer for the operator properties. + */ +PointerRNA *UI_list_custom_activate_operator_set(uiList *ui_list, + const char *opname, + bool create_properties) +{ + uiListDyn *dyn_data = ui_list->dyn_data; + dyn_data->custom_activate_optype = WM_operatortype_find(opname, false); + if (!dyn_data->custom_activate_optype) { + return NULL; + } + + if (create_properties) { + WM_operator_properties_alloc(&dyn_data->custom_activate_opptr, NULL, opname); + } + + return dyn_data->custom_activate_opptr; +} + +/** + * \return: A RNA pointer for the operator properties. + */ +PointerRNA *UI_list_custom_drag_operator_set(uiList *ui_list, + const char *opname, + bool create_properties) +{ + uiListDyn *dyn_data = ui_list->dyn_data; + dyn_data->custom_drag_optype = WM_operatortype_find(opname, false); + if (!dyn_data->custom_drag_optype) { + return NULL; + } + + if (create_properties) { + WM_operator_properties_alloc(&dyn_data->custom_drag_opptr, NULL, opname); + } + + return dyn_data->custom_drag_opptr; +} + /** \} */ /* -------------------------------------------------------------------- */ |