[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