[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [1971] trunk/py/scripts/addons/modules/ extensions_framework: extensions_framework: add support for property enable state control in declarative_property_group analagous to how visibility works .
Doug Hammond
doughammond at hamsterfight.co.uk
Thu May 26 15:57:19 CEST 2011
Revision: 1971
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=1971
Author: dougal2
Date: 2011-05-26 13:57:18 +0000 (Thu, 26 May 2011)
Log Message:
-----------
extensions_framework: add support for property enable state control in declarative_property_group analagous to how visibility works. Also removed some old commented debugging code.
Modified Paths:
--------------
trunk/py/scripts/addons/modules/extensions_framework/__init__.py
trunk/py/scripts/addons/modules/extensions_framework/ui.py
Modified: trunk/py/scripts/addons/modules/extensions_framework/__init__.py
===================================================================
--- trunk/py/scripts/addons/modules/extensions_framework/__init__.py 2011-05-26 12:08:20 UTC (rev 1970)
+++ trunk/py/scripts/addons/modules/extensions_framework/__init__.py 2011-05-26 13:57:18 UTC (rev 1971)
@@ -221,13 +221,20 @@
"""
controls = []
- """The visibility dict controls the display of properties based on
+ """The visibility dict controls the visibility of properties based on
the value of other properties. See extensions_framework.validate
for test syntax.
"""
visibility = {}
+ """The enabled dict controls the enabled state of properties based on
+ the value of other properties. See extensions_framework.validate
+ for test syntax.
+
+ """
+ enabled = {}
+
"""The properties list describes each property to be created. Each
item should be a dict of args to pass to a
bpy.props.<?>Property function, with the exception of 'type'
Modified: trunk/py/scripts/addons/modules/extensions_framework/ui.py
===================================================================
--- trunk/py/scripts/addons/modules/extensions_framework/ui.py 2011-05-26 12:08:20 UTC (rev 1970)
+++ trunk/py/scripts/addons/modules/extensions_framework/ui.py 2011-05-26 13:57:18 UTC (rev 1971)
@@ -26,7 +26,7 @@
#
import bpy
-from extensions_framework.validate import Visibility
+from extensions_framework.validate import Logician
class EF_OT_msg(bpy.types.Operator):
"""An operator to show simple messages in the UI"""
@@ -92,7 +92,7 @@
def check_visibility(self, lookup_property, property_group):
"""Determine if the lookup_property should be drawn in the Panel"""
- vt = Visibility(property_group)
+ vt = Logician(property_group)
if lookup_property in property_group.visibility.keys():
if hasattr(property_group, lookup_property):
member = getattr(property_group, lookup_property)
@@ -103,7 +103,18 @@
else:
return True
- # tab_level = 0
+ def check_enabled(self, lookup_property, property_group):
+ """Determine if the lookup_property should be enabled in the Panel"""
+ et = Logician(property_group)
+ if lookup_property in property_group.enabled.keys():
+ if hasattr(property_group, lookup_property):
+ member = getattr(property_group, lookup_property)
+ else:
+ member = None
+ return et.test_logic(member,
+ property_group.enabled[lookup_property])
+ else:
+ return True
def is_real_property(self, lookup_property, property_group):
for prop in property_group.properties:
@@ -114,28 +125,21 @@
def draw_column(self, control_list_item, layout, context,
supercontext=None, property_group=None):
- # self.tab_level += 1
"""Draw a column's worth of UI controls in this Panel"""
if type(control_list_item) is list:
draw_row = False
found_percent = None
- # print('\t'*self.tab_level, '--', property_group, '--')
for sp in control_list_item:
- # print('\t'*self.tab_level, sp)
if type(sp) is float:
found_percent = sp
elif type(sp) is list:
for ssp in [s for s in sp if self.is_real_property(s, property_group)]:
draw_row = draw_row or self.check_visibility(ssp,
property_group)
- # print('\t'*self.tab_level, 'List: ', draw_row)
else:
draw_row = draw_row or self.check_visibility(sp,
property_group)
- # print('\t'*self.tab_level, 'Single: ', draw_row)
- # print('\t'*self.tab_level, '-->', draw_row)
- # print('\t'*self.tab_level, '--', property_group, '--')
next_items = [s for s in control_list_item if type(s) in [str, list]]
if draw_row and len(next_items) > 0:
@@ -153,8 +157,13 @@
for current_property in property_group.properties:
if current_property['attr'] == control_list_item:
current_property_keys = current_property.keys()
+
+ if not self.check_enabled(control_list_item, property_group):
+ last_layout = layout
+ layout = layout.row()
+ layout.enabled = False
+
if 'type' in current_property_keys:
-
if current_property['type'] in ['int', 'float',
'float_vector', 'string']:
layout.prop(
@@ -295,9 +304,11 @@
else:
layout.prop(property_group, control_list_item)
+ if not self.check_enabled(control_list_item, property_group):
+ layout = last_layout
+
# Fire a draw callback if specified
if 'draw' in current_property_keys:
current_property['draw'](supercontext, context)
break
- # self.tab_level -= 1
More information about the Bf-extensions-cvs
mailing list