[Bf-blender-cvs] [5ffbf49] asset-engine: AssetEngine: Various fixes and new features:
Bastien Montagne
noreply at git.blender.org
Wed Apr 15 16:45:43 CEST 2015
Commit: 5ffbf49439ae87a0eb491055ce5b1abdb388d9c4
Author: Bastien Montagne
Date: Wed Apr 15 16:26:33 2015 +0200
Branches: asset-engine
https://developer.blender.org/rB5ffbf49439ae87a0eb491055ce5b1abdb388d9c4
AssetEngine: Various fixes and new features:
* Let asset engine draw most of header bar itself!
* Pass whole FileSelectParams to AE's sort_filter function.
* Move 'use_library_browsing' to params level (this way AE's sort_filter can be ware of it too).
Amber:
* Now supports real basic sorting/filtering modes
* Also basic support of tags (needs a way to refresh though, currently).
===================================================================
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/editors/space_file/filelist.c
M source/blender/editors/space_file/filelist.h
M source/blender/editors/space_file/space_file.c
M source/blender/makesrna/intern/rna_asset.c
M source/blender/makesrna/intern/rna_space.c
===================================================================
diff --git a/release/scripts/startup/bl_operators/amber.py b/release/scripts/startup/bl_operators/amber.py
index ce1eebe..d100584 100644
--- a/release/scripts/startup/bl_operators/amber.py
+++ b/release/scripts/startup/bl_operators/amber.py
@@ -97,6 +97,10 @@ def uuid_unpack(uuid_hexstr):
return struct.unpack("!iiii", binascii.unhexlify(uuid_hexstr).ljust(16, b'\0'))
+def uuid_unpack_bytes(uuid_bytes):
+ return struct.unpack("!iiii", uuid_bytes.ljust(16, b'\0'))
+
+
def uuid_pack(uuid_iv4):
return binascii.hexlify(struct.pack("!iiii", uuid_iv4))
@@ -194,7 +198,7 @@ class AmberJobList(AmberJob):
self.nbr += 1
if is_dir:
# We only list dirs from real file system.
- uuid = (path.encode()[:8] + b"|" + bytes([self.nbr])).ljust(16, b'\0')
+ uuid = uuid_unpack_bytes((path.encode()[:8] + b"|" + bytes([self.nbr])))
dirs.append((path, size, timestamp, uuid))
done.add(tsk)
self.stat_tasks -= done
@@ -256,6 +260,7 @@ class AssetEngineAmber(AssetEngine):
# Even though it does not seem to be an issue, this is not nice and shall be fixed somehow.
#~ self.executor.shutdown(wait=False)
+ ########## Various helpers ##########
def reset(self):
print("Amber Reset!")
self.root = ""
@@ -265,6 +270,105 @@ class AssetEngineAmber(AssetEngine):
self.sortedfiltered = []
+ def entry_from_uuid(self, entries, euuid, vuuid, ruuid):
+ e = self.repo["entries"][euuid]
+ entry = entries.entries.add()
+ entry.uuid = euuid
+ entry.name = e["name"]
+ entry.description = e["description"]
+ entry.type = {e["file_type"]}
+ entry.blender_type = e["blen_type"]
+ act_rev = None
+ if vuuid == (0, 0, 0, 0):
+ for vuuid, v in e["variants"].items():
+ variant = entry.variants.add()
+ variant.uuid = vuuid
+ variant.name = v["name"]
+ variant.description = v["description"]
+ if vuuid == e["variant_default"]:
+ entry.variants.active = variant
+ for ruuid, r in v["revisions"].items():
+ revision = variant.revisions.add()
+ revision.uuid = ruuid
+ #~ revision.comment = r["comment"]
+ revision.size = r["size"]
+ revision.timestamp = r["timestamp"]
+ if ruuid == v["revision_default"]:
+ variant.revisions.active = revision
+ if vuuid == e["variant_default"]:
+ act_rev = r
+ else:
+ v = e["variants"][vuuid]
+ variant = entry.variants.add()
+ variant.uuid = vuuid
+ variant.name = v["name"]
+ variant.description = v["description"]
+ entry.variants.active = variant
+ if ruuid == (0, 0, 0, 0):
+ for ruuid, r in v["revisions"].items():
+ revision = variant.revisions.add()
+ revision.uuid = ruuid
+ #~ revision.comment = r["comment"]
+ revision.size = r["size"]
+ revision.timestamp = r["timestamp"]
+ if ruuid == v["revision_default"]:
+ variant.revisions.active = revision
+ act_rev = r
+ else:
+ r = v["revisions"][ruuid]
+ revision = variant.revisions.add()
+ revision.uuid = ruuid
+ #~ revision.comment = r["comment"]
+ revision.size = r["size"]
+ revision.timestamp = r["timestamp"]
+ variant.revisions.active = revision
+ act_rev = r
+ if act_rev:
+ entry.relpath = act_rev["path"]
+
+ ########## PY-API only ##########
+ # UI header
+ def draw_header(self, layout, context):
+ st = context.space_data
+ params = st.params
+
+ # can be None when save/reload with a file selector open
+ if params:
+ is_lib_browser = params.use_library_browsing
+
+ layout.prop(params, "display_type", expand=True, text="")
+ layout.prop(params, "sort_method", expand=True, text="")
+
+ layout.prop(params, "show_hidden", text="", icon='FILE_HIDDEN')
+ layout.prop(params, "use_filter", text="", icon='FILTER')
+
+ row = layout.row(align=True)
+ row.active = params.use_filter
+
+ if params.filter_glob:
+ #if st.active_operator and hasattr(st.active_operator, "filter_glob"):
+ # row.prop(params, "filter_glob", text="")
+ row.label(params.filter_glob)
+ else:
+ row.prop(params, "use_filter_blender", text="")
+ row.prop(params, "use_filter_backup", text="")
+ row.prop(params, "use_filter_image", text="")
+ row.prop(params, "use_filter_movie", text="")
+ row.prop(params, "use_filter_script", text="")
+ row.prop(params, "use_filter_font", text="")
+ row.prop(params, "use_filter_sound", text="")
+ row.prop(params, "use_filter_text", text="")
+
+ if is_lib_browser:
+ row.prop(params, "use_filter_blendid", text="")
+ if (params.use_filter_blendid) :
+ row.separator()
+ row.prop(params, "filter_id", text="")
+
+ row.separator()
+ row.prop(params, "filter_search", text="", icon='VIEWZOOM')
+
+ ########## C (RNA) API ##########
def status(self, job_id):
if job_id:
job = self.jobs.get(job_id, None)
@@ -333,88 +437,77 @@ class AssetEngineAmber(AssetEngine):
return True
return False
- def sort_filter(self, use_sort, use_filter, filter_glob, filter_search, entries):
+ def sort_filter(self, use_sort, use_filter, params, entries):
if use_filter:
+ filter_search = params.filter_search
self.sortedfiltered.clear()
if self.repo:
for key, val in self.repo["entries"].items():
if filter_search and filter_search not in (val["name"] + val["description"]):
continue
- self.sortedfiltered.append((val["name"], key, val))
+ if params.use_filter:
+ file_type = set()
+ blen_type = set()
+ tags = set(self.tags)
+ if params.use_filter_image:
+ file_type.add('IMAGE')
+ if params.use_filter_blender:
+ file_type.add('BLENDER')
+ if params.use_filter_backup:
+ file_type.add('BACKUP')
+ if params.use_filter_movie:
+ file_type.add('MOVIE')
+ if params.use_filter_script:
+ file_type.add('SCRIPT')
+ if params.use_filter_font:
+ file_type.add('FONT')
+ if params.use_filter_sound:
+ file_type.add('SOUND')
+ if params.use_filter_text:
+ file_type.add('TEXT')
+ if params.use_filter_blendid and params.use_library_browsing:
+ file_type.add('BLENLIB')
+ blen_type = params.filter_id
+ if val["file_type"] not in file_type:
+ continue
+ if params.use_library_browsing and val["blen_type"] not in blen_type:
+ continue
+ if tags and not tags & set(val["tags"]):
+ continue
+ self.sortedfiltered.append((key, val))
elif self.dirs:
for path, size, timestamp, uuid in self.dirs:
if filter_search and filter_search not in path:
continue
- if path.startswith(".") and not path.startswith(".."):
+ if not params.show_hidden and path.startswith(".") and not path.startswith(".."):
continue
self.sortedfiltered.append((path, size, timestamp, uuid))
use_sort = True
entries.nbr_entries_filtered = len(self.sortedfiltered)
if use_sort:
- self.sortedfiltered.sort(key=lambda e: e[0].lower())
+ if self.repo:
+ if params.sort_method == 'FILE_SORT_TIME':
+ self.sortedfiltered.sort(key=lambda e: e[1]["variants"][e[1]["variant_default"]]["revisions"][e[1]["variants"][e[1]["variant_default"]]["revision_default"]]["timestamp"])
+ elif params.sort_method == 'FILE_SORT_SIZE':
+ self.sortedfiltered.sort(key=lambda e: e[1]["variants"][e[1]["variant_default"]]["revisions"][e[1]["variants"][e[1]["variant_default"]]["revision_default"]]["size"])
+ elif params.sort_method == 'FILE_SORT_EXTENSION':
+ self.sortedfiltered.sort(key=lambda e: e[1]["blen_type"])
+ else:
+ self.sortedfiltered.sort(key=lambda e: e[1]["name"].lower())
+ else:
+ if params.sort_method == 'FILE_SORT_TIME':
+ self.sortedfiltered.sort(key=lambda e: e[2])
+ elif params.sort_method == 'FILE_SORT_SIZE':
+ self.sortedfiltered.sort(key=lambda e: e[1])
+ else:
+ self.sortedfiltered.sort(key=lambda e: e[0].lower())
return True
return False
- def entry_from_uuid(self, entries, euuid, vuuid, ruuid):
- e = self.repo["entries"][euuid]
- entry = entries.entries.add()
- entry.uuid = euu
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list