[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45321] branches/asset-browser: Adding a new ItemList widget that is accessible via Python like Panels.

Andrea Weikert elubie at gmx.net
Sun Apr 1 22:33:36 CEST 2012


Revision: 45321
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45321
Author:   elubie
Date:     2012-04-01 20:33:26 +0000 (Sun, 01 Apr 2012)
Log Message:
-----------
Adding a new ItemList widget that is accessible via Python like Panels.
Currently drawing code is primitive (just a label as demo) but can be extended.

Modified Paths:
--------------
    branches/asset-browser/release/scripts/modules/bpy_types.py
    branches/asset-browser/release/scripts/startup/bl_ui/space_asset.py
    branches/asset-browser/source/blender/blenkernel/BKE_screen.h
    branches/asset-browser/source/blender/blenkernel/intern/screen.c
    branches/asset-browser/source/blender/editors/include/ED_screen.h
    branches/asset-browser/source/blender/editors/screen/area.c
    branches/asset-browser/source/blender/editors/space_asset/space_asset.c
    branches/asset-browser/source/blender/makesdna/DNA_screen_types.h
    branches/asset-browser/source/blender/makesrna/RNA_access.h
    branches/asset-browser/source/blender/makesrna/intern/rna_ui.c

Modified: branches/asset-browser/release/scripts/modules/bpy_types.py
===================================================================
--- branches/asset-browser/release/scripts/modules/bpy_types.py	2012-04-01 15:25:07 UTC (rev 45320)
+++ branches/asset-browser/release/scripts/modules/bpy_types.py	2012-04-01 20:33:26 UTC (rev 45321)
@@ -667,7 +667,9 @@
 class Header(StructRNA, _GenericUI, metaclass=RNAMeta):
     __slots__ = ()
 
-
+class ItemList(StructRNA, _GenericUI, metaclass=RNAMeta):
+    __slots__ = ()
+    
 class Menu(StructRNA, _GenericUI, metaclass=RNAMeta):
     __slots__ = ()
 

Modified: branches/asset-browser/release/scripts/startup/bl_ui/space_asset.py
===================================================================
--- branches/asset-browser/release/scripts/startup/bl_ui/space_asset.py	2012-04-01 15:25:07 UTC (rev 45320)
+++ branches/asset-browser/release/scripts/startup/bl_ui/space_asset.py	2012-04-01 20:33:26 UTC (rev 45321)
@@ -35,7 +35,24 @@
         row.template_header()
 
         layout.separator()
+
+class AssetItemList(bpy.types.ItemList):
+    bl_label = "Asset Item List"
+    bl_idname = "ASSET_IL_assets"
+    bl_space_type = "ASSET_BROWSER"
+    bl_region_type = "WINDOW"
+    
+    @classmethod
+    def poll(cls, context):
+        return True
+
+    def draw(self, context):
+        layout = self.layout
+        sasset = context.space_data
         
+        col = layout.column(align=True)
+        col.label(text="Hello World!")
+    
 class AssetCollectionsPanel(bpy.types.Panel):
     bl_label = "Asset Collections"
     bl_idname = "ASSET_PT_collections"

Modified: branches/asset-browser/source/blender/blenkernel/BKE_screen.h
===================================================================
--- branches/asset-browser/source/blender/blenkernel/BKE_screen.h	2012-04-01 15:25:07 UTC (rev 45320)
+++ branches/asset-browser/source/blender/blenkernel/BKE_screen.h	2012-04-01 20:33:26 UTC (rev 45321)
@@ -145,6 +145,9 @@
 	/* header type definitions */
 	ListBase headertypes;
 	
+	/* itemlist type definitions */
+	ListBase itemlisttypes;
+
 	/* hardcoded constraints, smaller than these values region is not visible */
 	int			minsizex, minsizey;
 	/* when new region opens (region prefsizex/y are zero then */
@@ -223,6 +226,32 @@
 	struct uiLayout *layout;	/* runtime for drawing */
 } Menu;
 
+/* menu types */
+
+typedef struct ItemListType {
+	struct ItemListType *next, *prev;
+
+	char		idname[BKE_ST_MAXNAME];	/* unique name */
+	char		label[BKE_ST_MAXNAME];	/* for button text */
+	char       *description;
+
+	int			space_type;
+	int			region_type;
+
+	/* verify if the item list should draw or not */
+	int			(*poll)(const struct bContext *, struct MenuType *);
+	/* draw entirely, view changes should be handled here */
+	void		(*draw)(const struct bContext *, struct Menu *);	
+
+	/* RNA integration */
+	ExtensionRNA ext;
+} ItemListType;
+
+typedef struct ItemList {
+	struct ItemListType *type;		/* runtime */
+	struct uiLayout *layout;	/* runtime for drawing */
+} ItemList;
+
 /* spacetypes */
 struct SpaceType *BKE_spacetype_from_id(int spaceid);
 struct ARegionType *BKE_regiontype_from_id(struct SpaceType *st, int regionid);

