LNXSDK/leenkx/blender/lnx/logicnode/custom/LN_js_event_target.py

95 lines
3.4 KiB
Python
Raw Normal View History

2025-01-22 16:18:30 +01:00
from lnx.logicnode.lnx_nodes import *
class JSEventTargetNode(LnxLogicTreeNode):
"""JS Event Target"""
bl_idname = 'LNJSEventTargetNode'
bl_label = 'JS Event Target'
bl_description = 'Event Target is an interface implemented by objects that can receive events and may have listeners for them.'
lnx_category = 'HTML'
lnx_version = 1
@staticmethod
def get_enum_id_value(obj, prop_name, value):
return obj.bl_rna.properties[prop_name].enum_items[value].identifier
@staticmethod
def get_count_in(type_name):
return {
'addEventListener': 0,
'removeEventListener': 1,
'dispatchEvent': 2,
}.get(type_name, 0)
def get_enum(self):
return self.get('property0', 0)
def set_enum(self, value):
# Checking the selection of each type
select_current = self.get_enum_id_value(self, 'property0', value)
select_prev = self.property0
#Check if type changed
if select_prev != select_current:
for i in self.inputs:
self.inputs.remove(i)
# Arguements for type Client
index = self.get_count_in(select_current)
match index:
case 2:
self.add_input('LnxNodeSocketAction', 'In')
self.add_input('LnxDynamicSocket', 'JS Object')
self.add_input('LnxDynamicSocket', 'Event')
case _:
self.add_input('LnxNodeSocketAction', 'In')
self.add_input('LnxDynamicSocket', 'JS Object')
self.add_input('LnxStringSocket', 'Type')
self.add_input('LnxDynamicSocket', 'Listener')
self.add_input('LnxDynamicSocket', 'Options')
self.add_input('LnxBoolSocket', 'unTrusted')
self['property0'] = value
property0: HaxeEnumProperty(
'property0',
items = [('addEventListener', 'addEventListener', 'Add an event listener to the object'),
('removeEventListener', 'removeEventListener', 'Remove an event listener to the object'),
('dispatchEvent', 'dispatchEvent', 'Dispatch an event to the object listener')],
name='',
default='addEventListener',
set=set_enum,
get=get_enum)
property1: HaxeEnumProperty(
'property1',
items = [('inline', 'Inline Function', 'Inline function to evaluate on event'),
('callable', 'Callable Function', 'Callable function to trigger on event'),
('event', 'Event Listener', 'Bind event to existing event listener'),
('output', 'Bind output', 'Trigger node output on JS event')],
name='',
default='inline')
def lnx_init(self, context):
self.add_input('LnxNodeSocketAction', 'In')
self.add_input('LnxDynamicSocket', 'JS Object')
self.add_input('LnxStringSocket', 'Type')
self.add_input('LnxDynamicSocket', 'Listener')
self.add_input('LnxDynamicSocket', 'Options')
self.add_input('LnxBoolSocket', 'WantsUnTrusted')
self.add_output('LnxNodeSocketAction', 'Out')
def draw_buttons(self, context, layout):
layout.prop(self, 'property0')
if str(self.property0) == 'addEventListener':
layout.prop(self, 'property1')
def register():
add_category('HTML', icon='SEQ_STRIP_META')
JSEventTargetNode.on_register()