1 """The `interaction` module provides :class:`Request`,
2 :class:`Response`, an related classes for handling user interaction
4 :class:`hooke.engine.CommandEngine`/:class:`hooke.ui.UserInterface`
10 """:class:`Request` validator class.
15 >>> i = InList(['abc', 'def', 5, True])
19 Traceback (most recent call last):
23 def __init__(self, *args, **kwargs):
24 list.__init__(self, *args, **kwargs)
26 def __call__(self, value):
27 """Raises ValueError if a given `value` is not in our internal
31 raise ValueError(value)
33 class Interaction (object):
34 """Mid-command inter-process interaction.
36 Stores :attr:`type`, a string representing the interaction type
37 ('boolean', 'string', ...).
39 def __init__(self, type):
42 class Request (Interaction):
43 """Command engine requests for information from the UI.
45 def __init__(self, type, response_class,
46 msg, default=None, validator=None):
47 super(Request, self).__init__(type)
48 self.response_class = response_class
50 self.default = default
51 self.validator = validator
53 def response(self, value):
54 if self.validator != None:
56 return self.response_class(value)
58 class Response (Interaction):
59 """UI response to a :class:`Request`.
61 def __init__(self, type, value):
62 super(Response, self).__init__(type)
65 class BooleanRequest (Request):
66 def __init__(self, msg, default=None):
67 super(BooleanRequest, self).__init__(
68 'boolean', BooleanResponse, msg, default,
69 validator = InList([True, False, default]))
71 class BooleanResponse (Response):
72 def __init__(self, value):
73 super(BooleanResponse, self).__init__('boolean', value)
75 class StringRequest (Request):
76 def __init__(self, msg, default=None):
77 super(StringRequest, self).__init__(
78 'string', StringResponse, msg, default)
80 class StringResponse (Response):
81 def __init__(self, value):
82 super(StringResponse, self).__init__('string', value)
84 class FloatRequest (Request):
85 def __init__(self, msg, default=None):
86 super(FloatRequest, self).__init__(
87 'float', FloatResponse, msg, default)
89 class FloatResponse (Response):
90 def __init__(self, value):
91 super(FloatResponse, self).__init__('float', value)
93 class SelectionRequest (Request):
94 def __init__(self, msg, default=None, options=[]):
95 super(SelectionRequest, self).__init__(
96 'selection', SelectionResponse, msg, default)
97 self.options = options
99 class SelectionResponse (Response):
100 def __init__(self, value):
101 super(SelectionResponse, self).__init__('selection', value)
103 class PointRequest (Request):
104 def __init__(self, msg, curve, block=0, default=None):
105 super(PointRequest, self).__init__(
106 'point', PointResponse, msg, default)
107 self.options = options
109 class PointResponse (Response):
110 def __init__(self, value):
111 super(PointResponse, self).__init__('point', value)
114 class Notification (object):
115 def __init__(self, type):
118 class ReloadUserInterfaceConfig (Notification):
119 def __init__(self, config):
120 super(ReloadUserInterfaceConfig, self).__init__(
121 'reload user interface config')