Method: SugarCube::Repl.draw_tree

Defined in:
lib/cocoa/sugarcube-repl/repl.rb

.draw_tree(item, selector, tab = nil, is_last = true, items_index = 0) ⇒ Object

Draws the tree items



301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
# File 'lib/cocoa/sugarcube-repl/repl.rb', line 301

def draw_tree(item, selector, tab=nil, is_last=true, items_index=0)
  space = ' '
  if items_index < 10
    print '  '
  elsif items_index < 100
    print ' '
  elsif items_index > 999  # good god, man!
    space = ''
  end
  print items_index.to_s + ":" + space

  if tab
    print tab
    if @sugarcube_collapsed_items && @sugarcube_collapsed_items.include?(item)
      print '<<< '
    else
      if is_last
        print '`-- '
        tab += '    '
      else
        print '+-- '
        tab += '|   '
      end
    end
  else
    print '. '
    tab = ''
  end

  if self == item || @sugarcube_view == item
    print "\033[1m"
  end
  print draw_tree_item(item)
  if self == item || @sugarcube_view == item
    print "\033[0m"
  end
  puts

  if selector.is_a? Proc
    items = selector.call(item)
  else
    items = item.send(selector)
  end
  items ||= []

  unless @sugarcube_collapsed_items && @sugarcube_collapsed_items.include?(item)
    items.each_with_index do |subview, index|
      items_index += 1
      if self.respond_to? :draw_tree
        items_index = draw_tree(subview, selector, tab, index == items.length - 1, items_index)
      else
        items_index = SugarCube::Repl::draw_tree(subview, selector, tab, index == items.length - 1, items_index)
      end
    end
  end

  return items_index
end