40#include "RNA_prototypes.hh"
53#define UI_PROP_DECORATE
56#define UI_PROP_SEP_ICON_WIDTH_EXCEPTION
62#define UI_OPERATOR_ERROR_RET(_ot, _opname, return_statement) \
63 if (ot == nullptr) { \
64 ui_item_disabled(layout, _opname); \
65 RNA_warning("'%s' unknown operator", _opname); \
70#define UI_ITEM_PROP_SEP_DIVIDE 0.4f
111 TEMPLATE_COLUMN_FLOW,
225 const int len = strlen(name);
228 memcpy(namestr, name,
len);
230 namestr[
len + 1] =
'\0';
246 if (
ELEM(0, available, all)) {
250 if (all > available) {
253 return available -
pos;
256 const float width = *extra_pixel + (item * available) /
float(all);
257 *extra_pixel = width -
int(width);
264 return available -
pos;
267 const float width = *extra_pixel + (item * available) /
float(all);
268 *extra_pixel = width -
int(width);
275#define UI_ITEM_VARY_X 1
276#define UI_ITEM_VARY_Y 2
333 if (icon && !name[0]) {
334 return unit_x * (1.0f + pad_factor.
icon_only);
338 if (!icon && !name[0]) {
339 return unit_x * (1.0f + pad_factor.
icon_only);
346 float margin = pad_factor.
text;
348 margin += pad_factor.
icon;
448 if (delta_xmin > 0) {
449 litem->
x += delta_xmin;
452 litem->
w += delta_xmax;
465 switch (layout->
type) {
510 for (
int i = 0; i <
len; i++) {
539 const bool icon_only,
541 const bool show_text)
553 if (name[0] && show_text) {
554 uiDefBut(block,
UI_BTYPE_LABEL, 0, name, 0, 0,
w,
UI_UNIT_Y,
nullptr, 0.0, 0.0,
"");
560 const int cols = (
len >= 20) ? 2 : 1;
561 const int colbuts =
len / (2 * cols);
563 uint layer_active = 0;
570 for (
int b = 0;
b < cols;
b++) {
573 for (
int a = 0; a < colbuts; a++) {
574 const int layer_num = a +
b * colbuts;
575 const uint layer_flag = (1u << layer_num);
577 if (layer_used & layer_flag) {
578 if (layer_active & layer_flag) {
579 icon = ICON_LAYER_ACTIVE;
582 icon = ICON_LAYER_USED;
590 block,
ptr, prop, layer_num,
"", icon, x + butw * a, y + buth, butw, buth);
595 for (
int a = 0; a < colbuts; a++) {
596 const int layer_num = a +
len / 2 +
b * colbuts;
597 const uint layer_flag = (1u << layer_num);
599 if (layer_used & layer_flag) {
600 if (layer_active & layer_flag) {
601 icon = ICON_LAYER_ACTIVE;
604 icon = ICON_LAYER_USED;
612 block,
ptr, prop, layer_num,
"", icon, x + butw * a, y, butw, buth);
623 int totdim, dim_size[3];
637 for (
int a = 0; a <
len; a++) {
638 col = a % dim_size[0];
639 row = a / dim_size[0];
653 const float step_size = number_but->
step_size;
654 const float precision = number_but->
precision;
690 char str[3] = {
'\0'};
692 if (!icon_only && show_text) {
699 bool *boolarr =
nullptr;
703 boolarr =
static_cast<bool *
>(
MEM_callocN(
sizeof(
bool) *
len, __func__));
707 const char *str_buf = show_text ?
str :
"";
708 for (
int a = 0; a <
len; a++) {
709 if (!icon_only && show_text) {
713 icon = boolarr[a] ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT;
716 const int width_item = ((compact && type ==
PROP_BOOLEAN) ?
721 block,
ptr, prop, a, str_buf, icon, 0, 0, width_item,
UI_UNIT_Y);
724 const float step_size = number_but->
step_size;
725 const float precision = number_but->
precision;
757 if (!(current_value & enum_value)) {
758 current_value = enum_value;
761 current_value &= enum_value;
777 const bool icon_only,
781 const char *name = (!uiname || uiname[0]) ? item->
name :
"";
782 const int icon = item->
icon;
783 const int value = item->
value;
787 if (icon && name[0] && !icon_only) {
789 block, but_type, 0, icon, name, 0, 0, itemw, h,
ptr, prop, -1, 0, value,
nullptr);
792 const int w = (is_first) ? itemw :
ceilf(itemw -
U.pixelsize);
794 block, but_type, 0, icon, 0, 0,
w, h,
ptr, prop, -1, 0, value,
nullptr);
798 block, but_type, 0, name, 0, 0, itemw, h,
ptr, prop, -1, 0, value,
nullptr);
826 const bool icon_only)
864 layout_radial = layout;
879 const bool is_first = item == item_array;
881 if (!item->identifier[0]) {
894 else if (radial && layout_radial) {
905 layout, block,
ptr, prop, uiname, h, but_type, icon_only, item, is_first);
920 const bool icon_only)
933 const bool icon_only)
949 const bool use_custom_highlight = (prop_highlight !=
nullptr);
951 if (use_custom_highlight) {
957 (tab_but !=
nullptr) && (i < highlight_array_len);
958 tab_but = tab_but->
next, i++)
1002 int prop_but_width = w_hint;
1003#ifdef UI_PROP_DECORATE
1004 uiLayout *layout_prop_decorate =
nullptr;
1012 RNA_warning(
"Data is not a keymap item struct: %s. Ignoring 'full_event' option.",
1021 || use_prop_decorate
1033#ifdef UI_PROP_DECORATE
1049 w_label = w_hint / 3;
1051 uiDefBut(block,
UI_BTYPE_LABEL, 0, name, x, y, w_label, h,
nullptr, 0.0, 0.0,
"");
1066 subtype ==
PROP_DIRPATH ?
"BUTTONS_OT_directory_browse" :
1067 "BUTTONS_OT_file_browse",
1093 std::string kmi_str =
1121#ifdef UI_PROP_DECORATE
1123 if (use_prop_decorate) {
1124 uiItemL(layout_prop_decorate ? layout_prop_decorate : sub,
nullptr, ICON_BLANK1);
1139 uiBut *prevbut =
nullptr;
1144 *r_is_userdef =
false;
1152 if (but && but->rnapoin.data) {
1181 if (but->
tip ==
nullptr || but->
tip[0] ==
'\0') {
1203 uiBut *but =
uiDefBut(block,
UI_BTYPE_LABEL, 0, name, 0, 0,
w,
UI_UNIT_Y,
nullptr, 0.0, 0.0,
"");
1224 std::string operator_name;
1228 name = operator_name.c_str();
1254 block,
UI_BTYPE_BUT,
ot, context, icon, name, 0, 0,
w,
UI_UNIT_Y,
nullptr);
1267 layout->
emboss = prev_emboss;
1287 if (properties || r_opptr) {
1290 opptr->
data = properties;
1331 const char *menu_id =
static_cast<const char *
>(but->
hold_argN);
1338 uiItemL(layout,
RPT_(
"Menu Missing:"), ICON_NONE);
1339 uiItemL(layout, menu_id, ICON_NONE);
1363 const char *menu_id,
1420 const char *propname,
1427 if (prop ==
nullptr) {
1451 const char *propname,
1488 uiLayout *target, *split =
nullptr;
1518 bool last_iter =
false;
1520 for (
int i = 1; item->
identifier && !last_iter; i++, item++) {
1528 for (tmp = item + 1; tmp->
identifier; tmp++) {
1536 block,
ot, propname, properties, item_array, totitem, context,
flag);
1569 if (active == (i - 1)) {
1577 if (item != item_array && !radial && split !=
nullptr) {
1582 if (item->
icon || radial) {
1623 const char *propname,
1633 RNA_warning(
"%s '%s'",
ot ?
"operator missing srna" :
"unknown operator", opname);
1676 layout,
ot,
ptr, prop, properties, context,
flag, item_array, totitem, active);
1701 const char *propname,
1712 if (prop ==
nullptr) {
1738 const char *propname,
1739 const char *value_str)
1748 if (prop ==
nullptr) {
1794 const char *propname,
1818 const char *propname,
1842 const char *propname,
1867 const char *propname,
1913 bool is_checkbox_only =
false;
1914 if (!name[0] && !icon_only) {
1916 name =
"non-empty text";
1919 if (icon == ICON_NONE) {
1921 is_checkbox_only =
true;
1937 if (item->identifier[0]) {
1964 if (!name[0] && icon == ICON_NONE) {
1986 else if (is_checkbox_only) {
1989 else if (type ==
PROP_ENUM && !icon_only) {
2019 for (
uiLayout *parent = cur_layout; parent; parent = parent->
parent) {
2020 if (parent->heading[0]) {
2031 bool respect_prop_split)
2033 const int prev_alignment = layout->
alignment;
2039 if (respect_prop_split) {
2047 heading_layout->
heading[0] =
'\0';
2070 return layout_split;
2081 const char *placeholder)
2096 bool use_prop_sep_split_label = use_prop_sep;
2099#ifdef UI_PROP_DECORATE
2100 struct DecorateInfo {
2101 bool use_prop_decorate;
2106 DecorateInfo ui_decorate{};
2125 const bool no_icon = (toggle == 0);
2138 flag &= ~UI_ITEM_R_CHECKBOX_INVERT;
2145 if (use_prop_sep ==
false) {
2150 if (use_prop_sep ==
false) {
2159 if (use_prop_sep ==
false) {
2165 if (no_icon ==
false) {
2166 if (icon == ICON_NONE) {
2179 icon = ICON_CHECKBOX_DEHLT;
2181 else if (is_array) {
2183 ICON_CHECKBOX_DEHLT;
2194 icon = ICON_CHECKBOX_DEHLT;
2197 icon = (enum_value & value) ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT;
2201 icon = (enum_value == value) ? ICON_RADIOBUT_ON : ICON_RADIOBUT_OFF;
2208#ifdef UI_PROP_SEP_ICON_WIDTH_EXCEPTION
2210 if (type ==
PROP_BOOLEAN && (icon == ICON_NONE) && !icon_only) {
2211 use_prop_sep_split_label =
false;
2214 use_split_empty_name =
true;
2237 uiBut *but =
nullptr;
2244#ifdef UI_PROP_DECORATE
2245 if (ui_decorate.use_prop_decorate) {
2247 layout_row->
space = 0;
2252 if ((name[0] ==
'\0') && !use_split_empty_name) {
2256 if (heading_layout) {
2263 bool label_added =
false;
2265 layout_sub->
space = 0;
2267 if (!use_prop_sep_split_label) {
2272 char str[2] = {
'\0'};
2273 for (
int a = 0; a <
len; a++) {
2275 const bool use_prefix = (a == 0 && name[0]);
2277 char *s = name_with_suffix;
2286 use_prefix ? name_with_suffix :
str,
2296 but->
drawflag &= ~UI_BUT_TEXT_LEFT;
2302 but =
uiDefBut(block,
UI_BTYPE_LABEL, 0, name, 0, 0,
w,
UI_UNIT_Y,
nullptr, 0.0, 0.0,
"");
2304 but->
drawflag &= ~UI_BUT_TEXT_LEFT;
2309 if (!label_added && heading_layout) {
2329 if (use_prop_sep_split_label) {
2337#ifdef UI_PROP_DECORATE
2338 if (ui_decorate.use_prop_decorate) {
2340 ui_decorate.layout->space = 0;
2350 else if (heading_layout) {
2358 if (inside_prop_sep) {
2380 !use_prop_sep_split_label);
2384 if (icon && name[0] && !icon_only) {
2386 block,
UI_BTYPE_ROW, 0, icon, name, 0, 0,
w, h,
ptr, prop, -1, 0, value,
nullptr);
2390 block,
UI_BTYPE_ROW, 0, icon, 0, 0,
w, h,
ptr, prop, -1, 0, value,
nullptr);
2393 uiDefButR_prop(block,
UI_BTYPE_ROW, 0, name, 0, 0,
w, h,
ptr, prop, -1, 0, value,
nullptr);
2402 but =
ui_item_with_label(layout, block, name, icon,
ptr, prop, index, 0, 0,
w, h,
flag);
2404 if (is_id_name_prop) {
2413 bool results_are_suggestions =
false;
2417 results_are_suggestions =
true;
2436 const float step_size = number_but->
step_size;
2437 const float precision = number_but->
precision;
2474 if (but && no_icon) {
2475 if ((icon == ICON_NONE) && (but->
icon != ICON_NONE)) {
2496#ifdef UI_PROP_DECORATE
2497 if (ui_decorate.use_prop_decorate) {
2498 uiBut *but_decorate = ui_decorate.but ? ui_decorate.but->
next :
2502 layout_col->
space = 0;
2506 for (i = 0; i < ui_decorate.len && but_decorate; i++) {
2518 but_decorate = but->
next;
2522 layout->
flag &= ~UI_ITEM_PROP_DECORATE_NO_PAD;
2527 layout->
emboss = prev_emboss;
2531 if (but && icon_only) {
2538 const char *propname,
2562 const char *panel_type)
2575 if (but ==
nullptr) {
2578 RNA_warning(
"property could not use a popover: %s.%s (%s)",
2593 const char *menu_type)
2606 if (but ==
nullptr) {
2609 RNA_warning(
"property could not use a menu: %s.%s (%s)",
2634 if (prop ==
nullptr) {
2669 RNA_warning(
"enum property value not found: %s", value);
2674 if (item[a].identifier[0] ==
'\0') {
2678 if (item[a].value == ivalue) {
2679 const char *item_name = name ?
2697 const char *propname,
2737 for (
int i = 0; i < totitem; i++) {
2738 if (item[i].identifier[0]) {
2748 uiItemL(column, item[i].name, ICON_NONE);
2780 if (ptype == srna) {
2801 const bool results_are_suggestions)
2804 bool has_search_fn =
false;
2819 if (has_search_fn || searchprop) {
2875 but->
flag &= ~UI_BUT_DISABLED;
2893 bool results_are_suggestions)
2901 RNA_warning(
"Property %s.%s must be a pointer, string or enum",
2907 RNA_warning(
"search collection property is not a collection type: %s.%s",
2914 if (icon == ICON_NONE) {
2930 if (use_prop_sep ==
false) {
2940 uiBut *but =
ui_item_with_label(layout, block, name, icon,
ptr, prop, 0, 0, 0,
w, h, 0);
2947 const char *propname,
2949 const char *searchpropname,
2961 RNA_warning(
"search collection property not found: %s.%s",
3008 if (icon == ICON_NONE && force_menu) {
3011 else if (force_menu) {
3012 pad_factor.
text = 1.85;
3016 pad_factor.
text = 0.75f;
3023 if (heading_layout) {
3028 if (name[0] && icon) {
3033 if (force_menu && name[0]) {
3038 but =
uiDefMenuBut(block, func, arg, name, 0, 0,
w, h, tip);
3044 but->
poin = (
char *)but;
3090 if (mt ==
nullptr) {
3100 if (mt ==
nullptr) {
3162 TIP_(
"Animate property"));
3179 if (
ptr && propname) {
3208 const bool ok = (pt->
poll ==
nullptr) || pt->
poll(C, pt);
3213 panel.runtime = &panel_runtime;
3215 panel.layout = layout;
3231 uiLayout *layout,
const bContext *C,
const char *panel_type,
const char *name,
int icon)
3234 if (pt ==
nullptr) {
3235 RNA_warning(
"Panel type not found '%s'", panel_type);
3245 const char *context,
3246 const char *category)
3249 if (st ==
nullptr) {
3254 if (art ==
nullptr) {
3255 RNA_warning(
"region type not found %d", region_id);
3261 if (pt->parent_id[0] ==
'\0') {
3262 if (
STREQ(pt->context, context)) {
3263 if ((*category ==
'\0') ||
STREQ(pt->category, category)) {
3264 if (pt->poll ==
nullptr || pt->poll(C, pt)) {
3290 if (icon && name[0]) {
3292 block,
UI_BTYPE_LABEL, 0, icon, name, 0, 0,
w,
UI_UNIT_Y,
nullptr, 0.0, 0.0,
nullptr);
3296 block,
UI_BTYPE_LABEL, 0, icon, 0, 0,
w,
UI_UNIT_Y,
nullptr, 0.0, 0.0,
nullptr);
3299 but =
uiDefBut(block,
UI_BTYPE_LABEL, 0, name, 0, 0,
w,
UI_UNIT_Y,
nullptr, 0.0, 0.0,
nullptr);
3306 but->
drawflag &= ~UI_BUT_TEXT_LEFT;
3323 uiLayout *layout,
const char *name,
int icon,
const bool highlight,
const bool redalert)
3358 return split_wrapper;
3451 const bool has_text = text && text[0];
3458 else if (has_text) {
3495 printf(
"Error: separator_spacer() not supported in popups.\n");
3500 printf(
"Error: separator_spacer() only supported in horizontal blocks.\n");
3525 ui_item_menu(layout, name, icon, func, arg,
nullptr,
"",
false);
3535 ui_item_menu(layout, name, icon, func, argN, argN,
"",
false);
3598 const char *propname,
3606 std::string operator_name;
3607 if (name ==
nullptr) {
3609 name = operator_name.c_str();
3616 MenuItemLevel *lvl = MEM_new<MenuItemLevel>(
"MenuItemLevel");
3634 but->
opptr = MEM_new<PointerRNA>(
"uiButOpPtr");
3638 *r_opptr = *but->
opptr;
3654 const char *propname,
3665 RNA_warning(
"operator missing srna '%s'", opname);
3675 const char *propname,
3700 MenuItemLevel *lvl = MEM_new<MenuItemLevel>(
"MenuItemLevel");
3742 layout, C, block,
ptr, prop, ptr_highlight, prop_highlight,
nullptr,
UI_UNIT_Y, icon_only);
3755 bool min_size_flag =
true;
3766 const bool is_item_last = (item == item_last);
3772 litem->
h = std::max(itemh, litem->
h);
3774 if (!is_item_last) {
3775 litem->
w += litem->
space;
3779 if (min_size_flag) {
3795 int last_free_item_idx = -1;
3796 int x, neww, newtotw, itemw, minw, itemh, offset;
3797 int freew, fixedx, freex,
flag = 0, lastw = 0;
3801 const int y = litem->
y;
3817 w -= (tot - 1) * litem->
space;
3835 const bool is_item_last = (item == item_last);
3840 if (
w - lastw > 0) {
3842 itemw, x, totw,
w - lastw, is_item_last, litem->
alignment, &extra_pixel);
3861 if ((neww < minw || min_flag) &&
w != 0) {
3873 item->flag &= ~UI_ITEM_AUTO_FIXED_SIZE;
3890 const bool is_item_last = (item == item_last);
3900 minw, fixedx, fixedw,
min_ii(
w, fixedw), is_item_last, litem->
alignment, &extra_pixel);
3906 itemw, freex, freew,
w - fixedw, is_item_last, litem->
alignment, &extra_pixel);
3908 last_free_item_idx = item_idx;
3914 if (freew + fixedw > 0 && freew + fixedw <
w) {
3915 offset =
w - (fixedw + freew);
3919 if (freew + fixedw > 0 && freew + fixedw <
w) {
3920 offset = (
w - (fixedw + freew)) / 2;
3928 if (!is_item_last) {
3934 int extra_pixel_move = litem->
w - (x - litem->
x);
3941 for (
uiItem *item : items_after_last_free) {
3942 ui_item_move(item, extra_pixel_move, extra_pixel_move);
3946 litem->
w = x - litem->
x;
3947 litem->
h = litem->
y -
y;
3957 if (next_item ==
nullptr) {
3983 bool min_size_flag =
true;
3994 litem->
w = std::max(litem->
w, itemw);
3997 const uiItem *next_item = (item == litem->
items.
last()) ?
nullptr : *(iter + 1);
3999 litem->
h += spaces_num * litem->
space;
4002 if (min_size_flag) {
4009 const int x = litem->
x;
4020 const uiItem *next_item = (item == litem->
items.
last()) ?
nullptr : *(iter + 1);
4022 y -= spaces_num * litem->
space;
4029 litem->
h = litem->
y -
y;
4040 printf(
"Warning: Pie menus with more than %i items are currently unsupported\n",
4083 const int x = litem->
x;
4084 const int y = litem->
y;
4086 int minx =
x, miny =
y, maxx =
x, maxy =
y;
4098 const float factor[2] = {
4099 (vec[0] > 0.01f) ? 0.0f : ((vec[0] < -0.01f) ? -1.0f : -0.5f),
4100 (vec[1] > 0.99f) ? 0.0f : ((vec[1] < -0.99f) ? -1.0f : -0.5f),
4105 bool use_dir =
true;
4133 x + (vec[0] * pie_radius) + (factor[0] * itemw),
4134 y + (vec[1] * pie_radius) + (factor[1] * itemh),
4138 minx =
min_ii(minx, x + (vec[0] * pie_radius) - (itemw / 2));
4139 maxx =
max_ii(maxx, x + (vec[0] * pie_radius) + (itemw / 2));
4140 miny =
min_ii(miny, y + (vec[1] * pie_radius) - (itemh / 2));
4141 maxy =
max_ii(maxy, y + (vec[1] * pie_radius) + (itemh / 2));
4146 litem->
w = maxx - minx;
4147 litem->
h = maxy - miny;
4162 int itemh, itemw,
x,
y;
4169 item, x - itemw / 2, y +
UI_SCALE_FAC * (
U.pie_menu_threshold + 9.0f), itemw, itemh);
4215 float(litem->
y + litem->
h) - offset,
4248 litem->
w += 2 * boxspace;
4249 litem->
h += 2 * boxspace;
4262 const int w = litem->
w;
4263 const int h = litem->
h;
4265 litem->
x += boxspace;
4266 litem->
y -= boxspace;
4269 litem->
w -= 2 * boxspace;
4272 litem->
h -= 2 * boxspace;
4277 litem->
x -= boxspace;
4278 litem->
y -= boxspace;
4281 litem->
w += 2 * boxspace;
4284 litem->
h += 2 * boxspace;
4288 uiBut *but = box->roundbox;
4300 int itemw, itemh, maxw = 0;
4307 maxw = std::max(maxw, itemw);
4333 const int emh = toth / flow->
totcol;
4343 maxw =
max_ii(itemw, maxw);
4347 x += maxw + litem->
space;
4356 litem->
h = litem->
y - miny;
4363 int col, emh, itemw, itemh;
4378 emh = toth / flow->
totcol;
4401 const int remaining_width = litem->
w - (x - litem->
x);
4403 const int remaining_columns = flow->
totcol -
col;
4404 w = (remaining_width - remaining_width_between_columns) / remaining_columns;
4408 litem->
h = litem->
y - miny;
4449 float tot_w = 0.0f, tot_h = 0.0f;
4450 float global_avg_w = 0.0f, global_totweight_w = 0.0f;
4451 int global_max_h = 0;
4455 results->
tot_w ==
nullptr));
4458 results->
tot_h ==
nullptr));
4479 for (
const uiItem *item : items) {
4483 global_avg_w +=
float(item_w * item_w);
4484 global_totweight_w +=
float(item_w);
4485 global_max_h =
max_ii(global_max_h, item_h);
4493 avg_w[index_col] +=
float(item_w * item_w);
4494 totweight_w[index_col] +=
float(item_w);
4496 max_h[index_row] =
max_ii(max_h[index_row], item_h);
4506 global_avg_w /= global_totweight_w;
4508 for (i = 0; i <
parameters->tot_columns; i++) {
4509 avg_w[i] /= totweight_w[i];
4522 tot_h = global_max_h *
parameters->tot_columns;
4555 for (
int row = 0; row <
parameters->tot_rows; row++) {
4574 if (results->
tot_w) {
4577 if (results->
tot_h) {
4599 input.litem_w = litem->
w;
4600 input.litem_x = litem->
x;
4601 input.litem_y = litem->
y;
4602 input.space_x = space_x;
4603 input.space_y = space_y;
4606 output.global_avg_w = &avg_w;
4607 output.global_max_h = &max_h;
4611 litem->
w = litem->
h = 0;
4624 if (avg_w == 0.0f) {
4639 const int step = modulo ? modulo : 1;
4657 if (modulo && gflow->
tot_rows % modulo != 0) {
4689 input.litem_w = litem->
w;
4690 input.litem_x = litem->
x;
4691 input.litem_y = litem->
y;
4692 input.space_x = space_x;
4693 input.space_y = space_y;
4697 output.
tot_w = &tot_w;
4698 output.tot_h = &tot_h;
4712 litem->
w = litem->
h = 0;
4732 input.litem_w = litem->
w;
4733 input.litem_x = litem->
x;
4734 input.litem_y = litem->
y;
4735 input.space_x = space_x;
4736 input.space_y = space_y;
4741 output.cos_y_array = cos_y.
data();
4742 output.widths_array = widths.
data();
4743 output.heights_array = heights.
data();
4753 const int w = widths[
col];
4754 const int h = heights[row];
4763 litem->
h = litem->
y - cos_y[gflow->
tot_rows - 1];
4765 litem->
y = litem->
y - litem->
h;
4777 int itemx, itemy, itemw, itemh;
4781 minx =
min_ii(minx, itemx);
4782 miny =
min_ii(miny, itemy);
4784 litem->
w = std::max(litem->
w, itemx + itemw);
4785 litem->
h = std::max(litem->
h, itemy + itemh);
4794 float scalex = 1.0f, scaley = 1.0f;
4795 int x,
y, newx, newy, itemx, itemy, itemh, itemw;
4806 minx =
min_ii(minx, itemx);
4807 miny =
min_ii(miny, itemy);
4809 totw =
max_ii(totw, itemx + itemw);
4810 toth =
max_ii(toth, itemy + itemh);
4816 if (litem->
w && totw > 0) {
4819 if (litem->
h && toth > 0) {
4824 y = litem->
y - scaley * toth;
4830 if (scalex != 1.0f) {
4831 newx = (itemx - minx) * scalex;
4832 itemw = (itemx - minx + itemw) * scalex - newx;
4833 itemx = minx + newx;
4836 if (scaley != 1.0f) {
4837 newy = (itemy - miny) * scaley;
4838 itemh = (itemy - miny + itemh) * scaley - newy;
4839 itemy = miny + newy;
4845 litem->
w = scalex * totw;
4846 litem->
h = litem->
y -
y;
4847 litem->
x = x + litem->
w;
4855 litem->
flag &= ~UI_ITEM_FIXED_SIZE;
4861 float extra_pixel = 0.0f;
4869 const int y = litem->
y;
4871 const float percentage = (split->percentage == 0.0f) ? 1.0f /
float(tot) : split->percentage;
4873 const int w = (litem->
w - (tot - 1) * litem->
space);
4874 int colw =
w * percentage;
4875 colw = std::max(colw, 0);
4879 const bool is_item_last = (item == item_last);
4886 if (!is_item_last) {
4887 const float width = extra_pixel + (
w -
int(
w * percentage)) / (
float(tot) - 1);
4888 extra_pixel = width -
int(width);
4890 colw = std::max(colw, 0);
4896 litem->
w = x - litem->
x;
4897 litem->
h = litem->
y -
y;
4912 litem->
w = std::max(itemw, litem->
w);
4913 litem->
h = std::max(itemh, litem->
h);
4920 const int x = litem->
x;
4921 const int y = litem->
y;
4928 litem->
h = std::max(litem->
h, itemh);
4932 litem->
y = y - litem->
h;
4938 litem->
align = align;
4945 litem->
w = layout->
w;
4970 uiLayout *litem = MEM_new<uiLayout>(__func__);
4984 const char *open_prop_name)
4988 const bool is_real_open =
RNA_boolean_get(open_prop_owner, open_prop_name);
4990 const bool is_open = is_real_open || search_filter_active;
5005 const int icon = is_open ? ICON_DOWNARROW_HLT : ICON_RIGHTARROW;
5008 block,
UI_BTYPE_LABEL, 0, icon,
"", 0, 0, width,
UI_UNIT_Y,
nullptr, 0.0f, 0.0f,
"");
5010 panel_layout.header = row;
5014 return panel_layout;
5022 panel_layout.body = body_litem;
5024 return panel_layout;
5030 const char *open_prop_name,
5042 const bool default_closed)
5056 const bool default_closed,
5083 uiLayout *litem = MEM_new<uiLayout>(__func__);
5147 box->roundbox =
uiDefBut(layout->
root->
block, type, 0,
"", 0, 0, 0, 0,
nullptr, 0.0, 0.0,
"");
5168 uiLayout *litem = MEM_new<uiLayout>(__func__);
5204 uiBut *but = box->roundbox;
5221 uiLayout *litem = MEM_new<uiLayout>(__func__);
5241 uiLayout *litem = MEM_new<uiLayout>(__func__);
5258 split->percentage = percentage;
5302 layout->
scale[0] = scale;
5307 layout->
scale[1] = scale;
5312 layout->
units[0] = unit;
5317 layout->
units[1] = unit;
5402 return layout->
scale[0];
5407 return layout->
scale[1];
5412 return layout->
units[0];
5417 return layout->
units[1];
5440 block,
UI_BTYPE_SEPR, 0,
"", 0, 0,
uiLayoutListItemPaddingWidth(), 0,
nullptr, 0.0, 0.0,
"");
5457 if ((block->
panel !=
nullptr) && (block->
panel->
type !=
nullptr)) {
5475 if (but->
optype !=
nullptr) {
5481 if (but->
rnaprop !=
nullptr) {
5485#ifdef PROPERTY_SEARCH_USE_TOOLTIPS
5501 if (items_array ==
nullptr) {
5506 for (
int i = 0; i < items_len; i++) {
5508 if (items_array[i].name ==
nullptr) {
5533 for (
uiBut *but : group.buttons) {
5553 bool has_result =
false;
5559 for (
uiBut *but : group.buttons) {
5569 if (search_filter ==
nullptr || search_filter[0] ==
'\0') {
5575 if (panel !=
nullptr) {
5585 const bool has_result = (panel_label_matches) ?
5589 if (panel !=
nullptr) {
5618 if (scale[0] != 0.0f) {
5623 if (scale[1] != 0.0f) {
5647 if (litem->
scale[0] != 0.0f || litem->
scale[1] != 0.0f) {
5651 switch (litem->
type) {
5690 if (litem->
units[0] > 0) {
5693 if (litem->
units[1] > 0) {
5705#ifndef USE_UIBUT_SPATIAL_ALIGN
5722 if (!box->roundbox->alignnr) {
5768 switch (litem->
type) {
5868 block,
UI_BTYPE_SEPR, 0,
"", 0, 0, root->
padding, root->
padding,
nullptr, 0.0, 0.0,
"");
5885 root->
style = style;
5886 root->
block = block;
5890 uiLayout *layout = MEM_new<uiLayout>(__func__);
5898 layout->
root = root;
5983 for (
uiItem *item : child_list) {
5987 if (bitem->
but == but) {
6009 uiButtonItem *bitem = static_cast<uiButtonItem *>(item);
6010 return (bitem->but == but);
6022 static_cast<const uiBut *
>(old_but_ptr));
6027 bitem->
but = new_but;
6037 layout->
flag &= ~UI_ITEM_FIXED_SIZE;
6124 bool arg_used =
false;
6129 if (copy_arg !=
nullptr && arg_used) {
6130 arg = copy_arg(arg);
6147 if (free_arg !=
nullptr && !arg_used) {
6169 if (r_prop !=
nullptr) {
6176 if ((
ot !=
nullptr) && (r_prop !=
nullptr)) {
6212 printf(
"%s: opening menu \"%s\"\n", __func__, mt->
idname);
6304 if (child_pt->
poll ==
nullptr || child_pt->
poll(C, child_pt)) {
6374 "'rna':'%s.%s[%d]', ",
6385 for (
const uiItem *item : items) {
6389#define CASE_ITEM(id) \
6391 const char *id_str = STRINGIFY(id); \
6392 BLI_dynstr_append(ds, "'type': '"); \
6394 BLI_dynstr_append(ds, id_str + 5); \
6395 BLI_dynstr_append(ds, "', "); \
6400 switch (item->type) {
6419 switch (item->type) {
6431 if (item != items.
last()) {
6459 const int dialog_width,
6461 const int icon_size)
6468 const float split_factor = (
float(icon_size) + icon_padding) /
bContextStore * CTX_store_add_all(blender::Vector< std::unique_ptr< bContextStore > > &contexts, const bContextStore *context)
bContextStore * CTX_store_add(blender::Vector< std::unique_ptr< bContextStore > > &contexts, blender::StringRefNull name, const PointerRNA *ptr)
ARegion * CTX_wm_region_popup(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
Main * CTX_data_main(const bContext *C)
const bContextStore * CTX_store_get(const bContext *C)
void CTX_store_set(bContext *C, const bContextStore *store)
ARegion * CTX_wm_region(const bContext *C)
void IDP_FreeProperty(IDProperty *prop)
IDProperty * IDP_CopyProperty(const IDProperty *prop) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
LayoutPanelState * BKE_panel_layout_panel_state_ensure(Panel *panel, const char *idname, bool default_closed)
SpaceType * BKE_spacetype_from_id(int spaceid)
ARegionType * BKE_regiontype_from_id(const SpaceType *st, int regionid)
void BKE_panel_free(Panel *panel)
Panel * BKE_panel_new(PanelType *panel_type)
A dynamically sized string ADT.
char * BLI_dynstr_get_cstring(const DynStr *ds) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
DynStr * BLI_dynstr_new(void) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_dynstr_free(DynStr *ds) ATTR_NONNULL()
void BLI_dynstr_appendf(DynStr *__restrict ds, const char *__restrict format,...) ATTR_PRINTF_FORMAT(2
void BLI_dynstr_append(DynStr *__restrict ds, const char *cstr) ATTR_NONNULL()
void BLI_kdtree_nd_ free(KDTree *tree)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
BLI_INLINE float BLI_rctf_size_y(const struct rctf *rct)
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
#define STRNCPY(dst, src)
#define STRNCPY_RLEN(dst, src)
int char * BLI_strcasestr(const char *s, const char *find) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
#define ENUM_OPERATORS(_type, _max)
#define POINTER_FROM_INT(i)
#define UNUSED_VARS_NDEBUG(...)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define POINTER_AS_INT(i)
#define CTX_IFACE_(context, msgid)
#define RGN_ALIGN_ENUM_FROM_MASK(align)
@ RGN_FLAG_SEARCH_FILTER_ACTIVE
static void split(const char *text, const char *seps, char ***str, int *count)
Read Guarded memory(de)allocation.
#define RNA_STRUCT_BEGIN(sptr, prop)
#define RNA_warning(format,...)
eStringPropertySearchFlag
@ PROP_STRING_SEARCH_SUGGESTION
constexpr PointerRNA PointerRNA_NULL
void UI_but_func_set(uiBut *but, std::function< void(bContext &)> func)
void * but_func_argN_copy(const void *argN)
void but_func_argN_free(void *argN)
void UI_but_disable(uiBut *but, const char *disabled_hint)
void(*)(void *arg) uiFreeArgFunc
uiBut * uiDefIconTextMenuBut(uiBlock *block, uiMenuCreateFunc func, void *arg, int icon, blender::StringRef str, int x, int y, short width, short height, const char *tip)
@ UI_EMBOSS_NONE_OR_STATUS
std::string(*)(bContext *C, void *argN, const char *tip) uiButToolTipFunc
void UI_popup_menu_but_set(uiPopupMenu *pup, ARegion *butregion, uiBut *but)
@ UI_BLOCK_NO_ACCELERATOR_KEYS
bool UI_block_can_add_separator(const uiBlock *block)
void UI_but_func_rename_full_set(uiBut *but, std::function< void(std::string &new_name)> rename_full_func)
int int UI_fontstyle_string_width_with_block_aspect(const uiFontStyle *fs, const char *str, float aspect) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
void(*)(bContext *C, uiLayout *layout, void *arg1) uiMenuCreateFunc
void UI_but_placeholder_set(uiBut *but, const char *placeholder_text) ATTR_NONNULL(1)
void UI_but_func_search_set_results_are_suggestions(uiBut *but, bool value)
void UI_but_func_tooltip_set(uiBut *but, uiButToolTipFunc func, void *arg, uiFreeArgFunc free_arg)
@ UI_BUT2_FORCE_SEMI_MODAL_ACTIVE
void UI_popup_dummy_panel_set(ARegion *region, uiBlock *block)
uiBut * uiDefBut(uiBlock *block, int type, int retval, blender::StringRef str, int x, int y, short width, short height, void *poin, float min, float max, const char *tip)
void UI_but_func_search_set(uiBut *but, uiButSearchCreateFn search_create_fn, uiButSearchUpdateFn search_update_fn, void *arg, bool free_arg, uiFreeArgFunc search_arg_free_fn, uiButHandleFunc search_exec_fn, void *active)
bool UI_but_is_userdef(const uiBut *but)
uiBut * uiDefIconButR_prop(uiBlock *block, int type, int retval, int icon, int x, int y, short width, short height, PointerRNA *ptr, PropertyRNA *prop, int index, float min, float max, const char *tip)
const uiStyle * UI_style_get_dpi()
@ UI_BUT_PROGRESS_TYPE_BAR
@ UI_BUT_PROGRESS_TYPE_RING
void UI_popup_menu_end(bContext *C, uiPopupMenu *pup)
void UI_but_drawflag_enable(uiBut *but, int flag)
uiBut * uiDefIconTextButO_ptr(uiBlock *block, int type, wmOperatorType *ot, wmOperatorCallContext opcontext, int icon, blender::StringRef str, int x, int y, short width, short height, const char *tip)
uiBut * uiDefIconBut(uiBlock *block, int type, int retval, int icon, int x, int y, short width, short height, void *poin, float min, float max, const char *tip)
void UI_but_flag2_enable(uiBut *but, int flag)
void UI_block_func_handle_set(uiBlock *block, uiBlockHandleFunc func, void *arg)
uiBut * uiDefIconTextBut(uiBlock *block, int type, int retval, int icon, blender::StringRef str, int x, int y, short width, short height, void *poin, float min, float max, const char *tip)
uiBut * uiDefButO_ptr(uiBlock *block, int type, wmOperatorType *ot, wmOperatorCallContext opcontext, blender::StringRef str, int x, int y, short width, short height, const char *tip)
void *(*)(const void *argN) uiButArgNCopy
void(*)(void *argN) uiButArgNFree
uiPopupMenu * UI_popup_menu_begin(bContext *C, const char *title, int icon) ATTR_NONNULL()
void UI_but_type_set_menu_from_pulldown(uiBut *but)
uiBut * uiDefIconButO(uiBlock *block, int type, const char *opname, wmOperatorCallContext opcontext, int icon, int x, int y, short width, short height, const char *tip)
uiBut * uiDefButAlert(uiBlock *block, int icon, int x, int y, short width, short height)
uiBut * uiDefIconButO_ptr(uiBlock *block, int type, wmOperatorType *ot, wmOperatorCallContext opcontext, int icon, int x, int y, short width, short height, const char *tip)
PointerRNA * UI_but_operator_ptr_ensure(uiBut *but)
uiLayout * UI_popup_menu_layout(uiPopupMenu *pup)
void UI_but_drawflag_disable(uiBut *but, int flag)
void UI_block_align_begin(uiBlock *block)
uiBut * uiDefMenuBut(uiBlock *block, uiMenuCreateFunc func, void *arg, blender::StringRef str, int x, int y, short width, short height, const char *tip)
void UI_butstore_register(uiButStore *bs_handle, uiBut **but_p)
void(*)(bContext *C, void *arg, int event) uiMenuHandleFunc
uiButStore * UI_butstore_create(uiBlock *block)
uiBut * uiDefIconTextButR_prop(uiBlock *block, int type, int retval, int icon, const char *str, int x, int y, short width, short height, PointerRNA *ptr, PropertyRNA *prop, int index, float min, float max, const char *tip)
void UI_block_direction_set(uiBlock *block, char direction)
void UI_but_func_hold_set(uiBut *but, uiButHandleHoldFunc func, void *argN)
void UI_butstore_free(uiBlock *block, uiButStore *bs_handle)
uiBut * uiDefButR_prop(uiBlock *block, int type, int retval, const char *str, int x, int y, short width, short height, PointerRNA *ptr, PropertyRNA *prop, int index, float min, float max, const char *tip)
void UI_block_flag_enable(uiBlock *block, int flag)
void UI_but_drag_set_id(uiBut *but, ID *id)
void *(*)(const void *arg) uiCopyArgFunc
uiBut * uiDefIconMenuBut(uiBlock *block, uiMenuCreateFunc func, void *arg, int icon, int x, int y, short width, short height, const char *tip)
void UI_but_unit_type_set(uiBut *but, int unit_type)
void UI_but_flag_enable(uiBut *but, int flag)
uiBut * uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int index, const char *name, int icon, int x, int y, int width, int height)
@ UI_BUT_HAS_TOOLTIP_LABEL
@ UI_ITEM_R_SPLIT_EMPTY_NAME
@ UI_ITEM_R_TEXT_BUT_FORCE_SEMI_MODAL_ACTIVE
@ UI_ITEM_R_FORCE_BLANK_DECORATE
@ UI_ITEM_R_CHECKBOX_INVERT
@ UI_BUT_ACTIVATE_ON_INIT
void UI_block_align_end(uiBlock *block)
@ WM_OP_INVOKE_REGION_WIN
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
constexpr const T & last(const int64_t n=0) const
constexpr bool is_empty() const
std::reverse_iterator< T * > rbegin()
int64_t remove_if(Predicate &&predicate)
void append(const T &value)
const T & last(const int64_t n=0) const
MutableSpan< T > as_mutable_span()
std::reverse_iterator< T * > rend()
local_group_size(16, 16) .push_constant(Type b
bool ED_id_rename(Main &bmain, ID &id, blender::StringRefNull name)
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
void ui_but_update(uiBut *but)
void ui_def_but_icon_clear(uiBut *but)
void ui_block_add_dynamic_listener(uiBlock *block, void(*listener_func)(const wmRegionListenerParams *params))
void ui_but_rna_menu_convert_to_panel_type(uiBut *but, const char *panel_type)
uiBut * ui_but_change_type(uiBut *but, eButType new_type)
void ui_but_add_shortcut(uiBut *but, const char *shortcut_str, const bool do_strip)
void ui_but_rna_menu_convert_to_menu_type(uiBut *but, const char *menu_type)
const char ui_radial_dir_order[8]
bool ui_but_can_align(const uiBut *but)
int ui_but_align_opposite_to_area_align_get(const ARegion *region)
void ui_but_anim_decorate_cb(bContext *C, void *arg_but, void *)
bool ui_block_is_pie_menu(const uiBlock *block) ATTR_WARN_UNUSED_RESULT
bool ui_block_is_popup_any(const uiBlock *block) ATTR_WARN_UNUSED_RESULT
ARegion * ui_searchbox_create_generic(bContext *C, ARegion *butregion, uiButSearch *search_but)
void ui_panel_tag_search_filter_match(Panel *panel)
bool ui_block_is_menu(const uiBlock *block) ATTR_WARN_UNUSED_RESULT
std::optional< blender::StringRefNull > UI_asset_shelf_idname_from_button_context(const uiBut *but)
void ui_pie_menu_level_create(uiBlock *block, wmOperatorType *ot, const char *propname, IDProperty *properties, const EnumPropertyItem *items, int totitem, wmOperatorCallContext context, eUI_Item_Flag flag)
@ UI_SEARCH_FILTER_NO_MATCH
void ui_but_pie_dir(RadialDirection dir, float vec[2])
void ui_rna_collection_search_update_fn(const bContext *C, void *arg, const char *str, uiSearchItems *items, bool is_first)
static void ui_litem_estimate_column(uiLayout *litem, bool is_box)
void uiItemBooleanO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, int value)
static uiBut * uiItemFullO_ptr_ex(uiLayout *layout, wmOperatorType *ot, const char *name, int icon, IDProperty *properties, const wmOperatorCallContext context, const eUI_Item_Flag flag, PointerRNA *r_opptr)
static int ui_litem_min_width(int itemw)
void uiItemEnumR(uiLayout *layout, const char *name, int icon, PointerRNA *ptr, const char *propname, int value)
static void ui_litem_layout_column_flow(uiLayout *litem)
bool uiLayoutGetActivateInit(uiLayout *layout)
uiLayout * uiLayoutColumnFlow(uiLayout *layout, int number, bool align)
Panel * uiLayoutGetRootPanel(uiLayout *layout)
void uiLayoutSetActive(uiLayout *layout, bool active)
static void ui_litem_init_from_parent(uiLayout *litem, uiLayout *layout, int align)
static void ui_item_flag(uiLayout *litem, int flag)
void uiItemFullO_ptr(uiLayout *layout, wmOperatorType *ot, const char *name, const int icon, IDProperty *properties, const wmOperatorCallContext context, const eUI_Item_Flag flag, PointerRNA *r_opptr)
bool uiLayoutGetPropDecorate(uiLayout *layout)
int uiLayoutGetAlignment(uiLayout *layout)
void uiLayoutSetUnitsY(uiLayout *layout, float unit)
uiLayout * uiLayoutBox(uiLayout *layout)
void uiItemsEnumR(uiLayout *layout, PointerRNA *ptr, const char *propname)
static void ui_litem_layout_column(uiLayout *litem, bool is_box, bool is_menu)
void uiLayoutSetEnabled(uiLayout *layout, bool enabled)
void uiItemR(uiLayout *layout, PointerRNA *ptr, const char *propname, const eUI_Item_Flag flag, const char *name, int icon)
static void ui_item_estimate(uiItem *item)
static void ui_litem_layout_overlap(uiLayout *litem)
static bool button_matches_search_filter(uiBut *but, const char *search_filter)
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)
static bool button_group_has_search_match(const uiButtonGroup &group, const char *search_filter)
static void ui_item_rna_size(uiLayout *layout, const char *name, int icon, PointerRNA *ptr, PropertyRNA *prop, int index, bool icon_only, bool compact, int *r_w, int *r_h)
void uiLayoutSetFixedSize(uiLayout *layout, bool fixed_size)
static void ui_litem_estimate_column_flow(uiLayout *litem)
void uiItemMenuEnumO(uiLayout *layout, const bContext *C, const char *opname, const char *propname, const char *name, int icon)
float uiLayoutGetUnitsY(uiLayout *layout)
uiPropertySplitWrapper uiItemPropertySplitWrapperCreate(uiLayout *parent_layout)
void uiLayoutSetScaleY(uiLayout *layout, float scale)
void ui_item_menutype_func(bContext *C, uiLayout *layout, void *arg_mt)
static void ui_layout_heading_set(uiLayout *layout, const char *heading)
void uiItemEnumO_string(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, const char *value_str)
static void ui_litem_estimate_split(uiLayout *litem)
static uiBut * uiItemL_(uiLayout *layout, const char *name, int icon)
static void ui_litem_estimate_overlap(uiLayout *litem)
static void ui_item_disabled(uiLayout *layout, const char *name)
static int spaces_after_column_item(const uiLayout *litem, const uiItem *item, const uiItem *next_item, const bool is_box)
void uiItemIntO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, int value)
void uiItemL(uiLayout *layout, const char *name, int icon)
void uiLayoutSetActiveDefault(uiLayout *layout, bool active_default)
@ UI_ITEM_INSIDE_PROP_SEP
@ UI_ITEM_PROP_DECORATE_NO_PAD
@ UI_ITEM_AUTO_FIXED_SIZE
static const char * ui_menu_enumpropname(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int retval)
static int menu_item_enum_opname_menu_active(bContext *C, uiBut *but, MenuItemLevel *lvl)
void uiLayoutSetRedAlert(uiLayout *layout, bool redalert)
static void ui_item_offset(const uiItem *item, int *r_x, int *r_y)
static bool ui_item_rna_is_expand(PropertyRNA *prop, int index, const eUI_Item_Flag item_flag)
MenuType * UI_but_menutype_get(const uiBut *but)
#define UI_ITEM_PROP_SEP_DIVIDE
uiBlock * uiLayoutGetBlock(uiLayout *layout)
uiBut * ui_but_add_search(uiBut *but, PointerRNA *ptr, PropertyRNA *prop, PointerRNA *searchptr, PropertyRNA *searchprop, const bool results_are_suggestions)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
uiLayout * UI_block_layout(uiBlock *block, int dir, int type, int x, int y, int size, int em, int padding, const uiStyle *style)
void uiLayoutSetScaleX(uiLayout *layout, float scale)
static void ui_item_layout(uiItem *item)
static void ui_litem_layout_absolute(uiLayout *litem)
static uiLayout * ui_item_prop_split_layout_hack(uiLayout *layout_parent, uiLayout *layout_split)
static bool ui_item_is_radial_displayable(uiItem *item)
uiBut * uiItemL_ex(uiLayout *layout, const char *name, int icon, const bool highlight, const bool redalert)
float uiLayoutGetUnitsX(uiLayout *layout)
bool ui_layout_replace_but_ptr(uiLayout *layout, const void *old_but_ptr, uiBut *new_but)
void uiLayoutSetAlignment(uiLayout *layout, char alignment)
bool uiLayoutGetEnabled(uiLayout *layout)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
static uiLayoutItemBx * ui_layout_box(uiLayout *layout, int type)
static void ui_litem_layout_panel_header(uiLayout *litem)
static void ui_item_enum_expand_exec(uiLayout *layout, uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, const char *uiname, const int h, const eButType but_type, const bool icon_only)
void uiItemS(uiLayout *layout)
int uiLayoutListItemPaddingWidth()
uiLayout * uiLayoutAbsolute(uiLayout *layout, bool align)
static uiBut * ui_item_with_label(uiLayout *layout, uiBlock *block, const char *name, const int icon, PointerRNA *ptr, PropertyRNA *prop, const int index, const int x, const int y, const int w_hint, const int h, const int flag)
static void ui_litem_layout_panel_body(uiLayout *litem)
float uiLayoutGetScaleY(uiLayout *layout)
wmOperatorCallContext uiLayoutGetOperatorContext(uiLayout *layout)
void uiItemFullO(uiLayout *layout, const char *opname, const char *name, int icon, IDProperty *properties, wmOperatorCallContext context, const eUI_Item_Flag flag, PointerRNA *r_opptr)
void uiItemDecoratorR_prop(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index)
uiLayout * uiLayoutListBox(uiLayout *layout, uiList *ui_list, PointerRNA *actptr, PropertyRNA *actprop)
static bool block_search_filter_tag_buttons(uiBlock *block, const char *search_filter)
void uiItemPopoverPanelFromGroup(uiLayout *layout, bContext *C, int space_id, int region_id, const char *context, const char *category)
void uiItemEnumO(uiLayout *layout, const char *opname, const char *name, int icon, const char *propname, int value)
void uiItemEnumR_string(uiLayout *layout, PointerRNA *ptr, const char *propname, const char *value, const char *name, int icon)
bool uiLayoutGetActive(uiLayout *layout)
static void ui_layout_heading_label_add(uiLayout *layout, uiLayout *heading_layout, bool right_align, bool respect_prop_split)
static void ui_litem_layout_row(uiLayout *litem)
uiLayout * uiLayoutRowWithHeading(uiLayout *layout, bool align, const char *heading)
static RadialDirection ui_get_radialbut_vec(float vec[2], short itemnum)
static void ui_item_enum_expand_tabs(uiLayout *layout, bContext *C, uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, PointerRNA *ptr_highlight, PropertyRNA *prop_highlight, const char *uiname, const int h, const bool icon_only)
BLI_INLINE bool ui_layout_is_radial(const uiLayout *layout)
float uiLayoutGetSearchWeight(uiLayout *layout)
bool uiLayoutGetKeepAspect(uiLayout *layout)
static void ui_layout_add_padding_button(uiLayoutRoot *root)
void uiItemMenuEnumR_prop(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, const char *name, int icon)
bool uiLayoutGetPropSep(uiLayout *layout)
static void ui_layout_introspect_button(DynStr *ds, const uiButtonItem *bitem)
static void ui_item_array(uiLayout *layout, uiBlock *block, const char *name, int icon, PointerRNA *ptr, PropertyRNA *prop, const int len, int x, const int y, int w, const int, const bool expand, const bool slider, const int toggle, const bool icon_only, const bool compact, const bool show_text)
void ui_item_paneltype_func(bContext *C, uiLayout *layout, void *arg_pt)
static int ui_text_icon_width_ex(uiLayout *layout, const char *name, int icon, const uiTextIconPadFactor &pad_factor, const uiFontStyle *fstyle)
static int ui_layout_vary_direction(uiLayout *layout)
void uiItemMenuEnumFullO(uiLayout *layout, const bContext *C, const char *opname, const char *propname, const char *name, int icon, PointerRNA *r_opptr)
static void menu_item_enum_rna_menu(bContext *, uiLayout *layout, void *arg)
void UI_paneltype_draw(bContext *C, PanelType *pt, uiLayout *layout)
void uiItemFullR_with_popover(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index, int value, const eUI_Item_Flag flag, const char *name, int icon, const char *panel_type)
void uiItemLDrag(uiLayout *layout, PointerRNA *ptr, const char *name, int icon)
void uiLayoutSetUnitsX(uiLayout *layout, float unit)
void uiItemFloatO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, float value)
static void ui_litem_estimate_row(uiLayout *litem)
static void ui_layout_end(uiBlock *block, uiLayout *layout, int *r_x, int *r_y)
eUIEmbossType uiLayoutGetEmboss(uiLayout *layout)
void uiItemPointerR(uiLayout *layout, PointerRNA *ptr, const char *propname, PointerRNA *searchptr, const char *searchpropname, const char *name, int icon)
constexpr uiTextIconPadFactor ui_text_pad_default
void uiLayoutSetTooltipFunc(uiLayout *layout, uiButToolTipFunc func, void *arg, uiCopyArgFunc copy_arg, uiFreeArgFunc free_arg)
static bool block_search_panel_label_matches(const uiBlock *block, const char *search_string)
int uiLayoutGetLocalDir(const uiLayout *layout)
void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, const char *name, int icon, const char *placeholder)
PanelLayout uiLayoutPanel(const bContext *C, uiLayout *layout, const char *idname, const bool default_closed)
void uiItemSpacer(uiLayout *layout)
void uiItemM_ptr(uiLayout *layout, MenuType *mt, const char *name, int icon)
static void ui_litem_grid_flow_compute(blender::Span< uiItem * > items, const UILayoutGridFlowInput *parameters, UILayoutGridFlowOutput *results)
void ui_layout_list_set_labels_active(uiLayout *layout)
void UI_menutype_draw(bContext *C, MenuType *mt, uiLayout *layout)
void uiLayoutSetKeepAspect(uiLayout *layout, bool keepaspect)
bool uiLayoutGetFixedSize(uiLayout *layout)
static void ui_litem_estimate_box(uiLayout *litem)
static void ui_rna_collection_search_arg_free_fn(void *ptr)
void UI_context_active_but_prop_get_filebrowser(const bContext *C, PointerRNA *r_ptr, PropertyRNA **r_prop, bool *r_is_undo, bool *r_is_userdef)
void uiItemFullR_with_menu(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index, int value, const eUI_Item_Flag flag, const char *name, int icon, const char *menu_type)
static bool ui_layout_has_panel_label(const uiLayout *layout, const PanelType *pt)
static void ui_layout_introspect_items(DynStr *ds, blender::Span< uiItem * > items)
void uiItemMContents(uiLayout *layout, const char *menuname)
static void ui_litem_estimate_panel_header(uiLayout *litem)
static void ui_keymap_but_cb(bContext *, void *but_v, void *)
bool uiLayoutGetActiveDefault(uiLayout *layout)
static const char * ui_item_name_add_colon(const char *name, char namestr[UI_MAX_NAME_STR])
static uiLayout * ui_layout_heading_find(uiLayout *cur_layout)
static void ui_litem_estimate_grid_flow(uiLayout *litem)
void uiItemsEnumO(uiLayout *layout, const char *opname, const char *propname)
constexpr uiTextIconPadFactor ui_text_pad_compact
PanelType * UI_but_paneltype_get(const uiBut *but)
void uiItemEnumR_string_prop(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, const char *value, const char *name, int icon)
static uiButtonItem * ui_layout_find_button_item(const uiLayout *layout, const uiBut *but)
static void ui_litem_estimate_root(uiLayout *)
static void menu_item_enum_opname_menu(bContext *C, uiLayout *layout, void *arg)
void uiItemDecoratorR(uiLayout *layout, PointerRNA *ptr, const char *propname, int index)
void uiLayoutSetEmboss(uiLayout *layout, eUIEmbossType emboss)
void uiLayoutSetSearchWeight(uiLayout *layout, const float weight)
static void ui_item_scale(uiLayout *litem, const float scale[2])
int uiLayoutGetWidth(uiLayout *layout)
void uiItemO(uiLayout *layout, const char *name, int icon, const char *opname)
static void search_id_collection(StructRNA *ptype, PointerRNA *r_ptr, PropertyRNA **r_prop)
uiLayout * uiLayoutColumnWithHeading(uiLayout *layout, bool align, const char *heading)
static void ui_litem_layout_split(uiLayout *litem)
uiLayout * uiLayoutGridFlow(uiLayout *layout, bool row_major, int columns_len, bool even_columns, bool even_rows, bool align)
const char * UI_layout_introspect(uiLayout *layout)
void uiItemEnumO_value(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, int value)
float uiLayoutGetScaleX(uiLayout *layout)
bool UI_block_layout_needs_resolving(const uiBlock *block)
PanelLayout uiLayoutPanelProp(const bContext *C, uiLayout *layout, PointerRNA *open_prop_owner, const char *open_prop_name)
void uiLayoutSetPropDecorate(uiLayout *layout, bool is_sep)
void uiItemS_ex(uiLayout *layout, float factor, const LayoutSeparatorType type)
void uiLayoutListItemAddPadding(uiLayout *layout)
void uiLayoutSetContextFromBut(uiLayout *layout, uiBut *but)
static void ui_but_tip_from_enum_item(uiBut *but, const EnumPropertyItem *item)
uiLayout * uiLayoutRadial(uiLayout *layout)
void UI_block_layout_free(uiBlock *block)
uiLayout * uiItemL_respect_property_split(uiLayout *layout, const char *text, int icon)
static void ui_litem_layout_radial(uiLayout *litem)
#define UI_OPERATOR_ERROR_RET(_ot, _opname, return_statement)
void uiItemFullOMenuHold_ptr(uiLayout *layout, wmOperatorType *ot, const char *name, int icon, IDProperty *properties, const wmOperatorCallContext context, const eUI_Item_Flag flag, const char *menu_id, PointerRNA *r_opptr)
static void ui_litem_estimate_absolute(uiLayout *litem)
static void ui_item_enum_expand_handle(bContext *C, void *arg1, void *arg2)
static int ui_item_fit(const int item, const int pos, const int all, const int available, const bool is_last, const int alignment, float *extra_pixel)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
void uiItemPointerR_prop(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, PointerRNA *searchptr, PropertyRNA *searchprop, const char *name, int icon, bool results_are_suggestions)
static void ui_item_menu_hold(bContext *C, ARegion *butregion, uiBut *but)
uiLayout * uiLayoutSplit(uiLayout *layout, float percentage, bool align)
void UI_block_layout_resolve(uiBlock *block, int *r_x, int *r_y)
void uiItemEnumO_ptr(uiLayout *layout, wmOperatorType *ot, const char *name, int icon, const char *propname, int value)
static uiBut * ui_item_menu(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc func, void *arg, void *argN, const char *tip, bool force_menu, uiButArgNFree func_argN_free_fn=MEM_freeN, uiButArgNCopy func_argN_copy_fn=MEM_dupallocN)
void uiItemEnumR_prop(uiLayout *layout, const char *name, int icon, PointerRNA *ptr, PropertyRNA *prop, int value)
static bool ui_layout_variable_size(uiLayout *layout)
uiBlock * uiLayoutAbsoluteBlock(uiLayout *layout)
void uiLayoutSetActivateInit(uiLayout *layout, bool activate_init)
static void ui_layout_free(uiLayout *layout)
static void ui_layer_but_cb(bContext *C, void *arg_but, void *arg_index)
static void ui_item_enum_expand(uiLayout *layout, uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, const char *uiname, const int h, const bool icon_only)
void uiItemStringO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, const char *value)
static void ui_litem_layout_box(uiLayout *litem)
void uiItemProgressIndicator(uiLayout *layout, const char *text, const float factor, const eButProgressType progress_type)
static void ui_paneltype_draw_impl(bContext *C, PanelType *pt, uiLayout *layout, bool show_header)
@ ITEM_LAYOUT_COLUMN_FLOW
@ ITEM_LAYOUT_PANEL_HEADER
uiLayout * uiLayoutOverlap(uiLayout *layout)
void uiItemsFullEnumO_items(uiLayout *layout, wmOperatorType *ot, const PointerRNA &ptr, PropertyRNA *prop, IDProperty *properties, wmOperatorCallContext context, eUI_Item_Flag flag, const EnumPropertyItem *item_array, int totitem, int active)
static void ui_item_size(const uiItem *item, int *r_w, int *r_h)
void UI_block_layout_set_current(uiBlock *block, uiLayout *layout)
void uiItemMenuF(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc func, void *arg)
void uiLayoutSetContextString(uiLayout *layout, const char *name, blender::StringRef value)
static void ui_item_align(uiLayout *litem, short nr)
static void ui_litem_layout_grid_flow(uiLayout *litem)
static void ui_item_position(uiItem *item, const int x, const int y, const int w, const int h)
void ui_layout_remove_but(uiLayout *layout, const uiBut *but)
void uiLayoutSetOperatorContext(uiLayout *layout, wmOperatorCallContext opcontext)
bContextStore * uiLayoutGetContextStore(uiLayout *layout)
static uiLayout * ui_item_local_sublayout(uiLayout *test, uiLayout *layout, bool align)
void uiItemPopoverPanel_ptr(uiLayout *layout, const bContext *C, PanelType *pt, const char *name, int icon)
bool uiLayoutGetRedAlert(uiLayout *layout)
constexpr uiTextIconPadFactor ui_text_pad_none
void uiItemMenuEnumFullO_ptr(uiLayout *layout, const bContext *C, wmOperatorType *ot, const char *propname, const char *name, int icon, PointerRNA *r_opptr)
void uiItemMenuEnumR(uiLayout *layout, PointerRNA *ptr, const char *propname, const char *name, int icon)
void ui_layout_add_but(uiLayout *layout, uiBut *but)
static void ui_litem_layout_root(uiLayout *litem)
void uiLayoutContextCopy(uiLayout *layout, const bContextStore *context)
static int ui_text_icon_width(uiLayout *layout, const char *name, const int icon, const bool compact)
void uiItemMenuFN(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc func, void *argN)
static void ui_item_enum_expand_elem_exec(uiLayout *layout, uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, const char *uiname, const int h, const eButType but_type, const bool icon_only, const EnumPropertyItem *item, const bool is_first)
void uiItemTabsEnumR_prop(uiLayout *layout, bContext *C, PointerRNA *ptr, PropertyRNA *prop, PointerRNA *ptr_highlight, PropertyRNA *prop_highlight, bool icon_only)
static void ui_item_move(uiItem *item, const int delta_xmin, const int delta_xmax)
void uiItemPopoverPanel(uiLayout *layout, const bContext *C, const char *panel_type, const char *name, int icon)
static void ui_litem_layout_root_radial(uiLayout *litem)
static bool ui_item_is_radial_drawable(uiButtonItem *bitem)
std::optional< blender::StringRefNull > UI_but_asset_shelf_type_idname_get(const uiBut *but)
void uiItemM(uiLayout *layout, const char *menuname, const char *name, int icon)
static void ui_litem_estimate_panel_body(uiLayout *litem)
wmOperatorType * UI_but_operatortype_get_from_enum_menu(uiBut *but, PropertyRNA **r_prop)
void uiLayoutSetFunc(uiLayout *layout, uiMenuHandleFunc handlefunc, void *argv)
void uiLayoutSetContextPointer(uiLayout *layout, const char *name, PointerRNA *ptr)
bool uiLayoutEndsWithPanelHeader(const uiLayout &layout)
void uiItemsFullEnumO(uiLayout *layout, const char *opname, const char *propname, IDProperty *properties, wmOperatorCallContext context, eUI_Item_Flag flag, const int active)
double parameters[NUM_PARAMETERS]
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_dupallocN)(const void *vmemh)
static void progress_bar(int, const char *)
std::unique_ptr< IDProperty, IDPropertyDeleter > create_group(StringRefNull prop_name, eIDPropertyFlag flags={})
Allocate a new IDProperty of type IDP_GROUP.
void RNA_property_boolean_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, bool value)
PropertyRNA * RNA_struct_type_find_property(StructRNA *srna, const char *identifier)
bool RNA_property_array_check(PropertyRNA *prop)
bool RNA_struct_is_a(const StructRNA *type, const StructRNA *srna)
bool RNA_property_is_unlink(PropertyRNA *prop)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
int RNA_enum_from_name(const EnumPropertyItem *item, const char *name)
bool RNA_struct_is_ID(const StructRNA *type)
bool RNA_enum_value_from_id(const EnumPropertyItem *item, const char *identifier, int *r_value)
eStringPropertySearchFlag RNA_property_string_search_flag(PropertyRNA *prop)
int RNA_property_ui_icon(const PropertyRNA *prop)
StructRNA * RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
const char * RNA_property_description(PropertyRNA *prop)
bool RNA_property_animateable(const PointerRNA *ptr, PropertyRNA *prop_orig)
void RNA_property_boolean_get_array(PointerRNA *ptr, PropertyRNA *prop, bool *values)
PropertyType RNA_property_type(PropertyRNA *prop)
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
void RNA_property_enum_set(PointerRNA *ptr, PropertyRNA *prop, int value)
char RNA_property_array_item_char(PropertyRNA *prop, int index)
void RNA_property_update(bContext *C, PointerRNA *ptr, PropertyRNA *prop)
bool RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
const char * RNA_struct_identifier(const StructRNA *type)
void RNA_property_enum_items_gettexted(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const EnumPropertyItem **r_item, int *r_totitem, bool *r_free)
const char * RNA_property_translation_context(const PropertyRNA *prop)
int RNA_property_array_dimension(const PointerRNA *ptr, PropertyRNA *prop, int length[])
int RNA_property_flag(PropertyRNA *prop)
int RNA_struct_ui_icon(const StructRNA *type)
void RNA_float_set(PointerRNA *ptr, const char *name, float value)
int RNA_property_array_length(PointerRNA *ptr, PropertyRNA *prop)
const char * RNA_property_ui_name(const PropertyRNA *prop)
bool RNA_enum_name(const EnumPropertyItem *item, const int value, const char **r_name)
void RNA_property_enum_items_gettexted_all(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const EnumPropertyItem **r_item, int *r_totitem, bool *r_free)
int RNA_property_enum_get(PointerRNA *ptr, PropertyRNA *prop)
PropertyRNA * RNA_struct_name_property(const StructRNA *type)
PropertySubType RNA_property_subtype(PropertyRNA *prop)
PointerRNA RNA_main_pointer_create(Main *main)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
void RNA_property_enum_items(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const EnumPropertyItem **r_item, int *r_totitem, bool *r_free)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
bool RNA_property_boolean_get_index(PointerRNA *ptr, PropertyRNA *prop, int index)
const char * RNA_property_identifier(const PropertyRNA *prop)
blender::Vector< LayoutPanelBody > bodies
blender::Vector< LayoutPanelHeader > headers
void(* draw)(const bContext *C, Panel *panel)
bool(* poll)(const bContext *C, PanelType *pt)
void(* listener)(const wmRegionListenerParams *params)
char translation_context[BKE_ST_MAXNAME]
char label[BKE_ST_MAXNAME]
void(* draw_header)(const bContext *C, Panel *panel)
PointerRNA * custom_data_ptr
LayoutPanels layout_panels
struct Panel_Runtime * runtime
uiPopupBlockHandle * handle
blender::Vector< std::unique_ptr< bContextStore > > contexts
blender::Vector< uiButtonGroup > button_groups
PointerRNA decorated_rnapoin
PropertyRNA * decorated_rnaprop
eButProgressType progress_type
PropertyRNA * rnasearchprop
uiMenuCreateFunc menu_create_func
const bContextStore * context
uiButArgNFree func_argN_free_fn
uiButArgNCopy func_argN_copy_fn
virtual ~uiItem()=default
uiItem(const uiItem &)=default
wmOperatorCallContext opcontext
uiMenuHandleFunc handlefunc
char heading[UI_MAX_NAME_STR]
uiLayout * child_items_layout
blender::Vector< uiItem * > items
uiLayout * decorate_column
PropertyRNA * target_prop
PropertyRNA * search_prop
std::string(* get_description)(bContext *C, wmOperatorType *ot, PointerRNA *ptr)
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
struct wmEvent * eventstate
void WM_main_add_notifier(uint type, void *reference)
std::optional< std::string > WM_key_event_operator_string(const bContext *C, const char *opname, wmOperatorCallContext opcontext, IDProperty *properties, const bool is_strict)
std::optional< std::string > WM_keymap_item_to_string(const wmKeyMapItem *kmi, const bool compact)
std::string WM_operatortype_name(wmOperatorType *ot, PointerRNA *properties)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
void WM_operator_properties_alloc(PointerRNA **ptr, IDProperty **properties, const char *opstring)
std::string WM_operator_pystring_ex(bContext *C, wmOperator *op, const bool all_args, const bool macro_args, wmOperatorType *ot, PointerRNA *opptr)
void WM_operator_properties_create_ptr(PointerRNA *ptr, wmOperatorType *ot)
void WM_operator_properties_sanitize(PointerRNA *ptr, const bool no_context)
PanelType * WM_paneltype_find(const char *idname, bool quiet)