[Bf-blender-cvs] [3f860e0] asset-engine: AssetEngine: add IDProps, and RNA access to actual asset engine from filespace.

Bastien Montagne noreply at git.blender.org
Sat Mar 21 16:49:11 CET 2015


Commit: 3f860e0e733a0f562f24af1b9ab5a3ffa7a67e10
Author: Bastien Montagne
Date:   Tue Mar 17 21:07:57 2015 +0100
Branches: asset-engine
https://developer.blender.org/rB3f860e0e733a0f562f24af1b9ab5a3ffa7a67e10

AssetEngine: add IDProps, and RNA access to actual asset engine from filespace.

Also, some quick dummy test/demo code for that in Amber.

===================================================================

M	release/scripts/startup/bl_operators/amber.py
M	release/scripts/startup/bl_ui/space_filebrowser.py
M	source/blender/blenkernel/BKE_asset.h
M	source/blender/blenkernel/intern/asset.c
M	source/blender/editors/include/ED_fileselect.h
M	source/blender/editors/space_file/filelist.c
M	source/blender/makesrna/intern/rna_asset.c
M	source/blender/makesrna/intern/rna_space.c
M	source/blenderplayer/bad_level_call_stubs/stubs.c

===================================================================

diff --git a/release/scripts/startup/bl_operators/amber.py b/release/scripts/startup/bl_operators/amber.py
index 7f56eb2..a80307c 100644
--- a/release/scripts/startup/bl_operators/amber.py
+++ b/release/scripts/startup/bl_operators/amber.py
@@ -22,7 +22,7 @@
 #       as a startup module!
 
 import bpy
-from bpy.types import AssetEngine
+from bpy.types import AssetEngine, Panel
 from bpy.props import (
         StringProperty,
         BoolProperty,
@@ -253,10 +253,16 @@ class AmberJobList(AmberJob):
 
 
 ###########################
-# Mains Asset Engine class.
+# Main Asset Engine class.
 class AssetEngineAmber(AssetEngine):
     bl_label = "Amber"
 
+    max_entries = IntProperty(
+            name="Max Entries",
+            description="Max number of entries to return as a 'list' request (avoids risks of 'explosion' on big repos)",
+            min=10, max=10000, default=1000,
+    )
+
     def __init__(self):
         self.executor = futures.ThreadPoolExecutor(8)  # Using threads for now, if issues arise we'll switch to process.
         self.jobs = {}
@@ -328,6 +334,34 @@ class AssetEngineAmber(AssetEngine):
         return True
 
 
+##########
+# UI stuff
+
+class AmberPanel():
+    @classmethod
+    def poll(cls, context):
+        space = context.space_data
+        if space and space.type == 'FILE_BROWSER':
+            ae = space.asset_engine
+            if ae and space.asset_engine_type == "AssetEngineAmber":
+                return True
+        return False
+
+class AMBER_PT_options(Panel, AmberPanel):
+    bl_space_type = 'FILE_BROWSER'
+    bl_region_type = 'TOOLS'
+    bl_category = "Asset Engine"
+    bl_label = "Amber Options"
+
+    def draw(self, context):
+        layout = self.layout
+        space = context.space_data
+        ae = space.asset_engine
+
+        row = layout.row()
+        row.prop(ae, "max_entries")
+
+
 if __name__ == "__main__":  # only for live edit.
     bpy.utils.register_module(__name__)
     bpy.utils.register_class(AssetEngineFlame)
diff --git a/release/scripts/startup/bl_ui/space_filebrowser.py b/release/scripts/startup/bl_ui/space_filebrowser.py
index 2cf2e8e..2167317 100644
--- a/release/scripts/startup/bl_ui/space_filebrowser.py
+++ b/release/scripts/startup/bl_ui/space_filebrowser.py
@@ -34,7 +34,7 @@ class FILEBROWSER_HT_header(Header):
         layout.template_header()
 
         row = layout.row()
-        row.prop(st, "asset_engine", text="")
+        row.prop(st, "asset_engine_type", text="")
         row.separator()
 
         row = layout.row(align=True)
diff --git a/source/blender/blenkernel/BKE_asset.h b/source/blender/blenkernel/BKE_asset.h
index 6036064..7ee314a 100644
--- a/source/blender/blenkernel/BKE_asset.h
+++ b/source/blender/blenkernel/BKE_asset.h
@@ -47,6 +47,7 @@ struct FileDirEntryVariant;
 struct FileDirEntryRevision;
 struct ExtensionRNA;
 struct ID;
+struct IDProperty;
 struct ListBase;
 struct uiLayout;
 
@@ -123,6 +124,9 @@ typedef struct AssetEngine {
 	AssetEngineType *type;
 	void *py_instance;
 
+	/* Custom sub-classes properties. */
+	IDProperty *properties;
+
 	int flag;
 	int refcount;
 
diff --git a/source/blender/blenkernel/intern/asset.c b/source/blender/blenkernel/intern/asset.c
index 8321523..d5df5f4 100644
--- a/source/blender/blenkernel/intern/asset.c
+++ b/source/blender/blenkernel/intern/asset.c
@@ -46,6 +46,7 @@
 #include "BLI_utildefines.h"
 
 #include "BKE_global.h"
+#include "BKE_idprop.h"
 #include "BKE_report.h"
 #include "BKE_asset.h"
 
@@ -131,6 +132,11 @@ void BKE_asset_engine_free(AssetEngine *engine)
 		}
 #endif
 
+		if (engine->properties) {
+			IDP_FreeProperty(engine->properties);
+			MEM_freeN(engine->properties);
+		}
+
 		MEM_freeN(engine);
 	}
 }
