'Iterate over the widgets in this channel, in order of their
positions; used in layouts to build the channel contents.
@note: Widgets without explicit position (=None), or multiple
widgets at the same position, will be returned in the
order in which they have been added to the channel.'

def __iter__(self):

    widgets = self.widgets
    positions = sorted((p for p in widgets if (p is not None)))
    if (None in widgets):
        positions.append(None)
    for position in positions:
        widget_list = widgets[position]
        for widget in widget_list:
            (yield widget)