Modified: branches/asset-browser/source/blender/blenkernel/intern/screen.c
===================================================================
--- branches/asset-browser/source/blender/blenkernel/intern/screen.c	2012-04-01 15:25:07 UTC (rev 45320)
+++ branches/asset-browser/source/blender/blenkernel/intern/screen.c	2012-04-01 20:33:26 UTC (rev 45321)
@@ -72,6 +72,7 @@
 
 		BLI_freelistN(&art->paneltypes);
 		BLI_freelistN(&art->headertypes);
+		BLI_freelistN(&art->itemlisttypes);
 	}
 	
 	BLI_freelistN(&st->regiontypes);

Modified: branches/asset-browser/source/blender/editors/include/ED_screen.h
===================================================================
--- branches/asset-browser/source/blender/editors/include/ED_screen.h	2012-04-01 15:25:07 UTC (rev 45320)
+++ branches/asset-browser/source/blender/editors/include/ED_screen.h	2012-04-01 20:33:26 UTC (rev 45321)
@@ -61,6 +61,8 @@
 void	ED_region_tag_redraw_overlay(struct ARegion *ar);
 void	ED_region_panels_init(struct wmWindowManager *wm, struct ARegion *ar);
 void	ED_region_panels(const struct bContext *C, struct ARegion *ar, int vertical, const char *context, int contextnr);
+void	ED_region_itemlist_init(struct wmWindowManager *wm, ARegion *ar);
+void	ED_region_itemlist(const struct bContext *C, struct ARegion *ar);
 void	ED_region_header_init(struct ARegion *ar);
 void	ED_region_header(const struct bContext *C, struct ARegion *ar);
 void	ED_region_toggle_hidden(struct bContext *C, struct ARegion *ar);

Modified: branches/asset-browser/source/blender/editors/screen/area.c
===================================================================
--- branches/asset-browser/source/blender/editors/screen/area.c	2012-04-01 15:25:07 UTC (rev 45320)
+++ branches/asset-browser/source/blender/editors/screen/area.c	2012-04-01 20:33:26 UTC (rev 45321)
@@ -1714,6 +1714,72 @@
 	WM_event_add_keymap_handler(&ar->handlers, keymap);
 }
 
+void ED_region_itemlist_init(wmWindowManager *wm, ARegion *ar)
+{
+	wmKeyMap *keymap;
+	
+	UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST, ar->winx, ar->winy);
+
+	keymap= WM_keymap_find(wm->defaultconf, "View2D Buttons List", 0, 0);
+	WM_event_add_keymap_handler(&ar->handlers, keymap);
+}
+
+void ED_region_itemlist(const bContext *C, ARegion *ar)
+{
+	uiStyle *style= UI_GetStyle();
+	uiBlock *block;
+	uiLayout *layout;
+	ItemListType *ilt;
+	ItemList itemList = {NULL};
+	int maxco, xco, yco;
+	int headery= ED_area_headersize();
+
+	/* clear */	
+	UI_ThemeClearColor((ED_screen_area_active(C))?TH_HEADER:TH_HEADERDESEL);
+	glClear(GL_COLOR_BUFFER_BIT);
+	
+	/* set view2d view matrix for scrolling (without scrollers) */
+	UI_view2d_view_ortho(&ar->v2d);
+	
+	headery = ar->v2d.tot.ymax;
+
+	xco= maxco= 8;
+	yco= headery-4;
+
+	/* draw all headers types */
+	for(ilt= ar->type->itemlisttypes.first; ilt; ilt= ilt->next) {
+		block= uiBeginBlock(C, ar, ilt->idname, UI_EMBOSS);
+		layout= uiBlockLayout(block, UI_LAYOUT_HORIZONTAL, UI_LAYOUT_HEADER, xco, yco, UI_UNIT_Y, 1, style);
+
+		if(ilt->draw) {
+			itemList.type= ilt;
+			itemList.layout= layout;
+			ilt->draw(C, &itemList);
+			
+			/* for view2d */
+			xco= uiLayoutGetWidth(layout);
+			if(xco > maxco)
+				maxco= xco;
+		}
+
+		uiBlockLayoutResolve(block, &xco, &yco);
+		
+		/* for view2d */
+		if(xco > maxco)
+			maxco= xco;
+		
+		uiEndBlock(C, block);
+		uiDrawBlock(C, block);
+	}
+
+	/* always as last  */
+	UI_view2d_totRect_set(&ar->v2d, maxco+UI_UNIT_X+80, ar->v2d.tot.ymax-ar->v2d.tot.ymin);
+
+	/* restore view matrix? */
+	UI_view2d_view_restore(C);
+
+}
+
 void ED_region_header(const bContext *C, ARegion *ar)
 {
 	uiStyle *style= UI_GetStyle();

Modified: branches/asset-browser/source/blender/editors/space_asset/space_asset.c
===================================================================
--- branches/asset-browser/source/blender/editors/space_asset/space_asset.c	2012-04-01 15:25:07 UTC (rev 45320)
+++ branches/asset-browser/source/blender/editors/space_asset/space_asset.c	2012-04-01 20:33:26 UTC (rev 45321)
@@ -120,6 +120,8 @@
 
 	UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy);
 
