[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