[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