[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19792] branches/blender2.5/blender/source /blender: RNA:
Brecht Van Lommel
brecht at blender.org
Sun Apr 19 19:12:16 CEST 2009
Revision: 19792
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19792
Author: blendix
Date: 2009-04-19 19:12:16 +0200 (Sun, 19 Apr 2009)
Log Message:
-----------
RNA:
* Wrapped HeaderType/Header.
* Some tweaks to get type properties wrapped with less code.
* Made Panel space and region types enum instead of string.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
branches/blender2.5/blender/source/blender/editors/space_text/text_header.c
branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h
branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui.c
Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h 2009-04-19 16:35:20 UTC (rev 19791)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h 2009-04-19 17:12:16 UTC (rev 19792)
@@ -37,6 +37,7 @@
struct bScreen;
struct ListBase;
struct Panel;
+struct Header;
struct ScrArea;
struct SpaceType;
struct wmNotifier;
@@ -149,8 +150,8 @@
char idname[BKE_ST_MAXNAME]; /* unique name */
char label[BKE_ST_MAXNAME]; /* for panel header */
char context[BKE_ST_MAXNAME]; /* for buttons window */
- char space_type[BKE_ST_MAXNAME];
- char region_type[BKE_ST_MAXNAME];
+ int space_type;
+ int region_type;
/* verify if the panel should draw or not */
int (*poll)(const struct bContext *, struct PanelType *);
@@ -169,14 +170,17 @@
typedef struct HeaderType {
struct HeaderType *next, *prev;
- char *idname; /* unique name */
- char *name; /* for UI */
+ char idname[BKE_ST_MAXNAME]; /* unique name */
+ int space_type;
/* draw entirely, view changes should be handled here */
- void (*draw)(const struct bContext *, struct uiLayout *);
+ void (*draw)(const struct bContext *, struct Header *);
/* python integration */
- void *py_data;
+ void *py_data;
+ struct StructRNA *py_srna;
+ int (*py_call)(struct PointerRNA *, struct FunctionRNA *, struct ParameterList *);
+ void (*py_free)(void *py_data);
} HeaderType;
/* spacetypes */
Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c 2009-04-19 16:35:20 UTC (rev 19791)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c 2009-04-19 17:12:16 UTC (rev 19792)
@@ -1262,6 +1262,7 @@
uiBlock *block;
uiLayout *layout;
HeaderType *ht;
+ Header header = {};
float col[3];
int xco, yco;
@@ -1287,8 +1288,11 @@
block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
layout= uiLayoutBegin(UI_LAYOUT_HORIZONTAL, xco, yco, 24, 1);
- if(ht->draw)
- ht->draw(C, layout);
+ if(ht->draw) {
+ header.type= ht;
+ header.layout= layout;
+ ht->draw(C, &header);
+ }
uiLayoutEnd(C, block, layout, &xco, &yco);
uiEndBlock(C, block);
Modified: branches/blender2.5/blender/source/blender/editors/space_text/text_header.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_text/text_header.c 2009-04-19 16:35:20 UTC (rev 19791)
+++ branches/blender2.5/blender/source/blender/editors/space_text/text_header.c 2009-04-19 17:12:16 UTC (rev 19792)
@@ -357,12 +357,13 @@
/********************** header buttons ***********************/
-static void text_header_draw(const bContext *C, uiLayout *layout)
+static void text_header_draw(const bContext *C, Header *header)
{
bScreen *sc= CTX_wm_screen(C);
SpaceText *st= (SpaceText*)CTX_wm_space_data(C);
PointerRNA spaceptr;
Text *text= st->text;
+ uiLayout *layout= header->layout;
RNA_pointer_create(&sc->id, &RNA_SpaceTextEditor, st, &spaceptr);
@@ -421,8 +422,7 @@
/* header */
ht= MEM_callocN(sizeof(HeaderType), "spacetype text header");
- ht->idname= "TEXT_HT_header";
- ht->name= "Header";
+ strcpy(ht->idname, "TEXT_HT_header");
ht->draw= text_header_draw;
BLI_addhead(&art->headertypes, ht);
}
Modified: branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h 2009-04-19 16:35:20 UTC (rev 19791)
+++ branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h 2009-04-19 17:12:16 UTC (rev 19792)
@@ -39,6 +39,7 @@
struct ARegion;
struct ARegionType;
struct PanelType;
+struct HeaderType;
struct Scene;
struct uiLayout;
struct wmTimer;
@@ -104,6 +105,11 @@
void *activedata; /* runtime for panel manipulation */
} Panel;
+typedef struct Header {
+ struct HeaderType *type; /* runtime */
+ struct uiLayout *layout; /* runtime for drawing */
+} Header;
+
typedef struct ScrArea {
struct ScrArea *next, *prev;
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c 2009-04-19 16:35:20 UTC (rev 19791)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c 2009-04-19 17:12:16 UTC (rev 19792)
@@ -299,12 +299,6 @@
DefRNA.error= 1;
return NULL;
}
-
- if(prop->type == PROP_STRING && ((StringPropertyRNA*)prop)->maxlength == 0) {
- fprintf(stderr, "rna_def_property_get_func: string %s.%s has max length 0.\n", srna->identifier, prop->identifier);
- DefRNA.error= 1;
- return NULL;
- }
}
func= rna_alloc_function_name(srna->identifier, prop->identifier, "get");
@@ -319,7 +313,10 @@
}
else {
rna_print_data_get(f, dp);
- fprintf(f, " BLI_strncpy(value, data->%s, %d);\n", dp->dnaname, sprop->maxlength);
+ if(sprop->maxlength)
+ fprintf(f, " BLI_strncpy(value, data->%s, %d);\n", dp->dnaname, sprop->maxlength);
+ else
+ fprintf(f, " BLI_strncpy(value, data->%s, sizeof(data->%s));\n", dp->dnaname, dp->dnaname);
}
fprintf(f, "}\n\n");
break;
@@ -484,7 +481,10 @@
}
else {
rna_print_data_get(f, dp);
- fprintf(f, " BLI_strncpy(data->%s, value, %d);\n", dp->dnaname, sprop->maxlength);
+ if(sprop->maxlength)
+ fprintf(f, " BLI_strncpy(data->%s, value, %d);\n", dp->dnaname, sprop->maxlength);
+ else
+ fprintf(f, " BLI_strncpy(data->%s, value, sizeof(data->%s));\n", dp->dnaname, dp->dnaname);
}
fprintf(f, "}\n\n");
break;
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c 2009-04-19 16:35:20 UTC (rev 19791)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c 2009-04-19 17:12:16 UTC (rev 19792)
@@ -311,12 +311,26 @@
return 1;
}
else if(cmp == 2) {
+ smember->type= "";
+ smember->name= dnaname;
+ smember->pointerlevel= 0;
+ smember->arraylength= 0;
+
membername= strstr(membername, ".") + strlen(".");
- return rna_find_sdna_member(sdna, sdna->types[sp[0]], membername, smember);
+ rna_find_sdna_member(sdna, sdna->types[sp[0]], membername, smember);
+
+ return 1;
}
else if(cmp == 3) {
+ smember->type= "";
+ smember->name= dnaname;
+ smember->pointerlevel= 0;
+ smember->arraylength= 0;
+
membername= strstr(membername, "->") + strlen("->");
- return rna_find_sdna_member(sdna, sdna->types[sp[0]], membername, smember);
+ rna_find_sdna_member(sdna, sdna->types[sp[0]], membername, smember);
+
+ return 1;
}
}
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui.c 2009-04-19 16:35:20 UTC (rev 19791)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui.c 2009-04-19 17:12:16 UTC (rev 19792)
@@ -28,13 +28,13 @@
#include "RNA_types.h"
#include "rna_internal.h"
+#include "RNA_enum_types.h"
#ifdef RNA_RUNTIME
#include "MEM_guardedalloc.h"
#include "RNA_access.h"
-#include "RNA_enum_types.h"
#include "DNA_screen_types.h"
@@ -49,44 +49,29 @@
#include "WM_api.h"
#include "WM_types.h"
-#define RNA_STRING_FUNCTIONS(fname, member) \
-static void fname##_get(PointerRNA *ptr, char *value) \
-{ \
- BLI_strncpy(value, member, sizeof(member)); \
-} \
-\
-static int fname##_length(PointerRNA *ptr) \
-{ \
- return strlen(member); \
-} \
-\
-static void fname##_set(PointerRNA *ptr, const char *value) \
-{ \
- BLI_strncpy(member, value, sizeof(member)); \
-} \
-
-RNA_STRING_FUNCTIONS(rna_Panel_idname, ((Panel*)ptr->data)->type->idname)
-RNA_STRING_FUNCTIONS(rna_Panel_label, ((Panel*)ptr->data)->type->label)
-RNA_STRING_FUNCTIONS(rna_Panel_context, ((Panel*)ptr->data)->type->context)
-RNA_STRING_FUNCTIONS(rna_Panel_space_type, ((Panel*)ptr->data)->type->space_type)
-RNA_STRING_FUNCTIONS(rna_Panel_region_type, ((Panel*)ptr->data)->type->region_type)
-
-static void panel_draw(const bContext *C, Panel *pnl)
+static ARegionType *region_type_find(ReportList *reports, int space_type, int region_type)
{
- PointerRNA ptr;
- ParameterList *list;
- FunctionRNA *func;
+ SpaceType *st;
+ ARegionType *art;
- RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->py_srna, pnl, &ptr);
- func= RNA_struct_find_function(&ptr, "draw");
+ st= BKE_spacetype_from_id(space_type);
- list= RNA_parameter_list_create(&ptr, func);
- RNA_parameter_set_lookup(list, "context", &C);
- pnl->type->py_call(&ptr, func, list);
+ for(art= (st)? st->regiontypes.first: NULL; art; art= art->next) {
+ if (art->regionid==region_type)
+ break;
+ }
+
+ /* region type not found? abort */
+ if (art==NULL) {
+ BKE_report(reports, RPT_ERROR, "Region not found in spacetype.");
+ return NULL;
+ }
- RNA_parameter_list_free(list);
+ return art;
}
+/* Panel */
+
static int panel_poll(const bContext *C, PanelType *pt)
{
PointerRNA ptr;
@@ -110,76 +95,49 @@
return visible;
}
-static char *enum_as_string(EnumPropertyItem *item)
+static void panel_draw(const bContext *C, Panel *pnl)
{
- DynStr *dynstr= BLI_dynstr_new();
- EnumPropertyItem *e;
- char *cstring;
+ PointerRNA ptr;
+ ParameterList *list;
+ FunctionRNA *func;
- for (e= item; item->identifier; item++) {
- BLI_dynstr_appendf(dynstr, (e==item)?"'%s'":", '%s'", item->identifier);
- }
+ RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->py_srna, pnl, &ptr);
+ func= RNA_struct_find_function(&ptr, "draw");
- cstring = BLI_dynstr_get_cstring(dynstr);
- BLI_dynstr_free(dynstr);
- return cstring;
+ list= RNA_parameter_list_create(&ptr, func);
+ RNA_parameter_set_lookup(list, "context", &C);
+ pnl->type->py_call(&ptr, func, list);
+
+ RNA_parameter_list_free(list);
}
-static int space_region_type_from_panel(PanelType *pt, ReportList *reports, SpaceType **r_st, ARegionType **r_art)
+static void rna_Panel_unregister(const bContext *C, StructRNA *type)
{
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list