Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/makesrna/intern/rna_ui.c')
-rw-r--r--source/blender/makesrna/intern/rna_ui.c175
1 files changed, 98 insertions, 77 deletions
diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c
index 273bef6d239..1449c410d18 100644
--- a/source/blender/makesrna/intern/rna_ui.c
+++ b/source/blender/makesrna/intern/rna_ui.c
@@ -27,6 +27,8 @@
#include "BKE_idprop.h"
+#include "BLI_listbase.h"
+
#include "RNA_define.h"
#include "RNA_enum_types.h"
@@ -111,12 +113,12 @@ static bool panel_poll(const bContext *C, PanelType *pt)
void *ret;
bool visible;
- RNA_pointer_create(NULL, pt->ext.srna, NULL, &ptr); /* dummy */
- func = &rna_Panel_poll_func; /* RNA_struct_find_function(&ptr, "poll"); */
+ RNA_pointer_create(NULL, pt->rna_ext.srna, NULL, &ptr); /* dummy */
+ func = &rna_Panel_poll_func; /* RNA_struct_find_function(&ptr, "poll"); */
RNA_parameter_list_create(&list, &ptr, func);
RNA_parameter_set_lookup(&list, "context", &C);
- pt->ext.call((bContext *)C, &ptr, func, &list);
+ pt->rna_ext.call((bContext *)C, &ptr, func, &list);
RNA_parameter_get_lookup(&list, "visible", &ret);
visible = *(bool *)ret;
@@ -126,7 +128,7 @@ static bool panel_poll(const bContext *C, PanelType *pt)
return visible;
}
-static void panel_draw(const bContext *C, Panel *pnl)
+static void panel_draw(const bContext *C, Panel *panel)
{
extern FunctionRNA rna_Panel_draw_func;
@@ -134,17 +136,17 @@ static void panel_draw(const bContext *C, Panel *pnl)
ParameterList list;
FunctionRNA *func;
- RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->ext.srna, pnl, &ptr);
+ RNA_pointer_create(&CTX_wm_screen(C)->id, panel->type->rna_ext.srna, panel, &ptr);
func = &rna_Panel_draw_func; /* RNA_struct_find_function(&ptr, "draw"); */
RNA_parameter_list_create(&list, &ptr, func);
RNA_parameter_set_lookup(&list, "context", &C);
- pnl->type->ext.call((bContext *)C, &ptr, func, &list);
+ panel->type->rna_ext.call((bContext *)C, &ptr, func, &list);
RNA_parameter_list_free(&list);
}
-static void panel_draw_header(const bContext *C, Panel *pnl)
+static void panel_draw_header(const bContext *C, Panel *panel)
{
extern FunctionRNA rna_Panel_draw_header_func;
@@ -152,17 +154,17 @@ static void panel_draw_header(const bContext *C, Panel *pnl)
ParameterList list;
FunctionRNA *func;
- RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->ext.srna, pnl, &ptr);
+ RNA_pointer_create(&CTX_wm_screen(C)->id, panel->type->rna_ext.srna, panel, &ptr);
func = &rna_Panel_draw_header_func; /* RNA_struct_find_function(&ptr, "draw_header"); */
RNA_parameter_list_create(&list, &ptr, func);
RNA_parameter_set_lookup(&list, "context", &C);
- pnl->type->ext.call((bContext *)C, &ptr, func, &list);
+ panel->type->rna_ext.call((bContext *)C, &ptr, func, &list);
RNA_parameter_list_free(&list);
}
-static void panel_draw_header_preset(const bContext *C, Panel *pnl)
+static void panel_draw_header_preset(const bContext *C, Panel *panel)
{
extern FunctionRNA rna_Panel_draw_header_preset_func;
@@ -170,12 +172,12 @@ static void panel_draw_header_preset(const bContext *C, Panel *pnl)
ParameterList list;
FunctionRNA *func;
- RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->ext.srna, pnl, &ptr);
+ RNA_pointer_create(&CTX_wm_screen(C)->id, panel->type->rna_ext.srna, panel, &ptr);
func = &rna_Panel_draw_header_preset_func;
RNA_parameter_list_create(&list, &ptr, func);
RNA_parameter_set_lookup(&list, "context", &C);
- pnl->type->ext.call((bContext *)C, &ptr, func, &list);
+ panel->type->rna_ext.call((bContext *)C, &ptr, func, &list);
RNA_parameter_list_free(&list);
}
@@ -192,7 +194,7 @@ static void rna_Panel_unregister(Main *bmain, StructRNA *type)
return;
}
- RNA_struct_free_extension(type, &pt->ext);
+ RNA_struct_free_extension(type, &pt->rna_ext);
RNA_struct_free(&BLENDER_RNA, type);
if (pt->parent) {
@@ -202,7 +204,7 @@ static void rna_Panel_unregister(Main *bmain, StructRNA *type)
WM_paneltype_remove(pt);
- for (LinkData *link = pt->children.first; link; link = link->next) {
+ LISTBASE_FOREACH (LinkData *, link, &pt->children) {
PanelType *child_pt = link->data;
child_pt->parent = NULL;
}
@@ -212,15 +214,16 @@ static void rna_Panel_unregister(Main *bmain, StructRNA *type)
BLI_freelinkN(&art->paneltypes, pt);
for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
- for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
- for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
+ LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
+ LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
if (sl->spacetype == space_type) {
- ListBase *regionbase = (sl == sa->spacedata.first) ? &sa->regionbase : &sl->regionbase;
- for (ARegion *region = regionbase->first; region; region = region->next) {
+ ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
+ &sl->regionbase;
+ LISTBASE_FOREACH (ARegion *, region, regionbase) {
if (region->type == art) {
- for (Panel *pa = region->panels.first; pa; pa = pa->next) {
- if (pa->type == pt) {
- pa->type = NULL;
+ LISTBASE_FOREACH (Panel *, panel, &region->panels) {
+ if (panel->type == pt) {
+ panel->type = NULL;
}
}
}
@@ -300,8 +303,8 @@ static StructRNA *rna_Panel_register(Main *bmain,
for (pt = art->paneltypes.first; pt; pt = pt->next) {
if (STREQ(pt->idname, dummypt.idname)) {
PanelType *pt_next = pt->next;
- if (pt->ext.srna) {
- rna_Panel_unregister(bmain, pt->ext.srna);
+ if (pt->rna_ext.srna) {
+ rna_Panel_unregister(bmain, pt->rna_ext.srna);
}
else {
BLI_freelinkN(&art->paneltypes, pt);
@@ -344,13 +347,13 @@ static StructRNA *rna_Panel_register(Main *bmain,
pt = MEM_mallocN(sizeof(PanelType), "python buttons panel");
memcpy(pt, &dummypt, sizeof(dummypt));
- pt->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, pt->idname, &RNA_Panel);
- RNA_def_struct_translation_context(pt->ext.srna, pt->translation_context);
- pt->ext.data = data;
- pt->ext.call = call;
- pt->ext.free = free;
- RNA_struct_blender_type_set(pt->ext.srna, pt);
- RNA_def_struct_flag(pt->ext.srna, STRUCT_NO_IDPROPERTIES);
+ pt->rna_ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, pt->idname, &RNA_Panel);
+ RNA_def_struct_translation_context(pt->rna_ext.srna, pt->translation_context);
+ pt->rna_ext.data = data;
+ pt->rna_ext.call = call;
+ pt->rna_ext.free = free;
+ RNA_struct_blender_type_set(pt->rna_ext.srna, pt);
+ RNA_def_struct_flag(pt->rna_ext.srna, STRUCT_NO_IDPROPERTIES);
pt->poll = (have_function[0]) ? panel_poll : NULL;
pt->draw = (have_function[1]) ? panel_draw : NULL;
@@ -390,13 +393,13 @@ static StructRNA *rna_Panel_register(Main *bmain,
/* update while blender is running */
WM_main_add_notifier(NC_WINDOW, NULL);
- return pt->ext.srna;
+ return pt->rna_ext.srna;
}
static StructRNA *rna_Panel_refine(PointerRNA *ptr)
{
Panel *menu = (Panel *)ptr->data;
- return (menu->type && menu->type->ext.srna) ? menu->type->ext.srna : &RNA_Panel;
+ return (menu->type && menu->type->rna_ext.srna) ? menu->type->rna_ext.srna : &RNA_Panel;
}
/* UIList */
@@ -433,7 +436,7 @@ static void uilist_draw_item(uiList *ui_list,
ParameterList list;
FunctionRNA *func;
- RNA_pointer_create(&CTX_wm_screen(C)->id, ui_list->type->ext.srna, ui_list, &ul_ptr);
+ RNA_pointer_create(&CTX_wm_screen(C)->id, ui_list->type->rna_ext.srna, ui_list, &ul_ptr);
func = &rna_UIList_draw_item_func; /* RNA_struct_find_function(&ul_ptr, "draw_item"); */
RNA_parameter_list_create(&list, &ul_ptr, func);
@@ -446,7 +449,7 @@ static void uilist_draw_item(uiList *ui_list,
RNA_parameter_set_lookup(&list, "active_property", &active_propname);
RNA_parameter_set_lookup(&list, "index", &index);
RNA_parameter_set_lookup(&list, "flt_flag", &flt_flag);
- ui_list->type->ext.call((bContext *)C, &ul_ptr, func, &list);
+ ui_list->type->rna_ext.call((bContext *)C, &ul_ptr, func, &list);
RNA_parameter_list_free(&list);
}
@@ -459,13 +462,13 @@ static void uilist_draw_filter(uiList *ui_list, bContext *C, uiLayout *layout)
ParameterList list;
FunctionRNA *func;
- RNA_pointer_create(&CTX_wm_screen(C)->id, ui_list->type->ext.srna, ui_list, &ul_ptr);
+ RNA_pointer_create(&CTX_wm_screen(C)->id, ui_list->type->rna_ext.srna, ui_list, &ul_ptr);
func = &rna_UIList_draw_filter_func; /* RNA_struct_find_function(&ul_ptr, "draw_filter"); */
RNA_parameter_list_create(&list, &ul_ptr, func);
RNA_parameter_set_lookup(&list, "context", &C);
RNA_parameter_set_lookup(&list, "layout", &layout);
- ui_list->type->ext.call((bContext *)C, &ul_ptr, func, &list);
+ ui_list->type->rna_ext.call((bContext *)C, &ul_ptr, func, &list);
RNA_parameter_list_free(&list);
}
@@ -488,7 +491,7 @@ static void uilist_filter_items(uiList *ui_list,
int ret_len;
int len = flt_data->items_len = RNA_collection_length(dataptr, propname);
- RNA_pointer_create(&CTX_wm_screen(C)->id, ui_list->type->ext.srna, ui_list, &ul_ptr);
+ RNA_pointer_create(&CTX_wm_screen(C)->id, ui_list->type->rna_ext.srna, ui_list, &ul_ptr);
func = &rna_UIList_filter_items_func; /* RNA_struct_find_function(&ul_ptr, "filter_items"); */
RNA_parameter_list_create(&list, &ul_ptr, func);
@@ -496,7 +499,7 @@ static void uilist_filter_items(uiList *ui_list,
RNA_parameter_set_lookup(&list, "data", dataptr);
RNA_parameter_set_lookup(&list, "property", &propname);
- ui_list->type->ext.call((bContext *)C, &ul_ptr, func, &list);
+ ui_list->type->rna_ext.call((bContext *)C, &ul_ptr, func, &list);
parm = RNA_function_find_parameter(NULL, func, "filter_flags");
ret_len = RNA_parameter_dynamic_length_get(&list, parm);
@@ -599,7 +602,7 @@ static void rna_UIList_unregister(Main *UNUSED(bmain), StructRNA *type)
return;
}
- RNA_struct_free_extension(type, &ult->ext);
+ RNA_struct_free_extension(type, &ult->rna_ext);
RNA_struct_free(&BLENDER_RNA, type);
WM_uilisttype_freelink(ult);
@@ -642,8 +645,8 @@ static StructRNA *rna_UIList_register(Main *bmain,
/* check if we have registered this uilist type before, and remove it */
ult = WM_uilisttype_find(dummyult.idname, true);
- if (ult && ult->ext.srna) {
- rna_UIList_unregister(bmain, ult->ext.srna);
+ if (ult && ult->rna_ext.srna) {
+ rna_UIList_unregister(bmain, ult->rna_ext.srna);
}
if (!RNA_struct_available_or_report(reports, dummyult.idname)) {
return NULL;
@@ -656,11 +659,11 @@ static StructRNA *rna_UIList_register(Main *bmain,
ult = MEM_callocN(sizeof(uiListType) + over_alloc, "python uilist");
memcpy(ult, &dummyult, sizeof(dummyult));
- ult->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, ult->idname, &RNA_UIList);
- ult->ext.data = data;
- ult->ext.call = call;
- ult->ext.free = free;
- RNA_struct_blender_type_set(ult->ext.srna, ult);
+ ult->rna_ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, ult->idname, &RNA_UIList);
+ ult->rna_ext.data = data;
+ ult->rna_ext.call = call;
+ ult->rna_ext.free = free;
+ RNA_struct_blender_type_set(ult->rna_ext.srna, ult);
ult->draw_item = (have_function[0]) ? uilist_draw_item : NULL;
ult->draw_filter = (have_function[1]) ? uilist_draw_filter : NULL;
@@ -671,13 +674,14 @@ static StructRNA *rna_UIList_register(Main *bmain,
/* update while blender is running */
WM_main_add_notifier(NC_WINDOW, NULL);
- return ult->ext.srna;
+ return ult->rna_ext.srna;
}
static StructRNA *rna_UIList_refine(PointerRNA *ptr)
{
uiList *ui_list = (uiList *)ptr->data;
- return (ui_list->type && ui_list->type->ext.srna) ? ui_list->type->ext.srna : &RNA_UIList;
+ return (ui_list->type && ui_list->type->rna_ext.srna) ? ui_list->type->rna_ext.srna :
+ &RNA_UIList;
}
/* Header */
@@ -690,12 +694,12 @@ static void header_draw(const bContext *C, Header *hdr)
ParameterList list;
FunctionRNA *func;
- RNA_pointer_create(&CTX_wm_screen(C)->id, hdr->type->ext.srna, hdr, &htr);
+ RNA_pointer_create(&CTX_wm_screen(C)->id, hdr->type->rna_ext.srna, hdr, &htr);
func = &rna_Header_draw_func; /* RNA_struct_find_function(&htr, "draw"); */
RNA_parameter_list_create(&list, &htr, func);
RNA_parameter_set_lookup(&list, "context", &C);
- hdr->type->ext.call((bContext *)C, &htr, func, &list);
+ hdr->type->rna_ext.call((bContext *)C, &htr, func, &list);
RNA_parameter_list_free(&list);
}
@@ -712,7 +716,7 @@ static void rna_Header_unregister(Main *UNUSED(bmain), StructRNA *type)
return;
}
- RNA_struct_free_extension(type, &ht->ext);
+ RNA_struct_free_extension(type, &ht->rna_ext);
RNA_struct_free(&BLENDER_RNA, type);
BLI_freelinkN(&art->headertypes, ht);
@@ -761,8 +765,8 @@ static StructRNA *rna_Header_register(Main *bmain,
/* check if we have registered this header type before, and remove it */
for (ht = art->headertypes.first; ht; ht = ht->next) {
if (STREQ(ht->idname, dummyht.idname)) {
- if (ht->ext.srna) {
- rna_Header_unregister(bmain, ht->ext.srna);
+ if (ht->rna_ext.srna) {
+ rna_Header_unregister(bmain, ht->rna_ext.srna);
}
break;
}
@@ -778,11 +782,11 @@ static StructRNA *rna_Header_register(Main *bmain,
ht = MEM_mallocN(sizeof(HeaderType), "python buttons header");
memcpy(ht, &dummyht, sizeof(dummyht));
- ht->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, ht->idname, &RNA_Header);
- ht->ext.data = data;
- ht->ext.call = call;
- ht->ext.free = free;
- RNA_struct_blender_type_set(ht->ext.srna, ht);
+ ht->rna_ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, ht->idname, &RNA_Header);
+ ht->rna_ext.data = data;
+ ht->rna_ext.call = call;
+ ht->rna_ext.free = free;
+ RNA_struct_blender_type_set(ht->rna_ext.srna, ht);
ht->draw = (have_function[0]) ? header_draw : NULL;
@@ -791,13 +795,13 @@ static StructRNA *rna_Header_register(Main *bmain,
/* update while blender is running */
WM_main_add_notifier(NC_WINDOW, NULL);
- return ht->ext.srna;
+ return ht->rna_ext.srna;
}
static StructRNA *rna_Header_refine(PointerRNA *htr)
{
Header *hdr = (Header *)htr->data;
- return (hdr->type && hdr->type->ext.srna) ? hdr->type->ext.srna : &RNA_Header;
+ return (hdr->type && hdr->type->rna_ext.srna) ? hdr->type->rna_ext.srna : &RNA_Header;
}
/* Menu */
@@ -812,12 +816,12 @@ static bool menu_poll(const bContext *C, MenuType *pt)
void *ret;
bool visible;
- RNA_pointer_create(NULL, pt->ext.srna, NULL, &ptr); /* dummy */
- func = &rna_Menu_poll_func; /* RNA_struct_find_function(&ptr, "poll"); */
+ RNA_pointer_create(NULL, pt->rna_ext.srna, NULL, &ptr); /* dummy */
+ func = &rna_Menu_poll_func; /* RNA_struct_find_function(&ptr, "poll"); */
RNA_parameter_list_create(&list, &ptr, func);
RNA_parameter_set_lookup(&list, "context", &C);
- pt->ext.call((bContext *)C, &ptr, func, &list);
+ pt->rna_ext.call((bContext *)C, &ptr, func, &list);
RNA_parameter_get_lookup(&list, "visible", &ret);
visible = *(bool *)ret;
@@ -835,12 +839,12 @@ static void menu_draw(const bContext *C, Menu *menu)
ParameterList list;
FunctionRNA *func;
- RNA_pointer_create(&CTX_wm_screen(C)->id, menu->type->ext.srna, menu, &mtr);
+ RNA_pointer_create(&CTX_wm_screen(C)->id, menu->type->rna_ext.srna, menu, &mtr);
func = &rna_Menu_draw_func; /* RNA_struct_find_function(&mtr, "draw"); */
RNA_parameter_list_create(&list, &mtr, func);
RNA_parameter_set_lookup(&list, "context", &C);
- menu->type->ext.call((bContext *)C, &mtr, func, &list);
+ menu->type->rna_ext.call((bContext *)C, &mtr, func, &list);
RNA_parameter_list_free(&list);
}
@@ -853,7 +857,7 @@ static void rna_Menu_unregister(Main *UNUSED(bmain), StructRNA *type)
return;
}
- RNA_struct_free_extension(type, &mt->ext);
+ RNA_struct_free_extension(type, &mt->rna_ext);
RNA_struct_free(&BLENDER_RNA, type);
WM_menutype_freelink(mt);
@@ -903,8 +907,8 @@ static StructRNA *rna_Menu_register(Main *bmain,
/* check if we have registered this menu type before, and remove it */
mt = WM_menutype_find(dummymt.idname, true);
- if (mt && mt->ext.srna) {
- rna_Menu_unregister(bmain, mt->ext.srna);
+ if (mt && mt->rna_ext.srna) {
+ rna_Menu_unregister(bmain, mt->rna_ext.srna);
}
if (!RNA_struct_available_or_report(reports, dummymt.idname)) {
return NULL;
@@ -931,13 +935,13 @@ static StructRNA *rna_Menu_register(Main *bmain,
mt->description = NULL;
}
- mt->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, mt->idname, &RNA_Menu);
- RNA_def_struct_translation_context(mt->ext.srna, mt->translation_context);
- mt->ext.data = data;
- mt->ext.call = call;
- mt->ext.free = free;
- RNA_struct_blender_type_set(mt->ext.srna, mt);
- RNA_def_struct_flag(mt->ext.srna, STRUCT_NO_IDPROPERTIES);
+ mt->rna_ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, mt->idname, &RNA_Menu);
+ RNA_def_struct_translation_context(mt->rna_ext.srna, mt->translation_context);
+ mt->rna_ext.data = data;
+ mt->rna_ext.call = call;
+ mt->rna_ext.free = free;
+ RNA_struct_blender_type_set(mt->rna_ext.srna, mt);
+ RNA_def_struct_flag(mt->rna_ext.srna, STRUCT_NO_IDPROPERTIES);
mt->poll = (have_function[0]) ? menu_poll : NULL;
mt->draw = (have_function[1]) ? menu_draw : NULL;
@@ -954,13 +958,13 @@ static StructRNA *rna_Menu_register(Main *bmain,
/* update while blender is running */
WM_main_add_notifier(NC_WINDOW, NULL);
- return mt->ext.srna;
+ return mt->rna_ext.srna;
}
static StructRNA *rna_Menu_refine(PointerRNA *mtr)
{
Menu *menu = (Menu *)mtr->data;
- return (menu->type && menu->type->ext.srna) ? menu->type->ext.srna : &RNA_Menu;
+ return (menu->type && menu->type->rna_ext.srna) ? menu->type->rna_ext.srna : &RNA_Menu;
}
static void rna_Menu_bl_description_set(PointerRNA *ptr, const char *value)
@@ -1281,6 +1285,18 @@ static void rna_def_panel(BlenderRNA *brna)
"Hide Header",
"If set to False, the panel shows a header, which contains a clickable "
"arrow to collapse the panel and the label (see bl_label)"},
+ {PNL_INSTANCED,
+ "INSTANCED",
+ 0,
+ "Instanced Panel",
+ "Multiple panels with this type can be used as part of a list depending on data external "
+ "to the UI. Used to create panels for the modifiers and other stacks."},
+ {PNL_LAYOUT_HEADER_EXPAND,
+ "HEADER_LAYOUT_EXPAND",
+ 0,
+ "Expand Header Layout",
+ "Allow buttons in the header to stretch and shrink to fill the entire layout width"},
+ {PNL_DRAW_BOX, "DRAW_BOX", 0, "Box Style", "Draw panel with the box widget theme"},
{0, NULL, 0, NULL, NULL},
};
@@ -1328,6 +1344,11 @@ static void rna_def_panel(BlenderRNA *brna)
RNA_def_property_string_sdna(prop, NULL, "drawname");
RNA_def_property_ui_text(prop, "Text", "XXX todo");
+ prop = RNA_def_int(
+ srna, "list_panel_index", 0, 0, INT_MAX, "Instanced Panel Data Index", "", 0, INT_MAX);
+ RNA_def_property_int_sdna(prop, NULL, "runtime.list_index");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
/* registration */
prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "type->idname");