[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24974] trunk/blender/source/blender: experemental UI introspection added for mindrones,
Campbell Barton
ideasman42 at gmail.com
Sat Nov 28 19:23:16 CET 2009
This script lets you intercept each draw call and introspect the UI
after its been created.
just run it and then see the console when your panels & headers redraw
http://www.pasteall.org/9501/python
On Sat, Nov 28, 2009 at 6:45 PM, Campbell Barton <ideasman42 at gmail.com> wrote:
> Revision: 24974
> http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24974
> Author: campbellbarton
> Date: 2009-11-28 18:45:23 +0100 (Sat, 28 Nov 2009)
>
> Log Message:
> -----------
> experemental UI introspection added for mindrones,
> in python this gives a map of the ui...
> ui_dict = eval(layout.introspect())
>
> Modified Paths:
> --------------
> trunk/blender/source/blender/editors/include/UI_interface.h
> trunk/blender/source/blender/editors/interface/interface_layout.c
> trunk/blender/source/blender/makesrna/intern/rna_ui_api.c
> trunk/blender/source/blender/windowmanager/intern/wm_operators.c
>
> Modified: trunk/blender/source/blender/editors/include/UI_interface.h
> ===================================================================
> --- trunk/blender/source/blender/editors/include/UI_interface.h 2009-11-28 17:30:56 UTC (rev 24973)
> +++ trunk/blender/source/blender/editors/include/UI_interface.h 2009-11-28 17:45:23 UTC (rev 24974)
> @@ -600,6 +600,7 @@
>
> void uiLayoutSetFunc(uiLayout *layout, uiMenuHandleFunc handlefunc, void *argv);
> void uiLayoutSetContextPointer(uiLayout *layout, char *name, struct PointerRNA *ptr);
> +char *uiLayoutIntrospect(uiLayout *layout); // XXX - testing
>
> void uiLayoutSetOperatorContext(uiLayout *layout, int opcontext);
> void uiLayoutSetActive(uiLayout *layout, int active);
>
> Modified: trunk/blender/source/blender/editors/interface/interface_layout.c
> ===================================================================
> --- trunk/blender/source/blender/editors/interface/interface_layout.c 2009-11-28 17:30:56 UTC (rev 24973)
> +++ trunk/blender/source/blender/editors/interface/interface_layout.c 2009-11-28 17:45:23 UTC (rev 24974)
> @@ -2454,3 +2454,89 @@
> layout->context= CTX_store_add(&block->contexts, name, ptr);
> }
>
> +
> +/* introspect funcs */
> +#include "BLI_dynstr.h"
> +
> +static void ui_intro_button(DynStr *ds, uiButtonItem *bitem)
> +{
> + uiBut *but = bitem->but;
> + BLI_dynstr_appendf(ds, "'type':%d, ", but->type); /* see ~ UI_interface.h:200 */
> + BLI_dynstr_appendf(ds, "'draw_string':'''%s''', ", but->drawstr);
> + BLI_dynstr_appendf(ds, "'tip':'''%s''', ", but->tip ? but->tip : ""); // not exactly needed, rna has this
> +
> + if(but->optype) {
> + char *opstr = WM_operator_pystring(but->block->evil_C, but->optype, but->opptr, 0);
> + BLI_dynstr_appendf(ds, "'operator':'''%s''', ", opstr ? opstr : "");
> + MEM_freeN(opstr);
> + }
> +
> + if(but->rnaprop) {
> + BLI_dynstr_appendf(ds, "'rna':'%s.%s[%d]', ", RNA_struct_identifier(but->rnapoin.type), RNA_property_identifier(but->rnaprop), but->rnaindex);
> + }
> +
> +}
> +
> +static void ui_intro_items(DynStr *ds, ListBase *lb)
> +{
> + uiItem *item;
> +
> + BLI_dynstr_append(ds, "[");
> +
> + for(item=lb->first; item; item=item->next) {
> +
> + BLI_dynstr_append(ds, "{");
> +
> + /* could also use the INT but this is nicer*/
> + switch(item->type) {
> + case ITEM_BUTTON: BLI_dynstr_append(ds, "'type':'BUTTON', ");break;
> + case ITEM_LAYOUT_ROW: BLI_dynstr_append(ds, "'type':'ROW', "); break;
> + case ITEM_LAYOUT_COLUMN: BLI_dynstr_append(ds, "'type':'COLUMN', "); break;
> + case ITEM_LAYOUT_COLUMN_FLOW:BLI_dynstr_append(ds, "'type':'COLUMN_FLOW', "); break;
> + case ITEM_LAYOUT_ROW_FLOW: BLI_dynstr_append(ds, "'type':'ROW_FLOW', "); break;
> + case ITEM_LAYOUT_BOX: BLI_dynstr_append(ds, "'type':'BOX', "); break;
> + case ITEM_LAYOUT_ABSOLUTE: BLI_dynstr_append(ds, "'type':'ABSOLUTE', "); break;
> + case ITEM_LAYOUT_SPLIT: BLI_dynstr_append(ds, "'type':'SPLIT', "); break;
> + case ITEM_LAYOUT_OVERLAP: BLI_dynstr_append(ds, "'type':'OVERLAP', "); break;
> + case ITEM_LAYOUT_ROOT: BLI_dynstr_append(ds, "'type':'ROOT', "); break;
> + default: BLI_dynstr_append(ds, "'type':'UNKNOWN', "); break;
> + }
> +
> + switch(item->type) {
> + case ITEM_BUTTON:
> + ui_intro_button(ds, (uiButtonItem *)item);
> + break;
> + default:
> + BLI_dynstr_append(ds, "'items':");
> + ui_intro_items(ds, &((uiLayout*)item)->items);
> + break;
> + }
> +
> + BLI_dynstr_append(ds, "}");
> +
> + if(item != lb->last)
> + BLI_dynstr_append(ds, ", ");
> + }
> + BLI_dynstr_append(ds, "], ");
> +}
> +
> +static void ui_intro_uiLayout(DynStr *ds, uiLayout *layout)
> +{
> + ui_intro_items(ds, &layout->items);
> +}
> +
> +static char *str = NULL; // XXX, constant re-freeing, far from ideal.
> +char *uiLayoutIntrospect(uiLayout *layout)
> +{
> + DynStr *ds= BLI_dynstr_new();
> +
> + if(str)
> + MEM_freeN(str);
> +
> + ui_intro_uiLayout(ds, layout);
> +
> + str = BLI_dynstr_get_cstring(ds);
> + BLI_dynstr_free(ds);
> +
> + return str;
> +}
>
> Modified: trunk/blender/source/blender/makesrna/intern/rna_ui_api.c
> ===================================================================
> --- trunk/blender/source/blender/makesrna/intern/rna_ui_api.c 2009-11-28 17:30:56 UTC (rev 24973)
> +++ trunk/blender/source/blender/makesrna/intern/rna_ui_api.c 2009-11-28 17:45:23 UTC (rev 24974)
> @@ -348,6 +348,12 @@
>
> func= RNA_def_function(srna, "template_header_3D", "uiTemplateHeader3D");
> RNA_def_function_flag(func, FUNC_USE_CONTEXT);
> +
> +
> +
> + func= RNA_def_function(srna, "introspect", "uiLayoutIntrospect");
> + parm= RNA_def_string(func, "string", "", 1024*1024, "Descr", "DESCR");
> + RNA_def_function_return(func, parm);
> }
> #endif
>
>
> Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
> ===================================================================
> --- trunk/blender/source/blender/windowmanager/intern/wm_operators.c 2009-11-28 17:30:56 UTC (rev 24973)
> +++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c 2009-11-28 17:45:23 UTC (rev 24974)
> @@ -465,8 +465,11 @@
> PointerRNA opptr_default;
> PropertyRNA *prop_default;
> char *buf_default;
> - if(!all_args) {
> + if(all_args==0 || opptr==NULL) {
> WM_operator_properties_create_ptr(&opptr_default, ot);
> +
> + if(opptr==NULL)
> + opptr = &opptr_default;
> }
>
>
> @@ -510,7 +513,7 @@
> }
> RNA_PROP_END;
>
> - if(all_args==0)
> + if(all_args==0 || opptr==&opptr_default )
> WM_operator_properties_free(&opptr_default);
>
> BLI_dynstr_append(dynstr, ")");
>
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>
--
- Campbell
More information about the Bf-blender-cvs
mailing list