1#  Copyright (c) 2005-2020, Enthought, Inc.
2#  All rights reserved.
3#
4#  This software is provided without warranty under the terms of the BSD
5#  license included in LICENSE.txt and may be redistributed only
6#  under the conditions described in the aforementioned license.  The license
7#  is also available online at http://www.enthought.com/licenses/BSD.txt
8#
9#  Thanks for using Enthought open source!
10#
11
12from traitsui.qt4.range_editor import (
13    LargeRangeSliderEditor,
14    LogRangeSliderEditor,
15    RangeTextEditor,
16    SimpleSliderEditor,
17)
18
19from traitsui.testing.tester.command import KeyClick
20from traitsui.testing.tester.locator import Slider, Textbox
21from traitsui.testing.tester._ui_tester_registry.qt4 import (
22    _interaction_helpers,
23    _registry_helper
24)
25
26
27class LocatedTextbox:
28    """ Wrapper class for a located Textbox in Qt.
29
30    Parameters
31    ----------
32    textbox : Instance of QtGui.QLineEdit
33    """
34
35    def __init__(self, textbox):
36        self.textbox = textbox
37
38    @classmethod
39    def register(cls, registry):
40        """ Class method to register interactions on a LocatedTextbox for the
41        given registry.
42
43        If there are any conflicts, an error will occur.
44
45        Parameters
46        ----------
47        registry : TargetRegistry
48            The registry being registered to.
49        """
50        _registry_helper.register_editable_textbox_handlers(
51            registry=registry,
52            target_class=cls,
53            widget_getter=lambda wrapper: wrapper._target.textbox,
54        )
55
56
57class LocatedSlider:
58    """ Wrapper class for a located Slider in Qt.
59
60    Parameters
61    ----------
62    slider : Instance of QtGui.QSlider
63    """
64
65    def __init__(self, slider):
66        self.slider = slider
67
68    @classmethod
69    def register(cls, registry):
70        """ Class method to register interactions on a LocatedSlider for the
71        given registry.
72
73        If there are any conflicts, an error will occur.
74
75        Parameters
76        ----------
77        registry : TargetRegistry
78            The registry being registered to.
79        """
80        registry.register_interaction(
81            target_class=cls,
82            interaction_class=KeyClick,
83            handler=lambda wrapper, interaction:
84                _interaction_helpers.key_click_qslider(
85                    wrapper._target.slider, interaction, wrapper.delay)
86        )
87
88
89def register(registry):
90    """ Register interactions for the given registry.
91
92    If there are any conflicts, an error will occur.
93
94    Parameters
95    ----------
96    registry : TargetRegistry
97        The registry being registered to.
98    """
99
100    targets = [SimpleSliderEditor,
101               LogRangeSliderEditor,
102               LargeRangeSliderEditor]
103    for target_class in targets:
104        registry.register_location(
105            target_class=target_class,
106            locator_class=Textbox,
107            solver=lambda wrapper, _: LocatedTextbox(
108                textbox=wrapper._target.control.text),
109        )
110        registry.register_location(
111            target_class=target_class,
112            locator_class=Slider,
113            solver=lambda wrapper, _: LocatedSlider(
114                slider=wrapper._target.control.slider),
115        )
116    _registry_helper.register_editable_textbox_handlers(
117        registry=registry,
118        target_class=RangeTextEditor,
119        widget_getter=lambda wrapper: wrapper._target.control,
120    )
121
122    LocatedTextbox.register(registry)
123
124    LocatedSlider.register(registry)
125