Example #1
0
    def layout_constraints(self):
        """ The constraints generation for a HGroup.

        This method supplies horizontal group constraints for the
        children of the container in addition to any user-supplied
        constraints.

        """
        widgets = self.visible_widgets()
        items = [self.leading_spacer] + widgets + [self.trailing_spacer]
        cns = self.constraints[:]
        cns.append(hbox(*items, spacing=self.spacing))
        cns.append(align('v_center', *widgets))
        if self.align_widths:
            cns.append(align('width', *widgets))
        return cns
Example #2
0
    def _component_constraints(self):
        """ Supplies the constraints which layout the children in a
        two column form.

        """
        # FIXME: do something sensible when children are not visible.
        children = list(self.widgets)
        labels = children[::2]
        widgets = children[1::2]

        n_labels = len(labels)
        n_widgets = len(widgets)

        if n_labels != n_widgets:
            if n_labels > n_widgets:
                odd_child = labels.pop()
            else:
                odd_child = widgets.pop()
        else:
            odd_child = None

        layout_strength = self.layout_strength
        constraints = []

        # Align the left side of each widget with the midline constraint
        # variable of the form.
        midline = self.midline
        for widget in widgets:
            cn = (widget.left == midline) | layout_strength
            constraints.append(cn)

        # Arrange each label/widget pair horizontally in the form
        # XXX this is a highly inefficient way to generate these
        # constraints. It starts to be noticeably slow when the
        # form has around 20 rows. This can be done better.
        labels_widgets = zip(labels, widgets)
        vbox_args = [hbox(label, widget) for label, widget in labels_widgets]
        if odd_child is not None:
            vbox_args.append(odd_child)
        constraints.append(vbox(*vbox_args))

        for label, widget in labels_widgets:
            # FIXME: baselines would be much better.
            constraints.append(
                align('v_center', label, widget) | layout_strength)

        return constraints
Example #3
0
File: form.py Project: 5n1p/enaml
    def _component_constraints(self):
        """ Supplies the constraints which layout the children in a
        two column form.

        """
        # FIXME: do something sensible when children are not visible.
        children = list(self.widgets)
        labels = children[::2]
        widgets = children[1::2]

        n_labels = len(labels)
        n_widgets = len(widgets)

        if n_labels != n_widgets:
            if n_labels > n_widgets:
                odd_child = labels.pop()
            else:
                odd_child = widgets.pop()
        else:
            odd_child = None

        layout_strength = self.layout_strength
        constraints = []

        # Align the left side of each widget with the midline constraint
        # variable of the form.
        midline = self.midline
        for widget in widgets:
            cn = (widget.left == midline) | layout_strength
            constraints.append(cn)

        # Arrange each label/widget pair horizontally in the form
        # XXX this is a highly inefficient way to generate these
        # constraints. It starts to be noticeably slow when the
        # form has around 20 rows. This can be done better.
        labels_widgets = zip(labels, widgets)
        vbox_args = [hbox(label, widget) for label, widget in labels_widgets]
        if odd_child is not None:
            vbox_args.append(odd_child)
        constraints.append(vbox(*vbox_args))

        for label, widget in labels_widgets:
            # FIXME: baselines would be much better.
            constraints.append(align('v_center', label, widget) | layout_strength)

        return constraints
Example #4
0
    def layout_constraints(self):
        """ The constraints generation for a HGroup.

        This method supplies horizontal group constraints for the
        children of the container in addition to any user-supplied
        constraints.

        This method cannot be overridden from Enaml syntax.

        """
        widgets = self.visible_widgets()
        items = [self.leading_spacer] + widgets + [self.trailing_spacer]
        cns = self.constraints[:]
        cns.append(hbox(*items, spacing=self.spacing))
        cns.append(align('v_center', *widgets))
        if self.align_widths:
            cns.append(align('width', *widgets))
        return cns