1from unittest import TestCase
2
3from traits.api import HasTraits, Str, Int, List
4from traitsui.api import View, Group, Item, TableEditor, ObjectColumn, RGBColor
5from traitsui.color_column import ColorColumn
6
7from traitsui.tests._tools import (
8    BaseTestMixin,
9    create_ui,
10    requires_toolkit,
11    reraise_exceptions,
12    ToolkitName,
13)
14
15
16class MyEntry(HasTraits):
17    name = Str()
18    value = Int(0)
19    color = RGBColor()
20
21    entry_view = View(Group(Item("name"), Item("value"), Item("color")))
22
23
24my_editor = TableEditor(
25    columns=[
26        ObjectColumn(name="name"),
27        ObjectColumn(name="value"),
28        ColorColumn(name="color", style="readonly"),
29    ],
30    orientation="vertical",
31    show_toolbar=True,
32    row_factory=MyEntry,
33)
34
35
36class MyData(HasTraits):
37    data_list = List(MyEntry)
38
39    view = View(Item("data_list", editor=my_editor, show_label=False))
40
41
42class TestColorColumn(BaseTestMixin, TestCase):
43
44    def setUp(self):
45        BaseTestMixin.setUp(self)
46
47    def tearDown(self):
48        BaseTestMixin.tearDown(self)
49
50    @requires_toolkit([ToolkitName.qt, ToolkitName.wx])
51    def test_color_column(self):
52        # Behaviour: column ui should display without error
53
54        d1 = MyEntry(name="a", value=2, color=(1.0, 0.3, 0.1))
55        d2 = MyEntry(name="b", value=3, color=(0.1, 0.0, 0.9))
56        data = MyData(data_list=[d1, d2])
57        with reraise_exceptions(), create_ui(data):
58            pass
59