File: box_helper.py

package info (click to toggle)
python-enaml 0.19.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,284 kB
  • sloc: python: 31,443; cpp: 4,499; makefile: 140; javascript: 68; lisp: 53; sh: 20
file content (47 lines) | stat: -rw-r--r-- 1,468 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
#------------------------------------------------------------------------------
# Copyright (c) 2013-2025, Nucleic Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file LICENSE, distributed with this software.
#------------------------------------------------------------------------------
from .constrainable import ContentsConstrainable, ConstrainableMixin
from .constraint_helper import ConstraintHelper


BOUNDARY_ATTRS = (
    'top',
    'bottom',
    'left',
    'right',
)


CONTENT_BOUNDARY_ATTRS = (
    'contents_top',
    'contents_bottom',
    'contents_left',
    'contents_right',
)


class BoxHelper(ConstraintHelper, ConstrainableMixin):
    """ A constraint helper for creating a box layouts.

    Instances of BoxHelper are Constrainable and can be nested in other
    box helpers to build up complex layouts. This is a base class which
    should be subclassed to implement the desired functionality.

    """
    def box_constraints(self, component):
        """ Generate the boundary constraints for the box.

        """
        cns = []
        if component is not None:
            a_attrs = b_attrs = BOUNDARY_ATTRS
            if isinstance(component, ContentsConstrainable):
                b_attrs = CONTENT_BOUNDARY_ATTRS
            f = lambda a, b: getattr(self, a) == getattr(component, b)
            cns.extend(f(a, b) for a, b in zip(a_attrs, b_attrs))
        return cns