+	ED_region_itemlist_init(wm, ar);
+
 	/* own keymap */
 	keymap= WM_keymap_find(wm->defaultconf, "Library", SPACE_ASSET, 0);
 	WM_event_add_keymap_handler(&ar->handlers, keymap);
@@ -149,12 +151,7 @@
 
 	/* do drawing here */
 	
-	if (ac) {
-		bAssetFile *af = (bAssetFile *)ac->asset_files.first;
-		if (af) {
-			printf("%s\n", af->filepath);
-		}
-	}
+	ED_region_itemlist(C, ar);
 
 	/* reset view matrix */
 	UI_view2d_totRect_set(v2d, ar->winx-1, ar->winy-1);

Modified: branches/asset-browser/source/blender/makesdna/DNA_screen_types.h
===================================================================
--- branches/asset-browser/source/blender/makesdna/DNA_screen_types.h	2012-04-01 15:25:07 UTC (rev 45320)
+++ branches/asset-browser/source/blender/makesdna/DNA_screen_types.h	2012-04-01 20:33:26 UTC (rev 45321)
@@ -168,7 +168,8 @@
 	ListBase uiblocks;			/* uiBlock */
 	ListBase panels;			/* Panel */
 	ListBase handlers;			/* wmEventHandler */
-	
+	ListBase itemlists;			/* ItemList */
+
 	char *headerstr;			/* use this string to draw info */
 	void *regiondata;			/* XXX 2.50, need spacedata equivalent? */
 } ARegion;

Modified: branches/asset-browser/source/blender/makesrna/RNA_access.h
===================================================================
--- branches/asset-browser/source/blender/makesrna/RNA_access.h	2012-04-01 15:25:07 UTC (rev 45320)
+++ branches/asset-browser/source/blender/makesrna/RNA_access.h	2012-04-01 20:33:26 UTC (rev 45321)
@@ -272,6 +272,7 @@
 extern StructRNA RNA_InflowFluidSettings;
 extern StructRNA RNA_IntProperty;
 extern StructRNA RNA_Itasc;
+extern StructRNA RNA_ItemList;
 extern StructRNA RNA_JoystickSensor;
 extern StructRNA RNA_Key;
 extern StructRNA RNA_KeyConfig;

Modified: branches/asset-browser/source/blender/makesrna/intern/rna_ui.c
===================================================================
--- branches/asset-browser/source/blender/makesrna/intern/rna_ui.c	2012-04-01 15:25:07 UTC (rev 45320)
+++ branches/asset-browser/source/blender/makesrna/intern/rna_ui.c	2012-04-01 20:33:26 UTC (rev 45321)
@@ -494,6 +494,137 @@
 	else		assert(!"setting the bl_description on a non-builtin menu");
 }
 
+
+/* ItemList */
+
+static int itemlist_poll(const bContext *C, ItemListType *ilt)
+{
+	extern FunctionRNA rna_ItemList_poll_func;
+
+	PointerRNA ptr;
+	ParameterList list;
+	FunctionRNA *func;
+	void *ret;
+	int visible;
+
+	RNA_pointer_create(NULL, ilt->ext.srna, NULL, &ptr); /* dummy */
+	func = &rna_ItemList_poll_func; /* RNA_struct_find_function(&ptr, "poll"); */
+
+	RNA_parameter_list_create(&list, &ptr, func);
+	RNA_parameter_set_lookup(&list, "context", &C);
+	ilt->ext.call((bContext *)C, &ptr, func, &list);
+
+	RNA_parameter_get_lookup(&list, "visible", &ret);
+	visible = *(int*)ret;
+
+	RNA_parameter_list_free(&list);
+
+	return visible;
+}
+
+static void itemlist_draw(const bContext *C, ItemList *il)
+{
+	extern FunctionRNA rna_ItemList_draw_func;
+
+	PointerRNA mtr;
+	ParameterList list;
+	FunctionRNA *func;
+
+	RNA_pointer_create(&CTX_wm_screen(C)->id, il->type->ext.srna, il, &mtr);
+	func = &rna_ItemList_draw_func; /* RNA_struct_find_function(&mtr, "draw"); */
+

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list