def draw(self, context, layout, node, text): # just handle custom draw..be it input or output. # hasattr may be excessive here if hasattr(self, 'custom_draw') and self.custom_draw: # does the node have the draw function referred to by # the string stored in socket's custom_draw attribute if hasattr(node, self.custom_draw): getattr(node, self.custom_draw)(self, context, layout) return if self.bl_idname == 'SvStringsSocket': if node.bl_idname in {'SvScriptNodeLite', 'SvScriptNode'}: if not self.is_output and not self.is_linked and self.prop_type: layout.prop(node, self.prop_type, index=self.prop_index, text=self.name) return elif node.bl_idname in {'SvSNFunctor'} and not self.is_output: if not self.is_linked: layout.prop(node, self.get_prop_name(), text=self.name) return if self.is_linked: # linked INPUT or OUTPUT t = text if not self.is_output: if self.get_prop_name(): prop = node.rna_type.properties.get( self.get_prop_name(), None) t = prop.name if prop else text info_text = t + '. ' + SvGetSocketInfo(self) info_text += self.extra_info layout.label(text=info_text) elif self.is_output: # unlinked OUTPUT layout.label(text=text) else: # unlinked INPUT if self.get_prop_name(): # has property self.draw_expander_template(context, layout, prop_origin=node, prop_name=self.get_prop_name()) elif self.use_prop: # no property but use default prop self.draw_expander_template(context, layout, prop_origin=self) elif self.quicklink_func_name: try: getattr(node, self.quicklink_func_name)(self, context, layout, node) except Exception as e: self.draw_quick_link(context, layout, node) layout.label(text=text) else: # no property and not use default prop self.draw_quick_link(context, layout, node) layout.label(text=text)
def draw_texture_socket(self, socket, context, layout): if not socket.is_linked: c = layout.split(factor=0.3, align=False) c.label(text=socket.name+ ':') c.prop_search(self, "name_texture", bpy.data, 'textures', text="") else: layout.label(text=socket.name+ '. ' + SvGetSocketInfo(socket))
def draw(self, context, layout, node, text): if self.is_linked: draw_string = text + '. ' + SvGetSocketInfo(self) if is_vector_to_matrix(self): draw_string += (" (" + str(self.num_matrices) + ")") layout.label(draw_string) else: layout.label(text)
def draw(self, context, layout, node, text): if self.custom_draw: super().draw(context, layout, node, text) elif not self.is_output and not self.is_linked: layout.prop_search(self, 'object_ref', bpy.data, 'objects', text=self.name) elif self.is_linked: layout.label(text=text + '. ' + SvGetSocketInfo(self)) else: layout.label(text=text)
def draw(self, context, layout, node, text): if not self.is_output and not self.is_linked: if self.prop_name: layout.template_component_menu(node, self.prop_name, name=self.name) elif self.use_prop: layout.template_component_menu(self, "prop", name=self.name) else: layout.label(text) elif self.is_linked: layout.label(text + '. ' + SvGetSocketInfo(self)) else: layout.label(text)
def update_objects_number(self): """ Should be called each time after process method of the socket owner It will update number of objects to show in socket labels """ try: if self.is_output: objects_info = SvGetSocketInfo(self) self.objects_number = int(objects_info) if objects_info else 0 else: data = self.sv_get(deepcopy=False, default=[]) self.objects_number = len(data) if data else 0 except Exception as e: warning( f"Socket='{self.name}' of node='{self.node.name}' can't update number of objects on the label. " f"Cause is '{e}'") self.objects_number = 0
def draw(self, context, layout, node, text): if self.prop_name: prop = node.rna_type.properties.get(self.prop_name, None) t = prop.name if prop else text else: t = text if not self.is_output and not self.is_linked: if self.prop_name and not self.prop_type: layout.prop(node, self.prop_name) elif self.prop_type: layout.prop(node, self.prop_type, index=self.prop_index, text=self.name) else: layout.label(t) elif self.is_linked: layout.label(t + '. ' + SvGetSocketInfo(self)) else: layout.label(t)
def draw_color_socket(self, socket, context, layout): socket_info = socket_dict[socket.prop_name] layout.prop(self, socket_info[0], text="", icon=socket_info[1]) layout.prop(self, socket_info[2], text="", icon='COLOR') display_color = not socket.is_linked draw_name = True if len(socket_info) < 5: layout.prop(self, socket_info[3], text="", icon='VPAINT_HLT') else: layout.prop(self, socket_info[3], text="", icon='MOD_NOISE') if socket_info[3] in self and self[socket_info[3]]: layout.prop(self, socket_info[4], text="Seed") draw_name = False if socket_info[3] in self: display_color = display_color and not self[socket_info[3]] if display_color: layout.prop(self, socket.prop_name, text="") else: if draw_name: layout.label(text=socket.name + '. ' + SvGetSocketInfo(socket))
def get_socket_info(self): """ Return Number of encapsulated data lists, or empty str """ try: return SvGetSocketInfo(self) except: return ''
def SvDGLTrainClassifier_draw_socket(self, socket, context, layout): row = layout.row() split = row.split(factor=0.6) split.row().label(text=socket.name + '. ' + SvGetSocketInfo(socket)) split.row().prop(self, socket.prop_name, text="")