[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57103] trunk/blender/release/scripts/ startup/bl_operators/node.py: workaround for search menu enum using freed python scripts ( py api limitation).

Campbell Barton ideasman42 at gmail.com
Wed May 29 13:55:35 CEST 2013


Revision: 57103
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57103
Author:   campbellbarton
Date:     2013-05-29 11:55:35 +0000 (Wed, 29 May 2013)
Log Message:
-----------
workaround for search menu enum using freed python scripts (py api limitation).

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_operators/node.py

Modified: trunk/blender/release/scripts/startup/bl_operators/node.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_operators/node.py	2013-05-29 11:49:39 UTC (rev 57102)
+++ trunk/blender/release/scripts/startup/bl_operators/node.py	2013-05-29 11:55:35 UTC (rev 57103)
@@ -163,10 +163,15 @@
     bl_idname = "node.add_search"
     bl_label = "Search and Add Node"
     bl_options = {'REGISTER', 'UNDO'}
+    bl_property = "node_item"
 
+    _enum_item_hack = []
+
     # Create an enum list from node items
     def node_enum_items(self, context):
-        enum_items = []
+        enum_items = NODE_OT_add_search._enum_item_hack
+        enum_items.clear()
+
         for index, item in enumerate(nodeitems_utils.node_items_iter(context)):
             nodetype = getattr(bpy.types, item.nodetype, None)
             if nodetype:
@@ -175,14 +180,13 @@
 
     # Look up the item based on index
     def find_node_item(self, context):
+        node_item = int(self.node_item)
         for index, item in enumerate(nodeitems_utils.node_items_iter(context)):
-            if str(index) == self.type:
+            if index == node_item:
                 return item
         return None
 
-    # XXX this should be called 'node_item' but the operator search
-    # property is hardcoded to 'type' by a hack in bpy_operator_wrap.c ...
-    type = EnumProperty(
+    node_item = EnumProperty(
             name="Node Type",
             description="Node type",
             items=node_enum_items,
@@ -190,6 +194,10 @@
 
     def execute(self, context):
         item = self.find_node_item(context)
+
+        # no need to keep
+        self._enum_item_hack.clear()
+        
         if item:
             # apply settings from the node item
             for setting in item.settings.items():




More information about the Bf-blender-cvs mailing list