File: tree_node_renderer.py

package info (click to toggle)
python-traitsui 8.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 18,232 kB
  • sloc: python: 58,982; makefile: 113
file content (80 lines) | stat: -rw-r--r-- 2,528 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# (C) Copyright 2004-2023 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!

from abc import abstractmethod

from traits.api import ABCHasStrictTraits, Bool


class AbstractTreeNodeRenderer(ABCHasStrictTraits):
    """Abstract base class for renderers of tree node items.

    This is currently only supported for Qt.
    """

    #: Whether the renderer handles rendering everything
    handles_all = Bool(False)

    #: Whether the renderer handles rendering any text
    handles_text = Bool(True)

    #: Whether the renderer handles rendering the icon or other decoration
    handles_icon = Bool(False)

    @abstractmethod
    def paint(self, node, column, object, paint_context):
        """Render the node.

        Parameters
        ----------
        node : ITreeNode instance
            The tree node to render.
        column : int
            The column in the tree that should be rendererd.
        object : object
            The underlying object being edited.
        paint_context : object
            A toolkit-dependent context for performing paint operations.

        Returns
        -------
        size : tuple of (width, height) or None
            Optionally return a new preferred size so that the toolkit can
            perform better layout.
        """
        raise NotImplementedError()

    @abstractmethod
    def size(self, node, column, object, size_context):
        """Return the preferred size for the item

        Parameters
        ----------
        node : ITreeNode instance
            The tree node to render.
        column : int
            The column in the tree that should be rendererd.
        object : object
            The underlying object being edited.
        size_context : object
            A toolkit-dependent context for performing sizing operations.

        Returns
        -------
        size : tuple of (width, height) or None
        """
        raise NotImplementedError()

    def get_label(self, node, object, column=0):
        """Get the label associated with an item and column."""
        if column == 0:
            return node.get_label(object)
        else:
            return node.get_column_labels(object)[column]