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
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
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
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