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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to