from abc import ABC
class Transition(ABC):
def serialize(self, _security_handler=None, _obj_id=None):
raise NotImplementedError
class SplitTransition(Transition):
def __init__(self, dimension, direction):
if dimension not in ("H", "V"):
raise ValueError(
f"Unsupported dimension '{dimension}', must be H(horizontal) or V(ertical)"
)
self.dimension = dimension
if direction not in ("I", "O"):
raise ValueError(
f"Unsupported direction '{direction}', must be I(nward) or O(utward)"
)
self.direction = direction
def serialize(self, _security_handler=None, _obj_id=None):
return f"<</Type /Trans /S /Split /DM /{self.dimension} /M /{self.direction}>>"
class BlindsTransition(Transition):
def __init__(self, dimension):
if dimension not in ("H", "V"):
raise ValueError(
f"Unsupported dimension '{dimension}', must be H(horizontal) or V(ertical)"
)
self.dimension = dimension
def serialize(self, _security_handler=None, _obj_id=None):
return f"<</Type /Trans /S /Blinds /DM /{self.dimension}>>"
class BoxTransition(Transition):
def __init__(self, direction):
if direction not in ("I", "O"):
raise ValueError(
f"Unsupported direction '{direction}', must be I(nward) or O(utward)"
)
self.direction = direction
def serialize(self, _security_handler=None, _obj_id=None):
return f"<</Type /Trans /S /Blinds /M /{self.direction}>>"
class WipeTransition(Transition):
def __init__(self, direction):
if direction not in (0, 90, 180, 270):
raise ValueError(
f"Unsupported direction '{direction}', must 0, 90, 180 or 270"
)
self.direction = direction
def serialize(self, _security_handler=None, _obj_id=None):
return f"<</Type /Trans /S /Wipe /Di /{self.direction}>>"
class DissolveTransition(Transition):
def serialize(self, _security_handler=None, _obj_id=None):
return "<</Type /Trans /S /Dissolve>>"
class GlitterTransition(Transition):
def __init__(self, direction):
if direction not in (0, 270, 315):
raise ValueError(f"Unsupported direction '{direction}', must 0, 270 or 315")
self.direction = direction
def serialize(self, _security_handler=None, _obj_id=None):
return f"<</Type /Trans /S /Glitter /Di /{self.direction}>>"
class FlyTransition(Transition):
def __init__(self, dimension, direction=None):
if dimension not in ("H", "V"):
raise ValueError(
f"Unsupported dimension '{dimension}', must be H(horizontal) or V(ertical)"
)
self.dimension = dimension
if direction not in (0, 270, None):
raise ValueError(
f"Unsupported direction '{direction}', must 0, 270 or None"
)
self.direction = direction
def serialize(self, _security_handler=None, _obj_id=None):
return (
f"<</Type /Trans /S /Glitter /M /{self.dimension} /Di /{self.direction}>>"
)
class PushTransition(Transition):
def __init__(self, direction):
if direction not in (0, 270):
raise ValueError(f"Unsupported direction '{direction}', must 0 or 270")
self.direction = direction
def serialize(self, _security_handler=None, _obj_id=None):
return f"<</Type /Trans /S /Push /Di /{self.direction}>>"
class CoverTransition(Transition):
def __init__(self, direction):
if direction not in (0, 270):
raise ValueError(f"Unsupported direction '{direction}', must 0 or 270")
self.direction = direction
def serialize(self, _security_handler=None, _obj_id=None):
return f"<</Type /Trans /S /Cover /Di /{self.direction}>>"
class UncoverTransition(Transition):
def __init__(self, direction):
if direction not in (0, 270):
raise ValueError(f"Unsupported direction '{direction}', must 0 or 270")
self.direction = direction
def serialize(self, _security_handler=None, _obj_id=None):
return f"<</Type /Trans /S /Uncover /Di /{self.direction}>>"
class FadeTransition(Transition):
def serialize(self, _security_handler=None, _obj_id=None):
return "<</Type /Fade /S /Dissolve>>"