forked from bartvdbraak/blender
more addon UI cleanup
This commit is contained in:
parent
0c11035854
commit
f3001c98a0
@ -1386,8 +1386,6 @@ class USERPREF_PT_addons(bpy.types.Panel):
|
||||
bl_region_type = 'WINDOW'
|
||||
bl_show_header = False
|
||||
|
||||
_addon_blank = {"name": "", "author": "", "version": "", "blender": "", "location": "", "url": "", "category": ""}
|
||||
|
||||
def poll(self, context):
|
||||
userpref = context.user_preferences
|
||||
return (userpref.active_section == 'ADDONS')
|
||||
@ -1405,19 +1403,6 @@ class USERPREF_PT_addons(bpy.types.Panel):
|
||||
# del sys.path[0]
|
||||
return modules
|
||||
|
||||
def _attributes(self, mod):
|
||||
# collect, check and process all attributes of the add-on
|
||||
if not hasattr(mod, 'expanded'):
|
||||
mod.expanded = False
|
||||
|
||||
info = self._addon_blank.copy()
|
||||
info.update(getattr(mod, "bl_addon_info", {}))
|
||||
|
||||
if not info["name"]:
|
||||
info["name"] = mod.__name__
|
||||
|
||||
return info
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
@ -1425,7 +1410,7 @@ class USERPREF_PT_addons(bpy.types.Panel):
|
||||
used_ext = {ext.module for ext in userpref.addons}
|
||||
|
||||
# collect the categories that can be filtered on
|
||||
addons = [(mod, self._attributes(mod)) for mod in self._addon_list()]
|
||||
addons = [(mod, addon_info_get(mod)) for mod in self._addon_list()]
|
||||
|
||||
cats = {info["category"] for mod, info in addons}
|
||||
cats.add("")
|
||||
@ -1433,7 +1418,7 @@ class USERPREF_PT_addons(bpy.types.Panel):
|
||||
|
||||
cats = ['All', 'Disabled', 'Enabled'] + sorted(cats)
|
||||
|
||||
bpy.types.Scene.EnumProperty(items=[(cats[i],cats[i],str(i)) for i in range(len(cats))],
|
||||
bpy.types.Scene.EnumProperty(items=[(cats[i], cats[i], str(i)) for i in range(len(cats))],
|
||||
name="Category", attr="addon_filter", description="Filter add-ons by category")
|
||||
bpy.types.Scene.StringProperty(name="Search", attr="addon_search",
|
||||
description="Search within the selected filter")
|
||||
@ -1446,9 +1431,8 @@ class USERPREF_PT_addons(bpy.types.Panel):
|
||||
filter = context.scene.addon_filter
|
||||
search = context.scene.addon_search.lower()
|
||||
|
||||
for mod in self._addon_list():
|
||||
for mod, info in addons:
|
||||
module_name = mod.__name__
|
||||
info = self._attributes(mod)
|
||||
|
||||
# check if add-on should be visible with current filters
|
||||
if filter != "All" and \
|
||||
@ -1471,7 +1455,7 @@ class USERPREF_PT_addons(bpy.types.Panel):
|
||||
|
||||
# Arrow #
|
||||
# If there are Infos or UI is expanded
|
||||
if mod.expanded:
|
||||
if info["expanded"]:
|
||||
row.operator("wm.addon_expand", icon="TRIA_DOWN").module = module_name
|
||||
elif info["author"] or info["version"] or info["url"] or info["location"]:
|
||||
row.operator("wm.addon_expand", icon="TRIA_RIGHT").module = module_name
|
||||
@ -1485,7 +1469,7 @@ class USERPREF_PT_addons(bpy.types.Panel):
|
||||
row.operator("wm.addon_disable" if module_name in used_ext else "wm.addon_enable").module = module_name
|
||||
|
||||
# Expanded UI (only if additional infos are available)
|
||||
if mod.expanded:
|
||||
if info["expanded"]:
|
||||
if info["author"]:
|
||||
split = column.row().split(percentage=0.15)
|
||||
split.label(text='Author:')
|
||||
@ -1505,9 +1489,30 @@ class USERPREF_PT_addons(bpy.types.Panel):
|
||||
split.separator()
|
||||
split.separator()
|
||||
|
||||
|
||||
from bpy.props import *
|
||||
|
||||
|
||||
def addon_info_get(mod, info_basis={"name": "", "author": "", "version": "", "blender": "", "location": "", "url": "", "category": "", "expanded": False}):
|
||||
addon_info = getattr(mod, "bl_addon_info", {})
|
||||
|
||||
# avoid re-initializing
|
||||
if "_init" in addon_info:
|
||||
return addon_info
|
||||
|
||||
if not addon_info:
|
||||
mod.bl_addon_info = addon_info
|
||||
|
||||
for key, value in info_basis.items():
|
||||
addon_info.setdefault(key, value)
|
||||
|
||||
if not addon_info["name"]:
|
||||
addon_info["name"] = mod.__name__
|
||||
|
||||
addon_info["_init"] = None
|
||||
return addon_info
|
||||
|
||||
|
||||
class WM_OT_addon_enable(bpy.types.Operator):
|
||||
"Enable an addon"
|
||||
bl_idname = "wm.addon_enable"
|
||||
@ -1516,30 +1521,34 @@ class WM_OT_addon_enable(bpy.types.Operator):
|
||||
module = StringProperty(name="Module", description="Module name of the addon to enable")
|
||||
|
||||
def execute(self, context):
|
||||
import traceback
|
||||
ext = context.user_preferences.addons.new()
|
||||
module_name = self.properties.module
|
||||
ext.module = module_name
|
||||
|
||||
try:
|
||||
mod = __import__(module_name)
|
||||
mod.register()
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return {'CANCELLED'}
|
||||
|
||||
ext = context.user_preferences.addons.new()
|
||||
ext.module = module_name
|
||||
|
||||
# check if add-on is written for current blender version, or raise a warning
|
||||
version = hasattr(mod, 'blender')
|
||||
if version:
|
||||
version = (mod.blender).split('.',2)
|
||||
info = addon_info_get(mod)
|
||||
|
||||
if info["blender"]:
|
||||
version = info["blender"].split(".", 2)
|
||||
for i in range(len(version)):
|
||||
try:
|
||||
version[i] = int(version[i])
|
||||
except:
|
||||
break
|
||||
if version[i]>bpy.app.version[i]:
|
||||
self.report('WARNING','This script was written for a newer version of Blender \
|
||||
and might not function (correctly).\nThe script is enabled though.')
|
||||
elif version[i]==bpy.app.version[i]:
|
||||
|
||||
if version[i] > bpy.app.version[i]:
|
||||
self.report("WARNING','This script was written for a newer version of Blender \
|
||||
and might not function (correctly).\nThe script is enabled though.")
|
||||
elif version[i] == bpy.app.version[i]:
|
||||
continue
|
||||
else:
|
||||
break
|
||||
@ -1647,19 +1656,19 @@ class WM_OT_addon_expand(bpy.types.Operator):
|
||||
module = StringProperty(name="Module", description="Module name of the addon to expand")
|
||||
|
||||
def execute(self, context):
|
||||
import traceback
|
||||
module_name = self.properties.module
|
||||
|
||||
# unlikely to fail, module should have alredy been imported
|
||||
try:
|
||||
mod = __import__(module_name)
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return {'CANCELLED'}
|
||||
|
||||
if mod.expanded:
|
||||
mod.expanded = False
|
||||
else:
|
||||
mod.expanded = True
|
||||
|
||||
info = addon_info_get(mod)
|
||||
info["expanded"] = not info["expanded"]
|
||||
print(info["expanded"])
|
||||
return {'FINISHED'}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user