diff --git a/source/blender/editors/include/ED_fileselect.h b/source/blender/editors/include/ED_fileselect.h
index b81ea55..8625fa1 100644
--- a/source/blender/editors/include/ED_fileselect.h
+++ b/source/blender/editors/include/ED_fileselect.h
@@ -32,6 +32,7 @@
 #define __ED_FILESELECT_H__
 
 struct ARegion;
+struct AssetEngine;
 struct FileSelectParams;
 struct SpaceFile;
 struct bContext;
@@ -110,6 +111,8 @@ void ED_file_read_bookmarks(void);
 
 void ED_file_change_dir(struct bContext *C, const bool checkdir);
 
+struct AssetEngine *ED_filelist_assetengine_get(struct SpaceFile *sfile);
+
 /* File menu stuff */
 
 typedef enum FSMenuCategory {
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index 2555bb8..bc1b996 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -1054,6 +1054,11 @@ void filelist_assetengine_set(struct FileList *filelist, struct AssetEngineType
 	filelist->force_reset = true;
 }
 
+AssetEngine *ED_filelist_assetengine_get(SpaceFile *sfile)
+{
+	return sfile->files->ae;
+}
+
 const char *filelist_dir(struct FileList *filelist)
 {
 	return filelist->filelist.root;
diff --git a/source/blender/makesrna/intern/rna_asset.c b/source/blender/makesrna/intern/rna_asset.c
index ad0e154..73d53de 100644
--- a/source/blender/makesrna/intern/rna_asset.c
+++ b/source/blender/makesrna/intern/rna_asset.c
@@ -36,6 +36,7 @@
 #include "rna_internal.h"
 
 #include "BKE_asset.h"
+#include "BKE_idprop.h"
 
 #ifdef RNA_RUNTIME
 
@@ -512,6 +513,17 @@ static StructRNA *rna_AssetEngine_refine(PointerRNA *ptr)
 	return (engine->type && engine->type->ext.srna) ? engine->type->ext.srna : &RNA_AssetEngine;
 }
 
+static IDProperty *rna_AssetEngine_idprops(PointerRNA *ptr, bool create)
+{
+	AssetEngine *ae = (AssetEngine *)ptr->data;
+	if (create && !ae->properties) {
+		IDPropertyTemplate val = {0};
+		ae->properties = IDP_New(IDP_GROUP, &val, "RNA_AssetEngine IDproperties group");
+	}
+
+	return ae->properties;
+}
+
 #else /* RNA_RUNTIME */
 
 /* Much lighter version of asset/variant/revision identifier. */
@@ -829,6 +841,7 @@ static void rna_def_asset_engine(BlenderRNA *brna)
 	RNA_def_struct_refine_func(srna, "rna_AssetEngine_refine");
 	RNA_def_struct_register_funcs(srna, "rna_AssetEngine_register", "rna_AssetEngine_unregister",
 	                              "rna_AssetEngine_instance");
+	RNA_def_struct_idprops_func(srna, "rna_AssetEngine_idprops");
 
 	/* Status callback */
 	func = RNA_def_function(srna, "status", NULL);
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 67d9562..8e6665b 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -1383,13 +1383,13 @@ static int rna_SpaceFileBrowser_use_lib_get(PointerRNA *ptr)
 	return sf->params && (sf->params->type == FILE_LOADLIB);
 }
 
