Blender V5.0
UI_interface_layout.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2025 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#include <functional>
8#include <optional>
9
11#include "BLI_string_ref.hh"
12#include "BLI_utility_mixins.hh"
13#include "BLI_vector.hh"
14
15#include "UI_interface_icons.hh" /* `eAlertIcon` */
16#include "UI_interface_types.hh"
17
18struct bContext;
19struct bContextStore;
20struct EnumPropertyItem;
21struct IDProperty;
22struct uiBlock;
23struct uiBut;
24struct uiLayoutRoot;
25struct uiList;
26struct uiStyle;
27struct MenuType;
28struct PanelType;
29struct Panel;
30struct PointerRNA;
31struct PropertyRNA;
32struct StructRNA;
33struct wmOperatorType;
34
35/* Layout
36 *
37 * More automated layout of buttons. Has three levels:
38 * - Layout: contains a number templates, within a bounded width or height.
39 * - Template: predefined layouts for buttons with a number of slots, each
40 * slot can contain multiple items.
41 * - Item: item to put in a template slot, being either an RNA property,
42 * operator, label or menu. Also regular buttons can be used when setting
43 * uiBlockCurLayout. */
44
45namespace blender::ui {
46enum class ItemType : int8_t;
47enum class ItemInternalFlag : uint8_t;
48enum class EmbossType : uint8_t;
49enum class LayoutAlign : int8_t;
50enum class ButProgressType : int8_t;
51enum class LayoutDirection : int8_t;
52
53struct ItemInternal;
54struct LayoutInternal;
55} // namespace blender::ui
56
57namespace blender::wm {
58enum class OpCallContext : int8_t;
59}
60
65
66struct uiItem {
67
69 uiItem(const uiItem &) = default;
70 virtual ~uiItem() = default;
71
72 [[nodiscard]] bool fixed_size() const;
73 void fixed_size_set(bool fixed_size);
74
75 [[nodiscard]] blender::ui::ItemType type() const;
76
77 protected:
80
82};
83
84enum eUI_Item_Flag : uint16_t;
85
86enum class LayoutSeparatorType : int8_t {
90};
91
92enum class NodeAssetMenuOperatorType : int8_t {
95};
96
103 // protected:
104
105 int x_ = 0, y_ = 0, w_ = 0, h_ = 0;
106 short space_ = 0;
107
108 protected:
109 uiLayoutRoot *root_ = nullptr;
111 uiLayout *parent_ = nullptr;
112 std::string heading_;
113
115
118
119 float scale_[2] = {0.0f, 0.0f};
120 bool align_ = false;
121 bool active_ = false;
122 bool active_default_ = false;
123 bool activate_init_ = false;
124 bool enabled_ = false;
125 bool redalert_ = false;
127 bool variable_size_ = false;
131 float units_[2] = {0.0f, 0.0f};
133 float search_weight_ = 0.0f;
134
135 public:
137
138 [[nodiscard]] bool active() const;
144 void active_set(bool active);
145
146 [[nodiscard]] bool active_default() const;
152
153 [[nodiscard]] bool activate_init() const;
160
161 [[nodiscard]] blender::ui::LayoutAlign alignment() const;
163
164 [[nodiscard]] uiBlock *block() const;
165
167
168 [[nodiscard]] const PointerRNA *context_ptr_get(const blender::StringRef name,
169 const StructRNA *type) const;
171
172 [[nodiscard]] std::optional<blender::StringRefNull> context_string_get(
173 const blender::StringRef name) const;
175
176 [[nodiscard]] std::optional<int64_t> context_int_get(const blender::StringRef name) const;
178
180 void context_set_from_but(const uiBut *but);
181
182 [[nodiscard]] bContextStore *context_store() const;
183
184 [[nodiscard]] bool enabled() const;
190 void enabled_set(bool enabled);
191
192 [[nodiscard]] blender::ui::EmbossType emboss() const;
194
195 [[nodiscard]] blender::ui::LayoutDirection local_direction() const;
196
197 [[nodiscard]] blender::wm::OpCallContext operator_context() const;
200
201 [[nodiscard]] bool red_alert() const;
206 void red_alert_set(bool red_alert);
207
208 [[nodiscard]] Panel *root_panel() const;
209
210 [[nodiscard]] float scale_x() const;
211 void scale_x_set(float scale);
212
213 [[nodiscard]] float scale_y() const;
214 void scale_y_set(float scale);
215
216 [[nodiscard]] float search_weight() const;
217 void search_weight_set(float weight);
218
219 [[nodiscard]] float ui_units_x() const;
221 void ui_units_x_set(float width);
222
223 [[nodiscard]] float ui_units_y() const;
225 void ui_units_y_set(float height);
226
227 [[nodiscard]] bool use_property_split() const;
231 void use_property_split_set(bool value);
232
233 [[nodiscard]] bool use_property_decorate() const;
238 void use_property_decorate_set(bool is_sep);
239
240 [[nodiscard]] int width() const;
241
243
244 uiLayout &absolute(bool align);
246
251 uiLayout &box();
256 uiLayout &column(bool align);
265
270 uiLayout &row(bool align);
279
285 uiLayout &column_flow(int number, bool align);
299 bool row_major, int columns_len, bool even_columns, bool even_rows, bool align);
300
302 uiLayout &list_box(uiList *ui_list, PointerRNA *actptr, PropertyRNA *actprop);
303
310
312 uiLayout &overlap();
313
332 PointerRNA *open_prop_owner,
333 blender::StringRefNull open_prop_name);
344 PointerRNA *open_prop_owner,
345 blender::StringRefNull open_prop_name,
348 PointerRNA *open_prop_owner,
349 blender::StringRefNull open_prop_name,
350 PointerRNA *bool_prop_owner,
351 blender::StringRefNull bool_prop_name,
352 std::optional<blender::StringRef> label);
360 PanelLayout panel(const bContext *C, blender::StringRef idname, bool default_closed);
361
371 uiLayout *panel(const bContext *C,
372 blender::StringRef idname,
373 bool default_closed,
375
381 uiLayout &split(float percentage, bool align);
382
384
389 void decorator(PointerRNA *ptr, PropertyRNA *prop, int index);
395 void decorator(PointerRNA *ptr, std::optional<blender::StringRefNull> propname, int index);
396
398 void label(blender::StringRef name, int icon);
399
404 void menu(MenuType *mt, std::optional<blender::StringRef> name, int icon);
409 void menu(blender::StringRef menuname, std::optional<blender::StringRef> name, int icon);
410
412 void menu_contents(blender::StringRef menuname);
413
420 void menu_fn(blender::StringRefNull name, int icon, uiMenuCreateFunc func, void *arg);
428 void menu_fn_argN_free(blender::StringRefNull name, int icon, uiMenuCreateFunc func, void *argN);
437 std::optional<blender::StringRef> name,
438 int icon,
441
448 PointerRNA op(wmOperatorType *ot, std::optional<blender::StringRef> name, int icon);
449
457 PointerRNA op(blender::StringRefNull opname, std::optional<blender::StringRef> name, int icon);
458
468 std::optional<blender::StringRef> name,
469 int icon,
479 blender::StringRefNull propname,
480 IDProperty *properties,
483 const int active = -1);
484
498 const PointerRNA &ptr,
500 IDProperty *properties,
503 const EnumPropertyItem *item_array,
504 int totitem,
505 int active = -1);
506
514 blender::StringRefNull propname,
515 std::optional<blender::StringRefNull> name,
516 int icon);
524 blender::StringRefNull propname,
526 int icon);
538 std::optional<blender::StringRef> name,
539 int icon,
542 const char *menu_id);
543
544 void progress_indicator(const char *text,
545 float factor,
546 blender::ui::ButProgressType progress_type);
547
555 void prop(PointerRNA *ptr,
557 int index,
558 int value,
560 std::optional<blender::StringRef> name_opt,
561 int icon,
562 std::optional<blender::StringRef> placeholder = std::nullopt);
564 void prop(PointerRNA *ptr,
565 blender::StringRefNull propname,
567 std::optional<blender::StringRef> name,
568 int icon);
569
570 void popover(const bContext *C,
571 PanelType *pt,
572 std::optional<blender::StringRef> name_opt,
573 int icon);
574 void popover(const bContext *C,
575 blender::StringRef panel_type,
576 std::optional<blender::StringRef> name_opt,
577 int icon);
578 void popover_group(
579 bContext *C, int space_id, int region_id, const char *context, const char *category);
580
587 int value,
588 std::optional<blender::StringRefNull> name,
589 int icon);
596 const char *value,
597 std::optional<blender::StringRefNull> name,
598 int icon);
604 blender::StringRefNull propname,
605 const char *value,
606 std::optional<blender::StringRefNull> name,
607 int icon);
608
612 std::optional<blender::StringRefNull> name,
613 int icon);
614
619 PointerRNA *ptr_highlight,
620 PropertyRNA *prop_highlight,
621 bool icon_only);
622
625
636 PointerRNA *searchptr,
637 PropertyRNA *searchprop,
638 PropertyRNA *item_searchpropname,
639 std::optional<blender::StringRefNull> name,
640 int icon,
641 bool results_are_suggestions);
648 blender::StringRefNull propname,
649 PointerRNA *searchptr,
650 blender::StringRefNull searchpropname,
651 std::optional<blender::StringRefNull> name,
652 int icon);
653
659 int index,
660 int value,
662 std::optional<blender::StringRefNull> name,
663 int icon,
664 const char *panel_type);
665
671 int index,
672 int value,
674 std::optional<blender::StringRefNull> name,
675 int icon,
676 const char *menu_type);
677
680 int icon,
681 std::function<void(bContext &)> func,
682 std::optional<blender::StringRef> tooltip = std::nullopt);
683
685 void separator(float factor = 1.0f, LayoutSeparatorType type = LayoutSeparatorType::Auto);
686
688 void separator_spacer();
689
691
692 [[nodiscard]] uiLayoutRoot *root() const;
693 [[nodiscard]] const bContextStore *context() const;
694 [[nodiscard]] uiLayout *parent() const;
695 [[nodiscard]] blender::StringRef heading() const;
696 void heading_reset();
697 [[nodiscard]] blender::Span<uiItem *> items() const;
698 [[nodiscard]] bool align() const;
699 [[nodiscard]] bool variable_size() const;
700 [[nodiscard]] blender::ui::EmbossType emboss_or_undefined() const;
701
702 protected:
703 void estimate();
704 virtual void estimate_impl();
705 void resolve();
706 virtual void resolve_impl();
707};
708
709inline bool uiLayout::active() const
710{
711 return active_;
712}
714{
715 active_ = active;
716}
717
718inline bool uiLayout::active_default() const
719{
720 return active_default_;
721}
726
727inline bool uiLayout::activate_init() const
728{
729 return activate_init_;
730}
735
737{
738 return alignment_;
739}
740
745
747{
748 return context_;
749}
750
751inline bool uiLayout::enabled() const
752{
753 return enabled_;
754}
756{
758}
759
760inline bool uiLayout::red_alert() const
761{
762 return redalert_;
763}
765{
767}
768
769inline float uiLayout::search_weight() const
770{
771 return search_weight_;
772}
773inline void uiLayout::search_weight_set(float weight)
774{
775 search_weight_ = weight;
776}
777
778inline float uiLayout::scale_x() const
779{
780 return scale_[0];
781};
782inline void uiLayout::scale_x_set(float scale)
783{
784 scale_[0] = scale;
785};
786
787inline float uiLayout::scale_y() const
788{
789 return scale_[1];
790};
791inline void uiLayout::scale_y_set(float scale)
792{
793 scale_[1] = scale;
794};
795
796inline float uiLayout::ui_units_x() const
797{
798 return units_[0];
799};
801{
802 units_[0] = width;
803};
804
805inline float uiLayout::ui_units_y() const
806{
807 return units_[1];
808};
809inline void uiLayout::ui_units_y_set(float height)
810{
811 units_[1] = height;
812};
813
814inline int uiLayout::width() const
815{
816 return this->w_;
817}
818
819namespace blender::ui {
820enum class LayoutDirection : int8_t {
823};
824
825enum class LayoutType : int8_t {
826 Panel = 0,
828 Menu = 2,
832};
833
834enum class LayoutAlign : int8_t {
836 Left = 1,
838 Right = 3,
839};
840enum class ButProgressType : int8_t {
841 Bar = 0,
842 Ring = 1,
843};
844
846 LayoutDirection direction,
847 LayoutType type,
848 int x,
849 int y,
850 int size,
851 int em,
852 int padding,
853 const uiStyle *style);
855
856void block_layout_set_current(uiBlock *block, uiLayout *layout);
857bool block_layout_needs_resolving(const uiBlock *block);
863void block_layout_free(uiBlock *block);
864
865} // namespace blender::ui
866
867enum eUI_Item_Flag : uint16_t {
868 /* UI_ITEM_O_RETURN_PROPS = 1 << 0, */ /* UNUSED */
895 /* Even create the property split layout if there's no name to show there. */
902};
904#define UI_ITEM_NONE eUI_Item_Flag(0)
905
911bool UI_block_apply_search_filter(uiBlock *block, const char *search_filter);
912
913void uiLayoutSetFunc(uiLayout *layout, uiMenuHandleFunc handlefunc, void *argv);
914
927 uiButToolTipFunc func,
928 void *arg,
929 uiCopyArgFunc copy_arg,
930 uiFreeArgFunc free_arg);
931
938 void *arg,
939 uiCopyArgFunc copy_arg,
940 uiFreeArgFunc free_arg);
941
942void UI_menutype_draw(bContext *C, MenuType *mt, uiLayout *layout);
943
947void UI_paneltype_draw(bContext *C, PanelType *pt, uiLayout *layout);
948
951
952/* Layout create functions. */
953
954bool uiLayoutEndsWithPanelHeader(const uiLayout &layout);
955
964
974
976 uiLayout *layout, blender::StringRef name, int icon, bool highlight, bool redalert);
988void uiItemLDrag(uiLayout *layout, PointerRNA *ptr, blender::StringRef name, int icon);
989
990/* Only for testing, inspecting layouts. */
994const char *UI_layout_introspect(uiLayout *layout);
995
1001 const uiStyle *style,
1002 const int dialog_width,
1003 const eAlertIcon icon,
1004 const int icon_size);
1005uiLayout *uiItemsAlertBox(uiBlock *block, const int size, const eAlertIcon icon);
#define ENUM_OPERATORS(_type, _max)
#define C
Definition RandGen.cpp:29
@ UI_ITEM_R_EVENT
@ UI_ITEM_R_TOGGLE
@ UI_ITEM_O_DEPRESS
@ UI_ITEM_R_SPLIT_EMPTY_NAME
@ UI_ITEM_R_ICON_NEVER
@ UI_ITEM_R_TEXT_BUT_FORCE_SEMI_MODAL_ACTIVE
@ UI_ITEM_R_IMMEDIATE
@ UI_ITEM_R_FORCE_BLANK_DECORATE
@ UI_ITEM_R_COMPACT
@ UI_ITEM_R_EXPAND
@ UI_ITEM_R_NO_BG
@ UI_ITEM_R_CHECKBOX_INVERT
@ UI_ITEM_R_ICON_ONLY
@ UI_ITEM_R_FULL_EVENT
@ UI_ITEM_R_SLIDER
bool UI_block_apply_search_filter(uiBlock *block, const char *search_filter)
uiLayout * uiItemsAlertBox(uiBlock *block, const uiStyle *style, const int dialog_width, const eAlertIcon icon, const int icon_size)
NodeAssetMenuOperatorType
uiLayout * uiItemL_respect_property_split(uiLayout *layout, blender::StringRef text, int icon)
void uiLayoutSetTooltipCustomFunc(uiLayout *layout, uiButToolTipCustomFunc func, void *arg, uiCopyArgFunc copy_arg, uiFreeArgFunc free_arg)
uiPropertySplitWrapper uiItemPropertySplitWrapperCreate(uiLayout *parent_layout)
int uiLayoutListItemPaddingWidth()
void UI_paneltype_draw(bContext *C, PanelType *pt, uiLayout *layout)
LayoutSeparatorType
void uiLayoutSetTooltipFunc(uiLayout *layout, uiButToolTipFunc func, void *arg, uiCopyArgFunc copy_arg, uiFreeArgFunc free_arg)
void UI_menutype_draw(bContext *C, MenuType *mt, uiLayout *layout)
const char * UI_layout_introspect(uiLayout *layout)
void uiLayoutListItemAddPadding(uiLayout *layout)
void uiItemLDrag(uiLayout *layout, PointerRNA *ptr, blender::StringRef name, int icon)
uiBut * uiItemL_ex(uiLayout *layout, blender::StringRef name, int icon, bool highlight, bool redalert)
void uiLayoutSetFunc(uiLayout *layout, uiMenuHandleFunc handlefunc, void *argv)
bool uiLayoutEndsWithPanelHeader(const uiLayout &layout)
void(*)(void *arg) uiFreeArgFunc
void(*)(bContext *C, uiLayout *layout, void *arg1) uiMenuCreateFunc
std::string(*)(bContext *C, void *argN, blender::StringRef tip) uiButToolTipFunc
void(*)(bContext &C, uiTooltipData &data, uiBut *but, void *argN) uiButToolTipCustomFunc
void(*)(bContext *C, void *arg, int event) uiMenuHandleFunc
void *(*)(const void *arg) uiCopyArgFunc
long long int int64_t
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
btMatrix3x3 absolute() const
Return the matrix with all values non negative.
Definition btVector3.h:364
static btMatrix3x3 Add(const btMatrix3x3 &a, const btMatrix3x3 &b)
#define row_major
uint padding(uint offset, uint alignment)
int2 block_layout_resolve(uiBlock *block)
void block_layout_free(uiBlock *block)
uiLayout & block_layout(uiBlock *block, LayoutDirection direction, LayoutType type, int x, int y, int size, int em, int padding, const uiStyle *style)
void block_layout_set_current(uiBlock *block, uiLayout *layout)
bool block_layout_needs_resolving(const uiBlock *block)
VecBase< int32_t, 2 > int2
const char * name
bool fixed_size() const
virtual ~uiItem()=default
uiItem(blender::ui::ItemType type)
uiItem(const uiItem &)=default
blender::ui::ItemType type() const
void fixed_size_set(bool fixed_size)
blender::ui::ItemType type_
blender::ui::ItemInternalFlag flag_
blender::ui::LayoutDirection local_direction() const
PointerRNA op_menu_enum(const bContext *C, wmOperatorType *ot, blender::StringRefNull propname, std::optional< blender::StringRefNull > name, int icon)
void use_property_decorate_set(bool is_sep)
blender::ui::LayoutAlign alignment_
virtual void estimate_impl()
float scale_x() const
void ui_units_y_set(float height)
bool active() const
void active_default_set(bool active_default)
uiLayout * parent() const
void prop_enum(PointerRNA *ptr, PropertyRNA *prop, int value, std::optional< blender::StringRefNull > name, int icon)
void alignment_set(blender::ui::LayoutAlign alignment)
void decorator(PointerRNA *ptr, PropertyRNA *prop, int index)
PanelLayout panel(const bContext *C, blender::StringRef idname, bool default_closed)
bool enabled() const
void progress_indicator(const char *text, float factor, blender::ui::ButProgressType progress_type)
void menu_fn_argN_free(blender::StringRefNull name, int icon, uiMenuCreateFunc func, void *argN)
bContextStore * context_
void props_enum(PointerRNA *ptr, blender::StringRefNull propname)
void popover(const bContext *C, PanelType *pt, std::optional< blender::StringRef > name_opt, int icon)
uiLayout * child_items_layout_
uiBlock * absolute_block()
void scale_y_set(float scale)
uiLayout & column_flow(int number, bool align)
bool use_property_decorate() const
blender::wm::OpCallContext operator_context() const
PanelLayout panel_prop(const bContext *C, PointerRNA *open_prop_owner, blender::StringRefNull open_prop_name)
const bContextStore * context() const
void op_enum(blender::StringRefNull opname, blender::StringRefNull propname, IDProperty *properties, blender::wm::OpCallContext context, eUI_Item_Flag flag, const int active=-1)
uiBlock * block() const
uiLayout * parent_
blender::ui::LayoutAlign alignment() const
PanelLayout panel_prop_with_bool_header(const bContext *C, PointerRNA *open_prop_owner, blender::StringRefNull open_prop_name, PointerRNA *bool_prop_owner, blender::StringRefNull bool_prop_name, std::optional< blender::StringRef > label)
bContextStore * context_store() const
blender::StringRef heading() const
blender::Vector< uiItem * > items_
uiLayoutRoot * root() const
void separator_spacer()
blender::ui::EmbossType emboss_or_undefined() const
float ui_units_y() const
blender::ui::EmbossType emboss_
void operator_context_set(blender::wm::OpCallContext opcontext)
void popover_group(bContext *C, int space_id, int region_id, const char *context, const char *category)
bool variable_size() const
float scale_y() const
void label(blender::StringRef name, int icon)
float search_weight() const
uiLayout & column(bool align)
bool active_default() const
void red_alert_set(bool red_alert)
void search_weight_set(float weight)
void prop_search(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *searchptr, PropertyRNA *searchprop, PropertyRNA *item_searchpropname, std::optional< blender::StringRefNull > name, int icon, bool results_are_suggestions)
void active_set(bool active)
std::optional< int64_t > context_int_get(const blender::StringRef name) const
uiLayout & grid_flow(bool row_major, int columns_len, bool even_columns, bool even_rows, bool align)
blender::ui::EmbossType emboss() const
void separator(float factor=1.0f, LayoutSeparatorType type=LayoutSeparatorType::Auto)
void enabled_set(bool enabled)
uiLayout(blender::ui::ItemType type, uiLayoutRoot *root)
void menu_fn(blender::StringRefNull name, int icon, uiMenuCreateFunc func, void *arg)
int width() const
void activate_init_set(bool activate_init)
void context_ptr_set(blender::StringRef name, const PointerRNA *ptr)
uiLayoutRoot * root_
void ui_units_x_set(float width)
uiBut * button(blender::StringRef name, int icon, std::function< void(bContext &)> func, std::optional< blender::StringRef > tooltip=std::nullopt)
void scale_x_set(float scale)
uiLayout & row(bool align)
void popover(const bContext *C, blender::StringRef panel_type, std::optional< blender::StringRef > name_opt, int icon)
bool red_alert() const
uiLayout & split(float percentage, bool align)
uiLayout & box()
void context_copy(const bContextStore *context)
void prop_menu_enum(PointerRNA *ptr, PropertyRNA *prop, std::optional< blender::StringRefNull > name, int icon)
bool align() const
void op_enum_items(wmOperatorType *ot, const PointerRNA &ptr, PropertyRNA *prop, IDProperty *properties, blender::wm::OpCallContext context, eUI_Item_Flag flag, const EnumPropertyItem *item_array, int totitem, int active=-1)
uiLayout & list_box(uiList *ui_list, PointerRNA *actptr, PropertyRNA *actprop)
PointerRNA op_menu_hold(wmOperatorType *ot, std::optional< blender::StringRef > name, int icon, blender::wm::OpCallContext context, eUI_Item_Flag flag, const char *menu_id)
blender::Span< uiItem * > items() const
std::string heading_
void prop_with_menu(PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, std::optional< blender::StringRefNull > name, int icon, const char *menu_type)
bool activate_init() const
uiLayout & menu_pie()
void context_set_from_but(const uiBut *but)
bool use_property_split() const
void emboss_set(blender::ui::EmbossType emboss)
Panel * root_panel() const
PointerRNA op(wmOperatorType *ot, std::optional< blender::StringRef > name, int icon, blender::wm::OpCallContext context, eUI_Item_Flag flag)
void prop_with_popover(PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, std::optional< blender::StringRefNull > name, int icon, const char *panel_type)
void menu(MenuType *mt, std::optional< blender::StringRef > name, int icon)
void context_int_set(blender::StringRef name, int64_t value)
std::optional< blender::StringRefNull > context_string_get(const blender::StringRef name) const
void use_property_split_set(bool value)
void menu_contents(blender::StringRef menuname)
void prop(PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, std::optional< blender::StringRef > name_opt, int icon, std::optional< blender::StringRef > placeholder=std::nullopt)
float ui_units_x() const
const PointerRNA * context_ptr_get(const blender::StringRef name, const StructRNA *type) const
uiLayout & overlap()
virtual void resolve_impl()
void prop_tabs_enum(bContext *C, PointerRNA *ptr, PropertyRNA *prop, PointerRNA *ptr_highlight, PropertyRNA *prop_highlight, bool icon_only)
void context_string_set(blender::StringRef name, blender::StringRef value)
PointerRNA * ptr
Definition wm_files.cc:4238
wmOperatorType * ot
Definition wm_files.cc:4237
uint8_t flag
Definition wm_window.cc:145