def render(self, rect, data):
        """Displays the elements according to the align properties."""

        # Make sure we're aligned correctly
        if self.horizontal_align not in HorizontalLM._VALID_ALIGN_HORIZONTAL:
            raise ValueError('Horizontal align is not valid.')
        if self.vertical_align not in HorizontalLM._VALID_ALIGN_VERTICAL:
            raise ValueError('Vertical align is not valid.')

        # Work out the extra width we have to distribute
        extra_width = rect.w - self.get_minimum_size(data).x
        num_elements = len(self.elements)
        if num_elements == 0:
            return
        elif num_elements > 1:
            per_margin = 1.0 / float(num_elements-1)
        else:
            per_margin = 0.0
        per_element = 1.0 / float(num_elements)

        # Work out the starting x coordinate
        x = rect.x
        if self.horizontal_align == HorizontalLM.ALIGN_CENTER:
            x = rect.x + extra_width*0.5
        elif self.horizontal_align == HorizontalLM.ALIGN_RIGHT:
            x = rect.x + extra_width

        # Render each child element
        for element in self.elements:
            size = element.get_minimum_size(data)

            # Work out the y-coordinates
            if self.vertical_align == HorizontalLM.ALIGN_TOP:
                y = rect.top - size.y
                h = size.y
            elif self.vertical_align == HorizontalLM.ALIGN_MIDDLE:
                y = rect.middle - size.y*0.5
                h = size.y
            elif self.vertical_align == HorizontalLM.ALIGN_BOTTOM:
                y = rect.y
                h = size.y
            else:
                assert self.vertical_align == HorizontalLM.ALIGN_GROW
                y = rect.y
                h = rect.h

            # Work out the x-coordinates
            if self.horizontal_align in HorizontalLM._ALIGN_SIMPLE_SET:
                w = size.x
                next_x = x + size.x + self.margin
            elif self.horizontal_align == HorizontalLM.ALIGN_EQUAL_SPACING:
                w = size.x
                next_x = x + size.x + self.margin + extra_width*per_margin
            else:
                assert self.horizontal_align == HorizontalLM.ALIGN_EQUAL_GROWTH
                w = size.x + extra_width*per_element
                next_x = x + w + self.margin

            # Render and move on.
            element.render(datatypes.Rectangle(x, y, w, h), data)
            x = next_x
def render ( self , rect , data ) : if self . horizontal_align not in HorizontalLM . _VALID_ALIGN_HORIZONTAL : raise ValueError ( 'Horizontal align is not valid.' ) if self . vertical_align not in HorizontalLM . _VALID_ALIGN_VERTICAL : raise ValueError ( 'Vertical align is not valid.' ) extra_width = rect . w - self . get_minimum_size ( data ) . x num_elements = len ( self . elements ) if num_elements == 0 : return elif num_elements > 1 : per_margin = 1.0 / float ( num_elements - 1 ) else : per_margin = 0.0 per_element = 1.0 / float ( num_elements ) x = rect . x if self . horizontal_align == HorizontalLM . ALIGN_CENTER : x = rect . x + extra_width * 0.5 elif self . horizontal_align == HorizontalLM . ALIGN_RIGHT : x = rect . x + extra_width for element in self . elements : size = element . get_minimum_size ( data ) if self . vertical_align == HorizontalLM . ALIGN_TOP : y = rect . top - size . y h = size . y elif self . vertical_align == HorizontalLM . ALIGN_MIDDLE : y = rect . middle - size . y * 0.5 h = size . y elif self . vertical_align == HorizontalLM . ALIGN_BOTTOM : y = rect . y h = size . y else : assert self . vertical_align == HorizontalLM . ALIGN_GROW y = rect . y h = rect . h if self . horizontal_align in HorizontalLM . _ALIGN_SIMPLE_SET : w = size . x next_x = x + size . x + self . margin elif self . horizontal_align == HorizontalLM . ALIGN_EQUAL_SPACING : w = size . x next_x = x + size . x + self . margin + extra_width * per_margin else : assert self . horizontal_align == HorizontalLM . ALIGN_EQUAL_GROWTH w = size . x + extra_width * per_element next_x = x + w + self . margin element . render ( datatypes . Rectangle ( x , y , w , h ) , data ) x = next_x
Displays the elements according to the align properties.