-static int rna_FileBrowser_AE_enum_get(PointerRNA *ptr)
+static int rna_FileBrowser_AE_type_enum_get(PointerRNA *ptr)
 {
 	SpaceFile *sf = ptr->data;
 	return BLI_findstringindex(&asset_engines, sf->asset_engine, offsetof(AssetEngineType, idname));
 }
 
-static void rna_FileBrowser_AE_enum_set(PointerRNA *ptr, const int value)
+static void rna_FileBrowser_AE_type_enum_set(PointerRNA *ptr, const int value)
 {
 	SpaceFile *sf = ptr->data;
 	AssetEngineType *aet = BLI_findlink(&asset_engines, value);
@@ -1399,7 +1399,7 @@ static void rna_FileBrowser_AE_enum_set(PointerRNA *ptr, const int value)
 	}
 }
 
-static EnumPropertyItem *rna_FileBrowser_AE_enum_itemf(
+static EnumPropertyItem *rna_FileBrowser_AE_type_enum_itemf(
         bContext *UNUSED(C), PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
 {
 	EnumPropertyItem *items = NULL;
@@ -1417,6 +1417,13 @@ static EnumPropertyItem *rna_FileBrowser_AE_enum_itemf(
 	return items;
 }
 
+static PointerRNA rna_FileBrowser_AE_ptr_get(PointerRNA *ptr)
+{
+	SpaceFile *sfile = ptr->data;
+	AssetEngine *ae = ED_filelist_assetengine_get(sfile);
+	return rna_pointer_inherit_refine(ptr, &RNA_AssetEngine, ae);
+}
+
 static void rna_FileBrowser_FSMenuEntry_path_get(PointerRNA *ptr, char *value)
 {
 	char *path = ED_fsmenu_entry_get_path(ptr->data);
@@ -3747,13 +3754,19 @@ static void rna_def_space_filebrowser(BlenderRNA *brna)
 	RNA_def_struct_sdna(srna, "SpaceFile");
 	RNA_def_struct_ui_text(srna, "Space File Browser", "File browser space data");
 
-	prop = RNA_def_property(srna, "asset_engine", PROP_ENUM, PROP_NONE);
-	RNA_def_property_ui_text(prop, "Asset Engine", "Active asset engine");
+	prop = RNA_def_property(srna, "asset_engine_type", PROP_ENUM, PROP_NONE);
+	RNA_def_property_ui_text(prop, "Asset Engine Type", "Active asset engine type");
 	RNA_def_property_enum_items(prop, asset_engine_items);
-	RNA_def_property_enum_funcs(prop, "rna_FileBrowser_AE_enum_get", "rna_FileBrowser_AE_enum_set",
-	                            "rna_FileBrowser_AE_enum_itemf");
+	RNA_def_property_enum_funcs(prop, "rna_FileBrowser_AE_type_enum_get", "rna_FileBrowser_AE_type_enum_set",
+	                            "rna_FileBrowser_AE_type_enum_itemf");
 	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_FILE_PARAMS, NULL);
 
+	prop = RNA_def_property(srna, "asset_engine", PROP_POINTER, PROP_NONE);
+	RNA_def_property_ui_text(prop, "Asset Engine", "Active asset engine");
+	RNA_def_property_struct_type(prop, "AssetEngine");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_pointer_funcs(prop, "rna_FileBrowser_AE_ptr_get", NULL, NULL, NULL);
+
 	prop = RNA_def_property(srna, "params", PROP_POINTER, PROP_NONE);
 	RNA_def_property_pointer_sdna(prop, NULL, "params");
 	RNA_def_property_ui_text(prop, "Filebrowser Parameter", "Parameters and Settings for the Filebrowser");
diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c
index 66600bd..91a143e 100644
--- a/source/blenderplayer/bad_level_call_stubs/stubs.c
+++ b/source/blenderplayer/bad_level_call_stubs/stubs.c
@@ -43,6 +43,7 @@
 
 struct ARegion;
 struct ARegionType;
+struct AssetEngine;
 struct BMEditMesh;
 struct Base;
 struct BoundBox;
@@ -354,6 +355,8 @@ void ED_space_image_set_mask(struct bContext *C, struct SpaceImage *sima, struct
 void ED_area_tag_redraw_regiontype(struct ScrArea *sa, int regiontype) RET_NONE
 void ED_render_engine_changed(struct Main *bmain) RET_NONE
 
+struct AssetEngine *ED_filelist_assetengine_get(struct 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list