3 """The `interaction` module provides :class:`Request`,
4 :class:`Response`, an related classes for handling user interaction
6 :class:`hooke.engine.CommandEngine`/:class:`hooke.ui.UserInterface`
12 """:class:`Request` validator class.
17 >>> i = InList(['abc', 'def', 5, True])
21 Traceback (most recent call last):
25 def __init__(self, *args, **kwargs):
26 list.__init__(self, *args, **kwargs)
28 def __call__(self, value):
29 """Raises ValueError if a given `value` is not in our internal
33 raise ValueError(value)
35 class Interaction (object):
36 """Mid-command inter-process interaction.
38 Stores :attr:`type`, a string representing the interaction type
39 ('boolean', 'string', ...).
41 def __init__(self, type):
44 class Request (Interaction):
45 """Command engine requests for information from the UI.
47 def __init__(self, type, response_class,
48 msg, default=None, validator=None):
49 super(Request, self).__init__(type)
50 self.response_class = response_class
52 self.default = default
53 self.validator = validator
55 def response(self, value):
56 if self.validator != None:
58 return self.response_class(value)
60 class Response (Interaction):
61 """UI response to a :class:`Request`.
63 def __init__(self, type, value):
64 super(Response, self).__init__(type)
67 class BooleanRequest (Request):
68 def __init__(self, msg, default=None):
69 super(BooleanRequest, self).__init__(
70 'boolean', BooleanResponse, msg, default,
71 validator = InList([True, False, default]))
73 class BooleanResponse (Response):
74 def __init__(self, value):
75 super(BooleanResponse, self).__init__('boolean', value)
77 class StringRequest (Request):
78 def __init__(self, msg, default=None):
79 super(StringRequest, self).__init__(
80 'string', StringResponse, msg, default)
82 class StringResponse (Response):
83 def __init__(self, value):
84 super(StringResponse, self).__init__('string', value)
86 class FloatRequest (Request):
87 def __init__(self, msg, default=None):
88 super(FloatRequest, self).__init__(
89 'float', FloatResponse, msg, default)
91 class FloatResponse (Response):
92 def __init__(self, value):
93 super(FloatResponse, self).__init__('float', value)
95 class SelectionRequest (Request):
96 def __init__(self, msg, default=None, options=[]):
97 super(SelectionRequest, self).__init__(
98 'selection', SelectionResponse, msg, default)
99 self.options = options
101 class SelectionResponse (Response):
102 def __init__(self, value):
103 super(SelectionResponse, self).__init__('selection', value)
105 class PointRequest (Request):
106 def __init__(self, msg, curve, block=0, default=None):
107 super(PointRequest, self).__init__(
108 'point', PointResponse, msg, default)
109 self.options = options
111 class PointResponse (Response):
112 def __init__(self, value):
113 super(PointResponse, self).__init__('point', value)
116 class Notification (object):
117 def __init__(self, type):
120 class ReloadUserInterfaceConfig (Notification):
121 def __init__(self, config):
122 super(ReloadUserInterfaceConfig, self).__init__(
123 'reload user interface config')