from nanome._internal import serializer_fields as serializer_fields
from nanome._internal.enum_utils import IntEnum
from . import serializers
[docs]class DropdownCallback(serializer_fields.TypeSerializer):
[docs] def version(self):
return 0
[docs] def name(self):
return "DropdownCallback"
[docs] def serialize(self, version, value, context):
# value is a tuple containing the image ID and the item index.
context.write_int(value[0])
context.write_int(value[1])
[docs] def deserialize(self, version, context):
id = context.read_int()
item_index = context.read_int()
return id, item_index
[docs]class ImageCallback(serializer_fields.TypeSerializer):
[docs] def version(self):
return 1
[docs] def name(self):
return "ImageCallback"
[docs] def serialize(self, version, value, context):
# value is a tuple containing the image ID, the x coordinate and the y coordinate.
if (version == 0):
plugin_mask = (context._plugin_id << 24) & 0x7FFFFFFF
value = (value[0] | plugin_mask, value[1], value[2])
context.write_int(value[0])
context.write_float(value[1])
context.write_float(value[2])
[docs] def deserialize(self, version, context):
id = context.read_int()
if (version == 0):
id_mask = 0x00FFFFFF
id &= id_mask
x = context.read_float()
y = context.read_float()
return id, x, y
[docs]class SliderCallback(serializer_fields.TypeSerializer):
[docs] def version(self):
return 1
[docs] def name(self):
return "SliderCallback"
[docs] def serialize(self, version, value, context):
if (version == 0):
plugin_mask = (context._plugin_id << 24) & 0x7FFFFFFF
value[0] |= plugin_mask
context.write_int(value[0])
context.write_float(value[1])
[docs] def deserialize(self, version, context):
content_id = context.read_int()
if (version == 0):
id_mask = 0x00FFFFFF
content_id &= id_mask
result = (content_id, context.read_float())
return result
[docs]class TextInputCallback(serializer_fields.TypeSerializer):
def __init__(self):
self.__tuple = serializer_fields.TupleField(serializer_fields.IntField(), serializer_fields.StringField())
[docs] def version(self):
return 1
[docs] def name(self):
return "TextInputCallback"
[docs] def serialize(self, version, value, context):
if (version == 0):
plugin_mask = (context._plugin_id << 24) & 0x7FFFFFFF
value[0] |= plugin_mask
context.write_using_serializer(self.__tuple, value)
[docs] def deserialize(self, version, context):
tup = context.read_using_serializer(self.__tuple)
if (version == 0):
id_mask = 0x00FFFFFF
tup = (tup[0] & id_mask, tup[1])
return tup
[docs]class UIHook(serializer_fields.TypeSerializer):
[docs] class Type(IntEnum):
button_hover = 0
image_pressed = 1
image_held = 2
image_released = 3
[docs] def version(self):
return 0
[docs] def name(self):
return "UIHook"
[docs] def serialize(self, version, value, context):
context.write_byte(value[0])
context.write_int(value[1])
[docs] def deserialize(self, version, context):
raise NotImplementedError
[docs]class UpdateContent(serializer_fields.TypeSerializer):
def __init__(self):
self._array = serializer_fields.ArrayField()
self._content = serializers.UIBaseSerializer()
self._array.set_type(self._content)
[docs] def version(self):
return 1
[docs] def name(self):
return "SendUIContent"
[docs] def serialize(self, version, value, context):
if version == 0:
context.write_using_serializer(self._content, value[0])
else:
context.write_using_serializer(self._array, value)
[docs] def deserialize(self, version, context):
return None
[docs]class UpdateNode(serializer_fields.TypeSerializer):
def __init__(self):
self._array = serializer_fields.ArrayField()
self._node_serializer = serializers.LayoutNodeSerializerDeep()
self._array.set_type(self._node_serializer)
[docs] def version(self):
return 1
[docs] def name(self):
return "SendLayoutNode"
[docs] def serialize(self, version, value, context):
if version == 0:
context.write_using_serializer(self._node_serializer, value[0])
else:
context.write_using_serializer(self._array, value)
[docs] def deserialize(self, version, context):
return None
[docs]class SendNotification(serializer_fields.TypeSerializer):
def __init__(self):
self.string = serializer_fields.StringField()
[docs] def version(self):
return 0
[docs] def name(self):
return "SendNotification"
[docs] def serialize(self, version, value, context):
context.write_uint(value[0])
context.write_using_serializer(self.string, value[1])
[docs] def deserialize(self, version, context):
raise NotImplementedError