code: def decorate(self, pos, widget, is_first=True):
          
          void = urwid.SolidFill(' ')
          line = None
          cols = []
          depth = self._tree.depth(pos)
  
          # add spacer filling all but the last indent
          if depth > 0:
              cols.append((depth * self._indent, void)),  # spacer
  
          # construct last indent
          # TODO
          iwidth, icon = self._construct_collapse_icon(pos)
          available_space = self._indent
          firstindent_width = self._icon_offset + iwidth
  
          # stop if indent is too small for this decoration
          if firstindent_width > available_space:
              raise NoSpaceError()
  
          # add icon only for non-leafs
          is_leaf = self._tree.is_leaf(pos)
          if not is_leaf:
              if icon is not None:
                  # space to the left
                  cols.append((available_space - firstindent_width,
                               urwid.SolidFill(' ')))
                  # icon
                  icon_pile = urwid.Pile([('pack', icon), void])
                  cols.append((iwidth, icon_pile))
                  # spacer until original widget
                  available_space = self._icon_offset
              cols.append((available_space, urwid.SolidFill(' ')))
          else:  # otherwise just add another spacer
              cols.append((self._indent, urwid.SolidFill(' ')))
  
          cols.append(widget)  # original widget ]
          # construct a Columns, defining all spacer as Box widgets
          line = urwid.Columns(cols, box_columns=range(len(cols))[:-1])
  
          return line
docs: builds a list element for given position in the tree.
          It consists of the original widget taken from the Tree and some
          decoration columns depending on the existence of parent and sibling
          positions. The result is a urwid.Columns widget.