code: def draw(self, tree, bar_desc=None, save_cursor=True, flush=True):
          
          if save_cursor:
              self.cursor.save()
  
          tree = deepcopy(tree)
          # TODO: Automatically collapse hierarchy so something
          #   will always be displayable (well, unless the top-level)
          #   contains too many to display
          lines_required = self.lines_required(tree)
          ensure(lines_required <= self.cursor.term.height,
                 LengthOverflowError,
                 "Terminal is not long ({} rows) enough to fit all bars "
                 "({} rows).".format(self.cursor.term.height, lines_required))
          bar_desc = BarDescriptor(type=Bar) if not bar_desc else bar_desc
          self._calculate_values(tree, bar_desc)
          self._draw(tree)
          if flush:
              self.cursor.flush()
docs: Draw ``tree`` to the terminal
  
          :type  tree: dict
          :param tree: ``tree`` should be a tree representing a hierarchy; each
              key should be a string describing that hierarchy level and value
              should also be ``dict`` except for leaves which should be
              ``BarDescriptors``. See ``BarDescriptor`` for a tree example.
          :type  bar_desc: BarDescriptor|NoneType
          :param bar_desc: For describing non-leaf bars in that will be
              drawn from ``tree``; certain attributes such as ``value``
              and ``kwargs["max_value"]`` will of course be overridden
              if provided.
          :type  flush: bool
          :param flush: If this is set, output written will be flushed
          :type  save_cursor: bool
          :param save_cursor: If this is set, cursor location will be saved before
              drawing; this will OVERWRITE a previous save, so be sure to set
              this accordingly (to your needs).